【问题标题】:How to add custom log handler to Google App Engine?如何将自定义日志处理程序添加到 Google App Engine?
【发布时间】:2012-03-23 14:40:54
【问题描述】:

我正在尝试将自定义日志处理程序添加到我的 java 应用程序。我已经实现了一个扩展 java.util.Logging.Handler 类的 InnerLogger 类。在我的 logging.properties 中声明为处理程序:

handlers:com.mycompany.util.InnerLogger

但是当我启动开发服务器时,我得到了以下错误:

Can't load log handler "com.mycompany.util.InnerLogger"
java.lang.ClassNotFoundException: com.mycompany.util.InnerLogger

我可以将我的自定义处理程序一个一个添加到记录器,但我只是想知道有没有办法将它添加到所有记录器。

谢谢

【问题讨论】:

标签: java google-app-engine java.util.logging


【解决方案1】:

当我的应用程序初始化时,我能够将Handler 添加到根Logger。您可以将此代码放在预热任务或 servlet 过滤器中。

private static Logger LOG;

...

LOG = Logger.getLogger("");
LOG.addHandler(myCustomHandler);

它不像使用 logging.properties 那样优雅,但在 GAE 上运行时它是一种适当的解决方法。

【讨论】:

  • 这对我有用,尽管它最终创建了重复的日志记录语句,因为我只是调用了 LOG.addHandler(myCustomHandler)。要解决这个问题,您可以删除从 LOG.getHandlers() 返回的现有处理程序,然后添加您的自定义处理程序。
  • +1 从 GAE 1.9.1 开始是否仍然需要解决方法?我们是否知道忽略 logging.properties 中的设置的技术原因?
【解决方案2】:

它可能不是您正在寻找的解决方案,但您是否考虑过在您的应用程序中使用 Simple Logging Facade for Java (SLF4J) 而不是直接使用 JUL?

【讨论】:

  • 这就是我最终要做的,将 SLF4J 与 Log4J 和自定义附加程序一起使用。
【解决方案3】:
    public static void addStreamHandler(){

    // TODO check if appCode has X length
    CustomHandler handler = new CustomHandler();
    LogManager manager = LogManager.getLogManager();
    Enumeration<String> e = manager.getLoggerNames();
    while (e.hasMoreElements()){

        Logger logger = manager.getLogger(e.nextElement());
        if ( logger.getName().startsWith("com.google"))continue;
        logger.addHandler(handler);
        System.out.println(logger.getName());
    }
    System.out.println("***finished*****");
}

public static void removeStreamHandlers(){

    LogManager manager = LogManager.getLogManager();
    Enumeration<String> e = manager.getLoggerNames();
    while (e.hasMoreElements()){

        Logger logger = manager.getLogger(e.nextElement());
        Handler[] handlers = logger.getHandlers();
        for ( int i = 0; i < handlers.length; i++){
            Handler h = handlers[i];
            if (h instanceof CustomHandler){
                logger.removeHandler(h);
                break;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2015-08-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多