如何通过Python登录到journald(systemd)?

d8tt03nd  于 2023-01-19  发布在  Python
关注(0)|答案(4)|浏览(109)

我想把logging.info()转到journald(systemd)。
到目前为止,我只找到了读取journald(不是我想要的)的python模块,或者是这样工作的模块:journal.send('Hello world')

svujldwt

svujldwt1#

python-systemd有一个JournalHandler,您可以将其与日志框架一起使用。
来自文档:

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('demo')
log.addHandler(JournalHandler())
log.setLevel(logging.INFO)
log.info("sent to journal")
ghhaqwfi

ghhaqwfi2#

作为官方软件包的替代品,systemd package支持python 3.6,其源代码也来自github
该实现是官方lib的镜像,有一些小的变化:

import logging
from systemd import journal

log = logging.getLogger('demo')
log.addHandler(journal.JournaldLogHandler())
log.setLevel(logging.INFO)
log.info("sent to journal")

或者对于更短的方法:

from systemd import journal

journal.write("Hello Lennart")
fnx2tebb

fnx2tebb3#

这是一个没有第三方模块的解决方案。它对我来说工作得很好,消息显示在journald中。

import logging
import sys

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# this is just to make the output look nice
formatter = logging.Formatter(fmt="%(asctime)s %(name)s.%(levelname)s: %(message)s", datefmt="%Y.%m.%d %H:%M:%S")

# this logs to stdout and I think it is flushed immediately
handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info('test')
zmeyuzjn

zmeyuzjn4#

这是一种没有第三方模块的替代解决方案

import subprocess

data = "sent to journal"
echoCmd = ["echo", data]
sysdCat = ["systemd-cat", "-p", "info"]

echoResult = subprocess.Popen(echoCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sysdCatResult = subprocess.Popen(sysdCat, stdin=echoResult.stdout)
sysdCatResult.communicate()

相关问题