gpt4 book ai didi

c# - 为什么没有在 app.config 中配置 ConsoleAppender 导致日志写入控制台?

转载 作者:行者123 更新时间:2023-12-03 14:42:23 25 4
gpt4 key购买 nike

在 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在 app-startup 时作为我们标准代码库的一部分的日志 util 类中的 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 中查看?

最佳答案

你只是让我好奇,我决定玩一下。
第一个观察结果是:你说得对 .

经过一些谷歌,我找到了这个 this

应用配置

<?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

关于c# - 为什么没有在 app.config 中配置 ConsoleAppender 导致日志写入控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62193472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com