JDK日志轮换

时间:2015-01-28 13:20:20

标签: java logging hazelcast jdk1.6

我正在使用JDK日志记录,我正在尝试根据大小设置日志的日志轮换。配置文件logging.properties的设置如下所示:

# Specify the handlers to create in the root logger
# (all loggers are children of the root logger)
# The following creates two handlers
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
#handlers = java.util.logging.ConsoleHandler
#handlers = java.util.logging.FileHandler

# Set the default logging level for the root logger
.level = INFO

# Set the default logging level for new ConsoleHandler instances
java.util.logging.ConsoleHandler.level = INFO

# Set the default logging level for new FileHandler instances, INFO, FINEST...
java.util.logging.FileHandler.level = INFO

# Set the default formatter for new ConsoleHandler instances
#java.util.logging.ConsoleHandler.formatter = com.hazelcast.impl.LogFormatter
#java.util.logging.FileHandler.formatter = com.hazelcast.impl.LogFormatter
#java.util.logging.FileHandler.pattern = ./hazelcast%u.log

# Set the default logging level for the logger named com.hazelcast
com.hazelcast.level = INFO

# Limiting size of output file in bytes: 
java.util.logging.FileHandler.limit=1024

# Number of output files to cycle through, by appending an 
# integer to the base file name: 
java.util.logging.FileHandler.count=10

我看到日志已写入文件但我没有看到基于size的日志轮换有任何影响。我正在使用hazelcast API实现记录器,我正在尝试通过file配置属性.Help将不胜感激。

谢谢&问候, 拉杰夫

2 个答案:

答案 0 :(得分:0)

根据Hazelcast Logging Configuration,默认日志记录框架是JDK日志记录。因此,所有配置都在logging.properties中设置。

日志文件的大小必须超过轮换前的限制(1024)。您有在日志记录属性中设置模式,因此FileHandler将默认为以'java0.log.0'开头的主文件夹。

以下代码是您的日志记录属性的自包含转换,不需要在启动时设置任何系统属性。

    public class JdkLogRotation {

        private static final String LOGGER_NAME = "com.hazelcast";
        private static final int LIMIT = 1024;
        private static final int COUNT = 10;
        private static final Logger logger = Logger.getLogger(LOGGER_NAME);

        public static void main(String[] args) throws Exception {
            Properties props = create();
            read(LogManager.getLogManager(), props);
            String msg = message();
            for (int i = 0; i <= COUNT; ++i) {
                logger.log(Level.INFO, msg);
            }

            /*
            try (FileOutputStream out = new FileOutputStream(
                    new File(System.getProperty("user.home"),
                            "jdklogrotation.properties"))) {
                props.store(out, "JDK log rotation");
                out.flush();
            }*/
        }

        private static String message() {
            char[] c = new char[LIMIT + 1];
            Arrays.fill(c, 'A');
            return String.valueOf(c);
        }

        private static Properties create() {
            Properties props = new Properties();
            props.setProperty("handlers", "java.util.logging.ConsoleHandler, java.util.logging.FileHandler");
            props.setProperty(".level", "INFO");
            props.setProperty("java.util.logging.ConsoleHandler.level", "INFO");
            props.setProperty("java.util.logging.FileHandler.level", "INFO");
            props.setProperty("java.util.logging.FileHandler.limit", String.valueOf(LIMIT));
            props.setProperty("java.util.logging.FileHandler.count", "10");
            props.setProperty(LOGGER_NAME + ".level", "INFO");
            return props;
        }

        private static void read(LogManager manager, Properties props) throws IOException {
            final ByteArrayOutputStream out = new ByteArrayOutputStream(512);
            props.store(out, "No comment");
            manager.readConfiguration(new ByteArrayInputStream(out.toByteArray()));
        }
    }

在用户主文件夹中创建以下日志文​​件名:

java0.log.0
java0.log.1
java0.log.2
java0.log.3
java0.log.4
java0.log.5
java0.log.6
java0.log.7
java0.log.8
java0.log.9

假设您的logging.properties已加载且没有任何重置您的LogManager,您应该会看到相同的输出。

答案 1 :(得分:0)

Hazelcast日志记录(更多的是一般的日志记录问题)有时可能是一个大的PITA。

首先确保您通过系统属性配置了日志记录,不要依赖hazelcast.xml文件中的属性,因为可能是在加载此文件之前触发了记录器,然后事情就变得质朴了。 / p>

类似于-Dhazelcast.logging.type = jdk。

如果你的hazelcast.xml文件中有这个,请删除hazelcast.logging.type。

第二步:您是否看到了hazelcast.log的创建?为了确保你的日志配置被选中,给它一个完全不同的名称,只是为了完全确定它被拿起,例如蒙蒂 - python.log。如果您没有看到此文件出现,那么您就知道您的日志文件未被提取。

如果这个文件被拿起;然后我会试着找出你的配置不起作用的原因。我在日志记录的配置问题上浪费了太多时间,这些问题与实际配置文件实际上没有关系。