1,起因
- 感觉应该有很多python小白都是print大法,而比较少用python的官方logging
- 可能有一些同学享用python的logging但是又一时半会配置不好
- 所以就分享出来啦 ~~ 复制粘贴即可使用
2, 坑。。。。
- 问题:用的的时间大小隔断模式,但是发现有一些崩溃重启了的任务会发生部分数据丢失…
- 用多线程的时候没有在 logging.getLogger(log_name)这里填入log_name,导致多个线程拿到的都是root对象,虽然单个线程的日志单独一个文件,但是会乱入其他线程的数据
- 控制台输出,这个在调试的时候可以加上,非常方便(Ps:刚开始也纠结过为什么日志木有输出到控制台。。。。尴尬)
def log_init(log_name="test.log", level="INFO"):
LOGDIR = "./log/"
if not os.path.exists(LOGDIR):
os.mkdir(LOGDIR)
log_name = "{}/{}".format(LOGDIR, log_name)
# 确定日志的格式
log_fmt = '[%(asctime)s]-%(levelname)-8s<%(name)s> {%(filename)s:%(lineno)s} -> %(message)s'
formatter = logging.Formatter(log_fmt)
# 设定日志截断模式,
# 1,时间隔断-适合持续运行的程序 ps: 以天为单位,保存最近七天数据
# log_file_handler = TimedRotatingFileHandler(filename=log_name, when="D", interval=1,
# backupCount=7)
# 2,文件大小隔断-适合间隔运行的程序 ps 初始化为最大50M,最多五个文件500M
log_file_handler = RotatingFileHandler(filename=log_name, maxBytes=1024 * 1024 * 50, backupCount=5,
encoding="utf-8")
# 这是配置日志文件的储存配置
log_file_handler.setFormatter(formatter)
log_file_handler.setLevel(level)
log = logging.getLogger(log_name) #如果想多个线程之前的任务互不干扰就填入参数
log.setLevel(level)
# 这是配置打印到控制台的配置
print_console = logging.StreamHandler()
print_console.setFormatter(formatter)
print_console.setLevel(level)
# 将以上两个对象分别添加到log
log.addHandler(log_file_handler)
log.addHandler(print_console)
return log