基础
import logging
import os
log_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'example.log')
logging.warning('Watch out!')
logging.info('I told you so.')
# basicConfig 必须在调用info, debug等之前首先被调用,如果在前面的两行代码没有注释,这里的basicConfig不会生效
logging.basicConfig(filename=log_file, level=logging.DEBUG)
logging.debug('This is debug log.')
logging.info('This is info log.')
logging.warning('This is warn log.')
# 通过命令行的方式
# 假设已经通过命令行 --log=DEBUG或者--log=debug等方式获取到了设定的级别,并且保存到了下面的变量中
loglevel = 'DEBUG'
# 我们可以通过下面的方式进行处理
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level)
# basicConfig默认是在日志文件后面追加,如果需要每次写入新的日志内容,可以指定filemode参数为w即可
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
# 日志里面包含变量
var1 = 'var1'
var2 = 1001
logging.warning('The var1 is: %s and var2 is: %d', var1, var2)
# 改变日志格式, datefmt和time模块的strftime格式一致
logging.basicConfig(format='%(asctime)s-%(levelname)s-%(message)s', level=logging.DEBUG, datefmt='%Y%m%d')
logging.info('test message')
import logging
import os
# 日志级别分为了debug, info, warn, error, critical
# 默认情况下只会输出warn级别的日志
# logging.warning('warn-demo, %s', 1)
# logging.info('info-demo')
# 可以通过basicConfig配置日志级别,但是需要在使用任何日志之前进行配置
# logging.basicConfig(level=logging.DEBUG)
# logging.warning('warn-demo, %s', 1)
# logging.info('info-demo')
# 还可以定制化输出结果
# https://docs.python.org/3/library/logging.html#logrecord-attributes
# logging.basicConfig(format='%(asctime)s %(name)s [SKS-%(levelname)s]: %(message)s', level=logging.DEBUG, datefmt='%Y-%m-%d %H:%M:%S')
# logging.info('test message')
# logger的方式
# logger = logging.getLogger('main')
# logger.setLevel(logging.DEBUG)
# sh = logging.StreamHandler()
# sh.setLevel(logging.DEBUG)
# logger.addHandler(sh)
# logger.debug('debug')
# 输出到文件
# logger = logging.getLogger('main')
# logger.setLevel(logging.DEBUG)
#
# formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#
# sh = logging.StreamHandler()
# sh.setLevel(logging.ERROR)
# sh.setFormatter(formatter)
# logger.addHandler(sh)
#
# log_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'log.txt')
# fh = logging.FileHandler(log_file)
# fh.setFormatter(formatter)
# fh.setLevel(logging.DEBUG)
# logger.addHandler(fh)
#
# logger.debug('debug')
# logger.error('error')
#
# other_logger = logging.getLogger('main.sub')
# other_logger.error('other logger')
RotatingFileHandler
# -*- coding:utf-8 -*-
import logging
import os
from logging.handlers import RotatingFileHandler
def mylogger():
dstfile = os.path.join(os.path.split(os.path.abspath(__file__))[0], "myflask.log")
formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(name)s - %(levelname)s - %(message)s', "%Y-%m-%d %H:%M:%S")
handler = RotatingFileHandler(dstfile, maxBytes=1024000, backupCount=10)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
logger = logging.getLogger("main")
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
return logger