python如何输出log¶
在一个后台应用程序中,经常会有这样的需求,输出程序的运行事件到一个文件中,以便管理员进行事后 问题分析和定位。
在linux中,系统提供了syslog机制,程序可以调用syslog函数来将事件写入文件中,并且可以统一的控制 事件的输出级别。
在python中,有一个模块logging提供了类似的功能。它实现了非常方便的事件记录机制。它主要包含三个 功能 :
- 输出程序的事件并发送到相应的文件或远端IP.
- 统一控制事件的输出级别。
- 格式化程序输出到日志文件中的格式。
logging 的输出级别包含以下几个,数字越大,表示越重要。
- CRITICAL 50
- ERROR 40
- WARNING 30
- INFO 20
- DEBUG 10
下面代码将日志输出到文件syslog.log中,并且输出级别为INFO, 大于等于INFO级别的均会输出, 小于INFO级别的不会输出到文件中:
import logging
logging.basicConfig(filename='syslog.log',level=logging.INFO)
logging.debug('This message not to the log file')
logging.info('hello china')
logging.warning('hello beijing')
其中”hello china”和”hello beijing”会输出到syslog.log文件中,其他的不会输出到log文件中。
如果不调用basicConfig函数对输出文件和级别进行控制,默认的输出级别为WARNING,并且默认输出到屏幕中。
如果需要像syslog一样将事件消息可以输出到一个远端的服务器上,那就需要和SysLogHandler类配合使用,函数原型:
class logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT),
facility=LOG_USER, socktype=socket.SOCK_DGRAM)
详见: https://docs.python.org/3.6/library/logging.handlers.html