gpt4 book ai didi

c# - log4net BasicConfigurator 未在控制台上打印

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:00 25 4
gpt4 key购买 nike

我决定使用 log4net 来处理我正在处理的应用程序的所有日志记录事件...阅读文档后,我决定开始进行实验,但在第一次尝试时惨遭失败

该应用程序正在相当标准的 Debian 7 发行版中使用 MonoDevelop 3.0.3.2 使用 c# 开发,以便稍后部署在 Linux 机器上。

到目前为止,代码很简单,遵循 log4net 文档中最早期的步骤,并在文章末尾引用。

问题是记录器没有向控制台打印任何东西;在试图了解出了什么问题的同时,我也用调试器进行了调查;我看到 log 引用包含 AppendersCollection,不幸的是它是空的我猜想在配置期间某些东西无法正常工作并且我没有附加程序,因此没有日志输出。

我错过了什么?有什么建议吗?是否存在我不知道的 MonoDevelop-Linux-log4net 组合的某种已知问题?

using System;
using log4net;
using log4net.Config;

namespace TestLog4Net
{
class MainClass
{
private static readonly ILog log = LogManager.GetLogger(typeof(MainClass));

public static void Main (string[] args)
{
BasicConfigurator.Configure();

Console.WriteLine ("Hello World!");
log.Info("Hello World!");
}
}
}

更新

我做了一些加载配置文件的测试。我创建了 3 个记录器,每个记录器都有自己的附加程序,两个是滚动文件附加程序,一个是控制台附加程序。然后我记录“Hello World!”在每个记录器上。滚动文件记录器按预期工作,而 ConsoleLogger 的输出无处可寻。我检查了调试器,clogger 对象不显示空的 AppenderCollection,但无论如何都没有输出。您可以在下面找到更新后的代码以及配置文件。

using System;
using log4net;
using log4net.Config;

namespace TestLog4Net
{
class MainClass
{

public static void Main (string[] args)
{
XmlConfigurator.Configure(new System.IO.FileInfo("app.config"));

ILog rflogger1 = LogManager.GetLogger("RFLoggerOne");
ILog rflogger2 = LogManager.GetLogger("RFLoggerTwo");
ILog clogger = LogManager.GetLogger("CLogger");

rflogger1.Info("Hello World!");
rflogger2.Info("Hello World!");
clogger.Info("Hello World!");

Console.WriteLine ("Hello World!");
}
}
}

<log4net>
<appender name="CAppender" type="log4net.Appender.AnsiColorTerminalAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>

<appender name="RFAppender1" type="log4net.Appender.RollingFileAppender">
<file value="rf1.log"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="yyyyMMdd"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="1000000"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline"/>
</layout>
</appender>

<appender name="RFAppender2" type="log4net.Appender.RollingFileAppender">
<file value="rf2.log" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %thread %logger - %message%newline" />
</layout>
</appender>


<logger name="CLogger">
<level value="ALL"/>
<appender-ref ref="CAppender"/>
</logger>

<logger name="RFLoggerOne">
<level value="ALL"/>
<appender-ref ref="RFAppender1"/>
</logger>

<logger name="RFLoggerTwo">
<level value="ALL"/>
<appender-ref ref="RFAppender2"/>
</logger>


<root>
<level value="ALL"/>
</root>
</log4net>

最佳答案

您使用哪种项目?控制台应用程序?在几种情况下,您不会在控制台上的 std::out 或 std::err 上看到任何输出。看看这篇文章: Can one executable be both a console and GUI application?

关于c# - log4net BasicConfigurator 未在控制台上打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660687/

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