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

È stato utile?

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 tuo App_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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top