2011-08-20 3 views
2

Log4Net을 처음 사용하면서 문제가 발생했습니다. 나는 다양한 튜토리얼을 따라 왔지만 아무것도 로그 아웃하지 못했습니다. 내가 당신에게 나의 코드를 보여주고, 내가 뭘 잘못하고 있는지 말해 줄 수 있기를 바랍니다.Log4Net 로깅 안 함 (초기화되지 않았 음)

:

의 app.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" 
      type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net>  
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="CurrentLog.txt"/> 
     <staticLogFileName value="true"/> 
     <appendToFile value="true"/> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd"/> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <acceptOnMatch value="true" /> 
     <levelMin value="DEBUG" /> 
     <levelMax value="FATAL" /> 
     </filter> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date{dd MMM yyy HH:mm:ss} %level %message. %newline %exception" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 

의 AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

Presenter.cs

클래스의 상단에 나는이 있습니다 16,

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

는 다음 나는 수업 시간에 나중에 로그 변수를 사용하려고 :

bool isDebugEnabled = log.IsDebugEnabled; 
log.Debug("Failed to save", e); 

나는 isDebugEnabled 변수를 검사 할 때마다, 나는 로그 변수를 검사하면 다른 isBlahEnabled의 모든 있습니다로는, false입니다.

필자가 app.config 파일을 처음 사용 했으므로 app.config 파일을 올바르게 연결하지 않은 것으로 의심됩니다. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 새 항목을 추가하고 응용 프로그램 구성 파일을 선택하고 app.config라는 이름을 지정하여 만들었습니다.

+1

응용 프로그램을 실행하는 계정에 구성된 위치의 파일을 만들고 쓸 수있는 권한이 있습니까? – Oded

+0

있습니다. @ Waldo의 답변에 대한 회신을 참조하십시오. 이제 권한을 변경하지 않고 로깅을 사용하게되었습니다. – Stu

답변

14

이 사람은 나를 위해 작동 : 또한

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
     <appender name="Main" type="log4net.Appender.RollingFileAppender"> 
     <file value="${USERPROFILE}\My Documents\MyApp\Logs\Main.log" /> 
     <appendToFile value="false" /> 
     <maximumFileSize value="1GB" /> 
     <maxSizeRollBackups value="3" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date{ABSOLUTE} %-5level %-18logger %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="Main" /> 
     </root> 
    </log4net> 
</configuration> 

app.config에 빌드 작업을 없음로 설정되어 있는지 확인하고 출력 디렉토리에 복사가 로 설정되어

의 app.config " ""인 경우 복사하십시오. 파일 등록 정보에서이 설정을 설정할 수 있습니다.

Program.cs

public static ILog Log; 

static void Main(string[] args) 
{ 
    // Setup Logging 
    log4net.Config.XmlConfigurator.Configure(); 
    Log = LogManager.GetLogger("MyAwesomeApp"); 

    // ... 
} 
+2

AssemblyInfo.cs에있는 선을 제거하고 Main()의 첫 번째 줄을 App.xaml.cs의 생성자 (WPF 프로젝트에서 작업 중입니다)에 추가하면 모든 것이 작동합니다. 왜 그것이 전에 작동하지 않았는가? – Stu

+0

assemblyinfo 메소드에 익숙하지 않습니다. 이 문서의 어디에 설명되어 있습니까? 실제로 구성하는 것과 약간 다른 점이 있다고 생각합니다. –

+0

두 자습서 모두 AssemblyInfo.cs 메서드를 사용합니다. http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx 및 http://mitch-wheat.blogspot.com/2007/04/log4net-net- logging-tool.html하지만이 작업이 이제는 번거롭지 않습니다! 매우 감사합니다! – Stu

3

그냥 내 2 센트를 추가 : 나는이 같은 문제를 가지고,하지만 난 (그래서 모두 같은 설정을 앱에있는) 별도의 log4net.config 위의 설정을 사용하여, 하지만 나는 'Copying newer'(또는 유사한 말씨, 독일어 버전 있음) 빌드시 파일 속성을 설정하는 것을 잊어 버렸습니다.

2

그냥이이 문제의 해결 방법을 찾고 다른 사람 도움이 경우 내 2P를 추가합니다 : 내 경우

내가 Log4net 외에 NServicebus.Logging 패키지를 사용했는데,이 패키지는와 유형이 포함 Log4net에있는 이름과 완전히 동일한 이름이며 네임 스페이스에서만 다릅니다.

'using'문을 수정하거나 형식 이름을 완전히 한정하여 해결했지만 문제를 발견하는 것은 매우 어려웠습니다.