DNN (DotNetNuke) 模块异常不记录
DNN (DotNetNuke) module exceptions not logging
我有一个客户的 DNN 站点有一个自定义模块,该模块在模块错误日志记录方面存在问题。该站点已从 6.2 升级到 7.4 版,现在升级到 9.0 版。自升级到 7.4 后,模块异常不再出现在管理/主机事件中。 DNN 7.4 as explained here 中似乎更改了模块异常日志记录。这是之前有效的代码,但现在没有任何记录;
测试对象:
public class foo
{
public int id { get; set; }
public string bar { get; set; }
}
测试 webapi 控制器:
[DnnAuthorize]
public class MyCustomModuleController : DnnApiController
{
private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(MyCustomModuleController));
[HttpGet]
public HttpResponseMessage GetFoo(int id)
{
try
{
foo test = null;
var bar = test.bar; //will throw null exception
...
}
catch (Exception ex)
{
Logger.Error(ex); //no log entries in db since ver. 7.4
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Server error");
}
}
是否有我应该启用的设置或是否有记录事件的新方法?
据我了解,DotNetNuke.Instrumentation.GetLogger() returns 用于执行 Log4Net 日志记录的日志记录对象存储在 /Portals/_default/Logs 中的文件附加程序日志中。您也可以从 Host > Host Settings > Logs 查看它们。
通常,您可以通过在构造函数中设置它并调用 .Error()/.ErrorFormat()、.Warn()/.WarnFormat() 等函数来添加到 class将错误或信息消息附加到日志文件。
public class MyCustomModuleController : DnnApiController
{
private DotNetNuke.Instrumentation.ILog Logger { get; set; }
public MyCustomModuleController()
{
Logger = DotNetNuke.Instrumentation.LoggerSource.Instance.GetLogger(this.GetType());
}
public HttpResponseMessage GetFoo(int id)
{
try
{
...
}
catch (Exception ex)
{
Logger.Error(ex);
}
}
}
另一种可用的日志记录技术是使用 DotNetNuke.Services.Exceptions 将异常记录到数据库中。这些错误被添加到 EventLog 和 Exceptions 表中。
public class MyCustomModuleController : DnnApiController
{
public HttpResponseMessage GetFoo(int id)
{
try
{
...
}
catch (Exception ex)
{
DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
}
}
}
DNN 可能断开了 Log4Net 进程与 EventLog 的连接。我不记得它在版本 6 中是如何工作的。
我有一个客户的 DNN 站点有一个自定义模块,该模块在模块错误日志记录方面存在问题。该站点已从 6.2 升级到 7.4 版,现在升级到 9.0 版。自升级到 7.4 后,模块异常不再出现在管理/主机事件中。 DNN 7.4 as explained here 中似乎更改了模块异常日志记录。这是之前有效的代码,但现在没有任何记录;
测试对象:
public class foo
{
public int id { get; set; }
public string bar { get; set; }
}
测试 webapi 控制器:
[DnnAuthorize]
public class MyCustomModuleController : DnnApiController
{
private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(MyCustomModuleController));
[HttpGet]
public HttpResponseMessage GetFoo(int id)
{
try
{
foo test = null;
var bar = test.bar; //will throw null exception
...
}
catch (Exception ex)
{
Logger.Error(ex); //no log entries in db since ver. 7.4
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Server error");
}
}
是否有我应该启用的设置或是否有记录事件的新方法?
据我了解,DotNetNuke.Instrumentation.GetLogger() returns 用于执行 Log4Net 日志记录的日志记录对象存储在 /Portals/_default/Logs 中的文件附加程序日志中。您也可以从 Host > Host Settings > Logs 查看它们。
通常,您可以通过在构造函数中设置它并调用 .Error()/.ErrorFormat()、.Warn()/.WarnFormat() 等函数来添加到 class将错误或信息消息附加到日志文件。
public class MyCustomModuleController : DnnApiController
{
private DotNetNuke.Instrumentation.ILog Logger { get; set; }
public MyCustomModuleController()
{
Logger = DotNetNuke.Instrumentation.LoggerSource.Instance.GetLogger(this.GetType());
}
public HttpResponseMessage GetFoo(int id)
{
try
{
...
}
catch (Exception ex)
{
Logger.Error(ex);
}
}
}
另一种可用的日志记录技术是使用 DotNetNuke.Services.Exceptions 将异常记录到数据库中。这些错误被添加到 EventLog 和 Exceptions 表中。
public class MyCustomModuleController : DnnApiController
{
public HttpResponseMessage GetFoo(int id)
{
try
{
...
}
catch (Exception ex)
{
DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
}
}
}
DNN 可能断开了 Log4Net 进程与 EventLog 的连接。我不记得它在版本 6 中是如何工作的。