我正在尝试将多个服务的日志写入同一个文件,但我给出的滚动策略不起作用,尝试使用基于时间和基于大小的滚动。事情是我的服务正在同时运行并将日志写入本地目录中的同一文件。当尝试通过单个服务写入日志时,它按预期工作。请帮助我尝试使用不同的滚动策略解决此问题。
Appender to log to file ${LOG_FILE} 在控制台日志中显示的最低日志级别 INFO ${LOG_PATH}/archived/log_%d{dd-MM-yyyy}_%i.log 10KB
我正在尝试将多个服务的日志写入同一个文件,但我给出的滚动策略不起作用,尝试使用基于时间和基于大小的滚动。事情是我的服务正在同时运行并将日志写入本地目录中的同一文件。当尝试通过单个服务写入日志时,它按预期工作。请帮助我尝试使用不同的滚动策略解决此问题。
Appender to log to file ${LOG_FILE} 在控制台日志中显示的最低日志级别 INFO ${LOG_PATH}/archived/log_%d{dd-MM-yyyy}_%i.log 10KB
我在使用 Log4j 1.x 时有过与您类似的经历,然后我当时(大约 5-6 年前)调试了一个 appender,并得出以下结论:
我认为您不能将来自多个服务的数据写入同一个文件。换句话说,Logging 框架通常假设只有它可以更改文件。在某些操作系统(Windows)中,如果其他进程重命名/更改当前文件,它甚至会停止写入文件。
当然,它只是一个代码,您可以创建一个更复杂的附加程序,它可能会使其工作,但坦率地说,我认为这不值得付出努力。
所以我建议写入不同的文件,其中文件名可以以包含资源 pid 的方式生成。这种方法的缺点是,如果进程死亡然后重新运行,on-one 将处理旧资源。
另一种方法(有点相似) - 为每个服务创建一个包含日志的文件夹,以便它们根据文件夹获得不同的日志(即使这些文件夹中的文件将具有相同的名称)。