log4net - 如何在 AdoNetAppenderParameter.Layout 上调用 ActivateOptions
log4net - how to call ActivateOptions on AdoNetAppenderParameter.Layout
我正在尝试动态配置 log4net 以将日志写入 sql 数据库。为此,我正在使用 log4net 库中的 AdoNetAppender class。
我看到 appender 的 activateOptions 但不是命令参数中定义的 Layout
public override void ActivateOptions();
调用 AdoNetAppender.ActivateOptions() 正在将日志写入数据库,但它 将相同的数据写入所有列 ,而不是 将相应的数据写入相应的列列。
我认为这与 Layout 上的 ActiveOptions 有关,但我没有看到 Layout 的 ActivateOptions。
非常感谢任何帮助。
对于遇到此问题的任何人。下面的修复成功了:
public class CustomAdoNetAppender : AdoNetAppender
{
//code omitted for simplicity
//parameter using inherited layout
AddParameter(new AdoNetAppenderParameter()
{
ParameterName = "@thread",
DbType = System.Data.DbType.String,
Size = 255,
Layout = new CustomLayout2RawLayoutAdapter(new PatternLayout() { ConversionPattern = "%thread" })
});
}
private class CustomLayout2RawLayoutAdapter : Layout2RawLayoutAdapter
{
private readonly PatternLayout _layout;
public CustomLayout2RawLayoutAdapter(PatternLayout layout)
: base(layout)
{
_layout = layout;
}
public void ActivateOptions()
{
_layout.ActivateOptions();
}
}
public override void ActivateOptions()
{
base.ActivateOptions();
if (m_usePreparedCommand)
{
foreach (AdoNetAppenderParameter item in m_parameters)
{
if (item.Layout is CustomLayout2RawLayoutAdapter)
(item.Layout as CustomLayout2RawLayoutAdapter).ActivateOptions();
}
}
}
我正在尝试动态配置 log4net 以将日志写入 sql 数据库。为此,我正在使用 log4net 库中的 AdoNetAppender class。
我看到 appender 的 activateOptions 但不是命令参数中定义的 Layout
public override void ActivateOptions();
调用 AdoNetAppender.ActivateOptions() 正在将日志写入数据库,但它 将相同的数据写入所有列 ,而不是 将相应的数据写入相应的列列。
我认为这与 Layout 上的 ActiveOptions 有关,但我没有看到 Layout 的 ActivateOptions。
非常感谢任何帮助。
对于遇到此问题的任何人。下面的修复成功了:
public class CustomAdoNetAppender : AdoNetAppender
{
//code omitted for simplicity
//parameter using inherited layout
AddParameter(new AdoNetAppenderParameter()
{
ParameterName = "@thread",
DbType = System.Data.DbType.String,
Size = 255,
Layout = new CustomLayout2RawLayoutAdapter(new PatternLayout() { ConversionPattern = "%thread" })
});
}
private class CustomLayout2RawLayoutAdapter : Layout2RawLayoutAdapter
{
private readonly PatternLayout _layout;
public CustomLayout2RawLayoutAdapter(PatternLayout layout)
: base(layout)
{
_layout = layout;
}
public void ActivateOptions()
{
_layout.ActivateOptions();
}
}
public override void ActivateOptions()
{
base.ActivateOptions();
if (m_usePreparedCommand)
{
foreach (AdoNetAppenderParameter item in m_parameters)
{
if (item.Layout is CustomLayout2RawLayoutAdapter)
(item.Layout as CustomLayout2RawLayoutAdapter).ActivateOptions();
}
}
}