美文网首页工作生活
python自定义log打印模块

python自定义log打印模块

作者: stay丶gold | 来源:发表于2019-06-29 21:06 被阅读0次

说明:能够从其他文件直接导入使用;能够在文件中显示debug信息,在控制台显示info信息,实现比较简单,仅供参考

# coding:utf-8
import logging
import datetime
import os

BASE_LOGGER = None
LOG_PATH = None


def gen_logger(log_file=None):
    global BASE_LOGGER, LOG_PATH
    if not LOG_PATH:
        log_path = os.path.dirname(os.path.realpath(__file__))
        log_name = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + '.log'
        LOG_PATH = os.path.join(log_path, log_name)
    if log_file:
        LOG_PATH = log_file
    if not BASE_LOGGER:
        BASE_LOGGER = logging.getLogger()
        BASE_LOGGER.setLevel(logging.DEBUG)
        fh = logging.FileHandler(LOG_PATH, encoding='utf-8')
        fh.setLevel(logging.DEBUG)
        ch = logging.StreamHandler()
        ch.setLevel(logging.INFO)
        formatter = logging.Formatter(
            '[%(asctime)s] %(filename)s->line:%(lineno)d [%(levelname)s]%(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)
        BASE_LOGGER.addHandler(fh)
        BASE_LOGGER.addHandler(ch)
        fh.close()
        ch.close()
    return BASE_LOGGER


def debug(msg, *args, **kwargs):
    gen_logger()
    BASE_LOGGER.debug(msg, *args, **kwargs)


def info(msg, *args, **kwargs):
    gen_logger()
    BASE_LOGGER.info(msg, *args, **kwargs)


def warning(msg, *args, **kwargs):
    gen_logger()
    BASE_LOGGER.warning(msg, *args, **kwargs)


def error(msg, *args, **kwargs):
    gen_logger()
    BASE_LOGGER.error(msg, *args, **kwargs)


def critical(msg, *args, **kwargs):
    gen_logger()
    BASE_LOGGER.critical(msg, *args, **kwargs)


if __name__ == '__main__':
    logger = gen_logger('test.log')
    logger.debug("debug")
    logger.info("info")
    logger.error("error")
    logger.warning("warn")
    logger.critical("critical")

其他文件使用直接导入此py文件,若需要自定义log目录,需在使用前调用gen_logger(path),

还有一种按照模块打印log的方式也贴出来大家参考下

# coding:utf-8
import os
import datetime
import logging
import logging.config as log_conf

log_dir = os.path.dirname(os.path.dirname(__file__))
if not os.path.exists(log_dir):
    os.mkdir(log_dir)

log_name = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + '.log'
log_path = os.path.join(log_dir, log_name)

log_config = {
    'version': 1.0,
    'formatters': {
        'detail': {
            'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
        'simple': {
            'format': '%(name)s - %(levelname)s - %(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'formatter': 'detail'
        },
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 10,
            'filename': log_path,
            'level': 'DEBUG',
            'formatter': 'detail',
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        'logger': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
        },
        'other': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
        }
    }
}

log_conf.dictConfig(log_config)

logger = logging.getLogger('logger')
other = logging.getLogger('other')

if __name__ == '__main__':
    logger.info("logger")
    other.info("other")

相关文章

  • python自定义log打印模块

    说明:能够从其他文件直接导入使用;能够在文件中显示debug信息,在控制台显示info信息,实现比较简单,仅供参考...

  • 【Unity】自定义Log

    有的功能 可以自定义Log的颜色 可以添加模块 可以自定义Log输出级别,上线后关闭Log 可以写入本地,方便查看...

  • golang 日志模块(log)

    log 日志 log 模块可以自定义log 对象, 也可以使用log默认对象的日志方法 func New 创建lo...

  • 在Swift中自定义Log

    自定义LOG的最终目的:让打印信息在 DEBUG 的环境下打印,在 RELEASE 的环境下不打印 Swift中默...

  • wwdc2020 log

    引入 log 库 自定义log 类型,便于搜索,一般般包名和模块 public 格式化

  • 自定义Log工具

    (1) 为什么要自定义Log: 在代码编写和测试过程中,必然少不了打印Log 日志。但是,往往我们在用完了Log ...

  • 自定义NPM包

    环境初始化 mkdir npm-log cd npm-log npm init -y 入口文件 自定义依赖模块:模...

  • js调试技巧参考

    1. console.log(obj); 在使用 console.log打印一个引用类型(比如数组和自定义对象)的...

  • python之模块之碎碎念

    import语句导入的模块顺序 1、Python标准库模块 2、python第三方库模块 3、应用程序自定义模块 ...

  • Swift 自定义Log

    Swift中打印不像OC那样每次打印系统会自己打印出时间和所在类名,所以在swift中要自己封装.自定义Log要用...

网友评论

    本文标题:python自定义log打印模块

    本文链接:https://www.haomeiwen.com/subject/ahkmcctx.html