0

我正在尝试使用 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);
      }
}

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

4

0 回答 0