Django中配置日志

news2024/10/6 18:30:11

在Django中配置日志的方法非常简单,只需要在 setting 文件中添加配置项,系统会自动生成相应的日志文件,也可以配置调试时显示内容,报错发送邮件等操作。

在setting.py中添加以下配置。

# 日志配置
LOGS_DIRS = os.path.join(BASE_DIR, 'logs','django')
if not os.path.exists(LOGS_DIRS):
    os.makedirs(LOGS_DIRS)

SPIDER_LOGS_DIRS = os.path.join(BASE_DIR, 'logs','spider')
if not os.path.exists(SPIDER_LOGS_DIRS):
    os.makedirs(SPIDER_LOGS_DIRS)

LOGGING = {
    'version': 1,  # 使用的日志模块的版本,目前官方提供的只有版本1,但是官方有可能会升级,为了避免升级出现的版本问题,所以这里固定为1
    'disable_existing_loggers': False,  # 是否禁用其他的已经存在的日志功能?肯定不能,有可能有些第三方模块在调用,所以禁用了以后,第三方模块无法捕获自身出现的异常了。
    'formatters': {  # 日志格式设置,verbose或者simple都是自定义的
        'verbose': {  # 详细格式,适合用于开发人员不在场的情况下的日志记录。
            # levelname 日志等级
            # asctime   发生时间
            # module    文件名
            # process   进程ID
            # thread    线程ID
            # message   异常信息
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            'style': '{',  # 变量格式分隔符
        },
        'spiderformat': {  # 详细格式,适合用于开发人员不在场的情况下的日志记录。
            'format': '{levelname} {asctime} {message}',
            'style': '{',
        },
        'simple': {  # 简单格式,适合用于开发人员在场的情况下的终端输出
            'format': '{levelname} {message}',
            'style': '{',
        },
        'standard': {
            'format': '%(levelname)s %(asctime)s %(pathname)s %(filename)s %(module)s %(funcName)s %(lineno)d: %(message)s'
        },  # 对日志信息进行格式化,每个字段对应了日志格式中的一个字段,更多字段参考官网文档,我认为这些字段比较合适,输出类似于下面的内容
    },
    'filters': {  # 过滤器
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {  # 日志处理流程,console或者mail_admins都是自定义的。
        'console': {
            'level': 'DEBUG',  # 设置当前日志处理流程中的日志最低等级
            'filters': ['require_debug_true'],  # 当前日志处理流程的日志过滤
            'class': 'logging.StreamHandler',  # 当前日志处理流程的核心类,StreamHandler可以帮我们把日志信息输出到终端下
            'formatter': 'simple'  # 当前日志处理流程的日志格式
        },
        # 'mail_admins': {
        #     'level': 'ERROR',                  # 设置当前日志处理流程中的日志最低等级
        #     'class': 'django.utils.log.AdminEmailHandler',  # AdminEmailHandler可以帮我们把日志信息输出到管理员邮箱中。
        #     'filters': ['special']             # 当前日志处理流程的日志过滤
        # }
        'file': {
            'level': 'WARNING',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录logs必须手动创建
            'filename': '%s/django.log' % LOGS_DIRS,
            # TimedRotatingFileHandler的参数
            # 目前设定每天一个日志文件
            # 'S'         |  秒
            # 'M'         |  分
            # 'H'         |  时
            # 'D'         |  天
            # 'W0'-'W6'   |  周一至周日
            # 'midnight'  |  每天的凌晨
            'when': 'D',  # 间间隔的类型,指定秒就不要在Windows上运行测试
            'interval': 1,  # 时间间隔
            'backupCount': 5,  # 能留几个日志文件;过数量就会丢弃掉老的日志文件
            'encoding': 'utf-8',  # 日志文本编码
            'formatter': 'verbose'  # 当前日志处理流程的日志格式
        },
        'spiderfile': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '%s/spider.log' % SPIDER_LOGS_DIRS,
            'when': 'H',  # 间间隔的类型,指定秒就不要在Windows上运行测试
            'interval': 1,  # 时间间隔
            'backupCount': 90,  # 能留几个日志文件;过数量就会丢弃掉老的日志文件
            'encoding': 'utf-8',  # 日志文本编码
            'formatter': 'spiderformat'  # 当前日志处理流程的日志格式
        },
    },
    'loggers': {  # 日志处理的命名空间
        'django': {
            'handlers': ['console', 'file'],  # 当基于django命名空间写入日志时,调用那几个日志处理流程
            'propagate': True,  # 是否在django命名空间对应的日志处理流程结束以后,冒泡通知其他的日志功能。True表示允许
        },
        'spider': {
            'level': 'INFO',
            'handlers': ['console', 'spiderfile'],  # 当基于django命名空间写入日志时,调用那几个日志处理流程
            'propagate': False,  # 是否在django命名空间对应的日志处理流程结束以后,冒泡通知其他的日志功能。True表示允许
        },
    }
}

配置中主要的是以下四个大的配置项。

formatters:日志的格式器,配置日志的打印及写入格式

filters:过滤器、配置需要显示日志的路由

handlers:处理器,配置日志的处理方式,包括:写入文件配置、调试打印配置、发送邮件配置等

loggers:日志处理员(我起的名字),可以配置多个不同的日志处理角色,进行不同的操作。


在文件中使用logger
首先导入logging库,并调用在setting.py中配置的loggers

import logging
splogger = logging.getLogger('spider')

在需要调用日志的地方添加代码

splogger.info("开始同步")
splogger.warning("未打开页面,重新打开")
splogger.error("同步失败")

这个是自动生成的日志文件。

还遇到个问题是正常启动没问题,但是按时间分隔日志文件的时候报错。

启动的时候需要加个参数

python manage.py runserver 0.0.0.0:80

还有个简单的启动方法

在项目根目录下创建一个run.py文件,在里面添加以下代码,每次启动时只需要启动这个文件就可以,没必要每次都输命令。

import os

if __name__ == '__main__':
    os.system('python manage.py runserver 0.0.0.0:80')
    # os.system('python manage.py runserver 0.0.0.0:80 --noreload')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决群晖NAS无法拉取docker镜像问题

一、问题描述 由于国内的docker已经被管控,直接在群晖NAS的docker面板上是无法直接查询到需要的docker镜像内容,我们需要通过SSH连接到群晖使用docker命令进行拉取镜像使用,如下图所示: 注意:若要通过SSH连接群晖NAS则…

【python中的转义字符】

在Python中,除了换行符(\n)和制表符(\t),还有许多其他的转义字符和字符串格式化符号可以使用。以下是一些常见的例子: 1、常见的转义字符 ### 常见的转义字符 1. **换行符**: \n 2. **制表符*…

Odoo实现自动拉取gitee代码,自动升级模块

系统通过计划任务每天从指定的git仓库获取仓库tag,并存储在数据库中 系统管理员(base.group_system)每次刷新页面,在后台判断最新的tag是否已安装或已忽略来提醒是否有新的版本。 一、依赖 模块依赖python第三方包GitPython,安装方法: pip install GitPython GitP…

Camtasia Studio2024破解神器下载,轻松上手视频剪辑

嘿!今天我要和大家分享一个神奇的软件——Camtasia Studio2024最新版的破解安装包!🎬 作为一个视频制作爱好者,我一直在寻找一款功能强大、易于操作的视频编辑软件。而Camtasia Studio2024就是我心目中的完美选择!它不…

二刷算法训练营Day28 | 回溯算法(4/6)

目录 详细布置: 1. 93. 复原 IP 地址 2. 78. 子集 3. 90. 子集 II 详细布置: 1. 93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔…

网络协议四

一、云中网络 物理机的劣势: 1)一旦需要扩容 CPU、内存、硬盘,都需要去机房手动弄,非常麻烦 2)采购的机器往往动不动几百 G 的内存,而每个应用往往可能只需要 4 核 8G 3)一台机器,…

pnpm : 无法加载文件 C:\Users\xxxxx\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

vscode中执行pnpm install的时候,直接报了上面的错误。 解决: 然后输入:set-ExecutionPolicy RemoteSigned,按回车,然后根据提示,我们选A。 然后回车。 这样我们再次回到vscode中的我们就会发现可以了。 …

数字化浪潮下的制造业:WMS仓储系统功能与优势深度解析-亿发

近年来,国内经济增速放缓,中美贸易摩擦加剧,以及制造业产业迁移等因素,使得制造业面临着产能过剩和激烈竞争的局面。制造企业的仓库中常常堆积着大量原材料和积压的成品、半成品,这些库存占用了企业的大量流动资金&…

重点关注!2024年影响因子即将发布!

本周投稿推荐 SSCI • 中科院2区,6.0-7.0(录用友好) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好) SCI&EI • 4区生物医学类,0.5-1.0(录用…

STM32 MDK Keil5软件调试功能使用(无需连接硬件)

MDK Keil5 在线仿真STM32(无需连接硬件) 首先点击工具栏的魔术棒配置一下:(记得选择自己的STM32芯片类型) 开启调试 使用逻辑分析仪查看IO输出 会打开这个界面,点击左边的setup按钮 会打开这个窗口&am…

洗地机是智商税吗?家用洗地机哪个牌子好?2024年多功能洗地机推荐

洗地机是智商税吗?肯定不是!!!洗地机因为其功能集成了扫地、吸尘、拖地、烘干和消毒的功能,仅需一步操作即可完成所有清洁任务,大大的提升了人们的清洁效率,节省了人们清洁的时间和精力。那么&a…

Ant Design的创意之旅:设计师眼中的界面艺术

你知道什么是蚂蚁Ant Design?事实上,绝大多数人都不知道甚至没有听说过蚂蚁Ant Design,本文将围绕蚂蚁Ant Design是什么为大家深入分析,方便大家对蚂蚁Antt Design有清晰的认识。 1. 蚂蚁Ant Design是什么 蚂蚁Ant Design可以简…

PS系统教程14

铅笔以及颜色替换工具 铅笔工具 模式、不透明度和画笔工具都是一样的 自动抹除 一般默认状态下,画笔颜色与前景色保持一致。 涂满之后如果在图画其他颜色,这时候选择自动抹除,把背景色自动填充到画笔颜色 新建图层用前景色涂满整个画布…

5.2 模块之间的交互和通信方式方法总结

事件驱动通信: 事件驱动通信是一种通信模式,它基于事件的发生和相应来进行通信。在事件驱动通信中,各个组件之间通过发送事件来进行通信,而不是直接调用对方的方法。 事件驱动通信的基本原理是,当一个组件发生某个特…

DevExpress Data Grid

WinForms数据网格是一个由DirectX渲染引擎提供支持的高性能UI组件。数据网格(GridControl)提供了一个灵活的基于视图的体系结构,包括许多数据整形和UI自定义功能。数据网格可以显示和编辑来自任何大小和复杂度的任何数据源的数据。 数据绑定…

【Linux系统】线程与线程控制

本篇博客整理了Linux下线程的概念、线程控制的相关接口,旨在让读者初步认识线程,并为下一篇多线程作铺垫。 目录 一、线程是什么 1.线程是进程的执行流 2.线程的执行、调度、切换 3.页表分级与线程资源分配 4.线程的优缺点 二、线程控制 1.创建…

数据库管理-第201期 优先级事务-01(20240611)

数据库管理201期 2024-06-11 数据库管理-第201期 优先级事务-01(20240611)1 概念2 使用优先级事务2.1 配置会话优先级2.2 配置系统级别等待目标 2.3 确认自动回滚2.4 配置优先级事务模式2.5 使用优先级事务模式确定系统级等待目标 总结 数据库管理-第201…

北斗高精准定位:电动自行车行业的新引擎

近年来,随着科技的发展与智能化进程的加快,电动自行车行业也迎来了新的变革。毫无疑问,北斗高精度定位技术逐渐成为这一行业的关键突破。本文将详细探讨北斗高精度定位技术在电动自行车行业中的多样应用以及其带来的诸多优势。北斗系统的背景…

解决方案:昇腾aarch64服务器安装CUDA+GCC+CMake,编译安装Pytorch,华为昇腾HPC服务器深度学习环境安装全流程

目录 一、安装CUDA和cudnn1.1、下载CUDA驱动1.2、安装CUDA驱动1.3、配置环境变量1.4、安装cudnn1.5、安装magma-cuda 二、安装gcc编译器三、安装CMake四、安装NCCL五、编译安装Pytorch5.1、前提准备5.2、下载pytorch源码5.3、配置环境变量5.4、Pytorch编译安装5.5、测试Pytorch…

你想考取名牌大学吗?那就按我说的学与做

你想考取名牌大学吗?那就按我说的学与做 我讲的这一秘笈,是自己学生时代就读时的实践体会。 本人并不比别人聪慧,当年也正是凭借这一学习技巧,而获得各科均衡且良好成绩考取大学的。在上世纪八十年代,有多少人能考取…