我有一个调用应用程序实例的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>
我可以从应用程序实例调用程序的代码更改端口吗? 或者还有其他选择吗?
答案 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();
}
}