logging模块配置

logging模块的通用配置

方式一:打印到终端(不在乎编码)

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    # format格式是自定义的,%(asctime)s 这个是死的,你可以外面加空格 中划线 或者大括号都可以
    # 加成什么样子就会以什么样子显示
    datefmt='%a, %d %b %Y %H:%M:%S',   # Mon, 16 Jul 2018 16:29:20 test.py[line:36] INFO 
    # filename='log/log.txt',   # 日志打印到的文件
    # filemode='w+'
)
logger_root = logging.getLogger("")

方式二:需要设置编码,且只能输出到文件

# 这种方式多了一个utf-8方式编码日志文件
filehandler = logging.FileHandler(filename='./log/log.txt',encoding="utf-8")
fmter = logging.Formatter(fmt="%(asctime)s [%(levelname)s] %(pathname)s-%(lineno)d %(message)s",datefmt="%Y-%m-%d %H:%M:%S")
filehandler.setFormatter(fmter)
logger_root = logging.getLogger('')
logger_root.addHandler(filehandler)
logger_root.setLevel(level=logging.DEBUG)

方式三:切割日志

"""
# 这种方式是每天切换一个日志文件,防止日志文件过大
# 如果想要根据大小分割,使用
# hdlr = logging.handlers.RotatingFileHandler(LOG_FILE,maxBytes=1024*1024,backupCount=40) 
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
    )
    fmter = logging.Formatter(fmt="%(asctime)s [%(levelname)s] %(pathname)s-%(lineno)d %(message)s",
                              datefmt="%Y-%m-%d %H:%M:%S")
    filehandler = handlers.TimedRotatingFileHandler("./log/log.txt", when='D', interval=1, backupCount=30)
    filehandler.setFormatter(fmter)
    logger_root = logging.getLogger("")
    logger_root.addHandler(filehandler)
"""

# 这下面是测试,协程模式下也可以使用

import logging
from logging import handlers
import time
import gevent
from gevent.queue import Queue
from gevent import monkey
monkey.patch_all()
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',   # Mon, 16 Jul 2018 16:29:20 test.py[line:36] INFO
)
filehandler = handlers.TimedRotatingFileHandler("./log/log.txt", when='S', interval=3, backupCount=20)
fmter = logging.Formatter(fmt="%(asctime)s [%(levelname)s] %(pathname)s-%(lineno)d %(message)s",
                              datefmt="%Y-%m-%d %H:%M:%S")
filehandler.setFormatter(fmter)
logger_root = logging.getLogger("")
logger_root.addHandler(filehandler)


q1 = Queue()

for i in range(100):
    q1.put_nowait(i)

def run():
    while not q1.empty():
        logger_root.info(q1.get_nowait())
        gevent.sleep(0.5)

for i in range(3):
    gevent.joinall([
        gevent.spawn(run)
    ])
logger_root.info("game over")

通用配置的讲解

asctime  :  %(asctime)s 易读的时间格式: 默认情况下是'2003-07-08 16:49:45,896'的形式(逗号之后的数字是毫秒部分的时间)
filename:   %(filename)s    路径名的文件名部分。
funcName :%(funcName)s    日志调用所在的函数名
levelname   %(levelname)s   消息的级别名称('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL').
levelno %(levelno)s 对应数字格式的日志级别 (DEBUG, INFO, WARNING, ERROR,CRITICAL).
lineno  %(lineno)d  发出日志记录调用的源码行号 (如果可用)。
module  %(module)s  所在的模块名(如test6.py模块则记录test6)
message %(message)s 记录的信息
name    %(name)s    调用的logger记录器的名称
process %(process)d 进程ID
processName %(processName)s 进程名
thread  %(thread)d  线程ID
threadName  %(threadName)s  线程名
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容