将OtrosLogViewer与SocketHubAppender一起使用时出错

时间:2016-02-03 08:52:38

标签: java logging log4j otroslogviewer

我正在尝试使用除Chainsaw之外的东西,它似乎不再受支持,无法用Java 1.8.0_72启动。我使用与Chainsaw一样的Log4j文件尝试OtrosLogView,但是我一直收到这个错误:

java.lang.ClassCastException: java.net.Inet4Address cannot be cast to java.lang.String
        at pl.otros.logview.parser.log4j.Log4jUtil.translateLog4j(Log4jUtil.java:68)
        at pl.otros.logview.importer.Log4jSerilizedLogImporter.importLogs(Log4jSerilizedLogImporter.java:67)
        at pl.otros.logview.reader.SocketLogReader$SocketHandler.run(SocketLogReader.java:103)
        at java.lang.Thread.run(Thread.java:745)

以下是我的log4j配置文件的详细信息:

log4j.rootCategory=DEBUG stdout, SOCKET

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%t] %-5p %c{1}:%L - %m%n
log4j.appender.stdout.threshold=ERROR

log4j.appender.SOCKET=org.apache.log4j.net.SocketHubAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=50505
log4j.appender.SOCKET.LocationInfo=true
log4j.appender.SOCKET.ReconnectionDelay=10000
log4j.appender.SOCKET.threshold=DEBUG

我真的很沮丧,它不会起作用。我看了一下OtrosLogViewer的源代码,我可以看到错误发生在哪里:

// Starting from line 64 of pl.otros.logview.parser.log4j.Log4jUtil.translateLog4j() 
ld.setProperties(IMMUTABLE_EMPTY_MAP);
Map properties = event.getProperties();
if (properties != null) {
      Map<String, String> props = new HashMap<>(properties.size());
      for (Object key : properties.keySet()) {
        String value = (String) properties.get(key);
        if (StringUtils.isNotBlank(value)) {
          props.put(key.toString(), value);
        }
      }
      if (props.size() > 0) {
        ld.setProperties(props);
      }
}

正如您所看到的,它将所有属性视为String,但由于错误报告并非所有属性都是字符串,因为其中一个属性是Inet4Address。为什么他们不只是对值进行toString而不是对它进行转换?我想我可以查看代码并尝试自己修复它,但有没有办法让SocketHubAdapter将属性值作为字符串发送?

0 个答案:

没有答案