log4net BasicConfigurator未在控制台上打印

时间:2014-09-04 08:27:48

标签: c# linux log4net monodevelop

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

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

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

问题是记录器不会向控制台打印任何内容;在试图理解出了什么问题时,我用调试器查看了它;我看到 log 引用包含AppendersCollection,遗憾的是它是空的我想在配置期间某些东西不能正常工作而我没有appender,因此没有日志输出。

我错过了什么?有什么建议吗?对于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个记录器,每个记录器都有自己的appender,两个是滚动文件appender,另一个是console appender。 然后我记录“Hello World!”在每个记录器上。 滚动文件记录器按预期工作,而ConsoleLogger的输出无处可寻。我检查了Debugger并且 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>

1 个答案:

答案 0 :(得分:0)

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