【问题标题】:log4Net - logger only using root appender, not other appenderlog4Net - 记录器仅使用根附加程序,而不是其他附加程序
【发布时间】:2016-03-16 13:43:18
【问题描述】:
<log4net>
    <logger name="LogManager2" additivity="false">
        <level value="ALL"/>
        <appender-ref ref="LogManager2" />
    </logger>
    <root>
        <level value="ALL"/>
        <appender-ref ref="LogManager1" />
    </root>
    <appender name="LogManager1" type="log4net.Appender.RollingFileAppender">
        <file value="logs\log" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="_yyyy-MM-dd" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
    </appender>
    <appender name="LogManager2" type="log4net.Appender.RollingFileAppender">
        <file value="logs\Logs2" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="_yyyy-MM-dd" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
    </appender>
</log4net>

当我尝试为 logmanager2 使用记录器时,

ILog Logger = LogManager.GetLogger(typeof(LogManager2));

它应该将日志写入 logs2 文件,但记录器正在使用根日志文件并将数据记录到日志文件。我已经尝试了有关此主题的所有可用答案,但对我没有任何帮助 谁能解释一下这个问题?

【问题讨论】:

  • 您如何解决记录器 LogManager2?我的意思是,确切的代码、大小写等等。
  • 我已经编辑了代码。 @A.Chiesa

标签: c# log4net log4net-configuration


【解决方案1】:

当你需要一个 Logger 时,你可以传递一个类型或一个字符串。

当你传递一个类型时,Log4net 会搜索一个名称与类名相同的记录器,包括命名空间。

所以,您应该拨打:

ILog Logger = LogManager.GetLogger("LogManager2");

或将记录器重命名为YourNamespace.LogManager2。像这样:

<logger name="LogManagerNamespace.LogManager2" additivity="false">

【讨论】:

  • 对我没有用.. :( 我有两个服务,想在单独的文件中记录两个服务的信息。这就是为什么我添加了两个附加程序但日志只记录了根附加程序文件。跨度>
  • 我没有关注你。你有两个服务。这很好。你有两个记录器,有两个不同的附加程序,这很好。一切都在 root 上进行,因为您调用 GetLogger 无法解析 LogManager2 类型的记录器。您必须重命名记录器,或使用字符串调用 GetLogger。我很确定这是你的问题。
【解决方案2】:

我对此进行了斗争,但我不喜欢 XML 配置,所以这是我编写的(从多个不同的 DLL 工作并为每个 DLL 创建不同的日志):

using System;
using System.Reflection;

using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

// ReSharper disable once CheckNamespace
namespace EasiPos.EasiLog
{
    public class Log
    {
        private static ILog _log;
        public static void Initialise(string logName, string logFile)
        {
            var hierarchy = (Hierarchy)LogManager.CreateRepository(logName);

            var patternLayout = new PatternLayout {ConversionPattern = "%date %-5level - %message%newline%exception"};
            patternLayout.ActivateOptions();

            var rollingFileAppender = new RollingFileAppender
            {
                AppendToFile = true,
                Name = logName,
                File = logFile,
                Layout = patternLayout,
                MaxSizeRollBackups = 10,
                RollingStyle = RollingFileAppender.RollingMode.Date,
                StaticLogFileName = true
            };
            rollingFileAppender.ActivateOptions();

            hierarchy.Root.AddAppender(rollingFileAppender);
            hierarchy.Root.Level = Level.All;
            hierarchy.Configured = true;

            _log = LogManager.GetLogger(logName, logName);

        }

        public static void Info(string message)
        {
            _log.Info(message);
        }

        public static void Debug(string message)
        {
            _log.Debug(message);
        }

        public static void Error(string message)
        {
            _log.Error(message);
        }

        public static void Error(Exception exception)
        {
            _log.Error(exception.Message, exception);
        }

        public static void Error(string message, Exception exception)
        {
            _log.Error(message, exception);
        }
    }
}

像这样初始化它:

using static EasiPos.EasiLog.Log;

Initialise("EasiKDS", @"TRACE\EasiKDS.exe.log");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多