使用 Log4net 的多个记录器 - 记录器名称

问题描述 投票:0回答:1

我有一个 Asp.net core 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");
log4net core log4net-configuration
1个回答
0
投票

您的配置未定义与您传递给

LogManager.GetLogger
调用的名称(即
Migration
Errors
)相匹配的记录器。 您只定义了附加程序。

因此,它使用根/默认记录器,您将其配置为使用两个附加程序,写入migration.log和errors.log文件。

要解决此问题,请定义缺少的命名记录器,并且仅将适当的附加程序挂钩到相应的记录器。

一种方法如下所示。请注意

logger
xml 标签。
由于您仅使用命名记录器,因此根/默认记录器不需要配置任何附加程序。

<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>
© www.soinside.com 2019 - 2024. All rights reserved.