To setup project to run on multiple environments and use logz.io I need to set different token and listenerUrl values depending of the build definition. Project has log4net.config files set, and idea was to use log4net globalcontext properties to pass values just like what I do for layout pattern tag. Unfortunately log4net keeps these property names (placeholders) and does not replace them with values from globalcontext.
My question is how to set these tags dynamically?
Stuff that I've tried are:
- properties in config.
- Geting root appender and setting values programaticaly:
var rootAppender = LogManager.GetRepository(Assembly.GetEntryAssembly()).GetAppenders().OfType<LogzioAppender>();
- Creating new Appender object and adding it to
hierarchy.Root.AddAppender(logzioAppender);
Configuration looks pretty much default like from 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>