python日志的使用

2023-10-29

一、日志的使用

import logging
# 创建一个记录器对象
logger = logging.getLogger()
# 设置日志级别
logger.setLevel(logging.INFO)
# 设置日志的保存路径
logfile = 'path/data.logs'

# 指定文件处理器,发送日志输出到磁盘文件
fh = logging.FileHandler(logfile, encoding='utf-8')
fh.setLevel(logging.INFO)

# 指定流处理器,发送日志输出
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)

# 创建格式化程序,指定日志的输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

# 给文件文件处理器和流处理器指定格式化成
fh.setFormatter(formatter)
sh.setFormatter(formatter)

# 添加处理程序对象
logger.addHandler(fh)
logger.addHandler(sh)

二、日志的输出格式

%(name)s 记录器的名称
%(levelno)s 数字形式的日志记录级别
%(levelname)s 日志记录级别的文本名称
%(filename)s 执行日志记录调用的源文件的文件名称
%(pathname)s 执行日志记录调用的源文件的路径名称
%(funcName)s 执行日志记录调用的函数名称
%(module)s 执行日志记录调用的模块名称
%(lineno)s 执行日志记录调用的行号
%(created)s 执行日志记录的时间
%(asctime)s 日期和时间
%(msecs)s 毫秒部分
%(thread)d 线程ID
%(threadName)s 线程名称
%(process)d 进程ID
%(message)s 记录的消息

三、自定义日志管理器

class CustomLogger:
    def __init__(self, platform, path_dir, log_name):
        self.log_name = log_name
        self.path_dir = str(path_dir)
        self.platform = platform
        if not os.path.exists(f"./{self.platform}_logs/{self.path_dir}"):
            os.makedirs(f"./{self.platform}_logs/{self.path_dir}", exist_ok=True)
        # 创建一个记录器对象
        _logger = logging.getLogger(self.log_name)
        # 设置日志级别
        _logger.setLevel(logging.INFO)
        # 设置日志的保存路径
        logfile = f'./{self.platform}_logs/{self.path_dir}/{self.log_name}.logs'

        # 指定文件处理器,发送日志输出到磁盘文件
        fh = logging.FileHandler(logfile, encoding='utf-8')
        fh.setLevel(logging.INFO)

        # 指定流处理器,发送日志输出
        sh = logging.StreamHandler()
        sh.setLevel(logging.INFO)

        # 创建格式化程序,指定日志的输出格式
        formatter = logging.Formatter("%(asctime)s 【%(name)s】 \n- %(levelname)s: %(message)s")

        # 给文件文件处理器和流处理器指定格式化成
        fh.setFormatter(formatter)
        sh.setFormatter(formatter)

        # 添加处理程序对象
        _logger.addHandler(fh)
        _logger.addHandler(sh)
        self.get_logger = _logger

    @property
    def info(self):
        return self.get_logger.info

    @property
    def error(self):
        return self.get_logger.error

    @property
    def warning(self):
        return self.get_logger.warning


platform = "主文件夹"
path_dir = "子文件夹"
log_name = "日志记录器对象的名称"
custom_logger = CustomLogger(platform=paltform, path_dir=path_dir, log_name=log_name)
custom_logger.info(f"hello world!!!!!!!!!!!!!{log_name}")

四、logging模块可能会出现的问题

4.1 logging日志重复输出

这种情况一般是发生在自带的longing.info和自己创建的logger.info混合使用的情况,如以下情况:

import logging
# 创建默认的日志管理器root
logger_root = logging.getLogger()
logger_root.setLevel(logging.INFO)
logging.info("logging原生日志")  # 会使用默认的日志管理器root的相关配置去输出日志


# 创建一个记录器对象
logger = logging.getLogger("my_logger")
# 设置日志级别
logger.setLevel(logging.INFO)
# 指定流处理器,发送日志输出
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
# 创建格式化程序,指定日志的输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
# 给文件文件处理器和流处理器指定格式化成
sh.setFormatter(formatter)
# 添加处理程序对象
logger.addHandler(sh)

# 当使用logging.info去输出日志时,再创建一个新的非root日志管理器去输出日志,会以该新创建的日志管理器的名称去输出一条日志,即重复日志
logger.info("hello")  # 会输出两条日志

执行结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python日志的使用 的相关文章

随机推荐

  • 北京大学肖臻老师《区块链技术与应用》公开课笔记15——ETH概述篇

    北京大学肖臻老师 区块链技术与应用 公开课笔记 以太坊概述篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page BTC和ETH为最主要的两种加密货币 BTC
  • 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(16)

    今天我们解决了一个困扰了我们很久的问题 isqr值的获取与使用 功能的设想 通过isqr这个值来确定该耗材是否使用二维码管理 在新增耗材种类的时候加入该属性 选择是或否 并写入数据库 在显示库存数据的时候通过耗材的id查找该值 以此决定是否
  • 解决:Cannot deserialize value of type `java.util.Date` from String “xxx“: not a valid representation..

    一 问题 在做数据更新操作的时候 后台数据为Date时 前端把String类型数据传到后台时 Date类型无法识别这个String数据 所以会报错 二 错误描述 主要问题 Caused by com fasterxml jackson da
  • linux重启命令

    shutdown重启系统 usr sbin shutdown r now usr sbin 指定了命令的位置 路径 shutdown 是命令本身 r 是指示重新启动系统的选项 now 表示立即执行命令 不进行倒计时 也可以指定一个时间延迟
  • el-input校验,只能输入正整数

    一 表单校验方式 fileSort required true message 请输入排序 trigger blur pattern 1 9 d message 请输入正整数 trigger blur 二 el input的type设置为n
  • mybatis笔记(老杜版本)

    一 MyBatis概述 1 1框架 Java常 框架 SSM三 框架 Spring SpringMVC MyBatis SpringBoot SpringCloud 等 SSM三 框架的学习顺序 MyBatis Spring SpringM
  • mysql jdbc url utf8_Mysql JDBC Url参数与异常问题

    今天在写Java项目使用了 SELECT FROM plan WHERE isDelete isDelete AND nestId in open close separator gt nestId 但是很不幸 后台报异常 java sql
  • springboot整合七牛云对象存储

    目录 一 测试 二 整合 一 测试 注册七牛云账号 并进行邮箱绑定和实名认证 七牛云每个月送10G完全够我们开发 创建一个空间 存储区域哪里离你近选哪里 访问控制一定要公开 创建完成后 后期上传的静态资源 可以根据域名 文件名直接访问 自定
  • Java中正则表达式的使用

    Java中正则表达式的使用 在Java中 我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串 或者对字符串进行分割 或者对字符串一些字符进行替换 删除 一般会通过if else for 的配合使用来实现这些功能 如下所示 Jav
  • MMdetection之train_detector 源码解析

    目录 一 构建 data loaders mmdet datasets builder py 2 构建分布式处理对象 3 构建优化器 4 创建 EpochBasedRunner 并进行训练 一 构建 data loaders mmdet d
  • react hook+Typescript+一个ts项目

    说到Hook 少不了react16的新生命周期 https segmentfault com a 1190000018413163 关于getDerivedStateFromProps钩子 怎么在里面进行异步 判断是由state还是prop
  • 100天精通Python(可视化篇)——第89天:Bokeh库绘图可视化基础入门(参数说明+案例实战)

    文章目录 专栏导读 一 Bokeh是什么 二 安装与导入 三 Bokeh接口介绍 四 创建图表 五 添加自定义渲染器 切换主题 添加图例 图例位置 图例方向 图例背景和边界 图例文本的外观 行列布局 网格布局 书籍推荐 包邮送书5本 专栏导
  • Spring Cloud Nacos

    1 Spring Cloud Alibaba的功能 1 流控制和服务降级 支持WebServlet WebFlux OpenFeign RestTemplate Dubbo访问限制和降级流的功能 它可以在运行时通过控制台实时修改限制和降级流
  • Linux 安装 vmware workstation

    1 下载vmware workstation 下载地址 https my vmware com cn group vmware info slug desktop end user computing vmware workstation
  • iOS Xcode 7.2 以及各种版本Xcode工具下载地址

    https developer apple com download more 这里面有所有版本的Xcode dmg文件供大家下载
  • Anaconda学习

    Anaconda conda 创建 激活 退出 删除虚拟环境 Anaconda超详细教程2023 7 10 windows 网络连接错误 1 首先学习anaconda是什么 Anaconda 官方网站 就是可以便捷获取包且对包能够进行管理
  • 人人都是产品经理?

    产品经理顾名思义就是产品 经理 那么只要搞懂产品是什么 经理又什么什么 就明白了产品经理是什么 产品是什么 产品是满足需求的载体 能被市场 人们使用和消费 并能满足人们某种需求 创造价值 的任何东西 包括有形的实物和无形的服务 同时 产品也
  • 数据结构: 线性表(带头双向循环链表实现)

    文章目录 1 链表的分类 2 带头双向循环链表 2 1 带头双向循环链表的定义 2 2 接口函数 3 接口函数的实现 3 1 创建并返回链表的头结点 ListCreate 3 2 双向链表打印 ListPrint 3 3 双向链表尾插 Li
  • 不用nvm切换node版本,用volta管理node版本

    1 什么是volta 2 volta是一个node js的版本管理工具 你的电脑上安装了很多个node版本 volta可以让你在不同的项目中使用不同版本的node js 并且可以切换node js版本 3 volta是一个安装包 安装在电脑
  • python日志的使用

    一 日志的使用 import logging 创建一个记录器对象 logger logging getLogger 设置日志级别 logger setLevel logging INFO 设置日志的保存路径 logfile path dat