使用syslog.openlog,我们可以设置一些日志选项,如LOG_NDELAY、LOG_NOWAIT,这些选项都是在<syslog.h>中定义的。我在寻找在logging.handlers.SysLogHander上设置这种日志选项的方法。
我发现LOG_CONS和LOG_PERROR可以通过附加的logging.handers来实现。LOG_NDELAY已经设置好了,因为在实例化处理程序时会打开连接。
我并不真正关心LOG_NOWAIT,因为我主要使用Linux。
那么,如何设置LOG_ODELAY或LOG_PID?
发布于 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 这里中实现的。
if (LogStat & LOG_PID)
fprintf (f, "[%d]", (int) __getpid ());这很容易实现,如默认情况下已经记录了进程ID。和将其公开给格式化程序。。
因此,只需将格式化程序字符串设置为
"[%(process)s] %(levelname)s:%(name)s:%(message)s"而不是默认的
"%(levelname)s:%(name)s:%(message)s"https://stackoverflow.com/questions/45981193
复制相似问题