ti-enxame.com

Log4net não grava o arquivo de log

Eu criei um cenário simples usando Log4net, mas parece que meus appenders não funcionam porque as mensagens não são adicionadas ao arquivo de log.

Eu adicionei o seguinte ao arquivo web.config:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>        
</configSections>

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\MyData\Desktop\LogFile.txt" />
            <appendToFile value="true" />
            <encoding value="utf-8" />
            <layout type="log4net.Layout.SimpleLayout" />
    </appender>


    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
    </root>
</log4net>

Dentro do arquivo ASAX global eu adicionei:

ILog logger = LogManager.GetLogger(typeof(MvcApplication));

e dentro do método Application_Start:

logger.Info("Starting the application...");

O que eu fiz errado?

147
john84

Você ligou

log4net.Config.XmlConfigurator.Configure();

algum lugar para fazer log4net ler sua configuração? Por exemplo. em Global.asax:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}
294
Andreas Paulsson

Use esta FAQ página: Perguntas freqüentes sobre o log4net do Apache

Cerca de 3/4 do caminho abaixo informa como habilitar a depuração do log4net usando o rastreamento de aplicativos. Isto lhe dirá onde está o seu problema.

O básico é:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

E você vê o traço na saída padrão

45
bechbd

Como sugeriu @AndreasPaulsson, precisamos configurá-lo. Eu estou fazendo a configuração no arquivo AssemblyInfo. Eu especifico o configuration file name aqui.

// Log4Net Configuration.
[Assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
32
Lijo

Além disso, verifique se a opção "Copiar sempre" está selecionada para [log4net] .config como este cenário:

enter image description here

25
kokabi

Certifique-se de que o processo (conta) em que o site está sendo executado tenha privilégios para gravar no diretório de saída.

Em IIS 7 e acima isso é configurado no pool de aplicativos e normalmente é o AppPool Identity , que normalmente não terá permissão para gravar em todos os diretórios.

Verifique seus logs de eventos (aplicativo e segurança) para ver se alguma exceção foi lançada.

22
Oded

Inserir:

 [Assembly: log4net.Config.XmlConfigurator(Watch = true)]

no final do arquivo AssemblyInfo.cs

18
shay

No meu caso, o log4net não estava registrando corretamente devido a ter um espaço no nome do meu projeto. Me deixou louco porque o mesmo código funcionou muito bem em um projeto diferente, mas não no novo. Espaços Um espaço simples.

Portanto, tenha cuidado com espaços em nomes de projetos. Eu aprendi minha lição.

1
zanussi

Para mim eu mudei a localização dos arquivos de log e foi só quando eu mudei o nome do arquivo para outra coisa que começou novamente.

Parece que se existe um logfile com o mesmo nome já existente, nada acontece.

Depois eu renomeio o arquivo antigo e mudei o nome do arquivo de log na configuração de volta para o que era.

1
kernowcode