c# - Log4net 一个 FileAppender 元素,以编程方式记录到多个文件

标签 c# log4net

我的网络应用程序支持多个实例,例如实例 1、2,每个实例都通过 log4net 将数据记录到自己的文件中。那就是我想以编程方式根据实例 ID 将数据记录到不同的文件中。文件路径应该是:

实例 1 的 D:\Projects\Log\1\Reporting.log

实例 2 的 D:\Projects\Log\2\Reporting.log

我的网络应用程序支持 3 个实例,我是否需要在 C# 中有 3 个记录器,它们只是日志文件路径不同,如上所示?

下面是Log4Net.config

 <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <log4net>

        <appender name="ExceptionLogFileAppender" type="log4net.Appender.RollingFileAppender">

          <file value=????How to specify this????? />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value="-yyyy-MM-dd.lo\g" />
          <param name="StaticLogFileName" value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="------------------------------------------&#13;&#10;" />
            <param name="Footer" value="------------------------------------------&#13;&#10;" />
            <conversionPattern value="%d|[%t]|%-5p|%c|%m%n"/>
          </layout>
        </appender>
        <!-- Setup the root category, add the appenders and set the default level -->
        <root>
          <level value="ERROR" />
          <appender-ref ref="ExceptionLogFileAppender" />
        </root>

      </log4net>
    </configuration>

更新

实例id必须是1,2等

实例id以后会超过100。

任何想法将不胜感激!

最佳答案

好吧,我想不出一种方法来记录每个实例(1、2、3),但是您可以通过它们的 PID 轻松地记录它们。我会更改 <file>元素:

<file type="log4net.Util.PatternString">
    <conversionPattern value="log\%processid\yourFileName.%date{yyyyMMMdd}.log" />
</file>

然后删除该元素,应该给出:

 <appender name="ExceptionLogFileAppender" type="log4net.Appender.RollingFileAppender">    
      <file type="log4net.Util.PatternString">
         <conversionPattern value="log\%processid\yourFileName.%date{yyyyMMMdd}.log" />
      </file>
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout">
          <param name="Header" value="------------------------------------------&#13;&#10;" />
          <param name="Footer" value="------------------------------------------&#13;&#10;" />
          <conversionPattern value="%d|[%t]|%-5p|%c|%m%n"/>
      </layout>
  </appender>

然后,每个实例都应该根据它的 PID 进行记录:

c:\log\13242\yourFileName.20111025.log

或者,您可以将 pid 作为文件名的一部分而不是不同的目录,我可能会推荐这样做,这样您就不会在 c:\log\文件夹中乱放多个目录:

<file type="log4net.Util.PatternString">
    <conversionPattern value="log\yourFileName.%processid.%date{yyyyMMMdd}.log" />
</file>

这将为您提供如下文件:

c:\log\yourFileName.13142.20111025.log
c:\log\yourFileName.13152.20111025.log

关于c# - Log4net 一个 FileAppender 元素,以编程方式记录到多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7891562/

相关文章:

c# - 不要从许多方法中分配字段

C# 解析问题

c# - 在Docker.DotNet中,如何通过指定Dockerfile的目录来构建镜像?

asp.net-mvc - 如何启用 Common.Logging.Log4Net

.net - 将 log4net 与 Azure Functions 结合使用

c# - log4net 何时将日志写入或提交到文件?

c#:什么是常量表达式?

c# - 从转发器中的下拉列表更新用户角色

azure - Log4Net 在本地开发结构和辅助角色中工作正常,但在 Web 角色中则不行

json - 如何在 ASP.NET 5.0 中为 log4net(或任何其他第三方库)添加配置