Java 从两个同时进行的进程记录日志

Java 从两个同时进行的进程记录日志,java,unix,logging,operating-system,multiprocessing,Java,Unix,Logging,Operating System,Multiprocessing,我用java编写了一个应用程序,并将其部署在unix服务器上。 我已经在我的应用程序中实现了日志记录,日志生成在一个文件中,比如X.log.txt 如果我使用不同的用户或单个用户不同的会话运行多个jar实例:我在X.log.txt中的日志有可能混在一起吗? 否则将以FCFS方式进行 示例:让P1和P2成为调用java应用程序并生成日志的两个进程 P1和P2同时将各自的日志写入X.log.txt。这句话是真的吗?还是完全基于CPU调度算法(FCFS、SJF等) 即使我不使用时间戳,它对我来说也很

我用java编写了一个应用程序,并将其部署在unix服务器上。 我已经在我的应用程序中实现了日志记录,日志生成在一个文件中,比如
X.log.txt

如果我使用不同的用户或单个用户不同的会话运行多个jar实例:
我在
X.log.txt
中的日志有可能混在一起吗?
否则将以FCFS方式进行


示例:让P1和P2成为调用java应用程序并生成日志的两个进程

P1和P2同时将各自的日志写入
X.log.txt
。这句话是真的吗?还是完全基于CPU调度算法(FCFS、SJF等)

即使我不使用时间戳,它对我来说也很好。
当我执行它们时,会一个接一个地生成日志,这意味着对于特定实例,所有日志都会写入文件,然后再写入下一个实例。我的问题仍然悬而未决,这一切都是基于我们的处理器处理作业的方式,还是其他什么

如果两个进程写入同一个日志文件,数据将随机损坏。你会在中间得到线切割,并从其他日志中完成数据。根据操作系统的不同,您甚至可以在文件的不同位置得到大量二进制零(在某些操作系统中,它将无法同时从两个位置写入同一文件)


写入单独的文件,然后使用一些第三方工具加入/浏览它们,以获得按时间戳排序的视图。

如果两个进程都写入相同的目录和文件路径,则会出现一些奇怪的行为。根据您的实现,两个应用程序将同时写入文件,或者一个应用程序将阻止另一个应用程序写入

我的建议是在运行时生成日志文件的名称,并附加一些唯一的内容,如时间戳或pid(进程id),这样就不会再有冲突:

X.log.[PID].txt
X.log.[TIMESTAMP].txt


注意:您必须在时间戳中使用足够低的分辨率(秒或纳秒),以避免名称冲突。

或通过发送到日志进程来记录,该进程接受来自多个源的完整日志消息,并将它们写入单个日志文件。(与syslog类似,因为OP在Unix系统上)。