【问题标题】:Is there a low level TCP appender for log4net?log4net 是否有低级别的 TCP 附加程序?
【发布时间】:2014-10-23 03:50:54
【问题描述】:

我一直在使用UDPAppender 将日志发送到logstash。我希望能够通过DNS实现logstash服务器的故障转移。

隐式地,UDPAppender 不会检测到远程 UDP 端口是否可用,但即使有,当我使用 remoteAddress,在初始化时解析为ip地址,并在RemoteAddresss属性中记录为ip地址。我知道RemotingAppender,但这似乎不喜欢logstash,因为logstash TCP输入没有实现.NET远程协议,看起来它会遇到同样的问题来解决远程IP地址仅在初始化步骤通过 DNS。

我正在考虑实现我自己的附加程序,通过使用 ping 包装 UDPAppender 或通过处理通过 DNS 名称的重新连接来复制 RemotingAppender。类似的东西已经存在了吗?

【问题讨论】:

  • 寻找相同的。罗伯成功了吗? Rob,您可以参考任何文章/博客文章以使用 UDPAppender/log4net 和 logstash 进行日志记录。
  • 我根据github.com/merchantwarehouse/syslog4net TcpAppender: dotnetfiddle.net/3WE7h9 一起破解了这个适用于我的用途的方法 - 事实证明,您可以选择在未连接时如何缓冲和丢弃数据包。刷新 DNS 缓存的方式可能有点过于激进,但至少它可以工作

标签: c# tcp dns log4net logstash


【解决方案1】:

你试过log4stash吗?
它是一个 log4net 附加程序,几乎没有类似 logstash 的功能,并将您的日志直接发送到 Elasticsearch。
这样一来,您在进行弹性搜索时就会少一个“故障点”(根本不需要使用 logstash)。

如果你想坚持使用 TCPAppender,
您可以毫不费力地将UDPAppender的代码转入tcp。
我做过一次,但不幸的是我无法发布代码。

【讨论】:

    【解决方案2】:

    我找到了这个here,UdpAppender 快结束了

    SDK reference

    UdpAppender

    有关完整详细信息,请参阅 SDK 参考条目:log4net.Appender.UdpAppender。

    以下示例显示如何配置 UdpAppender 以将事件发送到指定 RemotePort 上的 RemoteAddress。

    <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
        <localPort value="8080" />
        <remoteAddress value="224.0.0.1" />
        <remotePort value="8080" />
        <layout type="log4net.Layout.PatternLayout, log4net">
            <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    

    【讨论】:

    • 这个答案链接到我的问题中提到的同一个 UDPAppender,并且没有解决任何 DNS 故障转移问题。如果我有权力,我会投反对票。
    • 是的,我确实为您提供了 UDP 附加程序的示例代码,因为没有提供任何代码,所以很难弄清楚在什么时候它不适合您。所以如果你能提供一个示例代码,那么我可以帮助你。仅供参考,空投反对票威胁并不是真正的 Stackover 流程​​。提供样本,到目前为止您所做的是,这不是一个可以完成您工作的网站,而是在您被困在某个地方时为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多