Как следить за несколькими потоками, которые пишут в один и тот же файл журнала - PullRequest
0 голосов
/ 25 октября 2019

У меня есть Python-процесс, который использует 12 потоков. Все потоки пишут в один и тот же лог-файл.

Я следую за выводом с помощью tail -f, но, как вы можете себе представить, вывод трудно читать, если вы хотите следовать отдельным процессам.

Существует multitail для отслеживания нескольких файлов журнала. Это делается путем разбиения экрана на nr-of-logfiles , а затем показывает каждый журнал в одном окне.

Как я могу следить за несколькими потоками, которые пишут в один и тот же файл журнала?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Для этого я использую sed и stdbuf (... и bash;)

tail -f mylogfile | sed -une /mythread/p

Simpliest.

  • sed -u -> --unbuffered

    -u, --unbuffered
         load minimal amounts of data from the input files and flush the output buffers more often
    
  • sed -n -> --quiet, --silent

    -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

Конечно, file1 и другие могут быть fifo, file, unnamed fifo и через socat или nc, многодругие вещи ...

0 голосов
/ 25 октября 2019

Если я правильно понимаю ваш вопрос, вы говорите: у меня есть файл, и я хотел бы знать, какой фрагмент этого файла был написан какой нитью моей программы.

Боюсь,это невозможно: процесс может заблокировать файл, это вызывает связь между файлом и процессом, но нет никакой связи между этим файлом и какими-либо потоками в этом процессе. (Не забывайте, что как только ваш процесс снимает эту блокировку, вы больше не обнаружите никакой связи между процессом и файлом.)

По предложению Жоао, вы можете изменить свой процесс, чтобы добавить потокконкретная информация для упомянутого файла, но, не изменяя ваш процесс, я боюсь, что то, что вы спрашиваете, невозможно.

...