2014-09-04 3 views
1

Я решил использовать log4net для обработки всех действий по регистрации для приложения, над которым я работаю ... после прочтения документации я решил начать эксперименты, но неудачно потерпел неудачу в самом первом попыткаlog4net BasicConfigurator не печатает на консоли

Приложение разрабатывается с использованием C# с использованием MonoDevelop 3.0.3.2 в довольно стандартном дистрибутиве Debian 7, чтобы позднее быть развернутым на машинах 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!"); 
     } 
    } 
} 

UPDATE

Я сделал несколько тестов с загрузкой файла конфигурации. Я создал 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> 
+0

Можете ли вы показать свою конфигурацию log4net в конфигурациях app.config или/log4net? – Peter

+0

@peer: предполагается, что подключенный код должен использовать BasicConfigurator, и в соответствии с документацией конфигурационный файл не нужен ... Между тем я сделал несколько тестов с конфигурационным файлом и выяснил, что у меня возникают проблемы с ConsoleAppender, в то время как RollingFileAppender работает нормально, позвольте мне обновить исходное сообщение с новым кодом и конфигурационным файлом. – BaroneAshura

ответ

0

Какой вид проекта вы используете? Консольное приложение? Есть несколько случаев, когда вы не увидите никакого вывода на std :: out или std :: err на консоли. Посмотрите на это сообщение: Can one executable be both a console and GUI application?

+0

Когда проект был создан, он был создан как консольное приложение C# в MonoDevelop, а исходный файл является единственным исходным файлом, являющимся частью проекта. Я не изменял ничего в настройках проекта с момента создания проекта, и проект был создан с единственной целью сделать несколько тестов с помощью log4net. Поэтому я бы осмелился сказать, что это консольное приложение. – BaroneAshura

Смежные вопросы