我正在尝试向Windows 10中使用SysLog Watcher创建的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标志!
我希望看到标志Facility和Severity通过TCP协议通过SyslogNet.Client发送!
谢谢!
答案 0 :(得分:1)
我找到了解决方案。看来Kiwi syslog无法理解八位字节计数(请参见RFC6587)。要解决此问题,您可以将messageTransfer
的{{1}}属性设置为SyslogTcpSender