2014-09-04 5 views
1

log4net을 사용하여 작업중인 응용 프로그램에 대한 모든 로깅 활동을 처리하기로 결정했습니다. 설명서를 읽은 후 실험을 시작하기로 결정했지만 처음에는 비참하게 실패했습니다 시도log4net BasicConfigurator가 콘솔에 출력되지 않음

응용 프로그램은 나중에 Linux 컴퓨터에 배포하기 위해 데비안 7 배포판에서 MonoDevelop 3.0.3.2를 사용하여 C#으로 개발 중입니다.

코드는 지금까지 사소한 것이고 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!"); 
     } 
    } 
} 

UPDATE 나는 구성 파일을로드하는 몇 가지 테스트를했다. 나는 각각의 appender로 로거 3 개를 만들었고, 두 개는 파일 appender를 롤링했고, 하나는 콘솔 appender로 만들었습니다. 그런 다음 "Hello World!"로그를 남깁니다. 각 로거에. 롤 로깅 파일 로거는 예상대로 작동하지만 ConsoleLogger의 출력은 찾을 수 없습니다. 내가 디버거와 막히는 사람 개체가 빈 App AppCollection을 표시하지 않습니다 체크했지만 어쨌든 출력이 없습니다. 아래에서 구성 파일과 함께 업데이트 된 코드를 찾을 수 있습니다.

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

app.config 또는/및 log4net 구성에 log4net 구성을 표시 할 수 있습니까? – Peter

+0

@peer : 첨부 된 코드는 BasicConfigurator를 사용하고 문서에 따르면 설정 파일이 필요하지 않습니다 ... 한편 구성 파일로 몇 가지 테스트를 수행 한 결과 문제가 있음을 알았습니다 ConsoleAppender에서 RollingFileAppender가 잘 작동하는 동안 새 코드 및 구성 파일로 원래 게시물을 업데이트하겠습니다. – BaroneAshura

답변

0

당신이 프로젝트의 어떤 종류를 사용합니까? 콘솔 응용 프로그램? 콘솔에 std :: out 또는 std :: err의 출력이 표시되지 않는 경우가 여러 가지 있습니다. 이 게시물을보십시오 : Can one executable be both a console and GUI application?

+0

프로젝트가 생성되면 MonoDevelop에서 C# Console Application으로 생성되었으며 연결된 소스는 프로젝트의 일부인 유일한 소스 파일입니다. 프로젝트가 생성 된 이후로 프로젝트 설정에서 아무 것도 수정하지 않았고 log4net을 사용하여 몇 가지 테스트를 수행하기위한 목적으로 프로젝트를 만들었습니다. 그래서 나는 그것이 콘솔 어플리케이션이라는 것을 감히 말할 것입니다. – BaroneAshura

관련 문제