zoukankan      html  css  js  c++  java
  • Python Logger类,保存本地文件并在console打印

    import logging
    import time
    import os
    
    
    
    class Logger:
        def __init__(self, logger_name):
            # 创建一个logger
            self.logger = logging.getLogger(logger_name)
    
            self.logger.setLevel(logging.DEBUG) # 需要记录的日志级别
            basedir = os.path.abspath(os.path.dirname(__file__))
            log_path = os.path.join(basedir, 'logs', time.strftime("%F"))  # 日志根目录 ../logs/yyyy-mm-dd/
    
            if not os.path.exists(log_path):
                os.mkdir(log_path)
    
            # # 创建一个handler,用于写入日志文件
            log_name = os.path.join(log_path, 'out.log')
            fh = logging.FileHandler(log_name, encoding='utf-8', mode='a')  # 指定utf-8格式编码,避免输出的日志文本乱码
            fh.setLevel(logging.DEBUG) # 需要写入的日志级别
    
            # 创建一个handler,用于将日志输出到控制台
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO) # 需要到控制台的日志级别
    
            # 定义handler的输出格式
            formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
            fh.setFormatter(formatter)
            ch.setFormatter(formatter)
    
            # 给logger添加handler
            self.logger.addHandler(fh)
            self.logger.addHandler(ch)
    
        def get_log(self):  # 定义一个函数,回调logger实例"""
            return self.logger
    
        def shutdown(self):
            for handler in self.logger.handlers[:]:
                self.logger.removeHandler(handler)
    

    使用

    import Logger
    
    logger = Logger('TYPE_NAME') # 初始化
    
    # 不同级别的日志
    logger.get_log().info('MESSAGE')
    logger.get_log().warning('MESSAGE')
    logger.get_log().error('MESSAGE')
    logger.get_log().critical('MESSAGE')
    logger.get_log().debug('MESSAGE')
    
    logger.shutdown() # 释放logger.注意,如果不释放日志内会出现冗余记录
    
  • 相关阅读:
    MySQL事务处理
    MySQL触发器
    MySQL游标
    MySQL存储过程
    MySQL视图
    MySQL创建和操纵表
    Java异常体系结构以及异常处理机制、自定义异常
    Java的面向对象和抽象类、接口、内部类以及OOP实战
    Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组
    Java通过循环结构和switch实现简易计算器
  • 原文地址:https://www.cnblogs.com/bionexit/p/14772488.html
Copyright © 2011-2022 走看看