简体   繁体   English

从代码更改app.config追加器

[英]Changing app.config appender from code

I have a gui that invoke applicaions instance. 我有一个GUI调用applicaions实例。 Every application use log4net root logger. 每个应用程序都使用log4net根记录器。 The root logger gets the appenders from app.config. 根记录器从app.config获取附加程序。 Every app.config contains TCP appender - that i wrote. 每个app.config都包含我编写的TCP附加程序。 The problem starts when im trying to rise up more than one application instance because the duplicate ports in use by the tcp appender. 当我试图提升多个应用程序实例时,问题就开始了,因为tcp附加程序正在使用重复的端口。

The log4net section in my app.config looks like: 我的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>

Can I change the port from the code of the application instance invoker? 是否可以从应用程序实例调用程序的代码更改端口? Or there is other option? 还是有其他选择?

Yes, it's easy to modify appenders at runtime: 是的,在运行时修改附加程序很容易:

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();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM