首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SyslogNet.Client通过TCP发送SysLog报文

用SyslogNet.Client通过TCP发送SysLog报文
EN

Stack Overflow用户
提问于 2019-06-27 22:35:53
回答 1查看 865关注 0票数 3

我正在尝试向Windows10中的syslog服务器发送一条消息,该服务器是用SysLog观察者创建的。

消息通过TCP和UDP协议发送,但使用TCP时,不会发送严重性和设备标志。

有了UDP,一切都很好!

我已经尝试过Kiwi Server了,问题是一样的。

我正在使用nuget SyslogNet.Client,我这样发送UDP消息:

代码语言:javascript
复制
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协议发送的标志工具和严重性!

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-11-17 17:35:47

我已经找到了解决方案。似乎Kiwi syslog不理解八位字节计数(参见RFC6587)。要解决此问题,可以将SyslogTcpSendermessageTransfer属性设置为MessageTransfer.NonTransparentFraming

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56793405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档