zoukankan      html  css  js  c++  java
  • 自定义日志

    参考:

    http://python.jobbole.com/81666/

    https://www.cnblogs.com/rollenholt/p/5392338.html 

    NOSET 0
    DEBUG 10
    INFO 20
    WARNING 30
    ERROR 40
    CRITICAL 50

    DEBUG       诊断问题时使用,在生产环境默认是关闭的。为了方便我们开发和调试,记录流程的关键路径。
    INFO           需要开发者确认的信息,关键系统参数的回显、后台服务的初始化状态。
    WARNING  出现了异常情况,但是又在合理范围之类的时候
    ERROR      系统出现了异常情况,需要修改代码处理。
    CRITICAL   说实话我没有用过,我都用ERROR代替了。

    自定义日志

    # 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件
    import logging
    
    # 用字典保存输出格式
    format_dict = {
        1: logging.Formatter('%(asctime)s - %(name)s - %(filename)s - PID%(process)d - %(levelname)s - %(message)s'),
        2: logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
        3: logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
        4: logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
        5: logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    }
    
    
    class Logger():
        def __init__(self, logfile, logname, logformat):
            '''
               指定保存日志的文件路径,日志级别,以及调用文件
               将日志存入到指定的文件中
            '''
    
            # 创建一个logger
            self.logger = logging.getLogger(logname)
            self.logger.setLevel(logging.DEBUG)
    
            # 创建一个handler,用于写入日志文件
            fh = logging.FileHandler(logfile)
            fh.setLevel(logging.DEBUG)
    
            # 再创建一个handler,用于输出到控制台
            ch = logging.StreamHandler()
            ch.setLevel(logging.DEBUG)
    
            # 定义handler的输出格式
            # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
            formatter = format_dict[int(logformat)]
            fh.setFormatter(formatter)
            ch.setFormatter(formatter)
    
            # 给logger添加handler
            self.logger.addHandler(fh)
            self.logger.addHandler(ch)
    
        def getlog(self):
            return self.logger
    
    
    if __name__ == '__main__':
        logger1 = Logger(logfile='log1.txt', logname="fox1", logformat=1).getlog()
        logger1.debug('i am debug')
        logger1.info('i am info')
        logger1.warning('i am warning')
        logger2 = Logger(logfile='log2.txt', logname="fox2", logformat=2).getlog()
        logger2.debug('i am debug2')
        logger2.info('i am info2')
        logger2.warning('i am warning2')
    

      控制台输出:

    2018-01-29 15:51:05,565 - fox1 - mytest4.py - DEBUG - i am debug
    2018-01-29 15:51:05,565 - fox1 - mytest4.py - INFO - i am info
    2018-01-29 15:51:05,565 - fox1 - mytest4.py - WARNING - i am warning
    2018-01-29 15:51:05,565 - fox2 - DEBUG - i am debug2
    2018-01-29 15:51:05,565 - fox2 - INFO - i am info2
    2018-01-29 15:51:05,565 - fox2 - WARNING - i am warning2

    文件中写入

    log1.txt

    2018-01-29 15:53:28,861 - fox1 - mytest4.py - DEBUG - i am debug
    2018-01-29 15:53:28,861 - fox1 - mytest4.py - INFO - i am info
    2018-01-29 15:53:28,861 - fox1 - mytest4.py - WARNING - i am warning

    log2.txt

    2018-01-29 15:53:28,862 - fox2 - DEBUG - i am debug2
    2018-01-29 15:53:28,862 - fox2 - INFO - i am info2
    2018-01-29 15:53:28,862 - fox2 - WARNING - i am warning2

     日志片段:

    import logging
    import time
    import os
    
    import sys
    
    # 日志文件配置
    LOG_DIR_NAME = 'log'  # 日志统一存放文件夹
    LOG_DIR_PATH = os.path.join(os.getcwd(), LOG_DIR_NAME)  # 日志统一存放完整路径
    
    if not os.path.exists(LOG_DIR_PATH):  # 日志统一存放路径不存在,则创建该路径
        os.makedirs(LOG_DIR_PATH)
    
    # print(LOG_DIR_PATH)
    # sys.exit()
    
    # 写入日志文件的配置
    logging.basicConfig(level=logging.DEBUG,  # 设置写入级别。日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
                        # 设置写入样式。'2018-01-12 13:09:02|mytest.py|<module>|line:9|INFO|start runing'
                        format='%(asctime)s|%(filename)s|%(funcName)s|line:%(lineno)d|%(levelname)s|%(message)s',
                        datefmt='%Y-%m-%d %X',
                        filename=LOG_DIR_PATH + os.sep + time.strftime("%Y%m%d") + '.log'  # 写入文件位置和文件名
                        )
    
    # 控制台打印输出日志
    console = logging.StreamHandler()  # 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
    console.setLevel(logging.INFO)  # 设置要打印日志的等级,低于这一等级,不会打印
    formatter = logging.Formatter('%(asctime)s|%(name)-8s: %(levelname)-8s| %(message)s')  # 控制台输出样式
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)
    
    # 定义日志内容(用于写入日志文件和控制台的打印)
    logging.critical('CRITICAL le')  # 定义严重日志内容
    logging.error('error le')  # 定义错误日志内容
    try:
        1 / 0
    except Exception as e:
        logging.warning('exception: %s', e)  # 定义警告日志内容
    logging.info('start runing')  # 定义消息日志内容
    logging.info('login done')
    str1 = 'lalala'
    logging.debug("
    %s
    ", str1)  # 定义调试日志内容
    

      

  • 相关阅读:
    iOS-关于博客园博客到简书平台的迁移
    iOS-工作经验+资料分享(长期更新)
    iOS-公司开发者账号的申请和注册(原创+亲身+2016年申请+附带与邓白氏公司的往来邮件截图)
    iOS-HTML-02
    iOS-HTML-01
    iOS-保存照片或者视频到自定义相薄中以及读取数据
    iOS-UITableView的优化(纯手打原创)
    iOS-多线程之GCD(原创)
    iOS-绘图(Quartz2D)的简单使用(原创)
    iOS-Cocoapods
  • 原文地址:https://www.cnblogs.com/andy9468/p/8377746.html
Copyright © 2011-2022 走看看