Sus*_*sie 5 java linux logging java.util.logging
这个项目已传给我,所以我对此并不了解.有一种方法,使用log(java.util.logging.Logger)并创建两个日志文件:
第一个文件:fileName.log
第二个文件:fileName.log.lck
在Linux中,当我这样做时lsof,我看到这两个文件是打开的.如何关闭这两个文件?
我想关闭这些文件的原因是这种方法每天运行多次,几周后打开文件的数量达到一个限制(大约1000),此时我们的系统停止工作.当我们重新启动我们的进程(执行日志记录的"作业控制器")时,打开的日志文件数会变为0并再次运行.
这是做日志记录所做的
private static Logger log = Logger.getLogger(MyClass.class.getPackage().getName());
try{
log.logp(Level.SEVERE, "com.MyClass", "run", "It failed");
}
Run Code Online (Sandbox Code Playgroud)
这是我试图关闭finally块中的文件,但它不起作用
finally{
Handler[] handler = log.getHandlers();
for(Handler h: handler){
h.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我只是用:
LogManager.getLogManager().reset();
Run Code Online (Sandbox Code Playgroud)
这将取消所有日志设置(日志文件路径,文件名模式,格式化程序...)但它将停止使用记录器关闭锁定文件并释放记录器
第一个解决方案
如果您不想修改代码,请使用:How to send java.util.logging to log4j? java.util.logging.Logger 使用 SLF4J 到 Logback?
我使用log4j或logback。两者都有滚动文件附加器(旧文件被删除)或日期/时间文件附加器。
第二种解决方案
对于日志记录,最好的用法是滚动文件。
String filePattern = " fileName%.log";
int limit = 1000 * 1000; // 1 Mb
int numLogFiles = 3;
FileHandler fh = new FileHandler(filePattern, limit, numLogFiles);
// Add to logger
Logger logger = Logger.getLogger(MyClass.class.getPackage().getName());
logger.addHandler(fh);
Run Code Online (Sandbox Code Playgroud)
我不知道你是否可以添加全局文件处理程序。
| 归档时间: |
|
| 查看次数: |
8174 次 |
| 最近记录: |