【问题标题】:How to customize logging for Google App Engine Java?如何为 Google App Engine Java 自定义日志记录?
【发布时间】: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


    【解决方案1】:

    当我回复过去时,我从 Google 票证中获得了类似的问题

    我不鼓励篡改使用的记录器/处理程序 由 GAE 内部提供。

    另外,全局记录器不能自定义,你可以尝试使用自定义名称的记录器

    【讨论】:

    • 感谢您的信息。能把票的链接加进去吗?这对我的硕士论文来说是一个相当重要的决定;)
    • 很遗憾,这是一张私人票,在我们公司的用户之外无法访问。
    • 好吧,也许这个事实有一个公共来源,或者其他人以任何方式解决了这个问题。
    • 我会支持他们所说的,尽管我认为没有必要访问私人公司的支持门户来考虑推理。 App Engine 是PaaS,因此环境的某些方面是不可定制的。最好的记录方式是使用log.info("user action");。这是所有其他用户进行日志记录的正常方式,所以我认为它不会有任何影响您的问题。它会根据您的需要显示在开发者控制台中:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多