使用SyslogNet.Client通过TCP发送SysLog消息

时间:2019-06-27 14:35:53

标签: .net syslog

我正在尝试向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发送!

谢谢!

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。看来Kiwi syslog无法理解八位字节计数(请参见RFC6587)。要解决此问题,您可以将messageTransfer的{​​{1}}属性设置为SyslogTcpSender