我正在尝试向Windows10中的syslog服务器发送一条消息,该服务器是用SysLog观察者创建的。
消息通过TCP和UDP协议发送,但使用TCP时,不会发送严重性和设备标志。
有了UDP,一切都很好!
我已经尝试过Kiwi Server了,问题是一样的。
我正在使用nuget SyslogNet.Client,我这样发送UDP消息:
SysLogMessage msg = new SysLogMessage(SyslogMessage(
DateTimeOffset.Now,
14, // Facility - LogAlert
2, // Severity - Critical
LocalHostName ?? Environment.MachineName, // MachineName
"AppName", // AppName
null, // ProcId
"MessageType", // Message type name
"message to be sent"); // message to be sent
ISyslogMessageSerializer serializer = options.SyslogVersion == "5424"
? (ISyslogMessageSerializer)new SyslogRfc5424MessageSerializer()
: options.SyslogVersion == "3164"
? (ISyslogMessageSerializer)new SyslogRfc3164MessageSerializer()
: (ISyslogMessageSerializer)new SyslogLocalMessageSerializer();
SyslogMessage msg = CreateSyslogMessage(options);
ISyslogMessageSender sender = null;
if (options.NetworkProtocol.Equals("tcp", StringComparison.InvariantCultureIgnoreCase))
{
sender = IsEncryptedTCP ?
(ISyslogMessageSender)new SyslogEncryptedTcpSender(options.SyslogServerHostname, options.SyslogServerPort)
: (ISyslogMessageSender)new SyslogTcpSender(options.SyslogServerHostname, options.SyslogServerPort);
}
else if (options.NetworkProtocol.Equals("udp", StringComparison.CurrentCultureIgnoreCase))
{
sender = (ISyslogMessageSender)new SyslogUdpSender(options.SyslogServerHostname, options.SyslogServerPort);
}
else
{
sender = (ISyslogMessageSender)new SyslogLocalSender();
}
#endregion
sender.Send(msg, serializer);同样,这对于UDP很有效,但是当使用TCP或LocalSend时,消息不会发送标志Facility和Severity!
我希望看到通过SyslogNet.Client over TCP协议发送的标志工具和严重性!
谢谢!
发布于 2019-11-17 17:35:47
我已经找到了解决方案。似乎Kiwi syslog不理解八位字节计数(参见RFC6587)。要解决此问题,可以将SyslogTcpSender的messageTransfer属性设置为MessageTransfer.NonTransparentFraming
https://stackoverflow.com/questions/56793405
复制相似问题