동일한 예약 된 프로세스의 여러 인스턴스가있는 여러 파일에 로깅을 시도하고 대상 매개 변수가 런타임 매개 변수를 기반으로 선택됩니다.동일한 프로세스가 여러 파일에 서로 다른 로깅
하나의 인스턴스가 실행 중일 때 다른 하나는 로그 할 수 없으므로 빈 파일 만 생성됩니다. 여기
은 샘플 시나리오입니다 :- schedlued 작업
program.exe A
시작하고 여전히B_{currentDate}.log
에 로깅을 시작한다 및
를 실행 - schedlued 작업에 로그인
program.exe B
시작하기 시작
program.exe A
동안 A_{currentDate}.log
둘 다 끝나면, 첫 번째 파일이 비어있는 동안 두 번째 파일은 비어 있습니다. 두 번째 파일에 로그 할 항목이 100 % 확실하므로 예상 결과가 아닙니다. 기본적으로 실행되는 첫 번째 인스턴스가 다른 모든 인스턴스를 로깅하지 못하게하는 것처럼 보입니다.
동일한 프로그램에 대해 약 20 개의 예약 된 작업이 있다고 가정하면 몇 가지 중요한 로그가 누락되어 많은 문제가 발생합니다. 초기화 각 인스턴스에 대한 코드 여기
<appender name="A_appender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="A_%property{Date}.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="B_appender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="B_%property{Date}.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
...
<logger name="A.Logger">
<appender-ref ref="A_appender" />
<level value="DEBUG" />
</logger>
<logger name="B.Logger">
<appender-ref ref="B_appender" />
<level value="DEBUG" />
</logger>
...
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
</root>
과 :
이protected Module(string logName)
{
ThreadContext.Properties["Date"] = GlobalContext.Properties["Date"] = DateTime.Now.ToString("yyyyMMdd");
XmlConfigurator.Configure(new System.IO.FileInfo(properties.get("log4net.config.file")));
log = LogManager.GetLogger(logName);
...
}
누군가가 나를 도울 수는
여기 log4net.config
파일의 단편입니까?
귀하의 제안에 따라, 제 구성에서 하나의 appender를 제외하고 모든 것을 제거했습니다. 이 appender는 이제'% property {FileName} _ % property {Date} .log'와 같이 씁니다. 그러면 모든 파일이 단일 인스턴스에 의해 잠겨지지 않습니다. – STT