2017-10-24 1 views
0

log4net v. 2.0.8log4net 다중 로거 - 등록 정보

log4net을 통한 다중 로깅에는 몇 가지 문제가 있습니다. n 개의 장치에서 작동하는 응용 프로그램을 개발 중이며 각 장치에 대해 단일 로그 파일을 갖고 싶습니다.

log4net.config

<log4net> 

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="%envFolderPath{LocalApplicationData}/Foo/Device%property{DeviceID}/log.txt"/> 
    <appendToFile value="true"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="10MB"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <param name="Header" value="BEGIN LOGGING AT %date *** %property *** %newline" type="log4net.Util.PatternString" /> 
    <param name="Footer" value="END LOGGING AT %date *** %property *** %newline" type="log4net.Util.PatternString" /> 
    <param name="ConversionPattern" value="%date [%thread] %-5level %-5class{1} %-5method(%line) %message %newline" /> 
    </layout> 
    <filter type="log4net.Filter.PropertyFilter"> 
    <key value="Version" /> 
    <stringToMatch value="1" /> 
    </filter> 
</appender> 

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

이 코드입니다

public DeviceClass(string deviceID) 
    { 
     InitializeComponent(); 

     GlobalContext.Properties["DeviceID"] = deviceID; 
     logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

     logger.Debug("Hello world"); 

문제는 내가 예를 들어 두 개의 장치가 있다면 나는 그냥 첫 번째 로그 파일을 가지고 있다는 것입니다 모든 기기의 메시지

답변

0

저는 Log4Net 전문가는 아니지만, 로그 관리자가 처음으로 주어진 유형/이름에 대해 GetLogger를 호출 할 때 로거와 모든 애펜더를 초기화 할 것이라고 생각합니다. 문자열 이름). 즉, 장치 당 하나씩 다시 초기화하지 않습니다. 내 생각에 다음과 같이 유형 이름과 기기 ID의 조합을 만드는 것이 좋습니다.

logger = LogManager.GetLogger($"{System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName}{deviceId}");