【发布时间】:2019-10-24 19:08:16
【问题描述】:
我正在尝试将 Log4j2 配置为以毫秒级别的粒度滚动和记录文件。
我用过的配置(相关部分)如下:
status=error
dest = err
property.filename = logs/dims/${env:HOSTNAME}/logging-${date:yyyy-MM-dd'T'HH:mm:ss,SSSSS}.log
appenders = console, rolling
## Rolling File Appender
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.append = true
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/dims/${env:HOSTNAME}/logging-%d{yyyy-MM-dd'T'HH:mm:ss,SSSS}.log
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
rootLogger.level = info
rootLogger.appenderRefs = console, rolling
rootLogger.appenderRef.console.ref = STDOUT
rootLogger.appenderRef.rolling.ref = RollingFile
正在以所需的粒度创建日志文件,但我在控制台中看到如下错误:
2019-06-10 10:57:41,689 主要错误无法将文件 logs/dims/dsp/logging-2019-06-10T10:57:31,00358.log 移动到 logs/dims/dsp/logging-2019 -06-10T10:57:41,0587.log: java.nio.file.NoSuchFileException 日志/dims/dsp/logging-2019-06-10T10:57:31,00358.log -> 日志/dims/dsp/logging -2019-06-10T10:57:41,0587.log
但是当我执行ls 时,错误中的两个文件logging-2019-06-10T10:57:31,00358.log 和logging-2019-06-10T10:57:41,0587.log 存在。
有人可以帮助我了解导致此错误的原因以及如何防止它吗?
【问题讨论】:
-
日志文件命名约定不正确,它包含文件名中不允许的特殊字符。将
filePattern更改为有效值并尝试。 -
哪些字符?它们在 linux 中是允许的,并且正在创建文件。
-
冒号
:是无效字符。它在linux中有效,但在windows中无效。 Java 不支持可能是由于应用程序的可移植性。 -
这确实是问题所在。我在 Windows 10 上运行这个 Ubuntu shell。我猜由于文件名中的冒号,底层 Windows 会导致一些问题。感谢您的帮助。
标签: java logging log4j log4j2 rollingfileappender