2011-08-16 4 views
5

Ho un'applicazione console con log4net e vorrei aggiungere il nome del file di log dal codice. (Uso thread in seguito)log4net log4net.Util.PatternString configure dal codice

class Program 
{ 
    static void Main(string[] args) 
    { 
     { 
      log4net.GlobalContext.Properties["fname"] = "aaaa"; 
      log4net.Config.XmlConfigurator.Configure(); 
     } 
    } 
} 

<appender name="default" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="d:\\TEMP\\default_%property{fname}.log"/> 
... 
</appender> 

E ottengo (null).

Grazie per il vostro aiuto.

+0

avendo lo stesso problema qui - qualsiasi soluzione ancora? –

+0

Che cos'è null? Per favore ... –

+0

@Love Indica che il percorso termina con 'd: \ TEMP \ default_ (null) .log'. Sto anche avendo questo problema con log4net v1.2.13. –

risposta

0

Funziona per me - che ho usato log4net 1.2.11 seguito è la configurazione di esempio che sto utilizzando (io ho usato lo stesso codice C# come il vostro):

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 

    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file type="log4net.Util.PatternString" value="default_%property{fname}.log"/> 
     <appendToFile value="true"/> 
     <rollingStyle value="Size"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="100KB"/> 
     <staticLogFileName value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
     </layout> 
    </appender> 

    <root> 
     <priority value="ALL"/> 
     <appender-ref ref="RollingFileAppender"/> 
    </root> 

    </log4net> 
</configuration> 
+0

non ha funzionato per me, ho la versione 1.2.13.0 –

0

Questo dovrebbe funzionare

Ho usato log4net 1.2.13.0. Una cosa che dovresti considerare è l'aggiunta di un debug interno per log4net che ti dirà l'errore reale.

class Program 
    { 
     private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     static void Main(string[] args) 
     { 
      log4net.GlobalContext.Properties["fname"] = "aaaa"; 

      log4net.Config.XmlConfigurator.Configure(); 
      log.Debug("Test"); 
     } 
    } 

sezione Config

<configuration>  
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
    <log4net debug="true"> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file type="log4net.Util.PatternString" value="D:\default_%property{fname}.log"/> 
     <appendToFile value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> 
     </layout> 
    </appender>  
    <root> 
     <priority value="ALL"/> 
     <appender-ref ref="RollingFileAppender"/> 
    </root>  
    </log4net> 
    <system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add 
      name="textWriterTraceListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="E:\USERS\vivek.meka\Documents\Visual Studio 2015\Projects\log4net.txt" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
</configuration>