从代码更改app.config appender

时间:2016-01-19 13:54:13

标签: c# log4net app-config

我有一个调用应用程序实例的gui。 每个应用程序都使用log4net根记录器。 根记录器从app.config获取appender。 每个app.config包含TCP appender - 我写的。 当我尝试启动多个应用程序实例时,问题就开始了,因为tcp appender正在使用重复的端口。

app.config中的log4net部分如下所示:

<log4net>
   <root>
     <level value="All" />
     <appender-ref ref="TCPAppender" />
   </root>

   <appender name="TCPAppender" type="LogSender.TCPAppender,LogSender">
      <Ip value="127.0.0.1"/>
      <Port value="8183"/>
      <layout type="log4net.Layout.PatternLayout">
         <conversionPattern value="%d %-5p [%t] %c - %m%n" />
      </layout>
   </appender>
</log4net>

我可以从应用程序实例调用程序的代码更改端口吗? 或者还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

是的,在运行时修改appender很容易:

public static void SetPort(int port)
{
    Hierarchy logHierarchy = log4net.LogManager.GetRepository() as Hierarchy;

    if (logHierarchy == null) return; // not configured yet

    var appender = logHierarchy.GetAppenders().OfType<TCPAppender>().SingleOrDefault();

    if (appender != null)
    {
        appender.Port = port;
        appender.ActivateOptions();
    }
}