支持GELF的日志处理程序
pygelf的Python项目详细描述
获取Pygelf
pipinstallpygelf
用法
frompygelfimportGelfTcpHandler,GelfUdpHandler,GelfTlsHandler,GelfHttpHandlerimportlogginglogging.basicConfig(level=logging.INFO)logger=logging.getLogger()logger.addHandler(GelfTcpHandler(host='127.0.0.1',port=9401))logger.addHandler(GelfUdpHandler(host='127.0.0.1',port=9402))logger.addHandler(GelfTlsHandler(host='127.0.0.1',port=9403))logger.addHandler(GelfHttpHandler(host='127.0.0.1',port=9404))logger.info('hello gelf')
消息结构
根据GELF规范,每条消息都有以下必需字段:
- version:'1.1',可以在创建记录器时重写
- 短消息:日志消息本身
- 时间戳:当前时间戳
- level:syslog-compliant日志级别编号(例如,警告将作为4发送)
- host:发送消息的计算机的主机名
- full_消息:此字段包含堆栈跟踪,并且仅在记录异常时写入
try:1/0exceptZeroDivisionErrorase:logger.exception(e)
在调试模式下(使用debug=true选项创建处理程序时),每条消息都包含一些额外的字段(这些字段非常简单):
- _文件
- _行
- u模块
- \u函数
- \u记录器名称
配置
每个处理程序都有以下参数:
- host:GELF输入的IP地址
- port:GELF输入的端口
- debug(默认为false):如果为true,则每条日志消息将包括调试信息:模块名、文件名、行号、方法名
- version(默认为“1.1”):可以重写GELF协议版本
- include_extra_fields(默认为false):如果为true,则每条日志消息将包括设置为logrecord的所有额外字段
- json_default(
str
除了几个datetime
对象之外):函数,用于调用不能由python本机序列化为json的对象。默认实现是自定义函数,它返回datetime.datetime
、datetime.time
、datetime.date
对象的isoformat()
方法的结果,以及str(obj)
调用其他对象的结果(这是对象的字符串表示,返回repr
)
此外,还有一些特定于处理程序的参数。
udp:
- compress(默认为true)-如果为true,则在将日志消息发送到服务器之前压缩它们
TLS:
- validate(默认为false)-如果为true,则验证服务器证书。如果服务器提供了不存在于{STR 1 } $CAA Curts < /强>中的证书,则无法通过TLS 发送日志。
- ca_certs(默认情况下无)-ca束文件的路径。如果validate为true,则需要此参数。
- certfile(默认情况下为none)-指向证书文件的路径,该文件将用于向远程终结点标识自己。当远程服务器需要客户端身份验证时,这是必需的。如果certfile包含私钥,则应将其放在证书之前。
- keyfile(默认为none)-私钥的路径。如果私钥存储在certfile中,则此参数不能为none。
http:
- compress(默认为true)-如果为true,则在将日志消息发送到服务器之前压缩它们
- path('/gelf'默认)-http输入的路径(http://docs.graylog.org/en/latest/pages/sending_data.html#gelf-via-http)
- timeout(默认情况下为5)-如果服务器没有响应,则http客户端在放弃请求之前应等待的秒数
静态字段
如果需要在日志中包含一些静态字段,只需将它们传递给处理程序构造函数。每个附加字段应以下划线开头。不能添加字段'\u id'。
示例:
handler=GelfUdpHandler(host='127.0.0.1',port=9402,_app_name='pygelf',_something=11)logger.addHandler(handler)
动态字段
如果需要将某些动态字段包含到日志中,请使用LoggingAdapter或Logging.Filter将其添加到记录中,并使用设置为true的include_extra_字段创建处理程序。 记录中所有不重要的字段都将发送到graylog2,并在名称前添加“\u”
示例:
classContextFilter(logging.Filter):deffilter(self,record):record.job_id=threading.local().process_idreturnTruelogger.addFilter(ContextFilter())handler=GelfUdpHandler(host='127.0.0.1',port=9402,include_extra_fields=True)logger.addHandler(handler)