【问题标题】:Log4j2 'Unable to move file' error when using RollingFileAppender with millisecond level rolling使用具有毫秒级滚动的 RollingFileAppender 时出现 Log4j2“无法移动文件”错误
【发布时间】: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.loglogging-2019-06-10T10:57:41,0587.log 存在。

有人可以帮助我了解导致此错误的原因以及如何防止它吗?

【问题讨论】:

  • 日志文件命名约定不正确,它包含文件名中不允许的特殊字符。将filePattern 更改为有效值并尝试。
  • 哪些字符?它们在 linux 中是允许的,并且正在创建文件。
  • 冒号 : 是无效字符。它在linux中有效,但在windows中无效。 Java 不支持可能是由于应用程序的可移植性。
  • 这确实是问题所在。我在 Windows 10 上运行这个 Ubuntu shell。我猜由于文件名中的冒号,底层 Windows 会导致一些问题。感谢您的帮助。

标签: java logging log4j log4j2 rollingfileappender


【解决方案1】:

我在 Windows 10 的 Ubuntu bash 控制台上运行它。虽然 bash 控制台提供了类似 Linux 的界面,但我猜文件名中可接受的字符仍然由底层 Windows 系统决定。正在创建日志文件,但由于文件名中的:,记录器似乎无法滚动到新文件。

根据 Vikas 的评论,我在 Linux 机器上运行了相同的代码,然后没有错误。

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2018-01-27
    • 2019-03-17
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    相关资源
    最近更新 更多