【问题标题】:My own Logging Handler for GAE/J (using appengine.api.log?)我自己的 GAE/J 日志处理程序(使用 appengine.api.log?)
【发布时间】:2013-03-09 17:30:26
【问题描述】:

我需要在 GAE/J 上编写自己的日志处理程序。我有我正在尝试调整的 Android 代码,以便它可以在 GAE/J 和 Android 之间共享。我正在尝试编写的 GAE 代码将允许我现有代码中的日志语句在 GAE 上工作。

文档说我可以打印到 system.out 和 system.err,它可以工作,但效果很差。我的日志在日志查看器中显示了太多无关的文本:

2013-03-08 19:37:11.355 [s~satethbreft22/1.365820955097965155].: [my_log_msg]

所以,我开始关注the GAE log API。这最初看起来很有希望:我可以构造一个 AppLogLine 并为 RequestLogs 对象设置日志记录。

但是,无法获取当前请求的 RequestLogs 实例 - 文档是这样说的 explicitly here

注意:目前,App Engine 不支持使用请求 ID 直接查找相关日志。

我想我可以发明一个新的 requestID 并在其中添加日志行,但它开始看起来好像不是故意的?

是否有人使用此 API 创建自己的日志记录,或以其他方式设法将自己的日志记录到日志控制台。

另外,我在哪里可以找到 GAE 的 java.util.logging 的源代码?这是公开的吗?如果可以的话,我想看看它是如何工作的。

如果我想做的事情是不可能的,那么我需要考虑其他选择,例如将我的日志输出写入 FusionTable。

【问题讨论】:

    标签: java google-app-engine logging


    【解决方案1】:

    我最终只是在 GAE 的 java.util.logging 之上分层了我的日志记录代码。这感觉不是最佳的,因为它增加了我的日志记录的复杂性和开销,但我想这是任何 GAE 的第 3 个日志记录框架必须做的(除非在您打印到标准输出时添加的额外内容是可以的)。

    这是我的代码的症结:

    public int println(int priority, String msg) {
        Throwable t = new Throwable();
        StackTraceElement[] stackTrace = t.getStackTrace();
    
        // Optional: translate from Android log levels to GAE log levels.
        final Level[] levels = { Level.FINEST, Level.FINER, Level.FINE, Level.CONFIG,Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE };
        Level level = levels[priority];
    
        LogRecord lr = new LogRecord(level, msg);
        if (stackTrace.length > 2) { // should always be true
            lr.setSourceClassName(stackTrace[2].getClassName());
            lr.setSourceMethodName(stackTrace[2].getMethodName());
        }
        log.log(lr);
        return 0;
    }
    

    请注意,我使用的堆栈深度为 2,但 # 将取决于您的日志记录代码的“深度”。

    我希望 Google 最终会支持获取当前的 com.google.appengine.api.log.RequestLogs 实例并将我们自己的 AppLogLine 实例插入其中。 (API 确实可以做到这一点,但他们明确不支持它,如上所述。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2017-03-06
      • 2018-10-29
      相关资源
      最近更新 更多