gpt4 book ai didi

.net-core - 将 log4net RemoteSyslogAppender 与 .Net Core 一起使用

转载 作者:行者123 更新时间:2023-12-02 01:09:11 25 4
gpt4 key购买 nike

我正在尝试在带有 log4net 2.0.8 的 .Net Core 应用程序中同时使用 RollingFileAppender 和 RemoteSyslogAppender。这是我的 log4net.config 文件的样子:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<priority value="Debug" />
<appender-ref ref="FileAppender" />
<appender-ref ref="SyslogAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\ProgressiveLogs\ProgLoggerNetCoreDemo.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="14" />
<maximumFileSize value="15000KB" />
<datePattern value="yyyyMMdd" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="SyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
<remoteAddress name="Address" value="syslogServer" />
<remotePort name="Port" value="514" />
<layout type="ProgressiveLogging.Core.ProgLayout.ProgPatternLayout, ProgressiveLogging.Core">
<conversionPattern value="%json%newline" />
</layout>
</appender>
</log4net>

如您所见,我正在为系统日志附加程序使用自定义模式。当我运行我的应用程序的 .Net Core 版本(它使用 ProgressiveLogging.Core 的 .Net Standard 1.3 版本)时,我确实将输出输出到 RollingFileAppender 文件,但不是 RemoteSyslogAppender。当我使用 .Net 4.6.2(使用 ProgressiveLogging.Core 的 .Net 4.0 版本)运行我的测试应用程序时,它向两个附加程序输出正常。

我在网上找到了说明 .Net Standard 1.3 (https://logging.apache.org/log4net/release/framework-support.html) 支持 log4net RemoteSysLogAppender 的文档。

有没有其他人能够获得类似的工作(将 RemoteSysLogAppender 与 .Net Core 或 .Net Standard 结合使用)?

添加于 2017-09-01:我做了进一步调查,发现这归结为 .Net 4.* 和 .Net Standard 之间 UDP 数据包的构建和发送方式的主要差异。 .Net 40 有效,在一个数据报(数据包)中发送 UDP 消息,而 .Net Standard 将消息拆分为一堆数据包,这些数据包在我们的 JSON 消息中似乎由逗号分隔。显然,我们的系统日志守护进程无法理解这些废话。我将进行一些直接测试,看看是否可以改变通过 UDP 发送到系统日志的内容。

最佳答案

经过更彻底的调查后,我发现 log4net RemoteSyslogAppender 没有问题。我的问题是我正在格式化最终由 System.Net.Sockets.UdpClient 发送的 JSON 消息。格式将 CRLF 添加到字符串中,然后 UdpClient 将消息定界并在这些 CRLF 边界上分段。这对 Syslog 来说毫无意义。这是一个非常简单的修复 - 从对 NewtonSoft.Json.JsonConvert.SerializeObject 的调用中删除格式化选项。我从某个地方复制了一个片段,其中包括 Json 字符串的格式。现在完美运行!

关于.net-core - 将 log4net RemoteSyslogAppender 与 .Net Core 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45948490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com