4

我正在尝试启用 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?请帮助这个可怜的灵魂。谢谢你。

4

3 回答 3

5

该问题与更改程序集名称的“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>
于 2015-06-05T15:45:18.100 回答
0

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>
于 2015-06-04T16:40:55.900 回答
-1

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

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

如果你想使用 IoC 容器,你可以阅读上个月提出的问题。

网络配置

<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.
于 2015-06-04T16:55:09.557 回答