Linux 如何跟踪写入同一日志文件的多个线程
我有一个使用12个线程的python进程。所有线程都写入同一个日志文件 我用tail-f跟踪输出,但是正如您所想象的,如果您想跟踪单个进程,那么输出很难读取 需要遵循多个日志文件。它这样做,然后在一个窗口中显示每个日志Linux 如何跟踪写入同一日志文件的多个线程,linux,tail,Linux,Tail,我有一个使用12个线程的python进程。所有线程都写入同一个日志文件 我用tail-f跟踪输出,但是正如您所想象的,如果您想跟踪单个进程,那么输出很难读取 需要遵循多个日志文件。它这样做,然后在一个窗口中显示每个日志 如何跟踪写入同一日志文件的多个线程?如果我正确理解您的问题,您会说:我这里有一个文件,我想知道该文件的哪一部分是由我程序的哪个线程编写的 恐怕这是不可能的:进程可能会锁定文件,这会导致文件和进程之间存在链接,但该文件和该进程内的任何线程之间没有链接。不要忘记,一旦您的进程释放了该
如何跟踪写入同一日志文件的多个线程?如果我正确理解您的问题,您会说:我这里有一个文件,我想知道该文件的哪一部分是由我程序的哪个线程编写的 恐怕这是不可能的:进程可能会锁定文件,这会导致文件和进程之间存在链接,但该文件和该进程内的任何线程之间没有链接。不要忘记,一旦您的进程释放了该锁,您将无法再找到进程和文件之间的任何关系 正如João所建议的那样,您可能会更改进程,以便将特定于线程的信息添加到提到的文件中,但如果不更改进程,恐怕您所要求的是不可能的。为此,我使用sed和stdbuf。。。和猛击 最简单的 sed-u->-无缓冲 sed-n->-安静,-安静 多个:
tail -f mylogfile |
stdbuf -i0 -o0 tee >(
sed -une /thread 1/p >file1
) >(
sed -une /thread 2/p >file2
) >(
sed -une '/thread 3/s/.*/INSERT INTO l_t_3 VALUES (DEFAULT,\o47&\o47);/p' |
someSqlclient
) |
sed -une /last thread/p >lastfile
当然,file1和其他可能是fifo、file、unnamed fifo和通过socat或nc,还有很多其他东西…作为一个想法,您可以将线程id添加到日志中,并执行多个tail-f | grep线程id。注意,您可以通过tail-f/log/domains*/access.log跟踪多个文件。@JoãoGuitana而不是多个tail-f,考虑尾F > CMD1> CMD2·CMD3!看看,谢谢你的评论。这不是我的意思:我有一个日志文件,这个日志文件有行,在这些行上有一个指示器,指示什么线程写了这行。问题是它很难阅读。理想情况下,我正在寻找一个进程,它在子窗口1中显示一行,如果线程1写了这行,子窗口2如果线程2写了这行,等等。啊,好的,你不能将tail-f和grep结合起来吗?比如tail-f logfile.log | grep>logfile?而您有另一个带有tail-f logfile?的子窗口?
-u, --unbuffered
load minimal amounts of data from the input files and flush the output buffers more often
-n, --quiet, --silent
suppress automatic printing of pattern space
tail -f mylogfile |
stdbuf -i0 -o0 tee >(
sed -une /thread 1/p >file1
) >(
sed -une /thread 2/p >file2
) >(
sed -une '/thread 3/s/.*/INSERT INTO l_t_3 VALUES (DEFAULT,\o47&\o47);/p' |
someSqlclient
) |
sed -une /last thread/p >lastfile