c# - 带有 UDP 的 net.core 的 log4net 配置文件动态附加远程端口
问题描述
我有一个 log4net.config 文件,我希望能够通过 Program.cs 文件动态注入 RemotePort 变量。但我收到以下错误:
System.FormatException: Input string was not in a correct format.
我能够使用此策略动态传递 RemoteAddress :
带有 UDP 的 net.core 的 log4net 配置文件动态附加远程地址
log4net 文件中的代码
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<RemoteAddress value="%property{RemoteAddress}" />
<RemotePort value="%property{RemotePort}" />
<encoding value="utf-8"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %property{log4net:HostName} - %message%newline" />
</layout>
</appender>
Program.cs 中的代码
log4net.GlobalContext.Properties["RemotePort"] = 514;
解决方案
参考文章中显示的相同概念也适用于此。
您需要从 a 转换为 a PatternString
,Int32
这需要自定义类型转换器实现IConvertFrom
.
重用 a 的实现PatternString
将%property{RemotePort}
被 via 传入的值替换log4net.GlobalContext.Properties["RemotePort"] = 514
,这将导致514
.
public class NumericConverter : IConvertFrom
{
public NumericConverter()
{}
public Boolean CanConvertFrom(Type sourceType)
{
return typeof(String) == sourceType;
}
public Object ConvertFrom(Object source)
{
String pattern = (String)source;
PatternString patternString = new PatternString(pattern);
String value = patternString.Format();
return Int32.Parse(value);
}
}
在启动时注册此类型转换器,如下所示
log4net.Util.TypeConverters.ConverterRegistry.AddConverter(typeof(int), new NumericConverter());
推荐阅读
- java - 使用 Java 11 在 groovyconsole 中执行脚本会生成缺少 JAXB 依赖项异常
- python-3.x - 如何在 python 中查看和获取文件中的新更改
- angularjs - 如何使用angularjs表单方法显示输入字段的错误消息
- python - 如何让课堂再次运行
- java - 使用 Hibernate Projection 的预期 N+1 查询
- jupyter - 是否可以手动更新interactive_output?
- javascript - 让 Promise.race 仅在成功时完成
- python-3.x - 为了使其实例实现上下文管理器协议,需要在类 A 中重新定义哪些功能?
- c# - 由于与 ILogger 的引用冲突,无法启动依赖注入的 Azure 函数
- visual-studio - 连接到其他计算机上的 adb 服务器的 Visual Studio 可以运行连接到其他计算机的 android 设备吗?