문제

프로덕션 환경에서 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를 사용하여 어쨌든 오류를 표시 할 수 있습니다. 이 경우 해당 메시지가 릴리스 모드로 표시되지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top