Ошибка при использовании OtrosLogViewer с SocketHubAppender

Я пытаюсь использовать что-то кроме Chainsaw, которое, кажется, больше не поддерживается и не может быть запущено с Java 1.8.0_72. Я пытался OtrosLogView, используя тот же файл Log4j, который я использовал с Chainsaw, но я продолжаю получать эту ошибку:

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 отправлять значения свойств в виде строк?

0 ответов

Другие вопросы по тегам