Liferay,如何获得root logger?

时间:2016-06-17 08:04:04

标签: java logging liferay

我正在尝试开发portlet,当在给定时间段内发生一组指定的删除时,它会向管理员发送电子邮件。我正在尝试在liferay中获取root logger,这样我就可以添加我的appender并处理通过日志记录机制传递的所有消息。 我查看了源代码,似乎liferay使用了java.util.logging.LogManager。我做了一个在服务器启动时被触发的钩子。这是我的run()方法:

public void run(String[] ids) throws ActionException {
    System.out.println("initializing");     

    LogListener listener = new LogListener();
    listener.setLevel(Level.ALL);
    listener.setFilter(null);
    Logger.getGlobal().addHandler(listener);

    _log.debug("complete");
}

和LogListener类

package pl.com.mds.portlet.mailing.hook;

import java.util.logging.Handler;
import java.util.logging.LogRecord;

public class LogListener extends Handler {

    @Override
    public void publish(LogRecord record) {
        System.out.println("publishing******");

    }

    @Override
    public void flush() {
        // TODO Auto-generated method stub
        System.out.println("have to flush! *****");
    }

    @Override
    public void close() throws SecurityException {
        // TODO Auto-generated method stub
        System.out.println("close meee!");
    }

}

但是当抛出一些异常时,我无法在控制台publishing******中看到异常堆栈跟踪。如何获取应用程序和表达式中的所有日志? 谢谢:))

2 个答案:

答案 0 :(得分:1)

根记录器可以通过标准程序Logger.getLogger获得("记录器名称在这里")。根记录器的名称为空字符串。因此,您应该按如下方式编辑代码: Logger.getLogger("").addHandler(listener);

答案 1 :(得分:0)

考虑使用LogFactoryUtil。喜欢以下

private static final Log LOG = LogFactoryUtil.getLog(MyPortlet.class);