Python 2.7: setlogmask (0) не отключает системный журнал - PullRequest
1 голос
/ 09 мая 2019

Я новичок в Python, и следующий код написал следующие сообщения в / var / log / syslog

May  8 22:14:22.531833 almach <info>./test.txt: HELLO 01
May  8 22:14:22.531853 almach <info>./test.txt: HELLO 02
May  8 22:14:22.531860 almach <info>./test.txt: HELLO 03

Итак, почему

  1. Сообщениябыли записаны в / var / log / syslog, а не ./test.txt?

  2. setlogmask (0) была неэффективной, а сообщение "HELLO 02" было записано в системный журнал?

Кроме того, я протестировал код на машине с Linux, на котором запущен демон rsyslogd, и это могло как-то повлиять на мой код.

from syslog import syslog, setlogmask, LOG_INFO, openlog

openlog('./test.txt')

syslog(LOG_INFO, "HELLO 01")

setlogmask(0)
syslog(LOG_INFO, "HELLO 02")

setlogmask(255)
syslog(LOG_INFO, "HELLO 03")

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Вам нужно использовать LOG_MASK(0), чтобы избежать записи HELLO 02 и запомнить предыдущее значение маски, чтобы восстановить его перед записью HELLO 03:

from syslog import syslog, setlogmask, LOG_INFO, LOG_MASK, openlog

openlog('./test.txt')

syslog(LOG_INFO, "HELLO 01")

mask = setlogmask(LOG_MASK(0))
syslog(LOG_INFO, "HELLO 02")

setlogmask(mask)
syslog(LOG_INFO, "HELLO 03")

Результат в /var/log/syslog:

May  9 01:49:39 sanyash-ub16 ./test.txt: HELLO 01
May  9 01:49:39 sanyash-ub16 ./test.txt: HELLO 03
1 голос
/ 09 мая 2019

С syslog.openlog manual:

Необязательный аргумент ключевое слово identifier - это строка, которая добавляется к каждому сообщению и по умолчанию sys.argv[0] с удаленными начальными компонентами пути.

Чтобы сохранить журналы в отдельном файле, используйте logging.handlers.SysLogHandler: Как настроить ведение журнала в syslog в Python?

...