我有一个问题需要诊断,为了理解它,我写了两个单元测试 - 一个在我的配置中存在Logger
,另一个获得不存在的记录器。
第一个惊喜是,即使记录器名称不存在,我仍然会收到一些东西(而不是NULL
,正如我所期待的那样)。它甚至附加了ConsoleAppender
....好吧....但是它来自哪里?
Log4net config:
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\tmp\log" />
... (some other settings) ....
</appender>
<root>
<level value="FATAL"/>
<appender-ref ref="RollingFileAppender" />
</root>
<logger name="DefinedLogger" additivity="false">
<level value="DEBUG" />
<appender-ref ref="MyCustomAppender" />
</logger>
<appender name="MyCustomAppender" type="MyAssembly.CustomAppender, MyAssembly">
.....
</appender>
</log4net>
接下来,我试图了解如何检查每个记录器中配置的appender。我第一次尝试使用.Repository
继续回放我的配置文件中配置的所有三个appender - 好的,有意义,因为它是存储库中的所有appender ....但是我怎样才能检查个别条目附加什么附加者?
[Test]
public void TestGetLoggerWithValidNameGetsLogger() {
// Arrange
string loggerName = "DefinedLogger";
// Act
ILog myCustomLogger = LogManager.GetLogger(loggerName);
// this returns *ALL* appenders in the config - not those attached to this logger....
var appenders = myLogger.Logger.Repository.GetAppenders();
// Assert
Assert.IsNotNull(myCustomLogger, "MyCustomLogger is NULL");
}
有什么想法吗?如何检查以确保在此记录器上附加了正确的附加器?