在我使用log4net登录的大多数ASP .Net MVC Web应用程序中,我有一个静态记录器,可以从应用程序的任何地方访问。
我通常如何在MVC应用程序中使用global.asax:
namespace MyApplication
{
public class MvcApplication : System.Web.HttpApplication
{
public static ILog logger = LogManager.GetLogger("Logger");
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
}
...
}
我现在有一个.Net Web服务似乎没有与MVC应用程序相同的入口点(通过global.asax),我不知道在哪里实例化我的记录器。有人可以帮忙吗?
答案 0 :(得分:2)
您可以使用global.asax
protected void Application_Start(Object sender, EventArgs e) {
log4net.Config.XmlConfigurator.Configure()
}
答案 1 :(得分:0)
您可以拥有自己的日志网关
http://netpl.blogspot.com/2010/09/easy-log4net-integration-into-net.html
这种方法的一个优点是内部日志记录依赖于您自己的api,因此您可以轻松地在日志记录框架之间切换,而无需修改相关代码。
另一件事是webservices也从global.asax开始,你可能错过了一些东西。
答案 2 :(得分:0)
您可以使用服务公共构造函数来实例化您的记录器。但是要注意,根据服务行为,PerCall或Single,将为每个请求调用构造函数,或者仅在第一次实例化服务时调用构造函数。
答案 3 :(得分:0)
您可以手动添加Global.asax文件&用它来启动log4net
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
但是,请注意 Application_Error 不能用于全局异常处理。需要SOAP扩展来拦截服务器上的传出消息并记录该点的错误。
Web应用程序可以由多个Web服务组成。但是,Global.asax语法文件中的Application_Error事件不能用于全局异常处理。 Web服务的HttpHandler消耗在Web服务执行时发生的任何异常,并在调用Application_Error事件之前将其转换为SOAP错误。构建SOAP扩展以在全局异常处理程序中处理Web服务异常。 SOAP扩展可以检查ProcessMessage方法中是否存在异常。在ProcessMessage方法中,检查Stage属性设置为AfterSerialize时传递的SoapMessage的Exception属性。有关SOAP扩展的详细信息,请参阅使用SOAP扩展的SOAP消息修改。
https://msdn.microsoft.com/en-us/library/ds492xtk%28v=vs.100%29.aspx