2010-10-30 8 views
5

Je configuration log4net avec:log4net attend jusqu'à ce que le recyclage du pool d'application avant de vous connecter à mssql2008 base de données

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "../ProjectName/Log4Net.config", Watch = true)] 

J'ai 2 appenders configurés: 1. Une journalisation AdoNetAppender à une table de journal sur une base de données mssql2008. 2. Un FileAppender qui ressemble à ceci:

<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file value="c:\log-file.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
    </layout> 
</appender> 

Le problème est que lorsqu'une action se connecté, il apparaît immédiatement dans le journal de file.txt. Il n'apparaît pas comme une entrée dans la base de données tant que je n'ai pas fait iisreset, recompilé le code Web ou recyclé le pool d'applications.

La configuration semble correcte car l'action est finalement enregistrée dans la base de données. Je ne comprends tout simplement pas pourquoi le retard.

Quelqu'un peut-il me donner une raison ou me dire comment y remédier?

Répondre

8

AdoNetAppender est un appender tamponné. Si vous voulez écrire directement dans la base de données, vous devez définir la taille de la mémoire tampon à 1:

<bufferSize value="1" /> 
+0

Merci pour ^^ CETTE réponse Stefan, très apprécié. –

+0

Bonne réponse. Je n'avais que des journaux sur ma table toutes les quelques minutes ou lorsque je recyclais le pool d'applications IIS. Je ne pouvais pas comprendre jusqu'à ce que j'ai vu ce post sur la taille de la mémoire tampon .. fait sens. Merci Stefan – barneymc