java调用其他类中的Logger类

zc0qhyus  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(134)

我用静态方法写了一个单独的类MyLogger

static public void setup(String className, Exception e, Level level) {

    System.out.println("className = " + className);
    Logger logger = Logger.getLogger(className);
    logger.setLevel(Level.INFO);


    try {
        fileTxt = new FileHandler("Logging.%u.%g.txt",1024 * 1024, 10, true );
        // create a TXT formatter
        formatterTxt = new SimpleFormatter();
        fileTxt.setFormatter(formatterTxt);

        logger.addHandler(fileTxt);
        logger.log(level, e.toString(), e);
    } catch (IOException | SecurityException ex) {
        System.out.println("SecurityException ");
        Logger logger2=Logger.getLogger(MyLogger.class.getName());
        logger2.addHandler(new ConsoleHandler());
        logger2.log(Level.SEVERE, null, ex);
    }

}

这个静态方法接收字符串className,我将它作为参数放入Logger.getLogger()。
在另一个类中,我调用MyLogger.setup(CommonFrame.class.getName(),e,Level.SEVERE)。一切正常。但问题是,在文件中我得到了“May 25,2014 2:05:30 PM javagui.MyLogger setup”,我认为它应该改为“May 25,2014 2:05:30 PM javagui.CommonFrame”,因为我将该名称分配给了日志记录器。我对吗?如果是,我该如何修复它?

lf5gs5x2

lf5gs5x21#

您已经使用java.util.logging.SimpleFormatter的format属性来使用记录器名称,而不是源类名。
修改启动脚本以设置以下系统属性:

-Djava.util.logging.SimpleFormatter.format="%1$tc %3$s%n%4$s: %5$s%6$s%n"

或者修改您的logging.properties以包括:

java.util.logging.SimpleFormatter.format=%1$tc %3$s%n%4$s: %5$s%6$s%n

否则,您可以创建一个自定义formatter,并使用它提取您希望在日志文件中看到的information

tquggr8v

tquggr8v2#

可以使用log(LogRecord)方法并指定类名。

static public void setup(String className, Exception e, Level level) {

    [...]

    try {
        [...]
        logger.addHandler(fileTxt);
        LogRecord record = new LogRecord(level, e.toString());
        record.setThrown(e);
        record.setSourceClassName(className);
        record.setSourceMethodName("");
        logger.log(record);
    } catch (IOException | SecurityException ex) {
        [...]
    }

}

相关问题