我正在使用 Log4Net 作为我们应用程序的日志记录机制。我们的配置包含在一个配置文件中,在我们的代码中,我们以编程方式调用我们想要调用的几个记录器中的哪个(主要使用 FileAppenders
)。最近我意识到我们的一个日志文件没有被填充,我将其追踪到配置文件中的名称与我们在代码中以编程方式调用的名称之间的字符串不匹配。因为 LogManager
找不到指定的记录器,所以返回了根目录,这对于我们的配置来说没有设置为有意义地记录任何地方。
我的问题是,有没有办法设置 log4net 以允许使用特定的 logger
,但是如果指定的 >找不到记录器
?
例如使用这样的配置文件
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
</root>
<logger name="TestFileLogger">
<level value="ALL" />
<appender-ref ref="TestFileAppender" />
</logger>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p [%x] - %m%n" />
</layout>
</appender>
<appender name="TestFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="TestLog" />
<param name="DatePattern" value=".yyyyMMdd".log"" />
<param name="AppendToFile" value="true" />
</appender>
</log4net>
</configuration>
然后像这样在 C# 中调用记录器
var fileLogger = LogManager.GetLogger("TestFileLogger");
fileLogger.Info("This logs appropriately.");
var bogusLogger = LogManager.GetLogger("Bogus");
bogusLogger.Info("This should go to a general log. Bogus is not a recognized appender");
是否有一种好方法可以将来自 bogusLogger
的消息记录到某种通用日志文件中?我最初的想法是创建一个作为根节点一部分的通用文件附加程序,但这非常嘈杂,因为所有日志消息都将路由到该文件。有没有办法只路由未在另一个日志文件中捕获的消息?
最佳答案
你可以使用 LogManager.Exists("Bogus")确定是否应使用伪造记录器或您的默认实现。
您可以在 LogManager 上创建一个可以为您处理的扩展方法。
关于c# - 在 Log4Net 中找不到 Logger 时设置默认日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367199/