【问题标题】:How to enable Common.Logging.Log4Net如何启用 Common.Logging.Log4Net
【发布时间】:2015-08-19 09:28:26
【问题描述】:

我正在尝试启用 Common.Logging.Log4Net 将所有类型的日志写入日志文件。这些教程使它看起来很简单,但我不知道我做错了什么。这些是我正在采取的步骤:

  1. 新建一个 ASP.NET MVC 空项目
  2. 安装“通用日志记录 Log4Net 1211”NuGet 包
  3. 将以下行添加到默认的 web.config:

    <common>
        <logging>
            <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
                <arg key="configType" value="INLINE" />
            </factoryAdapter>
        </logging>
    </common>
    
    <log4net>
        <root>
            <level value="ALL" />
            <appender-ref ref="FileAppender" />
        </root>
        <appender name="FileAppender" type="log4net.Appender.FileAppender" >
            <param name="File" value="C:\Users\MyName\Downloads\log.txt" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
            </layout>
        </appender>
    </log4net>
    
  4. 确保应用程序。池身份帐户对我尝试保存日志文件的路径具有 RW 访问权限。

  5. 出于测试目的从代码中抛出一个随机异常。

我错过了什么吗?有没有办法调试 log4net?请帮助这个可怜的灵魂。谢谢。

【问题讨论】:

    标签: asp.net-mvc log4net common.logging


    【解决方案1】:

    该问题与“Common.Logging.Log4Net”的 NuGet 包更改程序集名称有关。这实际上修复了它(请注意新的程序集名称,Common.Logging.Log4Net1211):

    <common>
        <logging>
            <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
                <arg key="configType" value="INLINE" />
            </factoryAdapter>
        </logging>
    </common>
    

    【讨论】:

    • Common.Logging.Log4Net.Universal nuget 包的提示 - 做同样的事情,但独立于 Log4Net 版本
    【解决方案2】:

    我不熟悉 Common.Logging.Log4Net。这是我使用的简单 log4net 步骤 -

    1. NuGet 安装 log4net。
    2. 在 web.config 中插入以下设置(你可以配置你想要的方式)
    3. 然后登录。

    如果你想使用 IoC 容器,可以阅读我上个月问过的my question

    web.config

    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <log4net>
        <root>
          <level value="DEBUG"/>
          <appender-ref ref="FileAppender"/>
        </root>
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="log-file.txt" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
      </log4net>  
    </configuration>
    

    在 Global.asax.cs 中测试

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
    
            XmlConfigurator.Configure();
            // You can inject it to your code using IoC container.
            var logger = LogManager.GetLogger(typeof(MvcApplication));
            logger.Debug("Test Debug.");
            logger.Error("Test Error.");
            logger.Fatal("Test Fatal.");
            logger.Info("Test Info.");
        }
    }
    

    结果

    2015-06-04 11:48:05,885 [1] DEBUG DemoLog4Net.MvcApplication [(null)] - Test Debug.
    2015-06-04 11:48:05,921 [1] ERROR DemoLog4Net.MvcApplication [(null)] - Test Error.
    2015-06-04 11:48:05,922 [1] FATAL DemoLog4Net.MvcApplication [(null)] - Test Fatal.
    2015-06-04 11:48:05,922 [1] INFO  DemoLog4Net.MvcApplication [(null)] - Test Info.
    

    【讨论】:

    • 这个答案与问题无关 - Common.Logging。
    【解决方案3】:

    https://stackoverflow.com/a/756241/3469201

    <configuration>
       <appSettings>
          <add key="log4net.Internal.Debug" value="true"/>
       </appSettings>
    </configuration>
    

    然后,要确定要保存输出的文件,您可以在同一个 .config 文件中添加以下代码:

    <configuration>
    ...
    
    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>
    
    ...
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2016-04-09
      • 2013-03-21
      • 2019-03-07
      • 2011-06-10
      • 2015-06-14
      相关资源
      最近更新 更多