Log4net programmatically programs adoAppender

I need to add ado appender to my existing log4net configuration.

I need to add it through code. However, I am stuck in adding general string parameters such as a message, since I cannot correctly define the layout property: in the xml configuration we use PatternLayout, but the PatternLayout code is not IRowLayout, so I have an error with the following code:

public static void AddStringParameterToAppender(this log4net.Appender.AdoNetAppender appender, string paramName, int size, string conversionPattern) { log4net.Appender.AdoNetAppenderParameter param = new log4net.Appender.AdoNetAppenderParameter(); param.ParameterName = paramName; param.DbType = System.Data.DbType.String; param.Size = size; param.Layout = new log4net.Layout.PatternLayout(conversionPattern); appender.AddParameter(param); } 

Does anyone know how to add a string parameter to code that looks like the following xml sample:

 <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> 
+6
source share
1 answer

I finally found how to convert PatternLayout to IRawLayout .

To do this, you must use log4net.Layout.Layout2RawLayoutAdapter :

 public static void AddStringParameterToAppender(this log4net.Appender.AdoNetAppender appender, string paramName, int size, string conversionPattern) { log4net.Appender.AdoNetAppenderParameter param = new log4net.Appender.AdoNetAppenderParameter(); param.ParameterName = paramName; param.DbType = System.Data.DbType.String; param.Size = size; param.Layout = new log4net.Layout.Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout(conversionPattern)); appender.AddParameter(param); } 
+17
source

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


All Articles