Log4net.Ext.Json custom properties are not displayed in json

We set the log4net properties, but they do not appear in the log file issued by log4net.ext.json.

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

However, our journal does not include them using the default configurations specified on the wiki. Am I doing it wrong?

Our log4net configurator is as follows:

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

I get standard fields (and this is nicely absorbed by Splunk), but not custom ones. Any suggestions?

+6
source share
1 answer

It has been fixed for a while, but has not been released. A failure occurred while reading the properties of the event. This has been fixed in revision 26. Please try the new release 20140623 - https://sourceforge.net/projects/log4net-json/files/20140623/

Oh and add an element for the property - either "property" or "OurCompany.ApplicationName"

As an alternative for static content like this, you can try adding a template layout element (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"); } } 

Finally, try the "appname" member.

Thanks Rob

+4
source

Source: https://habr.com/ru/post/971111/


All Articles