日志
快速入门:
import logging
logging.basicConfig(level=logging.INFO)
logging.info('Hello World')
参见
应用案例1:
imapclient(v2.2.0)
库。 imapclient.py line:44。应用案例2
core
库
初始化basicConfig配置
logging.basicConfig只在第一次调用的时候生效。 basicConfig函数是通过logging.root.handles的元素数量来判断是否第一次调用:
logging.basicConfig(level=logging.INFO)
# 重置配置
# 日志级别改为默认值
logging.root.setLevel(logging.WARNING)
logging.root.handlers.clear()
# 重新设置
logging.basicConfig(level=logging.ERROR)
getLogger
1import logging
2
3logger = logging.getLogger(__name__)
4h = logging.StreamHandler()
5h.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(module)s:%(funcName)s - %(message)s"))
6logger.addHandler(h)
7logger.setLevel(logging.INFO)
8logger.info("message")
如果这个代码文件有可能是作为启动入口的位置,那就应该加上4-7行代码,作为第一次设置日志配置
logger.setLevel应该跟logger.addHandler搭配使用,只调用setLevel是没有效果的。
基础
[便利函数](#便利函数)
[记录日志到文件](#记录日志到文件)
[日志级别](#日志级别)
其他
进阶
[记录器](#Logger)(暴露了应用程序代码直接使用的接口)
- [处理程序Handler](#处理程序)(将日志记录发送到适当的目标)
SMTPHandler日志发送邮件
格式化程序Formatter(指定最终输出中日志记录的样式)
过滤器(提供更精细的附加功能,用于确定要输出的日志记录)
配置日志记录
LogRecord属性
记录日志到文件
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s- %(message)s',
datefmt='%m%d%Y%I:%M%S%p')
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
对 basicConfig() 的调用应该在 debug() , info() 等的前面。因为它被设计为一次性的配置,只有第一次调用会进行操作,随后的调用不会产生有效操作。
如果多次运行上述脚本,则连续运行的消息将追加到文件 example.log 。 如果你希望每次运行重新开始,而不是记住先前运行的消息,则可以通过将上例中的调用更改为来指定 filemode 参数:
import logging
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
禁用日志
logging.disble()函数禁用了这些消息,这样就不必进入到程序中,手工删除所有日的日志调用。 只要向logging.disble()传入一个日志级别,它就会禁止该级别和更低级别的所有日志消息。所以,如果想 要禁用所有日志,只要在程序中添加logging.disable(logging.CRITICAL)。
记录器
创建
import logging
logger = logging.getLogger('name')
警告
直接实例化: logger = logging.Logger('name')
是错误的做法
配置
Logger.setLevel()指定记录器将处理的最低严重性日志消息。
Logger.addHandler()和Logger.removeHandler()从记录器对象中添加和删除处理程序对象。
Logger.addFilter()和Logger.removeFilter()可以添加或移除记录器对象中的过滤器。
处理程序Handler
SMTPHandler
该实例使用电子邮件的发件人、收件人地址和主题行进行初始化。 toaddrs 应当为字符串列表。 要指定一个非标准 SMTP 端口,请使用 (host, port) 元组格式作为 mailhost 参数。 如果你使用一个字符串,则会使用标准 SMTP 端口。 如果你的 SMTP 服务器要求验证,你可以指定一个 (username, password) 元组作为 credentials 参数。
要指定使用安全协议 (TLS),请传入一个元组作为 secure 参数。 这将仅在提供了验证凭据时才能被使用。 元组应当或是一个空元组,或是一个包含密钥文件名的单值元组,或是一个包含密钥文件和证书文件的 2 值元组。 (此元组会被传给 smtplib.SMTP.starttls() 方法。):
import logging
import logging.handlers
logger = logging.Logger('email')
logger.setLevel(logging.WARNING)
eh = logging.handlers.SMTPHandler(mailhost=('smtp.exmail.qq.com',587),
fromaddr='username',toaddrs=['username'],
subject = 'logging测试',credentials= ('username','pwd'),
secure =tuple(),timeout=300)
# 处理程序处理级别
eh.setLevel(logging.ERROR)
logger.addHandler(eh)
logger.warning('警告消息1')
# 发送邮件
logger.error('错误消息1')
# 发送第二封邮件
logger.error('错误消息2')
Django配置日志
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
# 根日志器的配置。
'root': {
'handlers': ['console'],
'level': 'WARNING',
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
# 是否广播给父日志器, 默认为广播到logger.root, root的配置的效果被触发。
'propagate': False,
},
},
}