gpt4 book ai didi

java - 扩展 log4j/slf4j 记录器

转载 作者:行者123 更新时间:2023-12-02 10:39:45 25 4
gpt4 key购买 nike

我所处的情况是多个线程(来自同一个 JVM)正在写入同一个文件(使用 Logger 进行记录)。我需要在某个时候删除这个文件,下次使用记录器将创建该文件和日志。

日志库是同步的,因此我不需要担心并发日志记录到同一文件。

但是...我想添加一个操作该文件的外部操作,并且该操作是删除该文件,因此我必须以某种方式将日志记录(Logger)与该删除操作同步,因为我不想删除当记录器正在工作时文件。

我想到的事情:

  1. 使用FileChannel.lock来锁定文件,Logger 也可以这样做。我决定不这样做,因为:

File locks are held on behalf of the entire Java virtual machine. They are not suitable for controlling access to a file by multiple threads within the same virtual machine.

这意味着在我的情况下(相同的 JVM,多个线程)这不会产生我想要的效果。

我有什么选择?

我在这里错过了一些重要的东西吗?

也许有办法使用记录器中已有的内容来做到这一点?

最佳答案

您似乎正在寻找日志滚动和日志归档功能。日志滚动是 Log4j 和 Logback(SLF4j 也是)中的常见功能。

您可以配置日志库以根据当前文件的大小或一天中的时间创建新的日志文件。您可以配置滚动文件的文件名格式,然后将外部进程存档或删除旧的滚动日志文件。

可以引用this中给出的Log4j 2配置回答。

关于java - 扩展 log4j/slf4j 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53010878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com