Я решил использовать log4net для обработки всех действий по регистрации для приложения, над которым я работаю... после прочтения документации я решил начать эксперименты, но неудачно потерпел неудачу с первой попытки
Приложение разрабатывается с использованием С# с использованием MonoDevelop 3.0.3.2 в довольно стандартном дистрибутиве Debian 7, чтобы позднее быть развернутым на машинах Linux.
Код до сих пор тривиален и следует самым ранним шагам в документации log4net и цитируется в конце сообщения.
Проблема в том, что регистратор ничего не печатает для консоли; пытаясь понять, что происходит не так, я искал его с помощью отладчика; Я вижу, что ссылка на журнал содержит 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 регистратора каждый со своим собственным приложением, два - скопированные файловые приложения, а один - консольный 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>
Какой проект вы используете? Консольное приложение? Есть несколько случаев, когда вы не увидите вывод на std :: out или std :: err на консоли. Взгляните на этот пост: Может ли один исполняемый файл быть консольным и графическим приложением?