Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log4Net, how to add a custom field to my logging

I use the log4net.Appender.AdoNetAppender appender.
My log4net table are the following fields [Date],[Thread],[Level],[Logger],[Message],[Exception]

I would need to add another field to the log4net table (e.g SalesId), but how would I specify in my xml and in code to log the "SalesId" when logging a Error or Info message?

e.g. log.Info("SomeMessage", SalesId)

Here's the log4net xml

  <appender name="SalesDBAppender" type="log4net.Appender.AdoNetAppender">     <bufferSize value="1" />     <connectionType value ="System.Data.SqlClient.SqlConnection" />     <connectionString value="Data Source=..." />     <commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />     <parameter>       <parameterName value="@log_date" />       <dbType value="DateTime" />       <layout type="log4net.Layout.RawTimeStampLayout" />     </parameter>     <parameter>       <parameterName value="@thread" />       <dbType value="String" />       <size value="255" />       <layout type="log4net.Layout.PatternLayout">         <conversionPattern value="%thread" />       </layout>     </parameter>     <parameter>       <parameterName value="@log_level" />       <dbType value="String" />       <size value="50" />       <layout type="log4net.Layout.PatternLayout">         <conversionPattern value="%level" />       </layout>     </parameter>     <parameter>       <parameterName value="@logger" />       <dbType value="String" />       <size value="255" />       <layout type="log4net.Layout.PatternLayout">         <conversionPattern value="%logger" />       </layout>     </parameter>     <parameter>       <parameterName value="@message" />       <dbType value="String" />       <size value="4000" />       <layout type="log4net.Layout.PatternLayout">         <conversionPattern value="%message" />       </layout>     </parameter>     <parameter>       <parameterName value="@exception" />       <dbType value="String" />       <size value="2000" />       <layout type="log4net.Layout.ExceptionLayout" />     </parameter>   </appender> 
like image 733
Eminem Avatar asked Aug 27 '12 09:08

Eminem


People also ask

How do I use multiple Appenders in log4net?

You can't log to separate appenders - you need to configure different loggers, and attach the appropriate appender to each one. Then log different messages to the different loggers.

What is RollingFileAppender in log4net?

RollingFileAppender means the system creates a log file based on your filters, this way you can have log files based on dates (one file each day), or get the file splitted into small chunks when it hits certain size.


1 Answers

1) Modify the command text: INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception],[MyColumn]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @CustomColumn)

2) Add the parameter definition for the custom column:

<parameter>    <parameterName value="@CustomColumn"/>    <dbType value="String" />    <size value="255" />    <layout type="log4net.Layout.PatternLayout">       <conversionPattern value="%property{CustomColumn}" />   </layout> </parameter> 

3) Then use one of log4net’s contexts to transfer values to the parameter:

// thread properties... log4net.LogicalThreadContext.Properties["CustomColumn"] = "Custom value"; log.Info("Message");   // ...or global properties log4net.GlobalContext.Properties["CustomColumn"] = "Custom value"; 
like image 99
Marcelo De Zen Avatar answered Sep 17 '22 15:09

Marcelo De Zen