标准
支持的日志等级
SyslogHandler
的syslog
协议部分主要遵循RFC5424
.
在安装了systemd
和rsyslog
的设备上, 如果启用了syslog
协议, 日志一般会先经由systemd-journald
管控的/dev/log
套接字, 由rsyslog
从systemd-journald
的socket
中读取日志, 而后根据rsyslog
的过滤器写入到/var/log/messages
中.
支持能力
基于
filter
实现的handler
和logger
, 支持等级控制基于
name
的logger
字典仅支持多线程, 不支持多进程
限制
- 日志紊乱:比如两个进程分别输出xxxx和yyyy两条日志,那么在文件中可能会得到类似xxyxyxyy这样的结果
- 日志丢失:虽然读写日志是使用O_APPEND模式,保证了写文件的一致性,但是由于buffer的存在(数据先写入buffer,再触发flush机制刷入磁盘),fwrite的操作并不是多进程安全的
- 日志丢失的另一种情况:使用RotatingFileHandler或者是TimerRotatingFileHandler的时候,在切换文件的时候会导致进程拿到的文件句柄不同,导致新文件被重复创建、数据写入旧文件
使用说明
formatter可用属性
logging --- Python 的日志记录工具 — Python 3.9.6 文档
handler
SyslogHandler
StreamHandler
场景
作为组件, 整个组件使用一个日志等级, 控制基本的输出等级.
1 |
对日志性能存在要求的日志组件
作为公有库时的日志记录, 跟随对应的入口日志等级进行控制
自定义能力
LogRecord
extra参数
Handler
根据目标的需求, 自定义开发handler.