2016-01-19 3 views
0

У меня есть gui, который вызывает экземпляр applicaions. Каждое приложение использует логгер log4net. Корневой регистратор получает appenders из app.config. Каждый app.config содержит TCP-приложение, которое я написал. Проблема начинается, когда я пытаюсь создать более одного экземпляра приложения, поскольку дублированные порты используются приложением tcp.Изменение app.config appender из кода

В разделе log4net в моем app.config выглядит следующим образом:

<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

Заканчивать этот ответ здесь: http://stackoverflow.com/questions/16336917/can-you-configure-log4net-in-code- вместо-use-a-config-file – Vahlkron

+0

Привет, спасибо за быстрый ответ. Но я хочу сохранить порт в appconfig, чтобы мой приложение invoker переработал порт, чтобы они могли общаться. – Hajaj

ответ

0

Да, это легко изменить appenders во время выполнения:

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(); 
    } 
} 
Смежные вопросы