python- logging日志的配置和使用

1,起因

  • 感觉应该有很多python小白都是print大法,而比较少用python的官方logging
  • 可能有一些同学享用python的logging但是又一时半会配置不好
  • 所以就分享出来啦 ~~ 复制粘贴即可使用
2, 坑。。。。
  1. 问题:用的的时间大小隔断模式,但是发现有一些崩溃重启了的任务会发生部分数据丢失…
  2. 用多线程的时候没有在 logging.getLogger(log_name)这里填入log_name,导致多个线程拿到的都是root对象,虽然单个线程的日志单独一个文件,但是会乱入其他线程的数据
  3. 控制台输出,这个在调试的时候可以加上,非常方便(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,最多五个文件500Mlog_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)# 将以上两个对象分别添加到loglog.addHandler(log_file_handler)log.addHandler(print_console)return log


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部