如何更改Google AppEngine中的日志记录格式

Wil*_*iam 9 logging google-app-engine java.util.logging

AppEngine使用JUL进行日志记录,我已经配置了logging.properties文件并引用了appengine-web.xml中的文件.

问题是AppEngine在控制台日志中显示数据的格式在每个日志行上大约180个字符后被截断.而且由于大部分内容都采用了方法和类名(包括包)和日期,因此没有太多实际的日志消息.

我试图以编程方式和通过logging.properties配置我自己的Formatter,但没有运气.

我意识到我可以通过slf4j,logback或log4j推送所有日志,但我相信这样做会导致所有这样的日志在AppEngine日志控制台中显示为stdout,它具有自己的详细风格.

有没有办法为AppEngine日志定义特定的格式,如果是这样的话?如果每个日志行没有被截断为180个字符,那就足够了.

sap*_*nin 0

进一步深入研究后,我无法让 appengine 运行时拾取自定义 JUL 处理程序或格式化程序。因此,我创建了一个 ServletContextListener 来使用我自己的自定义格式化程序初始化根记录器,如下所示:

<listener>
   <listener-class>MyLoggingListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

这是一个 ServletContextListener 示例:

public class MyLoggingListener implements ServletContextListener
{
    private static Logger LOG;

    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        LOG = Logger.getLogger("");
        Handler[] handlers = LOG.getHandlers();
        for (Handler handler : handlers)
        {
            handler.setFormatter(new MyLogFormatter());
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce)
    {}
}
Run Code Online (Sandbox Code Playgroud)

更新: 上面的代码在开发环境中有效,但在 Appengine 上似乎被忽略。回到这一点上来。