Log4net rolando o nome do arquivo diário com data no nome do arquivo

Respostas:

102

No seu arquivo de configuração Log4net, use o seguinte parâmetro com o RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />
Mun
fonte
27
Parece que isso foi promovido para um elemento de configuração: <datePattern value = "dd.MM.aaa'.log '" /> Cheers!
Longda
3
@mstaessen <preserveLogFileNameExtension value="true" />é a sintaxe correta e esta é uma ótima resposta. Como ocorreu a perda, posso perguntar?
Larry B
1
Se bem me lembro, foi assim. Na inicialização, o log4net geraria o primeiro nome do arquivo na seqüência contínua. Ele detectaria que esse arquivo já existe e decidiria rolar para o segundo arquivo, mas quando esse também já existir, ele não decide rolar, mas o limpa e substitui tudo nesse segundo arquivo de log. Passa totalmente despercebido até que você precise de logs do período de tempo limpo ...
mstaessen
206
<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>
Nonkichi
fonte
Eu acho que você deve destacar o ponto principal de qual parâmetro resolver o problema como o @Mun fez. No entanto, também votei na sua resposta.
RDeveloper 24/02
1
Foi o elemento datePattern, em conjunto com o elemento staticLogFileName (e observe o atributo de valor para o elemento de arquivo) que funcionou para mim
Michhes
A resposta completa!
Nagesh 25/06
32

Para um RollingLogFileAppender, você também precisa desses elementos e valores:

<rollingStyle value="Date" />
<staticLogFileName value="false" />
BobD
fonte
3
Isso funciona, mas acrescenta a data após a extensão do arquivo. Por exemplo, recebo arquivos de log como Error.log20111104 - Alguém sabe como formatar o nome do arquivo um pouco melhor?
precisa saber é o seguinte
Veja como formatar o nome do arquivo melhor: stackoverflow.com/questions/615092/...
LostNomad311
para que o staticLogFileName é usado? Eu só quero que o arquivo de log seja convertido em um novo nome depois que o dia terminar. Quero usar um monitor de log que analise um específico a cada vez.
Sun
21

Usando o Log4Net 1.2.13, usamos as seguintes definições de configuração para permitir data e hora no nome do arquivo.

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

O que fornecerá arquivos na seguinte convenção: logname-2015-04-17.txt

Com isso, geralmente é melhor ter o seguinte para garantir que você esteja mantendo um log por dia.

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

Se o tamanho do arquivo for uma preocupação, o seguinte permitirá 500 arquivos de 5 MB até que um novo dia comece. CountDirection permite numeração crescente ou decrescente de arquivos que não são mais atuais.

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

Acabei usando (observe o nome do arquivo '.log' e as aspas simples em torno de '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" />

Isso me dá:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
Njal
fonte
preserveLogFileNameExtensionnão funciona para versões anteriores do log4net (por exemplo v1.2.10) como é descrito aqui
Dmitry Karpenko
13

Eu tentei todas as respostas, mas sempre havia algo faltando e não funcionando como esperado para mim.

Depois, experimentei um pouco as dicas fornecidas em cada resposta e obtive sucesso com a seguinte configuração:

<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>

O problema com outras combinações de parâmetros era que o arquivo mais recente não tinha o padrão de hora ou que o padrão de hora foi anexado, o .log20171215que criou uma nova hora de arquivo (e um novo tipo de arquivo! ) Todos os dias - ou os dois problemas apareciam.

Agora, com essa configuração, você está obtendo arquivos como este:

LOG4NET_Sample_Activity-20171215.log

o que eu queria.


Para resumir:

  • Não coloque o padrão de data no <file value=...atributo, apenas defina-o no datePattern.

  • Verifique se você tem o preserveLogFileNameExtension atributo value definido como true.

  • Verifique se você tem o staticLogFileName valor definido como false.

  • Defina o valor do rollingStyleatributo como .Date

Matt
fonte
Você também pode definir rollingStyle como Composite, que rola na data e no tamanho.
Simon Tewsi 02/11/19
1
Funciona bem. Gostaria de acrescentar também na resumir: Certifique-se de que você tem o conjunto valor staticLogFileName para false
Randall Flagg
5

Para preservar a extensão do arquivo:

<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>
Fourat
fonte
por que existem %date{yyyyMM}e value="ddMMyyyy" ? qual é o padrão de data efetivo?
Allan Ruin
Acho datePattern é para o nome do arquivo, mas% date {YYYYMM} é para o diretório pai (eu queria que fosse assim)
Fourat
O atributo datePattern define o período de rolagem para Date rollingStyle. Consulte logging.apache.org/log4net/release/config-examples.html em RollingFileAppender. "Por exemplo, um padrão de data de" aaaamMMdd "rolará todos os dias. Consulte System.Globalization.DateTimeFormatInfo para obter uma lista dos padrões disponíveis."
Ryan Buddicom
@rbuddicom sim, mas a questão é sobre como preservar a extensão do arquivo.
Fourat
Eu sei, Allan questionou o propósito de 'value = "ddMMyyyy"'. O seu comentário "Acho que datePattern é para o nome do arquivo" está incorreto nesse sentido.
Ryan Buddicom
0

A seção de configuração estendida em uma resposta anterior com

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

trabalhos listados, mas não precisei usar

<staticLogFileName value="false" /> 

. Eu acho que o RollingAppender deve (logicamente) ignorar essa configuração, pois, por definição, o arquivo é reconstruído todos os dias quando o aplicativo é reiniciado / reutilizado. Talvez isso importe para substituição imediata TODAS as vezes o aplicativo é iniciado.

AllenM
fonte
Para mim, isso não funcionaria sem a <valor staticLogFileName = "false" />
nurettin
me bem, tinha que definir staticLogFileName para false de outra forma não seria log
oonyalo
0

Mudei a configuração para o código para facilitar a modificação do CI usando a variável de sistema. Usei esse código para o nome do arquivo e o resultado é '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);
Parag Bangad
fonte