要将项目设置为在多个环境中运行并使用 logz.io,我需要根据构建定义设置不同的 token 和 listenerUrl 值。项目设置了 log4net.config 文件,想法是使用 log4net globalcontext 属性来传递值,就像我为布局模式标记所做的那样。不幸的是,log4net 保留了这些属性名称(占位符),并没有用 globalcontext 中的值替换它们。
我的问题是如何动态设置这些标签?
我试过的东西是:
- 配置中的属性。
- 以编程方式获取根附加程序和设置值:
var rootAppender = LogManager.GetRepository(Assembly.GetEntryAssembly()).GetAppenders().OfType<LogzioAppender>();
- 创建新的 Appender 对象并将其添加到
hierarchy.Root.AddAppender(logzioAppender);
配置看起来非常像来自 logz.io 文档的默认配置。
<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>