複数の環境で実行し、logz.io を使用するようにプロジェクトをセットアップするには、ビルド定義に応じて異なる token と listenerUrl の値を設定する必要があります。プロジェクトにはlog4net.configファイルが設定されており、レイアウトパターンタグに対して行うのと同じように、log4netグローバルコンテキストプロパティを使用して値を渡すというアイデアがありました。残念ながら、log4net はこれらのプロパティ名 (プレースホルダー) を保持し、globalcontext の値に置き換えません。
私の質問は、これらのタグを動的に設定する方法ですか?
私が試したことは次のとおりです。
- config のプロパティ。
- プログラムでルートアペンダーと設定値を取得する:
var rootAppender = LogManager.GetRepository(Assembly.GetEntryAssembly()).GetAppenders().OfType<LogzioAppender>();
- 新しい Appender オブジェクトを作成して追加する
hierarchy.Root.AddAppender(logzioAppender);
構成は、logz.io docs のようにほとんどデフォルトに見えます。
<log4net>
<appender name="LogzioAppender" type="Logzio.DotNet.Log4net.LogzioAppender, Logzio.DotNet.Log4net">
<token value="%p{token}" />
<type>log4net</type>
<listenerUrl value="%p{listenerhost}:8071" />
<bufferSize>100</bufferSize>
<bufferTimeout>00:00:05</bufferTimeout>
<retriesMaxAttempts>3</retriesMaxAttempts>
<retriesInterval>00:00:02</retriesInterval>
<debug>false</debug>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="LogzioAppender" />
</root>
</log4net>