在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中?
你让我很好奇,我决定玩一玩。第一个观察是。你是对的.
经过一些谷歌,我发现这个 这个
<?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)]
我看了在谷歌关于log4net和似乎有趣。我看了一些网站,这里的输出应该是像log4net.config我猜?这家伙显示按它和在属性这里应该是 "复制到输出目录"。"Copy Always".也许你可以用它来打印到控制台的输出。这里是非常有用的信息,在谷歌关于它,你可以点击 喏 阅读更多.希望我可以帮助你:)