logging打印日志可以便于代码的运营检查。
1. 输出到控制台
logging.basicConfig(
format='%(asctime)s - line:%(lineno)d - %(levelname)s: %(message)s',
level=logging.INFO)
2. 输出到文件
- 当设置filename属性后,logging将不会输出到控制台
LOG_FORMAT = "%(asctime)s %(name)s %(levelname)s %(pathname)s %(message)s "
DATE_FORMAT = '%Y-%m-%d %H:%M:%S %a '
logging.basicConfig(level=logging.INFO,
format=LOG_FORMAT,
datefmt=DATE_FORMAT,
filename=path + filename)
3. 同时输出到文件与控制台
- 采用StreamHandler、FileHandler进行配置
import logging
class Logger(object):
# 日志输出级别
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
def __init__(
self,
filename,
level='info',
fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(filename)
# 设置日志格式
format_str = logging.Formatter(fmt)
# 设置日志级别
self.logger.setLevel(self.level_relations.get(level))
# 输出到控制台
sh = logging.StreamHandler()
sh.setFormatter(format_str)
# 输出到文件
th = logging.FileHandler(
filename=filename,
encoding='utf-8',
mode='a')
th.setFormatter(format_str)
self.logger.addHandler(sh)
self.logger.addHandler(th)
if __name__ == '__main__':
log = Logger('print.log', level='info')
for i in range(10):
log.logger.info(i)
4. django自带的日志模板
在django的setting.py文件中可以直接配置logging
LOGGING = {
"version": 1,
"disable_existing_loggers": False, # 禁用已经存在的logger实例
"filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
"formatters": { # 定义了两种日志格式
"verbose": { # 详细
'format': '%(asctime)s - %(levelname)s: %(message)s',
},
'simple': { # 简单
'format': '%(asctime)s - %(levelname)s: %(message)s'
},
},
"handlers": { # 定义了两种日志处理方式
'log_file': { # 对INFO级别以上信息以日志文件形式保存
'level': "INFO",
'class': 'logging.handlers.RotatingFileHandler', # 滚动生成日志,切割
'filename': os.path.join(BASE_DIR, 'logs', 'web_query.log'), # 日志文件名
'maxBytes': 1024 * 1024 * 10, # 单个日志文件最大为10M
'backupCount': 5, # 日志备份文件最大数量
'formatter': 'simple', # 简单格式
'encoding': 'utf-8', # 放置中文乱码
},
"console": { # 打印到终端console
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "verbose",
},
},
"root": {"level": "INFO", "handlers": ["console", "log_file"]},
"loggers": {
'django': {
'handlers': ['console', 'log_file'],
'level': 'INFO',
'propagate': True,
},
},
}