2011-09-13 3 views
5

NLog를 통해 내 응용 프로그램에 로깅을 수행하고 있습니다. 나는 하나의 컴퓨터에서만 발생하는 이상한 문제를 진단하기 위해 몇 가지 로그를 수집하려고합니다. 내 NLog.Config에서 나는 다음과 같은 구성을 가지고NLog는 ClickOnce 환경에서 로그인하지 않고 있지만 dev에서 작동합니다.

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <targets> 
    <target name="logfile" xsi:type="File" fileName="${specialfolder:dir=PollingLogs:file=log.txt:folder=MyDocuments}" /> 
    </targets> 

    <rules> 
    <logger name="*" minlevel="Debug" writeTo="logfile" /> 
    </rules> 
</nlog> 

나는 모든 로깅이 제대로 일어나고으로, 내 문서 폴더에 생성 된 log.txt 파일을 얻고 내 개발 컴퓨터에서 실행됩니다. 그러나 ClickOnce를 사용하여 응용 프로그램을 배포하면 log.txt 파일이 만들어지지 않습니다 (적어도 찾을 수 있음). 오류가 발생하지 않고 내 응용 프로그램이 정상적으로 실행되지만 아무 것도 일어나지 않습니다.

이 문제를 디버깅하는 방법조차 잘 모르겠습니다. 누구나 클릭 로그 환경에서 NLog를 올바르게 사용할 수 있도록 공유 할 수있는 통찰력이 있습니까?

참고로, 내 프로젝트의 NLog 참조는 로컬 복사로 설정됩니다.

+0

항상 앱이 시작될 때 로그에 기록하고 실패하면 완전히 실패합니다. 이렇게하면 웹이나 데스크톱이든 앱을 배포 할 때 로깅이 제대로 작동하는지 알 수 있습니다. 필요할 때 바로 사용할 수 있습니다. – DOK

+0

NLog가 성공했는지 어떻게 알 수 있습니까? – KallDrexx

+0

nlog 설정 파일에 [internalLogFile = "nlog-errors.log"] (http://nlog-project.org/wiki/Internal_logging)를 추가 한 다음 로그하려고 시도 할 때 nlog 자체가 예외가 발생하면 시도해 볼 수 있습니다 로깅 오류를 해당 로그 파일에 기록합니다. – BrandonAGr

답변

2

이 디버그하려면 Sysinternal ProcessMon (무료)을 사용하십시오. 그것은 프로세스로 만들어진 파일을 시도 액세스에 다른 일/중을 표시 할 수 있습니다 ... 내가 ApplicationData 또는 CommonApplicationData 또는 Environment.SpecialFolder에서 LocalApplicationData하지 MyDocuments를 사용하는 것이 좋습니다 로그인 이런 종류의

...

+2

ProcMon이 좋을 것입니다. 앱이 nlog 구성 파일을 읽고 있는지 먼저 확인할 수 있습니다. nlog 설정 파일이 clickonce 앱과 함께 배포되지 않았습니까? – BrandonAGr

0

오늘 제가 작업 한 프로젝트로이 문제를 해결했습니다. 당신이 거기에서 실행할 때 잘 그래서

NLog.config 파일

이 빌드 디렉토리에 복사지고, 하지만의 ClickOnce 설치는 하지 소프트웨어가 설치 될 때 NLog.config 파일을 배포입니다.

이것은 설치된 복사본에서 실행될 때 로깅 구성이없는 것으로 보이는 동작을 설명합니다.

지금까지 찾은 유일한 해결책은 app.config 파일에 로깅 설정을 병합하는 것입니다. ClickOnce에 의해 exe.config 파일이 배포되기 때문에 - NLog.config를 추가하는 데별로 기뻤습니다. 설치 프로그램에.

4

나는 약간 늦기는하지만 여기에 설명 된 또 다른 해결책이 있습니다 : Configure log4net or NLog with XML from code 다른 질문에 답변하고 있지만.

나는 KallDrexx에 의해 설명 된 것과 같은 문제가있었습니다. 에,

public static XmlLoggingConfiguration SetNlogConfiguration() 
    { 
     var sr = new StringReader(NlogXmlConfigString1()); 
     var xr = XmlReader.Create(sr); 
     var config = new XmlLoggingConfiguration(xr, null); 
     return config; 
    } 

별도의 방법은 바로 XML 문자열을 반환 : 그래서 방법 구성을 반환있는 NLogHelper 클래스를 생성 (동일한 솔루션에서 여러 프로젝트)에 대해 부동 여러 NLog 설정 파일에 만족하지 않다 내 경우 :이 항목 리터 같은 리팩토링 할 수 분명히

NLog.LogManager.Configuration = NlogHelper.Helper.SetNlogConfiguration(); 

:

private static string NlogXmlConfigString1() 
    { 
     return @"<nlog xmlns='http://www.nlog-project.org/schemas/NLog.xsd\' 
         xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance\'> 
        <targets> 
         <target name='logfile' xsi:type='File' fileName='${specialfolder:file=My_Logger.txt:folder=Desktop}' /> 
        </targets> 

        <rules> 
        <logger name='*' minlevel='Info' writeTo='logfile' /> 
        </rules> 
       </nlog>"; 
    } 

마지막으로, 난 그냥 관련된 클래스 생성자의 구성을 설정 필요할 경우 og 파일 이름을 매개 변수로 전달할 수 있습니다. 구성 xml은 구성이 무엇이든간에 바꿀 수 있습니다. 또한 런타임에 선택되는 여러 구성을 쉽게 지정할 수있는 가능성을 제공하는 것으로 보입니다.

코드에서 NLog 구성을보다 잘 제어 할 수 있기 때문에 마음에 듭니다.

5

ClickOnce을 사용하여 설치된 경우 NLog.config이 프로그램에 복사되지 않을 때이 문제에 대한 답을 찾았습니다.

당신은에 NLog.config 파일을 선택하셔야합니다 ProjectSolution Explorer을 사용하여 다음과 같이 그 Properties을 설정

빌드 작업 : 콘텐츠

복사 출력 디렉토리에 : 복사를 항상

이제 ClickOnce을 사용하여 배포하면 파일도 함께 복사해야합니다! :)

관련 문제