是否有针对log4net的低级TCP appender?

时间:2014-08-29 06:58:07

标签: c# tcp dns log4net logstash

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

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

我正在考虑实现我自己的appender,通过使用ping包装UDPAppender或通过DNS名称处理重新连接来复制RemotingAppender。这样的事情是否已经存在?

2 个答案:

答案 0 :(得分:1)

你试过log4stash吗? 它是一个log4net appender,几乎没有类似logstash的功能,可以将您的日志直接发送到Elasticsearch。 这样你就可以减少一个&#34;失败点&#34;在弹性搜索的方式(根本不需要使用logstash)。

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

答案 1 :(得分:-4)

我发现这个here,UdpAppender接近结尾

SDK reference

UdpAppender

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

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

final String NAME = "name";
final String CODE = "code";

BufferedReader br = new BufferedReader(new FileReader(file));
PrintWriter out = new PrintWriter(new FileWriter("log.txt", true));

while ((line = br.readLine()) != null) {
    String[] splits = line.split("=");
    String key = splits[0];
    String value = splits[1];

    if (key.equals(NAME) || key.equals(CODE)) {
        out.println(value);
    }
}

out.close();