我正在尝试向我的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
我可以逐个将自定义处理程序添加到记录器中,但我只是想知道是否有办法将其添加到所有记录器中。
由于
答案 0 :(得分:3)
我的应用初始化时,我能够向根Handler
添加Logger
。您可以将此代码放在预热任务或servlet过滤器中。
private static Logger LOG;
...
LOG = Logger.getLogger("");
LOG.addHandler(myCustomHandler);
它不像使用logging.properties那样优雅,但在GAE上运行时它是一个适当的解决方法。
答案 1 :(得分:2)
它可能不是您要寻找的解决方案,但您是否考虑在应用程序中使用Simple Logging Facade for Java (SLF4J)而不是直接使用JUL?
答案 2 :(得分:1)
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;
}
}
}
}