文件处理程序在我创建文件之前不会开始工作

时间:2014-11-20 10:12:03

标签: java logging config filehandler

我有一个loggers.config文件,它指定一个自定义文件处理程序来格式化日志消息到文件。除非创建具有指定文件模式的默认文件,否则处理程序将无法工作。然后它创建一个新的文件,如图案所指定的那样附加一个0,并开始记录到该文件。如何在不先指定默认文件的情况下将其记录到文件中。

以下是日志记录文件:

handlers=com.daniel.logging.MyFileHandler

# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO

com.daniel.logging.MyFileHandler.level=INFO

# Naming style for the output file: 
com.daniel.logging.MyFileHandler.pattern=daniel%g.log

# Limiting size of output file in bytes -defaulted to 1MB: 
com.daniel.logging.MyFileHandler.limit=1MB

# Number of output files to cycle through, by appending an 
# integer to the base file name: 
com.daniel.logging.MyFileHandler.count=10

# Style of output (Simple or XML): 
com.daniel.logging.MyFileHandler.formatter=com.daniel.logging.MyLogFormatter

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

在安装程序中(这是一个应用程序日志记录属性文件,创建了一个文件,有一行将logger.config文件指定为logger.properties。稍后创建一个文件并输入命令CMD [@] >> default_file 2>& 1.我不确定那行是什么(我对bash来说很新)

1 个答案:

答案 0 :(得分:0)

检查程序正在执行的用户帐户是否具有文件路径的写入权限。

  

com.daniel.logging.MyFileHandler.limit = 1MB

应该改为:

com.daniel.logging.MyFileHandler.limit=1048576

您的文件模式使用相对路径。您应该使用绝对路径或使用home或temp目录的模式。 FileHandler将无法创建新的日志文件if the directory path doesn't exist。在FileHandler创建日志文件之前,目录必须存在。

如果你想在文件模式中使用SimpleDateFormat模式,你可以这样做:

    public final class MyFileHandler extends FileHandler {

        public MyFileHandler() throws IOException {
            super(toPattern());
        }

        private static String toPattern() throws IOException {
            String defaultPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
            String p = MyFileHandler.class.getName();
            String v = LogManager.getLogManager().getProperty(p + ".pattern");
            if (v == null) {
                v = defaultPattern;
            }

            try {
                return new SimpleDateFormat(v).format(new Date());   
            } catch (RuntimeException re) {
                throw new IOException(v, re);
            }
        }
    }

如果您需要轮换支持,可以参考PackageNameFileHandler作为起点。