파일 이름에 날짜가있는 Log4net 롤링 일일 파일 이름


답변:


103

Log4net 구성 파일에서 RollingFileAppender와 함께 다음 매개 변수를 사용합니다.

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

28
구성 요소로 승격 된 것 같습니다 : <datePattern value = "dd.MM.yyyy'.log '"/> 건배!
longda

3
@mstaessen <preserveLogFileNameExtension value="true" />은 올바른 구문이며 이것은 훌륭한 대답입니다. 어떻게 손실이 발생했는지 물어봐도 될까요?
Larry B

1
제대로 기억하면 이렇게됐다. 시작시 log4net은 롤링 시퀀스에서 첫 번째 파일 이름을 생성합니다. 해당 파일이 이미 존재하는 것을 감지 한 다음 두 번째 파일로 롤링하기로 결정하지만 해당 파일도 이미 존재하면 롤링하기로 결정하지 않고 대신 해당 파일을 지우고 해당 두 번째 로그 파일의 모든 것을 덮어 씁니다. 그것은 ... 당신은 허가 기간의 로그를 필요로 할 때까지 완전히인지하지 못하고 간다
mstaessen

207
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <file value="logs\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>

@Mun이 한 것처럼 문제를 해결하기 위해 어떤 매개 변수의 요점을 강조해야한다고 생각합니다. 그러나 나는 또한 당신의 대답에 투표했습니다.
RDeveloper

1
저에게 효과가 있었던 것은 staticLogFileName 요소 (및 파일 요소의 값 속성에주의)와 함께 datePattern 요소
였습니다

완전한 대답!
Nagesh

32

RollingLogFileAppender의 경우 다음 요소와 값도 필요합니다.

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
이것은 작동하지만 파일 확장자 뒤에 날짜를 추가합니다. 예를 들어 Error.log20111104와 같은 로그 파일을 얻습니다. 누구든지 파일 이름을 좀 더 잘 포맷하는 방법을 알고 있습니까?
LostNomad311 2011

파일 이름을 더 잘 포맷하는 방법은 다음과 같습니다. stackoverflow.com/questions/615092/…
LostNomad311

staticLogFileName은 무엇에 사용됩니까? 하루가 끝나면 로그 파일이 새 이름으로 롤링되기를 원합니다. 매번 특정 항목을 보는 로그 모니터를 사용하고 싶습니다.

22

Log4Net 1.2.13을 사용하면 다음 구성 설정을 사용하여 파일 이름에 날짜 시간을 허용합니다.

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

다음 규칙에 따라 파일을 제공합니다. logname-2015-04-17.txt

이를 통해 일반적으로 하루에 1 개의 로그를 보유하고 있는지 확인하기 위해 다음을 갖는 것이 가장 좋습니다.

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

파일 크기가 문제가되는 경우 다음은 새 날이 생성 될 때까지 5MB 크기의 500 개 파일을 허용합니다. CountDirection 은 더 이상 최신이 아닌 파일의 오름차순 또는 내림차순 번호 매기기를 허용합니다.

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />

18

나는 ( '.log'파일 이름과 'myfilename_'주위의 작은 따옴표에주의하십시오) :

  <rollingStyle value="Date" />
  <datePattern value="'myfilename_'yyyy-MM-dd"/>
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />
  <file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />

이것은 나에게 준다 :

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.

preserveLogFileNameExtension여기에
Dmitry Karpenko 2018

13

나는 모든 대답을 시도했지만 항상 무언가가 누락되어 예상대로 작동하지 않았습니다.

그런 다음 각 답변에 제공된 힌트를 약간 실험했으며 다음 설정으로 성공했습니다.

<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <preserveLogFileNameExtension value="true" />
  <datePattern value="-yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>

다른 매개 변수 조합의 문제는 최신 파일에 시간 패턴이 없거나 시간 패턴이 추가되어 매일 .log20171215새 파일 시간 (및 새 파일 유형! )을 생성했거나 두 가지 문제가 모두 나타납니다.

이제이 설정을 사용하면 다음과 같은 파일을 얻게됩니다.

LOG4NET_Sample_Activity-20171215.log

내가 원했던 것입니다.


요약:

  • <file value=...속성에 날짜 패턴을 넣지 말고 datePattern.

  • preserveLogFileNameExtension 속성이로 설정되어 있는지 확인하십시오 true.

  • staticLogFileName 값이로 설정되어 있는지 확인하십시오 false.

  • rollingStyle속성 을로 설정하십시오 Date.


또한 rollingStyle을 날짜와 크기 모두에 적용되는 Composite로 설정할 수 있습니다.
Simon Tewsi

1
잘 작동합니다. 또한 요약에 추가 할 것입니다. staticLogFileName 값이 false로 설정되어 있는지 확인하십시오.
Randall Flagg

5

파일 확장자를 유지하려면 :

<log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maximumFileSize value="30MB" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true"/>
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>

왜 거기에 %date{yyyyMM}value="ddMMyyyy" ? 유효 날짜 패턴은 무엇입니까?
Allan Ruin

datePattern은 파일 이름이지만 % date {yyyyMM}은 상위 디렉토리 용이라고 생각합니다 (그렇게 원했습니다)
Fourat

datePattern 속성은 Date rollingStyle의 롤링 기간을 설정합니다. RollingFileAppender 아래의 logging.apache.org/log4net/release/config-examples.html 을 참조하십시오 . "예를 들어"yyyyMMdd "의 날짜 패턴은 매일 롤링됩니다. 사용 가능한 패턴 목록은 System.Globalization.DateTimeFormatInfo를 참조하십시오."
Ryan Buddicom

@rbuddicom 네, 문제는 파일 확장자를 보존하는 방법에 관한 것입니다.
Fourat

Allan은 'value = "ddMMyyyy"'의 목적에 의문을 제기했습니다. 당신의 코멘트 "나는 datePattern이 파일 이름에 대한 것 같다"는 점에서 올바르지 않습니다.
Ryan Buddicom

0

이전 응답의 확장 구성 섹션

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

작품을 나열했지만 사용할 필요가 없었습니다.

<staticLogFileName value="false" /> 

. RollingAppender는 정의에 따라 응용 프로그램이 다시 시작 / 재사용 될 때 파일이 매일 다시 작성되기 때문에 (논리적으로) 해당 설정을 무시해야한다고 생각합니다. 응용 프로그램이 시작될 때마다 즉각적인 롤오버가 중요 할 수 있습니다.


나를 위해, 그것은 것없이없는 일 <staticLogFileName 값 = "거짓"/>
nurettin

나뿐만 아니라, false로 staticLogFileName을 설정했다 그렇지 않으면 로그인 할 것
oonyalo

0

시스템 변수를 사용하여 CI에서 쉽게 수정할 수 있도록 구성을 코드로 이동했습니다. 이 코드를 파일 이름으로 사용했으며 결과는 'Log_03-23-2020.log'입니다.

            log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            Hierarchy hierarchy = (Hierarchy)repository;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = true;
            roller.File = "Log_";
            roller.DatePattern = "MM-dd-yyyy'.log'";
            roller.Layout = patternLayout;
            roller.MaxFileSize = 1024*1024*10;
            roller.MaxSizeRollBackups = 10;
            roller.StaticLogFileName = false;
            roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.