美文网首页思科DevNet
python3 中文日志记录

python3 中文日志记录

作者: 53921f46e0b9 | 来源:发表于2018-05-12 14:17 被阅读678次

    python3 下记录中文日志要使用 encoding 参数,否则会有以下错误:

    --- Logging error ---
    Traceback (most recent call last):
      File "/Users/evil/.pyenv/versions/3.6.2/lib/python3.6/logging/__init__.py", line 994, in emit
        stream.write(msg)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 33-34: ordinal not in range(128)
    Call stack:
      File "/Users/evil/git/jianshu/crawl_jobs/crawl.py", line 70, in <module>
        LOGGER.info("测试")
    Message: '测试'
    Arguments: ()
    

    修改相关配置

    log_name = '2018-05-12.log'
    logging.basicConfig(format='[%(asctime)s %(levelname)s]<%(process)d> %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG, filename=log_name)
    LOGGER = logging.getLogger(__name__)
    
    # 新增 fh,修改 basicConfig
    fh = logging.FileHandler(encoding='utf-8', mode='a', filename=log_name)
    logging.basicConfig(handlers=[fh], format='[%(asctime)s %(levelname)s]<%(process)d> %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO)
    
    # 此时中文日志可正常输出
    LOGGER.info("测试")
    

    basicConfig 的作用是快速配置日志系统,当有 filename 参数时,自动创建一个 FileHandler 进行日志记录。目前版本的 basicConfig 无法传递 encoding 参数,因此直接传入一个 FileHandler,而 handlers 是要接收一个可迭代对象。

    相关文章

      网友评论

        本文标题:python3 中文日志记录

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