Jump to content

[Resolvido] log4net em DLL não detecta configuração e lança erro "log4net:ERROR XmlConfigurator"


Recommended Posts

Posted (edited)

Boas,

Estou a usar uma biblioteca que faz uso da log4net e não a consigo configurar, sempre que executo a minha aplicação tenho a clássica mensagem:

log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file.
Check your .config file for the <log4net> and <configSections> elements. The configuration section should look like:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

Eu não preciso dos logs e para piorar a aplicação que estou a fazer é uma aplicação de consola e todo o output é usado para fazer PIPE com outras aplicações, não posso ter mensagens de erro do log4net a aparecer no stdout. Alguma sugestão para resolver este problema?

Pelas pesquisas que fiz é suposto existir um ficheiro com o nome da aplicação que estou a fazer e com extensão .config, no meu caso tenha o ficheiro existia com o nome App.config. Adicionei as secções de configuração antes de mudar o nome e depois de mudar o nome mas não resolveu o problema:

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

Estou sem ideias 😞

Edited by apocsantos
Posted

O problema é saber exactamente onde ele está a ir buscar a configuração.

Se ao ficheiro por defeito da configuração, se a um ficheiro próprio (também é possível configurar isso).

Partindo do princípio que é ao ficheiro por defeito, vê se não tens (correr a aplicação), um ficheiro com o nome da aplicação.exe.config.

Por defeito é aqui que a tua aplicação vai buscar essa configuração.

Para te dar um exemplo da configuração:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<!-- Define some output appenders -->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
 <file value="log-file.txt" />
 <appendToFile value="true" />
 <layout type="log4net.Layout.PatternLayout">
 <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
 </layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
 <layout type="log4net.Layout.PatternLayout">
 <conversionPattern value="%date [%thread] %-5level %logger [%ndc] ID=%property{EventID} - %message%newline" />
 </layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
 <level value="FATAL" />
 <appender-ref ref="FileAppender" />
</root>
</log4net>
<startup>
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

Esta configuração apenas te usa o ficheiro de log em caso de erros fatais, ficando tudo o resto silenciado. Se funcionar, podes tentar brincar com isso, como, por exemplo, retirar tudo de dentro do elemento root, que poderá desactivar o log num todo. Se quiseres também podes mudar o level para All, para veres se a tua alteração está a funcionar, e depois tentares desligar todo e qualquer log.

Posted (edited)

Nada feito. O projecto chama-se DNIReader, antes tinha um ficheiro chamado App.config, que alterei para DNIReader.config, este é o ficheiro de configuração da aplicação onde tenho essas configurações.

Será que devia ter um ficheiro chamado DNIReader.exe.config? Criei o projecto como uma C# Console Application no VS 2012 e esse ficheiro nunca existiu.

Edit:

Ahh! Problema resolvido, falha entre a cadeira e o teclado 🙂

Inicialmente o ficheiro de config estava mal, pelas pesquisas onde diziam que devia existir um ficheiro com <nome da app>.config alterei o nome do meu App.config para DNIReader.config, afinal, App.config era o nome certo.

Obrigado.

E esqueci-me de colocar aqui a solução, caso alguém venha a passar pelo mesmo problema, este é o conteúdo do meu ficheiro App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net treshold="OFF" />
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

Notem que o elemento configSections tem de ser o primeiro, e que no meu caso estou a desligar todos os logs.

Edited by apocsantos

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.