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,最多五个文件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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值