2014-06-20 17 views
6

Stiamo impostando le proprietà di log4net ma non vengono visualizzate nel file di registro emesso da log4net.ext.json.proprietà personalizzate di log4net.Ext.Json non visualizzate in json

log4net.GlobalContext.Properties["OurCompany.ApplicationName"] ="fubar"; 

Tuttavia, il nostro registro non include questi utilizzando le configurazioni predefinite specificate nel wiki. Sto sbagliando?

nostra configurazione log4net si presenta così:

<log4net debug="false"> 
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString"> 
     <conversionPattern value="%env{MY_LOG_DIR}\%property{OurCompany.ApplicationName}\%property{OurCompany.ApplicationName}_%date{yyyy-MM-dd}.log" /> 
    </file> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json"> 
     <decorator type='log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json' /> 
     <default /> 
     <!--explicit default members--> 
     <remove value='message' /> 
     <!--remove the default preformatted message member--> 
     <member value='message:messageobject' /> 
     <!--add raw message--> 
    </layout> 
    </appender> 
    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="FileAppender" /> 
    </root> 
</log4net> 

ottengo i campi standard (ed è gloriosamente consumato da Splunk), ma non quelli personalizzati. Eventuali suggerimenti?

risposta

4

È stato risolto per un po 'ma non è stato rilasciato. C'è stato un problema con la lettura delle proprietà dall'evento. E 'fissato nella revisione 26. Si prega di provare la nuova release 20.140.623-https://sourceforge.net/projects/log4net-json/files/20140623/

Oh, e aggiungere un membro per la proprietà - sia "proprietà" o "OurCompany.ApplicationName"

In alternativa, per i contenuti statici come questo, si potrebbe desiderare di provare aggiungere un membro modello di layout (a):

public class Members : RepoTest 
{ 
    protected override string GetConfig() 
    { 
     return @"<log4net> 
        <root> 
         <level value='DEBUG'/> 
         <appender-ref ref='TestAppender'/> 
        </root> 

        <appender name='TestAppender' type='log4net.Ext.Json.Tests.General.TestAppender, log4net.Ext.Json.Tests'> 
         <layout type='log4net.Layout.SerializedLayout, log4net.Ext.Json'> 
         <member value='OurCompany.ApplicationName' /> <!-- ref to property --> 
         <member value='A|L-%p-%c' /> <!-- (|) arbitrary pattern layout format --> 
         <member value='B%date:yyyy' /> <!-- (%:) one pattern layout conversion pattern with optional option --> 
         <member value='Host=ProcessId\;HostName' /> <!-- (=) nested structure, escape ; --> 
         <member value='App:appname' /> <!-- named member --> 
         </layout> 
        </appender> 
        </log4net>"; 
    } 

    protected override void TestLog(log4net.ILog log) 
    { 
     log4net.GlobalContext.Properties["OurCompany.ApplicationName"] = "fubar"; 

     log.Info(4); 

     var events = GetEventStrings(log.Logger); 

     Assert.AreEqual(1, events.Length, "events Count"); 

     var le = events.Single(); 

     Assert.IsNotNull(le, "loggingevent"); 

     var procid = Process.GetCurrentProcess().Id; 

     StringAssert.StartsWith(@"{""OurCompany.ApplicationName"":""fubar""", le, "log line"); 
     StringAssert.Contains(@",""Host"":{", le, "log line"); 
     StringAssert.Contains(@"""ProcessId"":" + procid, le, "log line"); 
     StringAssert.Contains(@"""HostName"":""" + Environment.MachineName + @"""", le, "log line"); 
     StringAssert.Contains(@"""A"":""L-INFO-log4net.Ext.Json.Tests.Layout.Arrangements.Members""", le, "log line"); 
     StringAssert.Contains(@"""B"":""" + DateTime.Now.Year + @"""", le, "log line"); 
     StringAssert.Contains(@"""App"":""", le, "log line"); 
    } 
} 

E, infine, provare membro "APPNAME".

Grazie, Rob

Problemi correlati