Django-Log

logging模块是Python内置的标准模块,主要⽤于输出运⾏⽇志,可以设置输出⽇志的等级、⽇志保存路径、⽇志⽂件回滚等;具备如下优点: 通过log的分析,可以⽅便⽤户了解系统或软件、应⽤的运⾏情况;如果你的应⽤ log⾜够丰富,也可以分析以往⽤户的操作⾏为、类型喜好、地域分布或其他更多信息;如果⼀个应⽤的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失

一、LOG用途

问题追踪

状态监控

安全审计

二、LOG等级

DEBUG最详细的⽇志信息,典型应⽤场景是问题诊断

INFO信息详细程度仅次于DEBUG,通常只记录关键节点信息,⽤于确实都是按照我们预期的那样进⾏⼯作

WARNING当某些不期望的事情发⽣时记录的信息(如磁盘可⽤空间较低),但是此时应⽤程序还是正常运⾏的

ERROR由于⼀个更严重的问题导致某些功能不能正常运⾏时记录的信息如IO操作失败或者连接问题

CRITICAL当发⽣严重错误,导致应⽤程序不能继续运⾏时记录的信息

三、LOG模块的四大组件

3.1、Loggers

提供应⽤程序代码直接使⽤的接⼝

3.2、Handlers

⽤于将⽇志记录发送到指定的⽬的位置

FileHandler:logging.FileHandler;⽇志输出到⽂件
RotatingHandler:logging.handlers.RotatingHandler;⽇志回滚⽅式,⽀持⽇志⽂件最⼤数量和⽇志⽂件回滚
SMTPHandler:logging.handlers.SMTPHandler;远程输出⽇志到邮件地址
HTTPHandler:logging.handlers.HTTPHandler;通过"GET"或者"POST"远程输出到HTTP服务器
3,3、Filters

提供更细粒度的⽇志过滤功能,⽤于决定哪些⽇志记录将会被输出(其它的⽇志记录将会被忽略)

3.4、Formatters

⽤于控制⽇志信息的最终输出格式

 %(levelno)s:打印⽇志级别的数值
 %(levelname)s:打印⽇志级别的名称
 %(pathname)s:打印当前执⾏程序的路径,其实就是sys.argv[0]
 %(filename)s:打印当前执⾏程序名
 %(funcName)s:打印⽇志的当前函数
 %(lineno)d:打印⽇志的当前⾏号
 %(asctime)s:打印⽇志的时间
 %(thread)d:打印线程ID
 %(threadName)s:打印线程名称
 %(process)d:打印进程ID
 %(message)s:打印⽇志信息

四、示例

views.py

def formTest(request):
    logger = logging.getLogger(__name__)
    logger.setLevel(level = logging.INFO)
    handler = logging.FileHandler('log.txt')
    formatter = logging.Formatter('%(asctime)s -- %(name)s -- %(levelname)s -- %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.info("Start print log")
    logger.debug("Do something")
    logger.warning("Something maybe fail.")
    logger.info("Finish")

五、一份完整的配置

settings.py

import time

cur_path = os.path.dirname(os.path.realpath(__file__))  # log_path是存放日志的路径
log_path = os.path.join(os.path.dirname(cur_path), 'logs')
if not os.path.exists(log_path): os.mkdir(log_path)  # 如果不存在这个logs文件夹,就自动创建一个

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        # 日志格式
        'standard': {
            'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
                      '[%(levelname)s]- %(message)s'},
        'simple': {  # 简单格式
            'format': '%(levelname)s %(message)s'
        },
    },
    # 过滤
    'filters': {
    },
    # 定义具体处理日志的方式
    'handlers': {
        # 默认记录所有日志
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_path, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
            'maxBytes': 1024 * 1024 * 5,  # 文件大小
            'backupCount': 5,  # 备份数
            'formatter': 'standard',  # 输出格式
            'encoding': 'utf-8',  # 设置默认编码,否则打印出来汉字乱码
        },
        # 输出错误日志
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_path, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
            'maxBytes': 1024 * 1024 * 5,  # 文件大小
            'backupCount': 5,  # 备份数
            'formatter': 'standard',  # 输出格式
            'encoding': 'utf-8',  # 设置默认编码
        },
        # 控制台输出
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        # 输出info日志
        'info': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_path, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'formatter': 'standard',
            'encoding': 'utf-8',  # 设置默认编码
        },
    },
    # 配置用哪几种 handlers 来处理日志
    'loggers': {
        # 类型 为 django 处理所有类型的日志, 默认调用
        'django': {
            'handlers': ['default', 'console'],
            'level': 'INFO',
            'propagate': False
        },
        # log 调用时需要当作参数传入
        'log': {
            'handlers': ['error', 'info', 'console', 'default'],
            'level': 'INFO',
            'propagate': True
        },
    }
}

views.py

def formTest(request):
    logger = logging.getLogger("django")  # 为loggers中定义的名称
    logger.info("some info...")
    return HttpResponse('OK')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值