2012-04-30 3 views
0

많은 문제가 발생한 후 마침내 내 Windows 서비스 용 log4net을 구성 할 수있었습니다.log4net을 사용하여 여러 어셈블리를 로깅

저는 꽤 새로운데 오늘은 구성하기 시작했습니다. 나는 의심의 여지가있다.

1) 여러 어셈블리에 사용해야합니다. 내가 'log4net.L'어셈블리의 'A'와 'B'를 모두 기록 할 필요가있는 광산 메인 어셈블리 인 'B'어셈블리의 참조로 추가 된 어셈블리 'A'가 있다고 가정 해보십시오.

2) 내 응용 프로그램이 멀티 스레드이며 많은 스레드를 사용합니다. 그래서 log4net은 쓰레드에 안전합니까?

3) 내 app.config에 아래 설정을 사용하고 있습니다. 나는 그것의 사용이 무엇인지 많이 알지 못한다. 하지만 불필요한 매개 변수를 사용하고 싶지 않습니다.

문제가되지 않습니다
<log4net> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="C:\logs\log.txt"/> 
     <param name="AppendToFile" value="true"/> 
     <rollingStyle value="Size"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="100KB"/> 
     <staticLogFileName value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/> 
     </layout> 
    </appender> 
</log4net> 
+0

귀하의 질문에 excactly 무엇입니까? – LueTm

+0

포인트 1과 2에 정확히 지정된 질문 – sunder

+0

다음에 물음표 (?)를 사용하면 명확 해집니다. – LueTm

답변

1

어 펜더 섹션 아래에 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />을 사용하십시오. 로깅 성능을 향상 시키십시오.

log4net은 threadsafe입니다.

<maximumFileSize value="10MB" /> //For 100 Kb configuration there will be lot of files. 

<datePattern value="_yyyyMMdd" /> //이 날짜에 따라 새 파일을 생성하기 위해 로거를 암시합니다.

로거에 대한 정적 클래스를 만들고 사용할 모든 어셈블리에서 정적 함수를 호출하십시오. 로깅을위한

샘플 클래스 :

public static class Logger 
    { 
     static Logger() 
     { 
      XmlConfigurator.Configure(); 
     } 

     public static void Log() 
     { 
      string methodName = new System.Diagnostics.StackFrame(1, true).GetMethod().Name; 
      string moduleName = new System.Diagnostics.StackFrame(1, true).GetMethod().ReflectedType.FullName; 

      var appLog = LogManager.GetLogger(loggername); 
      appLog.Error(...); 

     } 
    } 
+0

답장을 보내 주셔서 감사합니다. 어셈블리 B에서 참조로 추가 된 어셈블리에 log4net 참조를 추가했다고 가정 해 봅시다. 이제 어셈블리에 정적 클래스를 생성하면 log4net이 사용되고 어셈블리 B는 log4net dll 참조를 어셈블리 B에 추가해야합니다. 또한. 네가하는 말. – sunder

+0

tou는 dll A를 사용하여 로그하므로 log4net dll을 추가 할 필요가 없습니다. –

+0

Romil 감사합니다. 문제가 해결되었습니다. log4net 메소드 참조는 현재 어셈블리에서 종료됩니다. 여기에 A가 추가됩니다. 그래서 나는 나중에이 게시물을 읽을 사람을위한 도움으로 아래 링크에 제안 된 수업을 만들었습니다. http://actcode.com/2009/11/net-application-logging-with-log4net-in-console-file-database/ – sunder

0
  1. ; 어셈블리 B에서 평소대로 ILog을 사용하십시오.
    응용 프로그램의 수명 기간 동안 Configure() 번 호출했는지 확인하십시오.
  2. 예.
  3. 나는 log4net에 익숙해지는 것이 좋습니다. google search 또는 docs을 보면 간단합니다.
+0

나는 지금하고있다. 어셈블리 B에 추가 된 참조를 만들고 해당 객체 ILOG를 로깅에 사용했습니다. 어셈블리에서 나는 log4net 레퍼런스를 추가하지 않았고, 이제는 log4net 레퍼런스를 추가하지 않고 두 어셈블리 모두에서 로그 할 수있다. 조립품 A가 조립품 B – sunder

+0

에 참조로 추가되므로 정의 된 조립품을 참조하지 않고 'ILog'을 사용할 수 있는지 여부를 묻습니다. 대답은 분명히 '아니오'입니다 ... –

+0

어셈블리 B에서 나는 log4net dll을 참조했습니다. 위해서는 어셈블리를 Log4Net에 다시 log4net 참조를 추가 할 필요가 Logged – sunder

0
<root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 

그것은 단지 디버그 모드에서 로그인, 그래서 설정에서 다음 항목을 만들 것입니다 :

<root> 
     <level value="ALL"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root>