2009-02-23 1 views
20

로그 파일 이름에 날짜를 추가하려고했는데 stackoverflow에서 찾은 몇 가지 제안에 따라 작동하도록 만들 수있었습니다. 모든 것이 잘 작동하지만 어떤 이유로 든 첫 번째 파일에는 항상 날짜가 두 번 추가됩니다. 예를 들어Log4Net을 사용할 때 파일 이름에 날짜가 두 번 추가되는 이유는 무엇입니까?

, 대신 log.2009-02-23.log, 나는 log.2009-02-23.log.2009-02-23.log를 얻을.

매우 이상하고 fyi로 발견되었습니다. 이것은 매우 간단한 코드입니다. 다중 스레드 환경에서 실행되는 것과는 다릅니다.

내 log4net의 설정 :

<log4net> 
<appender name="MyLog" type="log4net.Appender.RollingFileAppender"> 
    <file value="../../Logs/Mylog"/> 
    <staticLogFileName value="false" /> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <datePattern value=".yyyy-MM-dd.lo\g" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/> 
    </layout> 
</appender> 
<root> 
    <level value="INFO"/> 
    <appender-ref ref="MyLog"/> 
</root> 
</log4net> 

어떤 아이디어 왜? .

편집 : 나는이 테스트있어 환경에 대한 정보를 추가 할
- asp.net
- .NET 프레임 워크 2.0
- 윈도우 서버 2003 64 비트 서비스 팩 2
- log4net 1.2.10

답변

5

그것은 권한 문제입니다 :이

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/> 

내가 좋아하는 파일 이름을 얻는다. 적어도 그것은 나에게 일어나는 일이다.

Log4Net을 처음 사용하면서 내부 로깅을 알지 못했지만 발견했기 때문에 internal logging을 켜 보았습니다. 나는 그것이 무엇을 말하고 있는지 잘 모르겠다. 그러나 나에게 그것이 어떻게 보이는지에 대한 것 : 1. 날짜를 파일 이름에 추가한다. 2. 쓰기 위해 파일에 액세스하십시오 (실패). 3. 파일 이름 에 날짜를 다시 입력하십시오.. 4. 파일에 성공적으로 액세스했습니다. (이상한 파일 이름이 있습니다.)

이 사실을 알기도 전에이 stackoverflow 질문에 대한 제목과 같은 키워드를 사용하여이 문제를 해결할 수있었습니다. 밖에는 그다지 정보가 없었습니다. 나는 어떤 사람들에게 일어난다 고 말한 한 사람을 찾았지만 그 이유나 해결책을 결코 설명하지 못했습니다. 이 새로운 정보 (Log4Net의 내부 오류 메시지)를 사용하여 검색 엔진과 다른 스레드를 찾고있었습니다. 그것으로 허가 문제가 될 수 있다는 힌트를 발견했습니다.

쓰기 응용 프로그램에 logs 폴더에 대한 충분한 권한이없는 것으로 보입니다. 응용 프로그램의 기본 ID는 대개 NETWORK_SERVICE입니다. 폴더에 더 많은 권한을 부여한 후에는 (폴더를 완전히 제어 할 수는 있지만 폴더를 만드는 데 필요한 최소값은 무엇인지 알지 못합니다.) 올바르게 작동합니다.

누구든지 나보다 잘 설명 할 수 있으면 언제든지 편집 해주십시오.

+0

모든 권한을 사용하여 파일에 설정된 사용 권한을 변경하고 파일의 소유권을 가져 오며 다른 모든 파일 사용 권한에 의해 허용 된 작업을 수행 할 수 있습니다 . – graffic

0

시도 <datePattern value=".yyyy-MM-dd.lo\g" /> \ g가 무엇인지 이해할 수 없습니다.

+1

datePattern 태그는 날짜와 시간 형식의 문자열을 값으로 허용합니다. "g"는 유효한 날짜 및 시간 형식 패턴 (google DateTimeFormatInfo)이므로 "탈출"하여 해석되지 않도록해야합니다. –

+0

당신이 사용하고있는 log4net의 버전과 나머지 환경 (os, .net 버전 등)에 대해 더 알려줄 수 있습니까? 나는 로그에서 g를 벗어나야하는 데 문제가 없었습니다. – olle

+0

- 윈도우 서버 2003의 x64 서비스 팩 2 - .NET 프레임 워크 2.0 - devinb 내 의견에서 찾습니다 g을 탈출하는 것에 대한 log4net 1.2.10 . –

1

olle이 지적했습니다. 당신의 문제는 log4net이 다른 dateformat으로 해석하는 '\ g'와 관련이 있습니다. 은 ".yyyy-MM-dd.lo의 \ g를"삭제하고

은 ".LOG"는 DATEFORMAT에 속하지 않는

+0

".log"를 넣지 않으면 "log.2009-02-23"과 같이 확장자가없는 파일 이름을 갖게됩니다. 즉, 날짜가 확장자입니다. IIS에서 폴더의 MIME 유형 목록에 ".log"를 추가해야하므로 브라우저에서 logs 폴더에 액세스하려고합니다. –

+0

".lo \ g"및 ".log"없이 "\"문제인지 확인해 보셨습니까? – DevinB

+0

또한 "." 처음에는 – DevinB

1

내가 사용 "YYYY-MM-DD"로 대체하십시오 다음 2009.02.23.log

+0

실제로 필요하지 않습니다. l과 o를 이스케이프 처리하지만 문제가 해결되지 않는다고 생각합니다. –

10

로그 시스템을 초기화 할 때 로그 파일에 액세스하는 데 문제가있는 경우 발생합니다. 로그 시스템을 두 번 초기화하거나, 다른 복사본이 실행 중일 때 프로그램을 실행하고 로그 파일에 쓰는 경우 또는 텍스트 편집기에서 로그 파일을 편집하는 경우에 발생할 수 있습니다. 기본적으로 log4net init이 실행될 때 로그 파일에 쓰기 잠금을 발생시키는 모든 것.

log4net init에 대한 중복 호출에 대한 코드를 확인하십시오. 예를 들어, 싱글 톤의 정적 생성자 또는 전역 init 대신 생성자에서 초기화하는 경우가 있습니다.

각기 다른 웹 서버 프로세스가 동일한 파일에 쓰기를 시도하기 때문에 '웹 가든'구성에서 실행 중이고 파일 이름에 PID를 포함하지 않은 경우에도 발생할 수 있습니다. 웹 가든을 사용하고 파일에 쓰는 경우 각 서버 프로세스가 자체 파일을 가져올 수 있도록 파일 이름 패턴에 pid를 추가하십시오.

1

동일한 문제가 발생합니다. 나에게 그것은 내 테스트 로그에 RollingFileAppender를 사용하고 ReSharper로 NUnit 테스트를 실행하는 것의 조합이었다.

그것은 ReSharper에서이 테스트를 실행 프로세스를 사용하는 것으로 나타났다 : 로그 파일에 경쟁 조건을 만들어

2 TaskRunners

합니다.

이제, 우리는 프로세스 ID를 포함하는 로그 파일의 이름을 변경하는 경우 : 문제가 해결

<appender name="MyLog" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="false"/> 
    <datePattern value="_yyyy-MM-dd'.log'"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" /> 
    </layout> 
</appender> 

합니다. PatternString

MyLog.pid.5440_2010-10-13.log
MyLog.pid.1496_2010-10-13.log

주 사용 : 각 파일은 자신의 고유 한 이름을 가져옵니다 'type'에 대해서.

희망이 있습니다.

관련 문제