带有UDP的net.core的log4net配置文件动态附加远程地址

伊夫吉

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

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

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>

我在启动文件中添加了以下代码-

//logging
XmlDocument log4NetConfig = new XmlDocument();
log4NetConfig.Load(File.OpenRead("log4net.config"));
var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.GlobalContext.Properties["LogFileName"] = env.ContentRootPath + Configuration["AppSettings:Logging:LoggerPath"];
log4net.GlobalContext.Properties["RemoteAddress"] = System.Net.IPAddress.Parse(Configuration["AppSettings:Logging:RemoteAddress"]);
log4net.Config.XmlConfigurator.Configure(repo, log4NetConfig["log4net"]);

log4net.LogManager.GetLogger(typeof(Startup)).Info($"Invoice service started. environment={env.EnvironmentName}");

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

x

这可以通过自定义类型转换器(通过IConvertFrom来实现
您可以将Log4net的实现重新PatternString用于上下文属性的解析(此处:)%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);
    }
}

在您的应用程序开始时,您ConverterRegistry通过通过Log4net的

log4net.Util.TypeConverters.ConverterRegistry.AddConverter(typeof(IPAddress), new IPAddressPatternConverter());

xml配置保持原样:(
注意指定%proper t y而不是%propery。)

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    <RemoteAddress  value="%property{RemoteAddress}" />
    <!-- Remaining settings. --->
</appender

您可以通过所涉及的上下文属性来配置实际IP地址。

String ipAddress = "127.0.0.1";
log4net.GlobalContext.Properties["RemoteAddress"] = ipAddress;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有 UDP 动态附加远程端口的 net.core 的 log4net 配置文件

如何从.net Core 2.2中的log4net配置文件获取添加程序

Log4Net在单独的配置文件中

log4net logz.io附加程序配置文件将参数传递给listenerUrl和令牌标记

您可以使用代码配置log4net而不使用配置文件吗?

为什么未读取log4net配置文件

如何在配置文件中初始化log4net GlobalContext属性

log4net:在代码中使用PatternString,而不是在配置文件中

负载均衡器的Log4Net单个配置文件

配置附加程序中元素的log4net数组

带有 .NET Framework 4.6.2 的 log4net

来自 app.config 中一个键的 Log4net 配置文件路径

使用log4net在.net5中作为单个文件进行部署会抛出配置文件异常

带有 IIsExpress 配置文件的 ASP.NET Core 6 文件太大 (413)

最小的log4net配置

无法加载Log4Net配置

无法正确配置log4net

Log4Net 配置设置错误:找不到名为 [FileAppender] 的附加程序

log4net配置:我可以在多个附加程序中引用相同的布局吗?

Application Insights不会将带有附加异常对象的log4net日志消息发送到Azure

使用.NET Core应用程序进行Log4Net配置

在编码 UI 测试的输出附件中附加 Log4net 日志文件

Log4Net写入不同的文件

.NET Core 2,DI,配置文件

.NET Core 配置文件的工作原理

使用ASP.NET Core 2.2的Log4Net写入文件

使用log4net Asp.net Core 2.2将日志文件写入AppData

以编程方式设置文件名时,带有MinimalLock锁定模型的log4net无法正常工作

Log4Net c# AdoNetAdapter 附加字段