博客
关于我
python logging一个通用的使用模板
阅读量:434 次
发布时间:2019-03-06

本文共 1896 字,大约阅读时间需要 6 分钟。

今天,我尝试优化了一个用于日志记录的Python代码。这个代码的目标是为应用程序的功能模块生成日志,记录每个模块的执行情况。以下是我优化后的代码和解释:

优化后的代码

import osimport logbookfrom logbook.more import ColorizedStderrHandlerfrom functools import wrapscheck_path = os.path.abspath('.')LOG_DIR = os.path.join(check_path, 'log')file_stream = Falseif not os.path.exists(LOG_DIR):    os.makedirs(LOG_DIR)    file_stream = Truedef get_logger(name='jiekou', file_log=file_stream, level=''):    logbook.set_datetime_format('local')    ColorizedStderrHandler(bubble=False, level=level).push_thread()    logbook.TimedRotatingFileHandler(        os.path.join(LOG_DIR, f'{name}.log'),        date_format='%Y-%m-%d-%H',        bubble=True,        encoding='utf-8'    ).push_thread()    return logbook.Logger(name)LOG = get_logger(file_log=file_stream, level='INFO')def logger(param):    def wrap(function):        @wraps(function)        def _wrap(*args, **kwargs):            LOG.info(f"当前模块 {param}")            return function(*args, **kwargs)        return _wrap    return wrap

优化说明

  • 代码简洁化:去除了不必要的空行和注释,使代码更加简洁。
  • 路径处理优化:使用os.path.abspath('.')确保路径是当前工作目录的绝对路径,避免相对路径在不同工作目录下出错。
  • 日志文件自动创建:当LOG_DIR不存在时,自动创建该目录,确保日志文件能正确写入。
  • 日志格式统一:使用f格式字符串使日志输出更具现代化感,且避免了直接拼接字符串可能导致的错误。
  • 日志级别灵活性:保留了level参数,允许在不同场景下配置不同的日志级别(如DEBUG、INFO、WARNING等)。
  • 装饰器优化:将logger装饰器的参数处理得更加简洁,减少了不必要的日志冗余。
  • 使用示例

    import requests@logger('requests封装')def requests封装():    pass@logger('解析测试用例文件')def 解析测试用例文件():    pass@logger('测试')def 测试():    pass@logger('断言测试结果')def 断言测试结果():    pass@logger('保存测试结果')def 保存测试结果():    pass

    输出效果

    运行上述代码后,日志会以如下格式输出:

    [2017-10-16 20:54:46.439386] INFO: jiekou: 当前模块 requests封装[2017-10-16 20:54:46.900412] INFO: jiekou: 当前模块 解析测试用例文件[2017-10-16 20:54:47.323436] INFO: jiekou: 当前模块 解析测试用例文件...

    注意事项

    • 日志文件路径:默认为<当前工作目录>/log/jiekou.log,可根据需要修改name参数。
    • 控制台日志:使用ColorizedStderrHandler确保控制台日志会被正确颜色化,便于阅读。
    • 日志轮转TimedRotatingFileHandler默认每日轮转一次,可以根据需求调整轮转时间和保留天数。

    通过这些优化,代码更加稳定且易于维护,同时日志输出也更加规范和有序。

    转载地址:http://yjjyz.baihongyu.com/

    你可能感兴趣的文章
    Springboot处理跨域的方式(附Demo)
    查看>>
    php flush()刷新不能输出缓冲的原因分析
    查看>>
    Referenced classpath provider does not exist: org.maven.ide.eclipse.launchconfig
    查看>>
    Refactoring-Imporving the Design of Exsiting Code — 代码的坏味道
    查看>>
    PHP imap 远程命令执行漏洞复现(CVE-2018-19518)
    查看>>
    php include和require
    查看>>
    ref 和out 区别
    查看>>
    php JS 导出表格特殊处理
    查看>>
    php json dom解析
    查看>>
    ReentrantReadWriteLock读写锁解析
    查看>>
    php laravel实现依赖注入原理(反射机制)
    查看>>
    php laravel请求处理管道(装饰者模式)
    查看>>
    ReentrantReadWriteLock读写锁底层实现、StampLock详解
    查看>>
    PHP mongoDB 操作
    查看>>
    ReentrantLock读写锁
    查看>>
    ReentrantLock的公平锁与非公平锁
    查看>>
    php mysql procedure获取多个结果集
    查看>>
    php mysql query 行数,PHP和MySQL:返回的行数
    查看>>
    php mysql session_php使用MySQL保存session会话
    查看>>
    PHP mysql_real_escape_string() 函数防SQL注入
    查看>>