【问题标题】:log4net logs getting generated in wrong filelog4net 日志在错误的文件中生成
【发布时间】:2021-03-22 15:30:51
【问题描述】:

我想为程序的特定部分创建一个不同的日志,因此我使用 log4net 在 C#.NET 中创建了一个新的日志系统。我在 app.config 中创建了一个与现有节点相同的新节点(还需要默认日志。) app.config 看起来像这样。

   <configuration>
    <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  <section name="partialfilelog" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>

</configSections>

<log4net>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>

     <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString" value="C:/Logs/DefaultLog.log" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <maximumFileSize value="10MB" />
        <maxSizeRollBackups value="-1" />
        <preserveLogFileNameExtension value="true" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
                   <conversionPattern value="%-7level   %date   %property{MemberName}   
                  %property{SourceLineNumber}   %message   %exception %newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="ERROR"/>
        </filter>
    </appender>

  </log4net>
<customLog>
  <log4net>
  <root>
     <level value="ALL" />
     <appender-ref ref="PartialFileAppender" />
  </root>
  <appender name="PartialFileAppender" type="log4net.Appender.RollingFileAppender">
     <file type="log4net.Util.PatternString" value="C:/Logs/CustomLog.log" />
     <appendToFile value="true" />
     <rollingStyle value="Size" />
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     <maximumFileSize value="10MB" />
     <maxSizeRollBackups value="-1" />
     <preserveLogFileNameExtension value="true" />
     <staticLogFileName value="true" />
     <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-7level   %date   %property{MemberName}   
        %property{SourceLineNumber}   %message   %exception %newline" />
     </layout>
     <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
        <param name="LevelMax" value="ERROR"/>
     </filter>
  </appender>
  </log4net>
  </customLog>
  </configuration>

我已经创建了这个像这样初始化的自定义节点。

 private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

打开 app.config 文件后,此记录器配置已正确完成。

if (File.Exists(appconfigpath))
     {
        xmlDocument.Load(File.OpenRead(appconfigpath));
        log4net.Repository.ILoggerRepository loggerRepository = log4net.LogManager.CreateRepository(
            Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
        log4net.Config.XmlConfigurator.Configure(loggerRepository, 
        (XmlElement)xmlDocument.SelectSingleNode("//partialfilelog/log4net"));
        xmlDocument = null;
     }

正在创建新的自定义日志文件。但是,每当我调用该方法在此文件中写入日志时,就会在 defaultlog 文件中创建日志(这些路径在附加程序中的 value [value="C:/Logs/CustomLog.log"] 中提供,如下所示。 )

我正在从 startup.cs 文件配置两个记录器。谁能帮我理解这里的问题是什么?为什么我的日志在错误的文件中生成?我错过了什么或做错了什么?

【问题讨论】:

    标签: c# logging log4net log4net-configuration log4net-appender


    【解决方案1】:

    您的配置文件仍然包含默认值。

    更改 &lt;file type="log4net.Util.PatternString" value="C:/Logs/DefaultLog.log" /&gt; 给 &lt;file type="log4net.Util.PatternString" value="YourPathHere" /&gt;

    【讨论】:

    • 基本上我在 app.config 文件中创建了两个不同的节点。第二个具有自定义文件的路径。我认为这是问题所在,是否允许有两个不同的节点来说明 log4net 的配置?
    • @hopeMichaelson 您正在其他节点中使用自定义文件附加程序。我不是 100% 确定,但我认为这不会奏效。您应该在同一个 节点中创建 2 个文件附加程序。如此处所述stackoverflow.com/questions/1372435/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多