Respostas:
No seu arquivo de configuração Log4net, use o seguinte parâmetro com o RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
é a sintaxe correta e esta é uma ótima resposta. Como ocorreu a perda, posso perguntar?
<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>
Para um RollingLogFileAppender, você também precisa desses elementos e valores:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
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" />
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
.
.
preserveLogFileNameExtension
não funciona para versões anteriores do log4net (por exemplo v1.2.10) como é descrito aqui
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 .log20171215
que 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 rollingStyle
atributo como .Date
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>
%date{yyyyMM}
e value="ddMMyyyy"
? qual é o padrão de data efetivo?
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.
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);