zoukankan      html  css  js  c++  java
  • python log日常使用

    ji录一下python中的log的用法,理由很简单!日志很重要!!!

    费话不多说还是直接上代码

    # -*- coding: utf-8 -*-
    import os
    import time
    import logging
    import inspect
    # from logging.handlers import RotatingFileHandler
    from logging.handlers import TimedRotatingFileHandler
    
    dir = os.path.dirname(__file__)
    dir_time = time.strftime('%Y-%m-%d-%S', time.localtime())
    
    handlers = {  # logging.NOTSET: os.path.join(dir, 'notset_%s.log'%dir_time),
    
        logging.DEBUG: os.path.join(dir, 'logs/debug/debug.log'),
    
        logging.INFO: os.path.join(dir, 'logs/info/info.log'),
    
        logging.WARNING: os.path.join(dir, 'logs/warning/logs.log'),
    
        logging.ERROR: os.path.join(dir, 'logs/error/error.log'),
    
    
        # logging.CRITICAL: os.path.join(dir, 'critical_%s.log'%dir_time),
    }
    
    
    def createHandlers():
        logLevels = handlers.keys()
        debug_path = os.path.join(dir, 'logs/debug')
        info_path = os.path.join(dir, 'logs/info')
        error_path = os.path.join(dir, 'logs/error')
        warning_path = os.path.join(dir, 'logs/warning')
        is_exists_debug = os.path.exists(debug_path)
        is_exists_info = os.path.exists(info_path)
        is_exists_error = os.path.exists(error_path)
        is_exists_warning = os.path.exists(warning_path)
        if not is_exists_debug:
            os.makedirs(debug_path)
        if not is_exists_info:
            os.makedirs(info_path)
        if not is_exists_error:
            os.makedirs(error_path)
        if not is_exists_warning:
            os.makedirs(warning_path)
        for level in logLevels:
            path = os.path.abspath(handlers[level])
            # handlers[level] = RotatingFileHandler(path, maxBytes=1024 * 10000, backupCount=2, encoding='utf-8')
            handlers[level] = TimedRotatingFileHandler(filename=path, when='D', interval=1, backupCount=0)
    
    
    # 加载模块时创建全局变量
    
    createHandlers()
    
    
    class TNLog(object):
    
        def printfNow(self):
            return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    
        def __init__(self, level=logging.NOTSET):
            self.__loggers = {}
    
            logLevels = handlers.keys()
    
            for level in logLevels:
                logger = logging.getLogger(str(level))
    
                # 如果不指定level,获得的handler似乎是同一个handler
    
                logger.addHandler(handlers[level])
    
                logger.setLevel(level)
    
                self.__loggers.update({level: logger})
    
        def getLogMessage(self, level, message):
            frame, filename, lineNo, functionName, code, unknowField = inspect.stack()[2]
    
            '''日志格式:[时间] [类型] [记录代码] 信息'''
    
            return "[%s] [%s] [%s - %s - %s] %s" % (self.printfNow(), level, filename, lineNo, functionName, message)
    
        def info(self, message):
            message = self.getLogMessage("info", message)
    
            self.__loggers[logging.INFO].info(message)
    
        def error(self, message):
            message = self.getLogMessage("error", message)
    
            self.__loggers[logging.ERROR].error(message)
    
        def warning(self, message):
            message = self.getLogMessage("warning", message)
    
            self.__loggers[logging.WARNING].warning(message)
    
        def debug(self, message):
            message = self.getLogMessage("debug", message)
    
            self.__loggers[logging.DEBUG].debug(message)
    
    
        def critical(self, message):
            message = self.getLogMessage("critical", message)
    
            self.__loggers[logging.CRITICAL].critical(message)
    
    
    if __name__ == "__main__":
        pass
        # logger = TNLog()
        # logger.debug("debug")
        # time.sleep(10)
        # logger.info("info")
        # logger.warning("warning")
        # logger.error("error")

    这样就是生成一个logs文件夹里边放着info,debug,warning,error这四个日志,当然,为了方便已经按天分开了

  • 相关阅读:
    Android中LayoutInflater的使用
    m2014-architecture-webserver->百万记录级mysql数据库及Discuz!论坛优化
    m2014-architecture-imgserver->利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
    m2014-architecture-imgserver->Lighttpd +mod_mem_cache的效果简直太好了
    m2014-architecture-imgserver->配置lighttpd mod_mem_cache 模块做静态资源服务器
    m2014-architecture-imgserver->Lighttpd Mod_Cache很简单很强大的动态缓存
    雅虎十四条
    java高新技术-基本数据类型拆装箱及享元设计模式
    java高新技术-可变参数与OverLoad相关面试题分析
    java高新技术-java5的静态导入与编译器语法设置
  • 原文地址:https://www.cnblogs.com/lzqrkn/p/11411146.html
Copyright © 2011-2022 走看看