如何使用java util logging框架以特定格式为每条记录创建日志文件

时间:2013-12-10 06:54:28

标签: java logging java.util.logging

我想使用java util logging。以下面的格式为每个请求创建日志文件。

YYYYMMDD_HHMMSS.log

任何人请告诉我如何使用java util logging实现此目的?

1 个答案:

答案 0 :(得分:1)

FileHandler不支持通过date and time从LogManager生成文件名。

如果要在启动时生成文件名,可以继承FileHandler并创建静态方法以使用SimpleDateFormat生成文件名。 LogManager支持“配置”选项,该选项还允许您安装自定义代码以设置和安装FileHandler。

public class RollingFileHandler extends FileHandler {

    public RollingFileHandler() throws IOException {
        super(fileName(), 0, 1, true);
    }

    private static String fileName() {
        return new SimpleDateFormat("'%h'yyyyMMdd_HHmmss").format(new Date(System.currentTimeMillis()));
    }
}

如果要为每个LogRecord生成文件名,则必须创建一个自定义Handler,它将在每次发布时创建和关闭FileHandler。

public class DatedFileHandler extends Handler {

    @Override
    public synchronized void publish(LogRecord r) {
        if (isLoggable(r)) {
            try {
                FileHandler h = new FileHandler(fileName(r), 0, 1, true);
                try {
                    h.setLevel(getLevel());
                    h.setEncoding(getEncoding());
                    h.setFilter(getFilter());
                    h.setFormatter(getFormatter());
                    h.setErrorManager(getErrorManager());
                    h.publish(r);
                } finally {
                    h.close();
                }
            } catch (IOException | SecurityException jm) {
                this.reportError(null, jm, ErrorManager.WRITE_FAILURE);
            }
        }
    }

    @Override
    public void flush() {
    }

    @Override
    public void close() {
        super.setLevel(Level.OFF);
    }

    private String fileName(LogRecord r) {
        return new SimpleDateFormat("'%h'yyyyMMdd_HHmmss").format(new Date(r.getMillis()));
    }
}