写我小小的日志系统
配置logging有以下几种方式:
1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;
2)创建一个日志配置文件,标签式的注明【loggers】、【handlers】、【formatters】、【filters】4大组件,前3者必传,后者选传,然后使用fileConfig()
函数来读取该文件的内容;
3)创建一个包含【loggers】、【handlers】、【formatters】、【filters】4大组件配置信息的字典dict,然后把它传递给dictConfig()
函数;
我目前采用的就是第3种方式。
1 # -*- coding: utf-8 -*-
2 import logging
3 from flask import Flask
4 from logging.config import dictConfig
5
6 app = Flask(__name__)
7
8 dictConfig({
9 'version': 1,
10 'formatters': {
11 'standard': {
12 'format': '%(asctime)s.%(msecs)d|%(thread)d|%(levelname)s|%(message)s'
13 , 'datefmt': '%Y-%m-%d %H:%M:%S'}
14 , 'detail': {
15 'format': '%(asctime)s.%(msecs)d|%(thread)d|%(levelname)s|%(filename)s:%(funcName)s line %(lineno)d'
16 , 'datefmt': '%Y-%m-%d %H:%M:%S'
17 },
18 },
19 'filters': {
20 },
21 'handlers': {
22 'default': {
23 'class': 'logging.handlers.RotatingFileHandler', # 将日志消息发送到磁盘文件,并支持日志文件按大小切割
24 'filename': '../logs/info.log', # 日志输出文件
25 'maxBytes': 1024 * 1024 * 5, # 文件大小
26 'formatter': 'standard', # 使用哪种formatters日志格式
27 },
28 'console': {
29 'class': 'logging.StreamHandler',
30 'formatter': 'standard'
31 },
32 'error': {
33 'level': 'ERROR',
34 'class': 'logging.handlers.RotatingFileHandler',
35 'filename': '../logs/error.log',
36 'maxBytes': 1024 * 1024 * 5,
37 'backupCount': 5, # 备份份数
38 'formatter': 'detail',
39 },
40 'request_handler': {
41 'level': 'DEBUG',
42 'class': 'logging.handlers.RotatingFileHandler',
43 'filename': '../logs/script.log',
44 'maxBytes': 1024 * 1024 * 5,
45 'backupCount': 5,
46 'formatter': 'standard',
47 }
48 },
49 'loggers': {
50 'flask': {
51 'handlers': ['default', 'console', 'error'],
52 'level': 'DEBUG',
53 'propagate': True
54 },
55 'flask.request': {
56 'handlers': ['request_handler'],
57 'level': 'DEBUG',
58 'propagate': False,
59 },
60 'weTest.flask': {
61 'handlers': ['error'],
62 'level': 'ERROR',
63 'propagate': True
64 }
65 }
66 })
67
68 logger = logging.getLogger('flask')
69 logger.setLevel(logging.DEBUG)
70
71 if __name__ == '__main__':
72 try:
73 logger.info('info info')
74 logger.debug('debug info')
75 print 1 / 0
76 except Exception as err:
77 logger.error('error message:{0}'.format(err.message), exc_info=True) # 将异常异常信息添加到日志消息中
其他.py文件中应用
1 # test.py
2
3 from utils.log_helper import logger
4
5 try:
6 logger.info('hello world')
7 print 1/0
8 except Exception as err:
9 logger.error('error message:{0}'.format(err.message), exc_info=True)