创建新的记录器

Creating new Logger

我正在尝试为我的插件创建一个新的记录器。但是它不会向文件写入任何内容。日志记录事件没有提供任何错误。如果我不提供处理程序,我可以在控制台中获取所有日志事件。

记录器似乎正在处理该文件,因为它创建了一个 chatlog.log.lck 文件。

随后,有没有办法将记录到我的 "new" 记录器的内容也记录到控制台?

private void setupLogger() {

    logger = Logger.getLogger("WeChat");

    File lf = new File(getDataFolder() + File.separator + "logs");

    if (!(lf.exists())){
        lf.mkdirs();
    }

    try {
        FileHandler fh = new FileHandler(getDataFolder() + File.separator + "logs" + File.separator + "chatlog.log", true);
        SimpleFormatter fmt = new SimpleFormatter();
        fh.setFormatter(fmt);
        logger.addHandler(fh);
        logger.setLevel(Level.INFO);
    } catch (SecurityException | IOException e) {
        e.printStackTrace();
    }

}

我再次可以在控制台中输入,只是没有文件

[23:48:24 INFO]: [WeChat] [Channel TheLounge] WASasquatch: Hello everyone!?
[23:48:30 INFO]: [WeChat] [Channel TheLounge] WASasquatch: Test test
[23:48:36 INFO]: [WeChat] [Channel TheLounge] WASasquatch: This in the log file now?

FileHandler中有一个构造函数来设置文件是否追加。 (并在需要时设置滚动文件系统,存在没有滚动系统的相同构造函数)。

public FileHandler(String pattern,
       int limit,
       int count,
       boolean append)
        throws IOException,
               SecurityException

根据需要定义此处理程序的级别,defaults to Level.ALL

这是一个快速示例:

public class Main {

    static Logger logger;

    public static void main(String[] args) {
        logger = Logger.getLogger("Main");
        FileHandler fh;

        File lf = new File("data" + File.separator + "logs" + File.separator + "chatlog.log");

        if (!(lf.getParentFile().exists())){
            lf.getParentFile().mkdirs();
        }


        try {
            fh = new FileHandler(lf.getCanonicalPath(), 8096, 1, true);
            logger.addHandler(fh);
            logger.setLevel(Level.INFO);
            SimpleFormatter fmt = new SimpleFormatter();
            fh.setFormatter(fmt);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        logger.info("foo");
        logger.info("bar");
    }
}

请注意使用 File 实例路径而不是重新创建字符串的更新。

我使用 none 现有文件夹。启动进程两次,如预期的那样,文件作为两次执行的行。