문제
릴리스 모드에서 응용 프로그램을 컴파일하면 Log4Net이 여전히 디버그 정보를 기록한 것으로 나타났습니다. 이 문제를 해결하는 방법이 있습니까?
이것은 내 app.config 파일입니다.
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:\Documents and Settings\test\Application Data\Log.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} - %m%n" />
</layout>
</appender>
</log4net>
내가 그리워 했어?
해결책
app.config 파일에 Log4net에게 릴리스 또는 디버그 모드에서 다르게 작업을 수행하도록 지시하는 것은 없습니다. 두 빌드간에 로깅이 다르려면 두 빌드간에 구성 파일을 변경해야합니다.
가장 좋은 방법은 아마도 릴리스를 위해 하나의 app.config, 디버그 용으로 하나의 app.config를 만들고 stackoverflow 질문의 조언을 따르는 것입니다.
참고 : 릴리스와 디버그 앱의 차이점은 디버그 버전의 다음 줄입니다.
<level value="DEBUG" />
릴리스 버전의 다음 줄 대 (또는 원하는 경우 오류 또는 치명적일 수 있음) :
<level value="INFO" />
다른 팁
대신 이런 식으로 시도해 볼까요? 받고 싶은 최소 수준으로 설정하십시오.
<level value="WARN" />
app.config가 다음과 같습니다.
<root>
<level value="Info" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
코드별로 로그 레벨을 수정할 수 있습니다 (코드를 프로그램에 넣음) :
#if DEBUG
log4net.Repository.ILoggerRepository RootRep;
RootRep = LogManager.GetRepository(Assembly.GetCallingAssembly());
XmlElement section = ConfigurationManager.GetSection("log4net") as XmlElement;
XPathNavigator navigator = section.CreateNavigator();
XPathNodeIterator nodes = navigator.Select("root/level");
foreach (XPathNavigator appender in nodes)
{
appender.MoveToAttribute("value", string.Empty);
appender.SetValue("Debug");
}
IXmlRepositoryConfigurator xmlCon = RootRep as IXmlRepositoryConfigurator;
xmlCon.Configure(section);
#endif
제휴하지 않습니다 StackOverflow