我想使用Log4j登录AppEngine。我这样配置记录器:

.level = INFO
log4j.rootLogger=DEBUG, stdout
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{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n


但是记录器随后将所有内容记录到INFO中,并且实际的日志级别仅以如下方式内联显示:(日志级别错误)



是否有一种方法可以使真正的日志级别与log4j一起使用,以便在日志级别上进行过滤在appengine UI上起作用?

编辑:更详细的示例:

所以我记录了这样的错误:

import org.apache.log4j.Logger;
private static Logger logger = Logger.getLogger(PingServlet.class);

logger.error("Database was successfully pinged.");


在Appengine-UI上,它显示为INFO(绿色I)。仅登录文本指示正确的日志级别:

最佳答案

GAE Java文档指出,您写到stdout的所有内容都将记录为INFO,写到stderr的内容是警告[1]。您的root记录器正在将所有内容写入stdout。

我不是log4j专家,所以我不知道记录器可以同时写入stdout和stderr的方法。一种解决方法是使用两个记录器,一个用于INFO,另一个用于WARNING。

[1] https://cloud.google.com/appengine/docs/java/requests#Java_Logging

关于java - AppEngine-Log4j和日志级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23682439/

10-11 03:59