Estamos usando log4net e queremos especificar sua configuração em um arquivo de configuração externo (como fizemos com outras seções). Para fazer isso, alteramos a seção log4net no App.config para:
...
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...
E no arquivo Log.Config (mesmo diretório do App.config) temos:
<log4net>
<appender name="General" type="log4net.Appender.FileAppender">
<file value="myapp.log" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<appender-ref ref="General" />
</root>
</log4net>
No entanto, quando executamos o aplicativo, nenhum arquivo de log é criado (e nenhum registro é feito). Não há saída de mensagens de erro para o console.
Se movermos o conteúdo do arquivo Log.config de volta para o App.config (substituindo a primeira linha de código acima), ele funcionará conforme o esperado. Alguma ideia de porque não está funcionando em um arquivo externo?
Respostas:
Você tem o seguinte atributo em seu
AssemblyInfo.cs
arquivo:e código como este no início de cada classe que requer funcionalidade de registro:
Eu tenho uma postagem no blog contendo essas e outras informações aqui .
fonte
Há um defeito aberto neste problema. Log4Net não suporta o atributo configSource de elementos de configuração. Para usar uma solução de arquivo de configuração puramente, você usa a chave log4net.Config em appSettings.
Etapa 1: inclua a definição da seção de configuração normal:
Etapa 2: Use a chave mágica log4net.Config em appSettings.
Etapa 3: contribuir com um patch para corrigir o manuseio do configSource.
fonte
A etapa que foi perdida é
isso fará com que o configSource seja usado. Certifique-se de chamá-lo uma vez antes de chamar GetLogger ();
fonte
Certifique-se de que seu arquivo log4net.config esteja definido com as seguintes propriedades:
Criar ação: conteúdo
Copiar para o diretório de saída: Copiar sempre
fonte
Ou use,
ou apenas,
Em ambos os casos, o arquivo, Log4Net.config, deve estar lá no diretório de saída. Você pode fazer isso definindo as propriedades do arquivo Log4Net.config no Solution Explorer. Build Action - Conteúdo e Copiar para o Diretório de Saída - Copiar sempre
fonte
Cuidado com este problema ...
No meu caso tudo foi configurado corretamente. O problema é que usei o Web Deploy dentro do Visual Studio 2013 para carregar o site para WinHost.com e ele redefiniu as ACLs no servidor. Isso, por sua vez, revogou todas as permissões em pastas e arquivos - log4net não pôde gravar o arquivo.
Você pode ler mais sobre isso aqui:
Como impedir que o Web Deploy / MSBuild atrapalhe as permissões do servidor
Pedi à equipe de suporte local para redefinir as ACLs e então o log4net começou a cuspir logs. :)
fonte
Supondo que você tenha um arquivo de configuração externo chamado log4net.config que é copiado para o diretório de implantação, você pode configurá-lo da seguinte forma:
fonte
Tive o mesmo problema, além de ter
no projeto em execução, também tive a seguinte linha em um projeto de referência:
Ao remover esta linha nos projetos referenciados, os logs começam a aparecer.
fonte
Também é possível ativar o modo de depuração para
log4net
. Insira isso no arquivo App.config:e você pelo menos obterá mensagens de erro, das quais poderá derivar o que exatamente deu errado. No meu caso, simplesmente esqueci de definir
Copy to output directory
comoCopy Always
.fonte
@Mitch, Acontece que existe um arquivo com a declaração [assembly: ...], mas não tinha a propriedade ConfigFile.
Depois de adicioná-lo e apontá-lo para Log.config, ele começou a funcionar. Eu teria pensado que funcionaria como todas as outras seções de configuração (ou seja, AppSettings) e aceitaria arquivos de configuração externos sem modificação.
Não temos a segunda instrução que você mencionou, pois a envolvemos em um provedor de log estático global.
fonte
No meu caso, recebi esta mensagem de erro:
E
log4net.config
o arquivo estava no projeto Visual Studio 2017, mas quando verifiquei o arquivo nabin\Debug
pasta não consegui encontrar.Minha configuração de montagem original era assim:
Depois de algum tempo de pesquisa, mudo para o seguinte e funciona:
fonte
[assembly: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.config")]
altere Copiar para diretório de saída para copiar se mais recente
fonte
Também vale a pena apontar que em um aplicativo da web ele procura no diretório raiz, não na pasta bin, então certifique-se de que é onde você colocou o arquivo de configuração.
fonte