【发布时间】:2015-08-01 11:08:19
【问题描述】:
Google App Engine Java 使用 java.util.logging 创建日志消息。 我想修改在开发者控制台 - 监控 - 日志中显示的日志消息。这个想法是添加一些额外的输出,例如用户名,而不是手动将其放入每个日志消息中:
log.info("user action");
应该产生类似的日志输出
user "testuser": user action
因此我创建了一个自己的格式化程序:
public class TestFormatter extends Formatter {
@Override
public String format(LogRecord record) {
// find out username..
return "user " + username + ": " + record.getMessage();
}
}
将此设置为 logging.properties 中 ConsoleHandler 的格式化程序没有效果:
java.util.logging.ConsoleHandler.formatter = com.example.guestbook.TestFormatter
在本地机器上部署它并尝试像这样以编程方式添加它:
Logger rootLogger = Logger.getLogger("");
Handler[] handlers = rootLogger.getHandlers();
log.info("Handler[] size: " + handlers.length);
for(Handler h : handlers) {
log.info(h.toString());
h.setFormatter(new TestFormatter());
}
我得到 2 个处理程序,一个 ConsoleHandler 和一个 DevLogHandler。 但设置格式化程序会导致不再显示日志。在 GAE 上,我得到 0 处理程序。
当尝试访问 Logger.getGlobal() 而不是 Logger.getLogger("") 时,我在本地实例上得到 0 Handler,在 GAE 上得到 SecurityException: No permission to modify global。尝试获取处理程序列表时已出现此异常。
现在我的问题是:有没有办法以这种方式修改开发者控制台的日志?如果是,如何?
【问题讨论】:
标签: java google-app-engine logging