如何为Google App Engine Java自定义日志记录?

3

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());
}

我有两个处理程序,一个是"ConsoleHandler",一个是"DevLogHandler"。但是设置格式化程序会导致没有进一步的日志显示。在GAE上却得到了0个处理程序。
当尝试访问"Logger.getGlobal()"而不是"Logger.getLogger("")"时,在本地实例上得到0个处理程序,在GAE上得到"SecurityException: No permission to modify global"异常。这个异常出现在尝试获取处理程序列表时就已经产生了。
现在我的问题是:是否有一种方法可以修改开发人员控制台的日志?如果有的话,该如何操作?
1个回答

1

我之前向 Google 提交了一个类似问题的工单,他们回复说不建议修改 GAE 内部使用的日志记录器/处理程序。

我会劝阻修改 GAE 内部使用的日志记录器/处理程序。

此外,全局日志记录器无法自定义,但您可以尝试使用自定义名称的日志记录器。


谢谢信息。你能否加上工单链接?这对我的硕士论文非常重要 ;) - Lukas
遗憾的是,这是一张私人工单,不能在我们公司以外的用户访问。 - Deviling Master
好的,也许有公开的来源可以证实这个事实,或者其他人已经以某种方式解决了这个问题。 - Lukas
1
我赞同他们的说法,尽管我认为不需要访问私人公司的支持门户来考虑推理。App Engine是PaaS,因此环境的某些方面是不可定制的。最好的记录方式是使用log.info("user action");。这是所有其他用户记录日志的正常方式,所以我认为没有任何会影响您的问题。它会出现在开发者控制台中,就像您想要的那样 :) - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接