문제
프로덕션 환경에서 C# 프로젝트에서 log4net을 사용하고 있습니다. 모든 로깅을 비활성화하고 싶지만 치명적인 오류가 발생하면 이전 512 메시지를 파일에 로그인해야합니다. 잘 작동합니다. 치명적인 오류가 발생하면 메시지를 파일에 로그인합니다.
그러나 Visual Studio에서 실행할 때 모든 로그 메시지가 치명적인지 아닌지에 관계없이 모든 로그 메시지가 출력 창에 기록됩니다. (Windows 탐색기에서 실행될 때이 메시지를 볼 수 없습니다. 내 응용 프로그램은 Winform EXE이며 출력을 볼 수있는 콘솔 창이 없습니다)
이 로깅을 비활성화하는 방법이 있습니까? 파일에만 통나무가 필요합니다. 치명적인 오류가 발생할 때도됩니다.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net debug="false">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
<bufferSize value="512" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="FATAL"/>
</evaluator>
<appender-ref ref="RollingFileAppender" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="BufferingForwardingAppender" />
</root>
</log4net>
</configuration>
이것이 바로 Windows 양식의 정적 이니셜 라이저에서 구성하는 방법입니다.
static Window1()
{
Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config");
XmlConfigurator.Configure(vStream);
BasicConfigurator.Configure();
}
그리고 나는 winform의 생성자에서 로거 객체가 초기화되어 있습니다.
logger = LogManager.GetLogger(typeof(Window1));
Language -C#, .NET Framework -3.5, Visual Studio 2008, Log4Net 1.2.10, 프로젝트 유형 -Winforms
해결책
제거하십시오 BasicConfigUrator.configure () 선. 그것이 바로 그 라인이하는 일입니다 - 콘솔을 가리키는 컨소시너를 추가합니다.
다른 팁
애플리케이션이 릴리스 모드로 컴파일 된 경우 Visual Studio의 메시지가 여전히 표시됩니까? Log4Net은 Debug.Write를 사용하여 어쨌든 오류를 표시 할 수 있습니다. 이 경우 해당 메시지가 릴리스 모드로 표시되지 않아야합니다.