Sto lavorando con una soluzione su Visual Studio 2008, .net framework 3.5, windows 7. Ho creato una libreria log4net che scrive su un file txt e voglio usarla su diversi progetti sulla mia soluzione e anche su un servizio wcf che si trova nella stessa soluzione che viene eseguita localmente da Visual Studio.Come configurare log4net in modo che funzioni su un servizio wcf?
Avvio il programma da un'applicazione console sulla soluzione. E l'app per console chiama gli altri progetti e quei progetti usano log4net. A questo livello nel flusso di lavoro il registro sta scrivendo bene. Il problema arriva quando viene chiamato il servizio wcf. Il servizio wcf utilizza il registro, ma log4net non scrive sul file.
Sul progetto di console ho questa:
Sulle AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Sulla App.config devo la configurazione log4net.
Su Program.cs, sul metodo principale che ho:
LogManager.GetLogger("Initialise log4net from the current assembly attributes");
sul servizio WCF ho questo:
lo stesso sul AssemblyInfo.cs come il progetto di console.
Lo stesso su Web.config come App.config sul progetto della console.
Al costruttore della Service1.svc ho:
LogManager.GetLogger("Initialise log4net from the current assembly attributes");
Ecco come il mio App.config e Web.Config LOOS come:
all'interno del tag configSections:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
e all'interno del tag di configurazione principale:
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="C:\test3.txt"/>
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
</log4net>
Come posso risolvere questo?
ho mai riuscito a ottenere i miei servizi WCF di utilizzare il montaggio attributi, alla fine ho rinunciato e ho usato 'XmlConfigurator.ConfigureAndWatch (...) ' – stuartd
@stuartd Stai dicendo che dovrei rimuovere la parte log4net sul web.config del servizio e lasciare la parte su AssemblyInfo.cs sul servizio. Ho fatto questo cambiamento ma il servizio non scrive ancora nel file. – pyram
No, non sono mai riuscito a caricare i servizi WCF per caricare log4net tramite gli attributi dell'assieme, quindi ho utilizzato XmlConfigurator per configurare la registrazione. Non ci ho dedicato troppo tempo perché volevo che il logging funzionasse e andassi avanti. 'LogManager.GetRepository(). Configured' restituisce true dopo la chiamata a GetLogger? – stuartd