首页 文章

配置Log4net以写入多个文件

提问于
浏览
113

我想从同一个进程写入2个不同的日志文件 .

使用log4net可以做什么?

我需要为每个日志文件写单独的消息 . 如何将消息写入特定的appender?

5 回答

  • 0

    是的,只需将多个FileAppender添加到 Logger 即可 . 例如:

    <log4net>
        <appender name="File1Appender" type="log4net.Appender.FileAppender">
            <file value="log-file-1.txt" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date %message%newline" />
            </layout>
        </appender>
        <appender name="File2Appender" type="log4net.Appender.FileAppender">
            <file value="log-file-2.txt" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date %message%newline" />
            </layout>
        </appender>
    
        <root>
            <level value="DEBUG" />
            <appender-ref ref="File1Appender" />
            <appender-ref ref="File2Appender" />
        </root>
    </log4net>
    
  • 72

    这些答案很有帮助,但我想与app.config部分和c#代码部分分享我的答案,因此对下一个人的猜测较少 .

    <log4net>
      <appender name="SomeName" type="log4net.Appender.RollingFileAppender">
        <file value="c:/Console.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyyMMdd" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="1MB" />
      </appender>
      <appender name="Summary" type="log4net.Appender.FileAppender">
        <file value="SummaryFile.log" />
        <appendToFile value="true" />
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="SomeName" />
      </root>
      <logger additivity="false" name="Summary">
        <level value="DEBUG"/>
        <appender-ref ref="Summary" />
      </logger>
    </log4net>
    

    然后在代码中:

    ILog Log = LogManager.GetLogger("SomeName");
    ILog SummaryLog = LogManager.GetLogger("Summary");
    Log.DebugFormat("Processing");
    SummaryLog.DebugFormat("Processing2"));
    

    这里c:/Console.txt将包含“Processing”...和\ SummaryFile.log将包含“Processing2”

  • 164

    Vinay是对的 . 在答案中回答你的评论,你可以采取的一种方式如下:

    <root>
        <level value="ALL" />
        <appender-ref ref="File1Appender" />
    </root>
    <logger name="SomeName">
        <level value="ALL" />
        <appender-ref ref="File1Appender2" />
    </logger>
    

    这就是我过去的做法 . 对于其他日志,这样的事情:

    private static readonly ILog otherLog = LogManager.GetLogger("SomeName");
    

    你可以按如下方式获得正常的 Logger :

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

    阅读文档的loggers and appenders部分以了解其工作原理 .

  • 55

    我想将所有消息记录到根 Logger ,并且有一个单独的日志有错误,这里是如何做到的:

    <log4net>
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="allMessages.log" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date  %-5level %logger  - %message%newline" />
            </layout>
        </appender>
    
        <appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
            <file value="errorsLog.log" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date  %-5level %logger  - %message%newline" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="ERROR" />
                <levelMax value="FATAL" />
            </filter>
        </appender>
    
        <root>
            <level value="ALL" />
            <appender-ref ref="FileAppender" />
            <appender-ref ref="ErrorsFileAppender" />
        </root>
    </log4net>
    

    注意过滤元素的使用 .

  • 38

    使用以下XML配置将日志配置为两个或多个文件,

    <log4net>
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="logs\log.txt" />         
          <appendToFile value="true" /> 
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="10MB" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">           
            <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
          </layout>
        </appender>
         <appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
          <file value="logs\log1.txt" />         
          <appendToFile value="true" /> 
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="10MB" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">        
            <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
          </layout>
        </appender>
        <root>
          <level value="All" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
         <logger additivity="false" name="RollingLogFileAppender2">
        <level value="All"/>
        <appender-ref ref="RollingLogFileAppender2" />
        </logger>
      </log4net>
    

    以上XML配置记录到两个不同的文件中 .

    要以编程方式获取 Logger 的特定实例,

    ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2");
    

    您可以在log4net根元素中追加两个或更多appender元素,以便登录到multiples文件 .

    有关上述XML配置结构或哪种appender最适合您的应用程序的更多信息,请阅读以下链接的详细信息,

    https://logging.apache.org/log4net/release/manual/configuration.html https://logging.apache.org/log4net/release/sdk/index.html

    希望这会有所帮助 .

相关问题