为什么在app.config中没有配置ConsoleAppender,导致日志写到控制台?

问题描述 投票:4回答:2

在App.Config中,我为我的控制台应用程序声明了一个配置部分。

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

并配置了一个 ConsoleAppender:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="ConsoleAppender" />
  </root>
</log4net>

我们还宣布: RollingFile appender,这是我们在应用启动时标准代码库的一部分(不易修改)。

        _hierarchy = (Hierarchy)LogManager.GetRepository();
        _rollingFileAppender = new RollingFileAppender();            
        ... //_rollingFileppender options

        _rollingFileAppender.ActivateOptions();
        _hierarchy.Root.AddAppender(_rollingFileAppender);
        _hierarchy.Configured = true;

当我运行这个应用程序时,我看到了日志条目 如期写入文件,但没有任何东西写入控制台。

当我检查我的 ILog 在调试器中,我没有看到在 Logger.Appenders 但我确实看到 RollingFileAppender 中的唯一元素。Root.Appenders.

log4net是我习惯的东西,"它只是工作"--是否有一些不兼容的配置。 代码添加附录,或一些我需要得到的行 LogManager样子 在App.config中?

c# .net log4net
2个回答
2
投票

你让我很好奇,我决定玩一玩。第一个观察是。你是对的.

经过一些谷歌,我发现这个 这个

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level [%thread] %logger{1} %username - %message%newline" />
      </layout>
      <mapping>
        <level value="WARN" />
        <foreColor value="Yellow, HighIntensity" />
      </mapping>
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

设置

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

namespace LoggerDemo
{
    public static class Program
    {
        private static readonly ILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public static void Main(string[] args)
        {
            SetupFileAppender();
            SetupTraceAppender();
            Logger.Error("Error");
        }

        private static void SetupTraceAppender()
        {
            var patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
            patternLayout.ActivateOptions();

            var trace = new TraceAppender();
            trace.Layout = patternLayout;
            trace.ActivateOptions();
            var l = (Logger)Logger.Logger;
            l.AddAppender(trace);
        }

        private static void SetupFileAppender()
        {
            var patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
            patternLayout.ActivateOptions();

            var roller = new RollingFileAppender();
            roller.AppendToFile = true;
            roller.File = "Log.txt";
            roller.Layout = patternLayout;
            roller.MaxSizeRollBackups = 5;
            roller.RollingStyle = RollingFileAppender.RollingMode.Size;
            roller.StaticLogFileName = true;
            roller.ActivateOptions();
            var l = (Logger)Logger.Logger;
            l.AddAppender(roller);
        }
    }
}

最重要的

在您的AssemblyInfo中添加 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

结果

Result


0
投票

我看了在谷歌关于log4net和似乎有趣。我看了一些网站,这里的输出应该是像log4net.config我猜?这家伙显示按它和在属性这里应该是 "复制到输出目录"。"Copy Always".也许你可以用它来打印到控制台的输出。这里是非常有用的信息,在谷歌关于它,你可以点击 阅读更多.希望我可以帮助你:)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.