在.net Web服务中使用log4net

时间:2013-09-16 07:33:28

标签: c# asp.net web-services log4net

在我使用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),我不知道在哪里实例化我的记录器。有人可以帮忙吗?

4 个答案:

答案 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