【发布时间】:2014-08-11 21:33:08
【问题描述】:
我对使用 Log4j 和 logstash 比较陌生。我正在使用带有套接字附加程序的 Log4j 将日志事件推送到 logstash-1.4.2,然后再推送到 Elasticsearch-1.1.1 进行存储。
我尝试通过外部属性文件 (log4j.properties) 和 java 代码生成日志记录属性。这两种方法似乎都适用于一个例外:使用代码中指定的属性创建的日志事件不会生成使用外部属性文件生成的日志事件生成的堆栈跟踪信息。
我查看了 logstash 文档以及 Apache Log4J 文档,看看是否有任何原因导致这种情况发生,但什么也没找到。 看起来使用外部属性文件是首选方法,但我想了解这里发生了什么。
当我使用属性文件并使用 PropertyConfigurator 时,我会获得所有堆栈跟踪信息:
log4j.properties
log4j.rootLogger=DEBUG, server
###SocketAppender###
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=9500
log4j.appender.server.RemoteHost=localhost
log4j.appender.server.ReconnectionDelay=10000
LoggingTestClass.java
Logger logger = Logger.getLogger(LoggingTestClass.class.getName());
PropertyConfigurator.configure("log4j.properties");
logger.debug("debug message");
logger.error("error message");
-这会生成下面的日志事件,事件中包含以下所有类/文件/行/方法信息。
"message": "debug message",
"@version": "1",
"@timestamp": "2014-08-08T16:08:10.423Z",
"type": "testLogs",
"host": "127.0.0.1:59979",
"path": "log4J.LoggingTestClass",
"priority": "DEBUG",
"logger_name": "log4J.LoggingTestClass",
"thread": "main",
"class": "log4J.LoggingTestClass",
"file": "LoggingTestClass.java:20",
"method": "init"
但是,当我创建一个 SocketAppender 对象并在 java 类中指定属性时,我仍然会收到日志记录事件,但它们缺少它们的堆栈跟踪信息:
LoggingTestClass.java
Logger rootLogger = Logger.getRootLogger();
SocketAppender sa = new SocketAppender("localhost", 9500);
sa.setPort(9500);
sa.setRemoteHost("localhost");
sa.setReconnectionDelay(10000);
sa.activateOptions();
logger.addAppender(sa);
logger.debug("debug message");
logger.error("error message");
这会在记录的事件中生成相同的信息,但缺少生成的日志事件的类/文件/行/方法信息:
"message": "debug message",
"@version": "1",
"@timestamp": "2014-08-08T14:27:27.522Z",
"type": "testLogs",
"host": "127.0.0.1:62135",
"path": "log4J.LoggingTestClass",
"priority": "DEBUG",
"logger_name": "log4J.LoggingTestClass",
"thread": "main",
"class": "?",
"file": "?:?",
"method": "?"
我的logstash配置:
ESLogConfig.txt
input {
log4j {
mode => "server"
port => 9500
type => Log4j
}
}
output {
stdout { }
elasticsearch {
cluster => "aaronCluster"
}
}
在设置 SocketAppender 对象时,我是否可能忽略了一些事情?
对此的任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: logging elasticsearch log4j logstash