Ei, eu tenho essa configuração no meu web.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
mas o log4net não está funcionando. Meu projeto é compilado e também não recebo erros de depuração. As linhas para as quais eu digo log.debug("somemessage")
ficam bem, mas não consigo encontrar o mylog.log
arquivo, então onde está?
Respostas:
Uma dica para esse tipo de coisa é certificar-se de adicionar o
XmlConfigurator
atributo ao assembly, colocando a seguinte linha no seuAssemblyInfo.cs
:Caso contrário, o log4net nunca será ativado.
fonte
AssemblyInfo
fazendo referência / carregando a montagem que contém a logo que pensou.Eu acho que o log4net não está registrando nada ou o arquivo não está terminando onde você espera.
Em primeiro lugar, você realmente ligou
em qualquer lugar do seu código? Se o trecho xml acima estiver no arquivo de configuração do aplicativo, esta chamada fará o truque. Se o snippet xml estiver em seu próprio arquivo, você precisará usar a
.Configure(string)
sobrecarga que leva ao caminho do arquivo. Sem essa chamada (ou aparentemente o atributo de nível de montagem mencionado por Kirk Woll), o log4net não estará registrando nada.Se você acredita que tudo isso foi feito, e o log4net deve estar registrando, talvez você deva colocar um caminho totalmente qualificado para o arquivo de log enquanto faz a depuração. Isso permitirá que você tenha certeza de onde o arquivo deve estar.
fonte
Há outra pequena pegadinha, veja aqui: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
o
[assembly: log4net.Config.XmlConfigurator]
método não funciona com app.config. Se você configurar o log4net a partir do app.config, deverá usar olog4net.Config.XmlConfigurator.Configure()
métodofonte
Aqui está minha lista de verificação para quando o log4net está se mostrando recalcitrante:
fonte
Para um projeto ASP.NET MVC, adicionar
para o Global.asax.cs também ajuda a:
fonte
Estas são as etapas que finalmente fizeram meu log de arquivos funcionar:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
ao seuappSettings
.fonte
Eu tive experiências em que os sistemas de log falham silenciosamente sem gerar exceções. Suponho que isso faça sentido, porque se o criador de logs está registrando erros, como pode registrar um erro que não pode executar o registro?
Portanto, se o arquivo não for criado no disco, comece examinando as permissões do sistema de arquivos para garantir que o usuário em que seu aplicativo está executando possa gravar um novo arquivo no local do disco.
Para fins de teste, convém criar manualmente o arquivo no disco que deve ser gravado e abrir permissões para que todos possam gravá-lo. Se o criador de logs começar a escrever nele, você saberá que é baseado em permissão, e não em configuração.
fonte
Do meu lado, esqueci de marcar o arquivo de configuração a ser copiado enquanto o aplicativo está sendo compilado.
Apenas clique com o botão direito do mouse no arquivo log4net.config, selecione a propriedade e escolha Copiar no diretório de saída para ser a cópia XXXX
fonte
Eu tentei todas as opções acima, mas nada funcionou. Adicionar esta linha na seção app.config
configSections
funcionou para mim.Verifique se
Version
ePublicKeyToken
está corretofonte
está dizendo "escreva mylog.log na pasta atual". Isso significa que, se o seu aplicativo da web estiver no IIS, o log será gravado em C: \ inetpub \ wwwroot \ appname \ mylog.log.
Se o arquivo de log não estiver lá, talvez a conta na qual o aplicativo esteja em execução não tenha permissão de gravação na pasta. Você pode executar o Process Monitor a partir do SysInternals para ver se e onde um arquivo está gravado.
Execute também o VS no modo de depuração, para ver se alguma exceção é lançada (Debug-> Exceptions-> CLR Exceptions, marque Thrown).
fonte
No meu caso, esqueço de definir as propriedades do arquivo log4Net.config como "Conteúdo" para que o arquivo não seja incluído na implantação. Então preste atenção:
fonte
Infelizmente, nenhuma das opções acima ajudou. A configuração explícita na classe a ser registrada adicionalmente às sugestões de configurações anteriores fez o truque para mim.
fonte
Também depois de algumas horas, eu descobri por que não estava funcionando para mim ...
eu tinha:
mas deve ser:
Portanto, verifique se o ILog está na primeira linha ....
fonte