У меня есть тестовый заглушка, который будет записывать несколько журнальных сообщений в системный журнал.python отслеживает файл журнала, не блокирующий
Но этот системный журнал также обновляется многими другими приложениями. Итак, в основном, я хочу сделать tail -f system.log | grep "application name"
, чтобы получить только соответствующие сообщения журнала.
Я смотрел на трюки генератор dbaez, и я пытаюсь совместить оба http://www.dabeaz.com/generators/follow.py и http://www.dabeaz.com/generators/apachelog.py
Итак, в моем __main__()
, у меня есть что-то вроде этого:
try:
dosomeprocessing() #outputs stuff to the log file
И в dosomeprocessing (), Я запускаю цикл, и для каждого цикла я хочу посмотреть, есть ли какие-либо новые сообщения журнала, вызванные моим приложением, и не обязательно распечатывать их, но хранить их где-нибудь, чтобы выполнить некоторую проверку.
logfile = open("/var/adm/messages","r")
loglines = follow(logfile)
logpats = r'I2G(JV)'
logpat = re.compile(logpats)
groups = (logpat.match(line) for line in loglines)
for g in groups:
if g:
print g.groups()
Журнал выглядит примерно так:
Feb 4 12:55:27 Someprocessname.py I2G(JV)-300[20448]: [ID 702911 local2.error] [MSG-70047] xxxxxxxxxxxxxxxxxxxxxxx
Feb 4 12:55:27 Someprocessname.py I2G(JV)-300[20448]: [ID 702911 local2.error] [MSG-70055] xxxxxxxxxxxxxxxxxxxxxxx
в дополнение к множеству других gobblygook.
Прямо сейчас, она застревает в для г в группах:
Я относительно новым для питона и асинхронного программирования. В идеале я хотел бы иметь хвост, идущий параллельно основному процессу, и читать новые данные с каждым циклом.
Пожалуйста, дайте мне знать, если мне нужно добавить дополнительную информацию.
ли вращать лог-файл? Ваш 'follow.py' не обрабатывает регистратор, который переименовывает« сообщения », например,« messages.1 », а затем создает новый файл для дополнительных журналов. – tdelaney
Он почти никогда не вращается, имя файла остается неизменным. – roymustang86