2014-06-20 15 views
6

Chúng tôi đang đặt thuộc tính log4net nhưng chúng không xuất hiện trong tệp nhật ký được xuất ra bởi log4net.ext.json.log4net.Ext.Json thuộc tính tùy chỉnh không xuất hiện trong json

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

Tuy nhiên, nhật ký của chúng tôi không bao gồm các cấu hình này bằng cấu hình mặc định được chỉ định trong wiki. Tôi có làm sai không?

cấu hình log4net chúng tôi trông như thế này:

<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> 

tôi nhận được các lĩnh vực tiêu chuẩn (và nó được hoành tráng được tiêu thụ bởi Splunk) nhưng không phải là những tùy chỉnh. Bất kỳ đề xuất?

Trả lời

4

Đã khắc phục một thời gian nhưng không được giải phóng. Đã có một trục trặc với việc đọc các đặc tính từ sự kiện này. Nó được cố định trong phiên bản 26. Hãy thử phiên bản mới 20.140.623-https://sourceforge.net/projects/log4net-json/files/20140623/

Oh và thêm thành viên cho bất động sản - một trong hai "tài sản" hoặc "OurCompany.ApplicationName"

Ngoài ra, đối với nội dung tĩnh như thế này, bạn có thể muốn thử thêm thành viên bố cục mẫu (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"); 
    } 
} 

Và cuối cùng, hãy thử thành viên "appname".

Xin cảm ơn, Rob

Các vấn đề liên quan