使用带有来自java.util.logging的FileHandler的logger时,不需要.0扩展日志文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带有来自java.util.logging的FileHandler的logger时,不需要.0扩展日志文件相关的知识,希望对你有一定的参考价值。
使用Java.util.logging的FileHandler类创建循环日志。但是为什么这些日志附加了.0扩展名。 .1,.2,.3等都没问题,我只需要.0作为我的文件扩展名,因为它对客户来说很困惑。有没有办法实现同样的目标?我使用的是java版本的java版本“1.8.0_144”。
FileHandler fileTxt = new FileHandler(pathOfLogFile+"_%g.log",
Integer.parseInt(prop.getProperty("MAX_LOG_FILE_SIZE")),
Integer.parseInt(prop.getProperty("NO_OF_LOG_FILES")), true);
SimpleFormatter formatterTxt = new SimpleFormatter();
fileTxt.setFormatter(formatterTxt);
logger.addHandler(fileTxt);
日志文件的名称是LOG_0.log。要求是不要在最新文件上有_0,需要简单的LOG.log。
您必须添加有关如何设置FileHandler的更多信息。包含代码和/或logging.properties
文件。
您很可能正在创建多个打开的文件处理程序,并且在创建下一个文件处理程序之前不会关闭前一个文件处理程序。这可能是由于代码中的错误或者您没有对包含FileHandler的记录器进行强引用而发生的。创建此问题的另一种方法是创建两个正在运行的JVM进程。在这种情况下,您别无选择,只能选择文件名中唯一编号所在位置。
在文件模式中指定%g
标记和%u
。例如,%gfoo%u.log
。
如果未指定“%g”字段并且文件计数大于1,则生成的数字将添加到生成的文件名的末尾,在点之后。
[剪断]
通常,“%u”唯一字段设置为0.但是,如果FileHandler尝试打开文件名并发现该文件当前正被另一个进程使用,它将递增唯一编号字段并再次尝试。这将重复进行,直到FileHandler找到当前未使用的文件名。如果存在冲突且未指定“%u”字段,则会在点后面的文件名末尾添加该字段。 (这将在任何自动添加的世代号之后。)
因此,如果三个进程都试图登录到fred%u。%g.txt,那么他们最终可能会使用fred0.0.txt,fred1.0.txt,fred2.0.txt作为其旋转序列中的第一个文件。
如果您想从第一个文件中删除零,那么开箱即用行为的最佳近似值是将您的代码修改为:
- 如果不存在
LOG_0.log
文件,则使用File.rename将零添加到文件中。这改变了LOG.log
- >LOG_0.log
。 - Trigger a rotation。结果在
LOG_0.log
- >LOG_1.log
等。然后LOG_N.log
- >LOG_0.log
- 使用File.rename从文件中删除零。
LOG_0.log
- >LOG.log
- 打开文件处理程序,将日志数作为一个而不添加。这将擦除最旧的日志文件并启动新的当前日志文件。
这样做的问题是,在单次运行期间,您的代码不会根据文件大小进行旋转。
只需使用记录器名称作为文件名(不要在其中包含%g)。最新的文件是filename.log。另请注意,旋转的文件将以数字作为扩展名。
以上是关于使用带有来自java.util.logging的FileHandler的logger时,不需要.0扩展日志文件的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.ClassCircularityError:来自 Tomcat8 的 java/util/logging/LogRecord
如何映射 java.util.logging 和 SLF4J 记录器的级别?
Undertow java.util.logging:如何使用 java util logging 在运行时更改 undertow 服务器的日志记录级别
Java日志介绍-java.util.logging.Logger