Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一份 Python 日志配置,同时适用于开发和生产环境

一份 Python 日志配置,同时适用于开发和生产环境

作者头像
somenzz
发布于 2022-10-25 13:08:01
发布于 2022-10-25 13:08:01
36900
代码可运行
举报
文章被收录于专栏:Python七号Python七号
运行总次数:0
代码可运行

在日志方面,我的做法是这样的,既打印到终端,又输出到文件,开发环境的级别是 DEBUG,生产环境是 INFO,我最常用的一份配置文件如下:log.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import logging
import os
import time

logger = logging.getLogger()

if not os.path.exists("logs"):
    os.mkdir("logs")
logger = logging.getLogger()
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
fh = logging.FileHandler(filename=f"logs/log_{time.strftime('%Y%m%d')}.txt")

formatter = logging.Formatter(
    "%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s - %(message)s"
)
formatter2 = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter2)
logger.addHandler(ch)  # 将日志输出至屏幕
logger.addHandler(fh)  # 将日志输出至文件

这样,在需要打印日志的地方,就可以从 log.py 中导入 logger 来使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from log import logger
logger.info("info")
logger.debug("debug")

终端上打印的信息为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2022-09-21 06:24:26,036 - INFO - info
2022-09-21 06:24:26,037 - DEBUG - debug

日志文件中的信息比较详细,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
❯ cat log_20220921.txt
2022-09-21 06:24:26,036 - demo3 - <module> - line:3 - INFO - info
2022-09-21 06:24:26,037 - demo3 - <module> - line:4 - DEBUG - debug

但是每当我需要为不同的环境设置不同的日志级别的时候,就需要修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
logger.setLevel(logging.INFO)

不方便,需要改进。

添加配置文件,让同一套代码运行在不同的环境

如果要同一套代码既运行在开发环境,又运行在生产环境,那就需要借助于配置文件,我们把日志的级别写在配置文件中,测试环境的配置文件为 DEBUG,生产环境的级别是 INFO,然后让 log.py 取读取就可以了。

配置文件最方面的,要数 dotenv 这个工具,它是个第三方库,使用之前请先 pip install python-dotenv 安装一下,然后在项目目录中创建一个 .env 文件中,写入一下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DEBUG = true

然后就可以这样来访问 .env 中的环境变量了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dotenv import load_dotenv
import os

load_dotenv()
print(os.getenv("DEBUG"))  # true

最后,我们来修改一下日志配置文件,让它同时适用于开发和生产环境:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import logging
import os
import time
from dotenv import load_dotenv

load_dotenv()
logger = logging.getLogger()

if not os.path.exists("logs"):
    os.mkdir("logs")
logger = logging.getLogger()

if os.getenv("DEBUG") == "true":
    # 测试环境
    logger.setLevel(logging.DEBUG)
else:
    # 生产环境
    logger.setLevel(logging.INFO)

ch = logging.StreamHandler()
fh = logging.FileHandler(filename=f"logs/log_{time.strftime('%Y%m%d')}.txt")

formatter = logging.Formatter(
    "%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s - %(message)s"
)
formatter2 = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter2)
logger.addHandler(ch)  # 将日志输出至屏幕
logger.addHandler(fh)  # 将日志输出至文件

即使没有 .env 文件,上面的代码也可以正常运行,因此你可以引用到自己的项目中。

最后的话

本文分享了一份 Python 日志配置,可同时适用于开发和生产环境,如果有帮助,还请点赞、在看支持,欢迎留言讨论

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为 FastAPI 配置日志的三种方法
你好,我是 somenzz,可以叫我征哥,最近在用 FastAPI 的时候,发现 FastAPI 的官方文档没有配置日志的相关说明,今天就分享一下 FastAPI 配置日志的三种方法。
somenzz
2022/05/24
10.2K0
为 FastAPI 配置日志的三种方法
Python之日志 logging模块
关于logging模块的日志功能 典型的日志记录的步骤是这样的: 创建logger 创建handler 定义formatter 给handler添加formatter 给logger添加handler import logging # 1、创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 2、创建一个handler,用于写入日志文件 fh = logging.FileHandle
新人小试
2018/04/12
5520
Python3-logging模块
因为工作需要用到关于日志的,最近一直都在看关于日志模块的东西,百度了很多文章,可惜都是看的让人一头雾水,最后运气不错,找到一篇很详细的文章。传送门:https://www.cnblogs.com/testdjt/p/7834856.html
润森
2019/10/24
7500
一个添加日志处理模块的python实例
日志模块在一个完整项目中必不可少,平时在工作中遇到系统报错等,也是首先到服务器查看报错日志(ps.即使看不懂,也会把报错部分copy出来当做bug附件)
冰霜
2022/03/15
3200
一个添加日志处理模块的python实例
Python入门之Python中的logging模块
基本用法 下面的代码展示了logging最基本的用法。 import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = logging.getLogger("AppName") # 指定logger输出格式 formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s') # 文件日志 file_handler = logging.FileH
Jetpropelledsnake21
2018/05/03
7110
Python中内置的日志模块logging用法详解
Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。
狼啸风云
2020/02/21
16.6K1
Python中内置的日志模块logging用法详解
Python日志模块logging
logger只输出高于或等于当前级别的日志, logging的root logger默认级别为info.
菲宇
2022/12/21
3600
Python日志模块logging
python模块--logging
logging模块                                                                                                                           
py3study
2020/01/09
3800
我的python学习--第十二天(二)
  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。
py3study
2020/01/08
7690
Python 学习入门(14)—— logging
Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。
阳光岛主
2019/02/19
6000
Python 学习入门(14)—— logging
【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
日志是记录了一系列事件或活动的文件。在计算机领域,它通常用于记录程序或系统的运行状况和维护信息,以便在需要时进行故障排除或回溯。通过分析日志文件,管理员可以了解系统的使用情况、问题发生的原因以及如何解决这些问题。
爱喝兽奶的熊孩子
2024/06/23
4760
【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
Python日志处理logging模块详解
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点
王大力测试进阶之路
2020/01/26
9780
python 日志模块 logging 详解
Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。 Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适: logger提供了应用程序可以直接使用的接口; handler将(logger创建的)日志记录发送到合适的目的输出; filter提供了细度设备来决定输出哪条日志记录; formatter决定日志记录的最终输出格式。 logging模块是在2.3新引进的功能,下面是一些常用
用户1177713
2018/02/24
2.2K0
python 日志模块 logging 详解
logging模块
logging模块 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNIN
用户1214487
2018/01/23
7050
Python logging模块
logging模块是Python的一个标准库模块,开发过程中,可以通过该模块,灵活的完成日志的记录。
py3study
2020/01/09
4470
Python模块知识5:日志logging
logging模块提供了通用的日志系统,可以采用不同的方式记录日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式; 日志分不同提醒级别,级别顺序为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,可以自己定义日志级别。 级别越高打印的日志等级越少,反之亦然。 debug: 打印全部的日志(notset等同于debug) info:打印info、warning、error、critical级别的日志 w
企鹅号小编
2018/01/11
8120
Python模块知识5:日志logging
Python日志处理logging模块
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。
用户5521279
2020/05/08
8100
Python日志logging模块使用详解
每个语言都会有自己的日志模块,Python也不例外。通常情况下当需要使用到日志的时候, 一般都是匆匆查找下资料,按照步骤进行下配置就是完事了,不太会去总结日志模块的使用方式。 经常过一段时间新项目需要用的时候,还是需要去网上搜索下配置方式。所以今天就为了日后的使用方便而进行的内容整理。
上帝De助手
2019/09/17
1.1K0
Python日志logging模块使用详解
python中logger日志模块的使用
        一般,我们做一些简单的状态输出都会用print,但是这是最简单的情况下使用的工具。当我们的程序比较复杂的时候,我们会使用日志文件,特别是程序运行的时间特别久,中间可能存在一些问题,需要后面来看的时候。
钱塘小甲子
2019/01/28
1.1K0
Python标准模块logging
http://blog.csdn.net/fxjtoday/article/details/6307285
bear_fish
2018/09/20
4620
相关推荐
为 FastAPI 配置日志的三种方法
更多 >
LV.1
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验