この質問に対する私の答えを見ると:
カスタムlog4netプロパティPatternLayoutConverter(インデックス付き)
カスタムPatterLayoutConverterの例があります。この例の場合、私はそれをKeyLookupPatternConverterと呼びました。
便宜上、ここにあります:
namespace Log4NetTest
{
class KeyLookupPatternConverter : PatternLayoutConverter
{
protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)
{
//Use the value in Option as a key into the "application settings" stored on the main form.
string setting;
if (Form1.AppSettings.TryGetValue(Option, out setting))
{
writer.Write(setting);
}
}
}
}
そして、これがあなたがそれを構成する方法です:
//Log the "sessionid" and "userid" values from our "application settings" object
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p [session = %KLPC{sessionid}] [user = %KLPC{userid}] %m%n"/>
<converter>
<name value="KLPC" />
<type value="Log4NetTest.KeyLookupPatternConverter" />
</converter>
</layout>
構成では、フォームのAppSettingsから「KLPC」設定を取得すると言っています。
あなたの場合、設定ファイルのappSettingsから値を取得したいとします。フォームのAppSettingsから設定を取得するコードを、構成ファイルのアプリ設定から設定を取得するコードに置き換えて、提供した例を変更するのは簡単なはずです。
このルートを使用する場合、AppSettingPatternConverterは次のようになります(テストされていません)。
class AppSettingsPatternConverter : PatternLayoutConverter
{
protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)
{
//Use the value in Option as a key into the "application settings" stored on the main form.
string setting = ConfigurationManager.AppSettings[Option];
if (string.IsNullOrWhitespace(setting))
{
setting = string.Format("No setting value for key[{0}]", Option);
}
writer.Write(setting);
}
}
次のように構成します。
//Log the "Name" setting from the application settings object
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p [name = %AppSetting{Name}] %m%n"/>
<converter>
<name value="AppSetting" />
<type value="Log4NetTest.AppSettingPatternConverter" />
</converter>
</layout>
あなたはコードを書かずにそれをやりたいと言います。それができるかどうかはわかりませんが、上に示したアプローチを使用することは非常に一般的で非常に簡単です。