首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python `LOG_*` `logging.handlers.SysLogHander`中设置`logging.handlers.SysLogHander`选项

在Python `LOG_*` `logging.handlers.SysLogHander`中设置`logging.handlers.SysLogHander`选项
EN

Stack Overflow用户
提问于 2017-08-31 12:12:29
回答 1查看 102关注 0票数 0

使用syslog.openlog,我们可以设置一些日志选项,如LOG_NDELAYLOG_NOWAIT,这些选项都是在<syslog.h>中定义的。我在寻找在logging.handlers.SysLogHander上设置这种日志选项的方法。

我发现LOG_CONSLOG_PERROR可以通过附加的logging.handers来实现。LOG_NDELAY已经设置好了,因为在实例化处理程序时会打开连接。

我并不真正关心LOG_NOWAIT,因为我主要使用Linux。

那么,如何设置LOG_ODELAYLOG_PID

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 12:28:32

查看syslog.openlog,它直接将选项整型传递给openlog(3)

glibc的openlog更深入地调用了openlog_internal,这只是将其设置为LogStat global。

因此,让我们看看您在openlog(3)文档中需要的标志:

LOG_ODELAY:LOG_NDELAY的逆序;连接的打开被推迟到调用syslog()。(这是默认的,不需要指定。)

这似乎只有在您首先使用openlog()时才有意义,而SysLogHandler并没有这样做;它只是通过UDP连接到syslog

您可以实现您自己的SyslogFormatter,它确实使用syslog.openlog()syslog.syslog(),并传递您心中想要的所有标志--我想,stdlib没有这样做的原因是它不是可移植的,因为syslog模块可能无法在例如Windows上使用。

LOG_PID:在每条消息中包含PID。

这是在glibc 这里中实现的。

代码语言:javascript
复制
if (LogStat & LOG_PID)
    fprintf (f, "[%d]", (int) __getpid ());

这很容易实现,如默认情况下已经记录了进程ID。将其公开给格式化程序。

因此,只需将格式化程序字符串设置为

代码语言:javascript
复制
"[%(process)s] %(levelname)s:%(name)s:%(message)s"

而不是默认的

代码语言:javascript
复制
"%(levelname)s:%(name)s:%(message)s"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45981193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档