Python 之添加log日志记录操作

代码:

import logging
import os
import time


# 创建logger实例并命名 uitesting
logger = logging.getLogger('uitesting')
# 设置logger的日志级别
logger.setLevel(logging.DEBUG)

# 添加控制台管理器(即控制台展示log内容)
ls = logging.StreamHandler()
ls.setLevel(logging.DEBUG)

# 设置log的记录格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s : %(message)s')

# 把格式添加到控制台管理器,即控制台打印日志
ls.setFormatter(formatter)
# 把控制台添加到logger
logger.addHandler(ls)


# 先在项目目录下建一个logs目录,来存放log文件
logdir = os.path.join(os.path.dirname(os.path.dirname(__file__)),'logs')
if not os.path.exists(logdir):
    os.mkdir(logdir)
# 再在logs目录下创建以日期开头的.log文件
logfile = os.path.join(logdir,time.strftime('%Y-%m-%d') + '.log')

# 添加log的文件处理器,并设置log的配置文件模式编码
lf = logging.FileHandler(filename=logfile,encoding='utf8')
# 设置log文件处理器记录的日志级别
lf.setLevel(logging.DEBUG)
# 设置日志记录的格式
lf.setFormatter(formatter)
# 把文件处理器添加到log
logger.addHandler(lf)


# 测试logger
if __name__ == '__main__':

    logger.debug('hhhhhhhhhhhh')
    logger.info('222222222222')
    logger.warning('3333333333333')
    logger.error('4444444444444')

测试运行结果:

控制台打印:

 文件记录:

 运用:

定义好的logger后,在项目代码文件中引用一下即可:
 

# 引用logger
from common.logs import logger


# 示例
class A:

    def login(username,password):
        print(f"使用用户名:{username},和密码:{password} 进行登陆")
        # 记录登录的log日志
        logger.info(f"使用用户名:{username},和密码:{password} 进行登陆")

### Python 使用 `logging` 模块写入日志文件 在 Python 中,`logging` 模块是一个功能强大的工具,用于记录程序运行状态的信息。通过配置该模块,可以轻松实现将日志信息写入到文件的功能。 #### 基本概念 `logging` 模块提供了多个级别的日志记录,常见的有以下几个级别(按严重程度从低到高排列)[^1]: - **DEBUG**: 调试信息,通常只在诊断问题时使用。 - **INFO**: 一般信息,表示程序正常运行。 - **WARNING**: 表示可能发生错误的情况。 - **ERROR**: 错误发生,但程序仍可继续运行。 - **CRITICAL**: 严重的错误,可能导致程序无法继续执行。 #### 配置日志写入文件 以下是将日志写入文件的一个简单例子: ```python import logging # 创建 Logger 对象 root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) # 定义 FileHandler 将日志写入指定文件,并设置编码为 utf-8 handler = logging.FileHandler('example.log', mode='w', encoding='utf-8') handler.setLevel(logging.DEBUG) # 设置日志格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 添加处理器到 Logger root_logger.addHandler(handler) # 记录日志 root_logger.debug("这是一个调试消息") root_logger.info("这是一个普通消息") root_logger.warning("这是一个警告消息") root_logger.error("这是一个错误消息") root_logger.critical("这是一个严重错误消息") ``` 在这个例子中: - 日志被写入名为 `example.log` 的文件中。 - 文件模式为 `'w'`,即每次运行脚本都会覆盖之前的日志内容;如果希望追加日志,则应改为 `'a'`。 - 编码设置为 UTF-8,以解决 Windows 下 CMD 查看可能出现的乱码问题[^1]。 #### 处理多级日志并分别存储至不同文件 对于更复杂的应用场景,可能需要根据不同日志等级将其保存到不同的文件中。下面展示了一个自定义类来管理这种需求的例子: ```python import os import logging from logging.handlers import RotatingFileHandler class CustomLogger: def __init__(self): dir_path = os.path.dirname(os.path.realpath(__file__)) self._loggers = {} handlers_config = { logging.INFO: os.path.join(dir_path, 'info_log.log'), logging.ERROR: os.path.join(dir_path, 'error_log.log') } log_formatter = logging.Formatter( '[%(asctime)s] [%(levelname)-8s] --- %(message)s ' '(%(filename)s:%(lineno)s)' ) for level, file_name in handlers_config.items(): handler = RotatingFileHandler(file_name, maxBytes=1024 * 1024 * 5, # 5 MB per file backupCount=3, encoding="utf-8") handler.setFormatter(log_formatter) logger_instance = logging.getLogger(f"{level}") logger_instance.setLevel(level) logger_instance.addHandler(handler) self._loggers[level] = logger_instance def log_info(self, msg): if logging.INFO in self._loggers: self._loggers[logging.INFO].info(msg) def log_error(self, msg): if logging.ERROR in self._loggers: self._loggers[logging.ERROR].error(msg) if __name__ == "__main__": custom_logger = CustomLogger() custom_logger.log_info("这是 INFO 级别的日志") custom_logger.log_error("这是 ERROR 级别的日志") ``` 此代码片段展示了如何创建一个支持轮转的日志系统,其中每种类型的日志会被分开存放到独立的文件里,同时设置了最大文件大小以及保留的历史副本数量[^2]。 #### 总结 以上介绍了两种方法来使用 Python 的 `logging` 模块写入日志文件:一种是基础版单文件输出,另一种则是高级版多文件分类输出。开发者可以根据实际项目需求选择合适的方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值