FileHandler.limit java 7不工作
我对java.util.logging.FileHandler.limit属性有问题,因为文件大小超过了限制大小 以下是我的应用程序中使用的属性FileHandler.limit java 7不工作,java,file,logging,filehandler,Java,File,Logging,Filehandler,我对java.util.logging.FileHandler.limit属性有问题,因为文件大小超过了限制大小 以下是我的应用程序中使用的属性 java.util.logging.FileHandler.pattern = ATMChannelAdapter%u.log java.util.logging.FileHandler.limit = 2000000 java.util.logging.FileHandler.count = 10 java.util.logging.FileHand
java.util.logging.FileHandler.pattern = ATMChannelAdapter%u.log
java.util.logging.FileHandler.limit = 2000000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
它工作正常,然后在某个时候应用程序只写入一个文件,没有超过配置文件大小约1 GB的限制,为了恢复正常配置,我必须重新启动应用程序
操作系统是windows server 2012
爪哇7
有人有类似的问题吗?这是否会在高负载下发生
提前感谢有东西正在重置您的LogManager属性,或者您正在运行。尝试安装以下格式化程序,查看阻止旋转的条件
public class FileSimpleFormatter extends SimpleFormatter {
private static final Field METER;
private static final Field COUNT;
static {
try {
METER = FileHandler.class.getDeclaredField("meter");
METER.setAccessible(true);
COUNT = FileHandler.class.getDeclaredField("count");
COUNT.setAccessible(true);
} catch (RuntimeException re) {
throw re;
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
private volatile FileHandler h;
@Override
public String getHead(Handler h) {
this.h = FileHandler.class.cast(h);
return super.getHead(h);
}
private String check() {
FileHandler target = h;
if (target != null) {
try {
Object os = METER.get(target);
if (os != null && os.getClass().getName().endsWith("MeteredStream")) {
Field written = os.getClass().getDeclaredField("written");
written.setAccessible(true);
Number c = Number.class.cast(COUNT.get(target));
Number w = Number.class.cast(written.get(os));
if (c.intValue() <= 0 || w.intValue() < 0) {
return String.format("target=%1$s count=%2$s written=%3$s%n",
target, c, w);
}
}
} catch (IllegalAccessException ex) {
throw (Error) new IllegalAccessError(ex.getMessage()).initCause(ex);
} catch (NoSuchFieldException ex) {
throw (Error) new NoSuchFieldError(ex.getMessage()).initCause(ex);
}
}
return "";
}
@Override
public String format(LogRecord record) {
return super.format(record).concat(check());
}
}
然后搜索日志文件,看看是否找到了任何东西
更新:Oracle正在处理此问题您发布的配置是否是整个配置?我缺少一行,比如handlers=java.util.logging.FileHandler还有更多配置属性handlers=java.util.logging.ConsoleHandler,java.util.logging.FileHandler.level=INFO'java.util.logging.ConsoleHandler.level=INFO java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter'I还注意到计数和大小工作将在第一卷中进行,然后,当第10个文件达到限制时,不再滚动,并继续按顺序写入最后一个文件。配置看起来正常,它应该按预期工作。您是否尝试过通过代码实例化和配置FileHandler?FileHandlerString模式,整数限制,整数计数。你能试试这个吗?如果通过代码进行配置,我想在读取配置文件时会出现一些问题。谢谢你的回复,我已经在使用这个构造函数了,我面临这个问题,我认为这与JDK 7有关