具有 Log4net 的多个记录器 - 记录器名称

Multiple Loggers with Log4net - logger name

提问人:Michael 提问时间:9/24/2023 最后编辑:TylerHMichael 更新时间:9/28/2023 访问量:59

问:

我有一个 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");
asp.net-core log4net-configuration

评论


答:

1赞 pfx 9/28/2023 #1

您的配置未定义与您传递给调用的名称匹配的记录器,即 和 。 您只定义了追加器。LogManager.GetLoggerMigrationErrors

因此,它使用根/默认记录器,您将其配置为使用两个 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>