C# Log4Net 写入两个 Appender
C# Log4Net Writing To Both Appenders
我正在使用 C# 编写一个内部应用程序,几天来我们一直在努力找出解决这个问题的方法。我们使用 Log4Net v1.2.15.0 针对 .Net v4.5.2 进行编译。我有两个滚动文件附加程序,EventsLogger 和 SitrepLogger,它们都设置为写入网络。我已经确认这确实按预期工作,但是当我调用一个 appender(无关紧要)写出时,它会同时写入 EventsLogger 和 SitrepLogger 文件。这是我的 app.config
的相关数据
<log4net>
<appender name="EventsLogger" type="log4net.Appender.RollingFileAppender">
<file name="File" value="\TS-WXLF41\Project\Ambushed${USERNAME}\EventsLog" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="StaticLogFileName" value="false"/>
<param name="RollingStyle" value="Date"/>
<param name="DatePattern" value="_MM-dd-yy.\tx\t" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%newline%date{HH:mm:ss tt} %message" />
</layout>
</appender>
<appender name="SitrepLogger" type="log4net.Appender.RollingFileAppender">
<file name="File" value="\TS-WXLF41\Project\Ambushed${USERNAME}\logs\sitrep" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="StaticLogFileName" value="false"/>
<param name="RollingStyle" value="Date"/>
<param name="DatePattern" value="_MM-dd-yy.\tx\t"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%newline%date{HH:mm:ss tt} %message" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="EventsLogger" />
<appender-ref ref="SitrepLogger" />
</root>
</log4net>
在我程序的入口点构造函数中,我调用 log4net.Config.XmlConfigurator.Configure();我 非常确定 正在按预期工作。我不会在代码中的其他任何地方调用 Configure,除非是从那里调用。在成员中,我的入口点 class 我调用 private static readonly log4net.ILog logger = log4net.LogManager.GetLogger("SitrepLogger");
来获取我的程序(入口点)class 所需的记录器。在我的其他 classes 中,我使用 EventsLogger,所以我在成员中调用 private static readonly log4net.ILog eventslogger = log4net.LogManager.GetLogger("EventsLogger");
那些 classes。我不会在每个 class 中多次调用 GetLogger,而且我确定我通过调用 eventslogger.Info()
调用了正确的附加程序
这对我们来说曾经工作得很好(使用多个附加程序写入不同的文件),但从那以后我们做了很多很多改变,我们试图恢复到没有成功。没有错误,没有警告,也没有关于编译的消息。提前感谢您所做的一切! :)
你混淆了 appenders 和 loggers。您的应用程序正在创建记录器 "SitrepLogger" 和 "EventsLogger"。它们都继承了根记录器的配置,并写入具有相同名称 "SitrepLogger" 和 "EventsLogger".
的附加程序
试试下面的配置,我认为它会给你你想要的:
<log4net>
<appender name="EventsAppender" ... >
...
</appender>
<appender name="SitrepAppender" ... >
...
</appender>
<root>
<level value="ALL" />
</root>
<logger name="EventsLogger" additivity="False">
<appender-ref ref="EventsAppender" />
</logger>
<logger name="SitrepLogger" additivity="False">
<appender-ref ref="SitrepAppender" />
</logger>
</log4net>
我正在使用 C# 编写一个内部应用程序,几天来我们一直在努力找出解决这个问题的方法。我们使用 Log4Net v1.2.15.0 针对 .Net v4.5.2 进行编译。我有两个滚动文件附加程序,EventsLogger 和 SitrepLogger,它们都设置为写入网络。我已经确认这确实按预期工作,但是当我调用一个 appender(无关紧要)写出时,它会同时写入 EventsLogger 和 SitrepLogger 文件。这是我的 app.config
的相关数据 <log4net>
<appender name="EventsLogger" type="log4net.Appender.RollingFileAppender">
<file name="File" value="\TS-WXLF41\Project\Ambushed${USERNAME}\EventsLog" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="StaticLogFileName" value="false"/>
<param name="RollingStyle" value="Date"/>
<param name="DatePattern" value="_MM-dd-yy.\tx\t" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%newline%date{HH:mm:ss tt} %message" />
</layout>
</appender>
<appender name="SitrepLogger" type="log4net.Appender.RollingFileAppender">
<file name="File" value="\TS-WXLF41\Project\Ambushed${USERNAME}\logs\sitrep" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="StaticLogFileName" value="false"/>
<param name="RollingStyle" value="Date"/>
<param name="DatePattern" value="_MM-dd-yy.\tx\t"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%newline%date{HH:mm:ss tt} %message" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="EventsLogger" />
<appender-ref ref="SitrepLogger" />
</root>
</log4net>
在我程序的入口点构造函数中,我调用 log4net.Config.XmlConfigurator.Configure();我 非常确定 正在按预期工作。我不会在代码中的其他任何地方调用 Configure,除非是从那里调用。在成员中,我的入口点 class 我调用 private static readonly log4net.ILog logger = log4net.LogManager.GetLogger("SitrepLogger");
来获取我的程序(入口点)class 所需的记录器。在我的其他 classes 中,我使用 EventsLogger,所以我在成员中调用 private static readonly log4net.ILog eventslogger = log4net.LogManager.GetLogger("EventsLogger");
那些 classes。我不会在每个 class 中多次调用 GetLogger,而且我确定我通过调用 eventslogger.Info()
这对我们来说曾经工作得很好(使用多个附加程序写入不同的文件),但从那以后我们做了很多很多改变,我们试图恢复到没有成功。没有错误,没有警告,也没有关于编译的消息。提前感谢您所做的一切! :)
你混淆了 appenders 和 loggers。您的应用程序正在创建记录器 "SitrepLogger" 和 "EventsLogger"。它们都继承了根记录器的配置,并写入具有相同名称 "SitrepLogger" 和 "EventsLogger".
的附加程序试试下面的配置,我认为它会给你你想要的:
<log4net>
<appender name="EventsAppender" ... >
...
</appender>
<appender name="SitrepAppender" ... >
...
</appender>
<root>
<level value="ALL" />
</root>
<logger name="EventsLogger" additivity="False">
<appender-ref ref="EventsAppender" />
</logger>
<logger name="SitrepLogger" additivity="False">
<appender-ref ref="SitrepAppender" />
</logger>
</log4net>