zoukankan      html  css  js  c++  java
  • python 日志 logger

    参考修改:https://www.jianshu.com/p/ca192138806e

    • 日志要能够以 json 格式写入文件,且日志文件能够通过文件大小或是时间截断
    • 调试过程,日志能够清晰漂亮的格式打印到控制台,即标准输出

    依赖

     python 本身的 logging 模块,还依赖了 python-json-logger 模块,需要     pip install python-json-logger 

    # -*- coding:utf-8 -*-
    # Logger.py
    import logging
    from logging.handlers import RotatingFileHandler
    import os
    import re
    import string
    import time
    from pip._internal.utils.logging import ColorizedStreamHandler
    
    aaplication_name="sea-test"
    log_path="log/"
    time_value = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    # #create logger name
    log_file_name = time.strftime(aaplication_name, time.localtime(time.time())) + "_" +time_value +'.log'
    log_file_str="./"+log_path+log_file_name
     
    if not os.path.exists(log_path):
        os.mkdir(log_path)
    #---------------------------------------
    
    
    def _getLogger(clsname="my_class"):
        _logger = logging.getLogger(clsname)
        _logger.setLevel(logging.DEBUG)  #  此处要整体设置 logger level = DEBUG,否则后面在不同的 handler 中设置 level 无效
        
        # 创建一个handler,用于写入日志文件
        fileHandler = RotatingFileHandler(filename=log_file_str, mode='a', maxBytes=10 * 1024 * 1024,encoding='utf8', backupCount=100)
    #     fileHandler = logging.handlers.TimedRotatingFileHandler(log_file_str, when='D', interval=1, backupCount=30, encoding='UTF-8')
        # to avoid missing date for print daily log
        fileHandler.suffix = "%Y-%m-%d"
        fileHandler.extMatch = re.compile(r"^d{4}-d{2}-d{2}$")
        logging_format = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
        fileHandler.setFormatter(logging_format)
        _logger.addHandler(fileHandler)
        
        
        # 不同 level, 颜色不同
        consoleHandler = ColorizedStreamHandler()
        consoleHandler.setLevel(logging.DEBUG)
        # 标准输出没必要 json 了,只打印 message 就好了
        consoleFormatter = logging.Formatter('%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s')
        consoleHandler.setFormatter(consoleFormatter)
        _logger.addHandler(consoleHandler)
    
        return _logger
    
    
    # def getLogger(clsname):
    #     return _getLogger(clsname)
    
    
    
    logger = _getLogger()
    
    def info(formatStr:string, *objs):
        logger.info(formatStr.format(*objs))
     
     
    def debug(formatStr:string, *objs):
        logger.debug(formatStr.format(*objs))
     
     
    def error(formatStr:string, *objs):
        logger.error(formatStr.format(*objs))
      
      
    def warning(formatStr:string, *objs):
        logger.warning(formatStr.format(*objs))
        
    def critical(formatStr:string, *objs):
        logger.critical(formatStr.format(*objs))
    
    
    
    
    if __name__ == '__main__':
        i = 0
        while True:
            info("{} level debug:{}","我的级别","是debug")
            info("{} level info {}" ,"我的级别","是info")
            warning('{} level warning {}',"我想打印数字",1111)
            i += 1
            if i == 100: break
            
            
            

    使用 :

    #encoding=utf-8
    # from  import  com.sea.logger.Logger
    from com.sea.logger import Logger
    
    
    Logger.info("1111")
    Logger.error("nihai 我是 {} 你好吗? " ,1111)
  • 相关阅读:
    发布网站配置IIS(把网上找到的解决方法综合了一下)
    NPOI导出word,以及对table的一些设置
    NPOI导出Excel文件,对单元格的一些设置
    使用NPOI完成导出Excel文件
    KinderEditor编辑器使用
    无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突。正在随意选择“Newtonsoft.Jso
    将获得到的json赋值到下拉框
    loj #6247. 九个太阳
    死亡笔记
    Count On A Tree II.
  • 原文地址:https://www.cnblogs.com/lshan/p/11642185.html
Copyright © 2011-2022 走看看