C# 具有UDP动态追加远程地址的net.core的log4net配置文件

C# 具有UDP动态追加远程地址的net.core的log4net配置文件,c#,udp,ip,log4net,C#,Udp,Ip,Log4net,我得到了一个log4net文件,其中添加了以下内容: 我希望能够通过startup.cs页面从appSetting.json文件中注入RemoteAddress变量。 但我得到了以下错误: log4net:错误无法创建[log4net.Appender.UdpAppender]类型的Appender[UdpAppender]。报告的错误如下。 log4net.Util.TypeConverters.ConversionNotSupportedException:无法从类型[System.Stri

我得到了一个log4net文件,其中添加了以下内容: 我希望能够通过startup.cs页面从appSetting.json文件中注入RemoteAddress变量。 但我得到了以下错误:

log4net:错误无法创建[log4net.Appender.UdpAppender]类型的Appender[UdpAppender]。报告的错误如下。 log4net.Util.TypeConverters.ConversionNotSupportedException:无法从类型[System.String]值[%Property{RemoteAddress}]转换为类型[System.Net.IPAddress]-->System.Net.Sockets.SocketException:未知此类主机 位于System.Net.Dns.InternalGetHostByName(字符串主机名,布尔值includeIPv6) 位于System.Net.Dns.ResolveCallback(对象上下文)

log4net文件中的代码-

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
        <RemoteAddress value="%propery{RemoteAddress}" />
        <RemotePort value="5005" />
        <encoding value="utf-8"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level - %property{log4net:HostName} - %message%newline" />
        </layout>
    </appender>

无法动态添加远程地址吗?当我在log4net文件中使用实际的IP地址而不是使用
%propery{RemoteAddress}
log4net.GlobalContext.Properties[“RemoteAddress”]=System.Net.IPAddress.Parse(配置[“AppSettings:Logging:RemoteAddress”])它正在工作。

这可以通过自定义类型转换器(via)实现。
您可以重用Log4net的实现来解析上下文属性(这里:
%property{RemoteAddress}

类型转换器如下所示,解析配置的值并将其转换为
IPAddress

public class IPAddressPatternConverter : IConvertFrom
{
    public IPAddressPatternConverter()
    {}

    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 IPAddress.Parse(value);
    }
}
在应用程序开始时,您可以通过Log4net的
ConverterRegistry
注册它

log4net.Util.TypeConverters.ConverterRegistry.AddConverter(typeof(IPAddress), new IPAddressPatternConverter());
xml配置保持原样:
(请注意指定%propertyty而不是%property。)

log4net.Util.TypeConverters.ConverterRegistry.AddConverter(typeof(IPAddress), new IPAddressPatternConverter());
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    <RemoteAddress  value="%property{RemoteAddress}" />
    <!-- Remaining settings. --->
</appender
String ipAddress = "127.0.0.1";
log4net.GlobalContext.Properties["RemoteAddress"] = ipAddress;