Log4Net을 사용할 때 날짜가 파일 이름에 두 번 추가되는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/579688

  •  06-09-2019
  •  | 
  •  

문제

로그 파일 이름에 날짜를 추가하려고했는데 StackoverFlow에서 찾은 몇 가지 제안을 따라 작동 할 수있었습니다. 모든 것이 잘 작동하지만 어떤 이유로 든 첫 번째 파일에는 항상 날짜가 두 번 추가되었습니다.

예를 들어, 대신 로그 .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
-Windows Server 2003 64 비트 서비스 팩 2
-rog4net 1.2.10

도움이 되었습니까?

해결책 2

허가 문제입니다. 적어도 그게 나에게 일어나는 일입니다.

나는 log4net을 사용하는 것이 새롭기 때문에 내부 로깅이 있다는 것을 몰랐지만 그것을 찾아서 회전하려고했습니다. 내부 벌목 에. 나는 그것이 무슨 말을하는지 잘 못했지만 여기에 그것이하는 일이 있습니다. 1. 파일 이름으로 날짜를 추가하십시오. 2. 파일에 액세스하여 쓸 수 있습니다 (실패). 3. 날짜를 파일 이름으로 추가하십시오 다시. 4. 파일에 성공적으로 액세스하십시오 (현재 이상한 파일 이름이있는)

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

쓰기 응용 프로그램은 로그 폴더에 충분한 권한이없는 것 같습니다. 응용 프로그램의 기본 ID는 일반적으로 Network_Service입니다. 더 많은 권한을 부여한 후 (완전히 제어했지만 최소가 무엇인지 모르겠습니다) 폴더에 대해서는 잘 작동합니다.

누군가 나보다 이것을 더 잘 설명 할 수 있다면 자유롭게 편집하십시오.

다른 팁

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

Log4net Init 로의 중복 호출 코드를 확인하십시오. 예를 들어 싱글 톤의 정적 생성자 또는 글로벌 init 대신 생성자에서 초기화 할 수 있습니다.

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

나는 같은 문제가 발생합니다. 저에게는 테스트 로그에 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>

문제가 해결되었습니다. 각 파일은 고유 한 이름을 얻습니다.

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

사용에 유의하십시오 패턴 스트링 '타입'용.

도움이되기를 바랍니다.

올리가 지적한대로. 귀하의 문제는 ' g'와 관련이 있으며 로그4net이 다른 날짜 형식으로 해석하는 것입니다. ".yyyy-mm-dd.lo g"를 삭제하고 "yyyy-mm-dd"로 교체 해보십시오.

".log"는 dateformat에 속하지 않습니다

다음을 사용합니다.

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

이것으로 나는 2009.02.23.log와 같은 파일 이름을 얻습니다

노력하다 <datePattern value=".yyyy-MM-dd.lo\g" /> 나는 g가 무엇인지 이해하지 못한다.

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