"myprogram"로거에 대해 많은 log4net 호출을하는 프로그램이 있습니다. 또한 log4net을 다른 로거에 호출하는 다른 코드를 호출합니다. "myprogram"에 대한 INFO보다 높은 모든 로그를 캡처하고 다른 모든 것에 대해서는 WARN보다 높은 모든 로그를 캡처하려고합니다. 이렇게하면 작업중인 작업과 관련된 작업 중 메시지가 표시되지만 지원 코드에서 발생할 수있는 잠재적으로 나쁜 점을 알 수 있습니다. 이 파일을 콘솔과 로그 파일 모두에 보내길 원합니다. > 로그인 모든 것을 경고하고> 특정 "myprogram"로거에 대한 정보 :이 나에게 완벽한 의미가 있습니다log4net에서 중복 로깅을 제거하십시오.
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</logger>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
</appender>
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
</layout>
<appendToFile value="false" />
<staticLogFileName value="true" />
<rollingStyle value="Once" />
<file value="mylogfile" />
<immediateFlush value="true" />
<threshold value="INFO" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>
:
나는 다음과 같은 log4net 설정을 가지고있다.
문제는 콘솔 및 LogFile에서 두 번으로 기록 된 INFO 메시지가 표시된다는 것입니다. 이것은 <root>
과 <logger>
요소가 모두 채워진 경우에만 발생합니다. 둘 중 하나를 제거하면 나머지 하나는 예상대로 작동합니다.
myprogram이 "root"와 "myprogram"둘 다 일치하므로 WARN 항목의 이중 로그를 얻었는지 알 수 있었지만 ROOT가 WARN으로 설정되어 있더라도 INFO에서 발생합니다.
내가 여기서 뭔가 잘못하고있는 것입니까, 아니면 이것이 log4net 버그입니까? 모호한 것입니까?
동일한 문제가 발생했을 때이 기능이 잘 작동했습니다. 이것은 덧셈 문제를 피할 수 있습니다. –
이것은 정답입니다. 로거는 루트에서 appender를 상속받습니다. 감사! –
@Jeffrey 당신은 additivity를 사용하여 문제가 무엇인지 알고 있습니까? 나는 Google이 알고있는 문서를 찾는데 성공하지 못했습니다. – Tinister