logging 日志

logging打印日志可以便于代码的运营检查。

1. 输出到控制台

logging.basicConfig(
        format='%(asctime)s - line:%(lineno)d - %(levelname)s: %(message)s',
        level=logging.INFO)

2. 输出到文件

  • 当设置filename属性后,logging将不会输出到控制台
LOG_FORMAT = "%(asctime)s %(name)s %(levelname)s %(pathname)s %(message)s "
DATE_FORMAT = '%Y-%m-%d  %H:%M:%S %a '
logging.basicConfig(level=logging.INFO,
                    format=LOG_FORMAT,
                    datefmt=DATE_FORMAT,
                    filename=path + filename)

3. 同时输出到文件与控制台

  • 采用StreamHandler、FileHandler进行配置
import logging


class Logger(object):
    # 日志输出级别
    level_relations = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'critical': logging.CRITICAL
    }

    def __init__(
            self,
            filename,
            level='info',
            fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        # 设置日志格式
        format_str = logging.Formatter(fmt)
        # 设置日志级别
        self.logger.setLevel(self.level_relations.get(level))
        # 输出到控制台
        sh = logging.StreamHandler()
        sh.setFormatter(format_str)
        # 输出到文件
        th = logging.FileHandler(
            filename=filename,
            encoding='utf-8',
            mode='a')
        th.setFormatter(format_str)

        self.logger.addHandler(sh)
        self.logger.addHandler(th)


if __name__ == '__main__':
    log = Logger('print.log', level='info')
    for i in range(10):
        log.logger.info(i)

4. django自带的日志模板

在django的setting.py文件中可以直接配置logging

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,  # 禁用已经存在的logger实例
    "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
    "formatters": {  # 定义了两种日志格式
        "verbose": {  # 详细
            'format': '%(asctime)s - %(levelname)s: %(message)s',
        },
        'simple': {  # 简单
            'format': '%(asctime)s - %(levelname)s: %(message)s'
        },
    },
    "handlers": {  # 定义了两种日志处理方式
        'log_file': {  # 对INFO级别以上信息以日志文件形式保存
            'level': "INFO",
            'class': 'logging.handlers.RotatingFileHandler',  # 滚动生成日志,切割
            'filename': os.path.join(BASE_DIR, 'logs', 'web_query.log'),  # 日志文件名
            'maxBytes': 1024 * 1024 * 10,  # 单个日志文件最大为10M
            'backupCount': 5,  # 日志备份文件最大数量
            'formatter': 'simple',  # 简单格式
            'encoding': 'utf-8',  # 放置中文乱码
        },
        "console": {  # 打印到终端console
            "level": "DEBUG",
            "class": "logging.StreamHandler",
            "formatter": "verbose",
        },
    },
    "root": {"level": "INFO", "handlers": ["console", "log_file"]},
    "loggers": {
        'django': {
            'handlers': ['console', 'log_file'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值