django中的日志处理

1、事件追踪

        在什么样的时间发生了什么样的事情

2、bug调试

3、程序告警

4、大数据统计

ELK 日志分析系统

elasticsearh + logstasn + kibana

名词概念

        loggers:日志器 —— 定大方向:1

        handlers:处理器 —— 执行:3

        formatters:格式化,是与处理器进行绑定的 —— 规矩:2

        filters:过滤器,控制输出的内容

# 日志等级
"""
debug
info
warning
error
critical
"""
import logging

muyi = '%(asctime)s - %(levelname)s - %(name)s  - %(lineno)d'
logging.basicConfig(
    level=logging.WARNING,   # 自定义日志等级等级
    format=muyi,  # 绑定
    filename='my.log',  # 保存的文件
    filemode='a',  # 写入方式
)

a = 'hello world'
logging.debug(a)
logging.info(a)
logging.warning(a)
logging.error(a)
logging.critical(a)

简单的日志配置

settings .py

# 简单的日志配置
LOGGING = {
    'version': 1,
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, "logs/django.log")
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'INFO',
            'propagate': True
        }
    }
}
使用日志中的配置

views.py

log = logging.getLogger('django.log')  # django.log 要和配置中的一致


def hello(request):
    log.info('hello world')
    print('你好世界')
    return HttpResponse('你好')

urls.py

from django.urls import path
from .views import hello

app_name = 'the_17'  # 命名空间
urlpatterns = [
    path('hello/', hello),
]

保存的日志文件

常用的 handlers 
# 简单的日志配置
LOGGING = {
    'version': 1,
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, "logs/django.log")  # 输出到文件夹
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'  # 选择输出模板,输出到控制台
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file','console'],
            'level': 'INFO',
            'propagate': True
        }
    },
常用的 formatters
# 模板
    'formatters': {
        'verbose': {
            'format': '(levelname) {asctime} {module} {lineno:d} {message}',
            'style': '{',
        },
        'simple': {
            "format": "(levelname) {module} {lineno:d} {message}",
            'style': '{'
        },
        'verbose_more': {
            "format": "(levelname) {asctime} [{filename}:{lineno}] {process:d} {thread:d} {threadName}",
            'style': '{'
        }
常用的 filters
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'  # DEBUG = False 时才会输出日志
        }
    },
自定义 filters 
    'skip_unreadable_fuck': {
        '()': 'django.utils.log.CallbackFilter',
        'callback': skip_fuck,  # 不能带 Fuck 输出
    }
settings.py / logging 代码
LOGGING = {
    'version': 1,
    'handlers': {
        'files': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, "logs/django.log"),  # 输出到文件夹
            'filters': ['require_debug_true', 'skip_unreadable_fuck'],
            'maxBytes': 300 * 1024 * 1024,  # django.log 保存最大为300M
            'backupCount': 10,  # 超出300M 重新创建 django.log, 最大创建10个,多出的覆盖前面的
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',  # 选择输出模板,输出到控制台
        }
    },
    'loggers': {
        'django': {
            'handlers': ['files', 'console'],
            'level': 'INFO',
            'propagate': True
        }
    },
    # 模板
    'formatters': {
        'verbose': {
            'format': '(levelname) {asctime} {module} {lineno:d} {message}',
            'style': '{',
        },
        'simple': {
            "format": "(levelname) {module} {lineno:d} {message}",
            'style': '{'
        },
        'verbose_more': {
            "format": "(levelname) {asctime} [{filename}:{lineno}] {process:d} {thread:d} {threadName}",
            'style': '{'
        }
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugTrue'  # DEBUG = True 时才会输出日志
        }
    },
    'skip_unreadable_fuck': {
        '()': 'django.utils.log.CallbackFilter',
        'callback': skip_fuck,  # 不能带 Fuck 输出
    }
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值