我正在使用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将不胜感激。
谢谢&问候, 拉杰夫
答案 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。如果您没有看到此文件出现,那么您就知道您的日志文件未被提取。
如果这个文件被拿起;然后我会试着找出你的配置不起作用的原因。我在日志记录的配置问题上浪费了太多时间,这些问题与实际配置文件实际上没有关系。