提问人:Michael 提问时间:9/24/2023 最后编辑:TylerHMichael 更新时间:9/28/2023 访问量:59
具有 Log4net 的多个记录器 - 记录器名称
Multiple Loggers with Log4net - logger name
问:
我有一个 Asp.net 核心 Blazor 应用。
我正在尝试使用 Log4net 创建 2 个单独的记录器。
这个想法是,与迁移相关的所有错误都将进入一个名为“Migration”的记录器,所有常规错误都将进入一个名为“Errors”的记录器,但两个记录器都会捕获所有错误。
这是我的Log4net.config
<log4net>
<appender name="Migration" type="log4net.Appender.FileAppender">
<file value="logs/migration.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %message%newline" />
</layout>
</appender>
<appender name="Errors" type="log4net.Appender.FileAppender">
<file value="logs/errors.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %level - %message%newline | %exception" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="Migration" />
<appender-ref ref="Errors" />
</root>
</log4net>
这就是我使用它的方式:
private static readonly ILog _logger = LogManager.GetLogger("Errors");
_logger.info("blah");
private static readonly ILog _migLogger = LogManager.GetLogger("Migration");
migLogger.info("blah");
答:
1赞
pfx
9/28/2023
#1
您的配置未定义与您传递给调用的名称匹配的记录器,即 和 。
您只定义了追加器。LogManager.GetLogger
Migration
Errors
因此,它使用根/默认记录器,您将其配置为使用两个 appender,写入 migration.log 和 errors.log 文件。
要解决此问题,请定义缺少的命名记录器,并且仅将相应的 appender 挂接到相应的记录器。
一种方法如下所示。请注意 xml 标记。
由于您仅使用命名记录器,因此根/默认记录器不需要配置任何 appender。logger
<log4net>
<appender name="Migration" type="log4net.Appender.FileAppender">
<file value="logs/migration.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %message%newline" />
</layout>
</appender>
<appender name="Errors" type="log4net.Appender.FileAppender">
<file value="logs/errors.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %level - %message%newline | %exception" />
</layout>
</appender>
<logger name="Migration">
<level value="DEBUG" />
<appender-ref ref="Migration" />
</logger>
<logger name="Errors">
<level value="DEBUG" />
<appender-ref ref="Errors" />
</logger>
<root></root>
</log4net>
或者,您可以将根/默认记录器视为错误记录器。
然后,配置将如下所示。它可以防止根/默认记录器的消息也出现在迁移记录器中additivity="false"
<log4net>
<appender name="Migration" type="log4net.Appender.FileAppender">
<file value="logs/migration.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %message%newline" />
</layout>
</appender>
<appender name="Errors" type="log4net.Appender.FileAppender">
<file value="logs/errors.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %level - %message%newline | %exception" />
</layout>
</appender>
<logger name="Migration" additivity="false">
<level value="DEBUG" />
<appender-ref ref="Migration" />
</logger>
<root>
<level value="DEBUG" />
<appender-ref ref="Errors" />
</root>
</log4net>
评论