【问题标题】:Using log4net in a .net web service在 .net Web 服务中使用 log4net
【发布时间】:2013-09-16 07:33:27
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    你可以使用 global.asax

    protected void Application_Start(Object sender, EventArgs e) {
       log4net.Config.XmlConfigurator.Configure()
    }
    

    【讨论】:

    • 我看到默认情况下没有为 .net Web 服务项目创建 global.asax?
    【解决方案2】:

    您可以拥有自己的日志记录网关

    http://netpl.blogspot.com/2010/09/easy-log4net-integration-into-net.html

    这种方法的一个优点是内部日志记录依赖于您自己的 api,因此您可以轻松地在日志记录框架之间切换,而无需修改相关代码。

    另一件事是 web 服务也以 global.asax 开头,你可能错过了一些东西。

    【讨论】:

      【解决方案3】:

      您可以使用服务公共构造函数来实例化您的记录器。但请注意,根据服务行为(PerCall 或 Single),构造函数将针对每个请求或仅在第一次实例化服务时调用。

      【讨论】:

        【解决方案4】:

        您可以手动添加 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          • 2018-09-26
          相关资源
          最近更新 更多