Come configurare log4net per un servizio Windows c #
-
05-07-2019 - |
Domanda
Ho un servizio Windows in cui il file app.config e i file log4net.config sono separati. La registrazione non funziona.
Nel mio file app.config, nella sezione ho quanto segue:
<add key="log4net.Config" value="log4net.config"/>
Funziona se nel valore specifico un percorso assoluto per il file log4net.config.
Devo fornire un percorso assoluto a log4net.cong? Sia il file log4net.config che il file app.config si trovano nella stessa cartella dell'eseguibile.
qualche idea?
Parag
Soluzione
Forse questo è utile ( Spostare la configurazione di Log4Net da web.config con siti Web ASP.NET 2.0 .).
Ecco le parti che potrebbero interessarti:
Indica all'applicazione di configurare log4net utilizzando questo file di configurazione. Là sono davvero due punti per questo. Primo, the global.asax e secondo il file assemblyInfo.cs. Nota che la maggior parte del tempo che inizierai con a file global.asax con tutto il codice in linea. Per qualsiasi motivo, l'unico il modo in cui ho potuto farlo funzionare era rompere global.asax per usare a code-behind e poi ass file assemblyInfo.cs. Quindi finisce simile a questo.
global.asax: <% @ Application Language = " C # " Inherits = quot &; & GlobalAsax quot; % Gt &; global.asax.cs (nella cartella App_Code):
using System;
using System.Web;
public class GlobalAsax : HttpApplication
{
// you may have lots of other code here
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
}
Ora che hai la tua applicazione chiamando la configurazione di log4net, tu può impostare un attributo nel tuo assembly informazioni in modo che log4net sappia dove cerca il file di configurazione.
AssemblyInfo.cs
(nel tuoApp_Code
cartella):
[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Il flag watch indica a log4net di mantenere un occhio al file di configurazione per potenziali cambiamenti. Questo è utile se vuoi cambiare la configurazione dalla registrazione di tutto agli errori durante il test.
Per assicurarsi che log4net.config
sia sempre presente, aggiungi log4net.config al progetto cs e impostalo su CopyAlways
. Dovrebbe essere presentato nella cartella di debug.
È possibile utilizzare uno script per copiare tutto in una cartella di rilascio oppure, se si utilizza un progetto di installazione di MS, aggiungere manualmente quel file nel progetto. Verrà quindi aggiunto un riferimento.
Altri suggerimenti
Per il servizio Windows la directory corrente è Windows \ system32 - e XmlConfigurator.Configure () utilizza FileInfo che tratta i percorsi relativi relativi alla directory corrente. Quindi log4net sta cercando il suo file di configurazione in Windows \ system32.
XmlConfiguratorAttribute utilizza invece la BaseDirectory dell'applicazione, ecco perché funziona sempre.
In alternativa, puoi fare quanto segue prima di chiamare XmlConfigurator.Configure ():
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);