Python Logging 模块

2023-11-20

Python Logging 模块


1.Logging 模块介绍


介绍连接: https://www.jianshu.com/p/7b5e4752932e
Python 中的 logging 模块可以让你跟踪代码运行时的事件,当程序崩溃时可以查看日志并且发现是什么引发了错误。
logging模块用于便捷记录日志且线程安全。
Log信息有内置的层级——调(debugging)、信息(informational)、警告(warnings)、错误(error)和严重错(critical)。
logging 模块可以

控制信息层级,仅记录需要的信息。
控制显示或者保存日志的时机。
使用内置信息模板控制日志格式。
知晓信息来自于哪个模块。

2.第一个logging程序


import logging
logging.basicConfig(level=logging.WARNING)

def hypotenuse(a, b):
    """计算三角形斜边"""
    return (a**2 + b**2)**0.5

kwargs = {'a':3, 'b':4, 'c':hypotenuse(3, 4)}

logging.debug("a = {a}, b = {b}".format(**kwargs))
logging.info("{a}, {b} 的斜边是 {c}".format(**kwargs))
logging.warning("a={a} 和 b={b} 相等".format(**kwargs))
logging.error("a={a} 和 b={b} 不能为负".format(**kwargs))
logging.critical("{a}, {b} 的斜边是 {c}".format(**kwargs))

2.1 基本设置 logging.basicConfig()
参数说明
参数说明2.2 日志级别(level)
只有大于当前日志等级的操作才会被记录。
日志级别


3.第二个logging程序


import logging
logger = logging.getLogger("my_test")
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler("access.log")
fh.setLevel(logging.INFO)

ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)

formatter = logging.Formatter("%(asctime)s :: %(levelname)s :: %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh)
logger.addHandler(ch)

logger.debug("I am debug")
logger.info("I am info")
logger.warning("I am warning")
logger.error("I am error")
logger.critical("I am critical")

3.1 Formatter 参数解读
常用参数说明
参数说明3.2 getLogger 创建对象
使用方法

logger = logging.getLogger(name)

3.3 setLevel 设置级别

使用方法

logger.setLevel(logging.DEBUG(级别))

3.4 FileHandler 与 StreamHandler 输出设置
斜体样式

fh = logging.FileHandler("access.log")  #输出文件
ch = logging.StreamHandler()            #输出命令行

3.5 setFormatter 匹配命令

fh.setFormatter(formatter)
ch.setFormatter(formatter)

3.6 addHandler 添加
将指定的处理程序hdlr添加到此记录器

logger.addHandler(fh)
logger.addHandler(ch)

3.7 debug info warning error critical

logger.debug("I am debug")
logger.info("I am info")
logger.warning("I am warning")
logger.error("I am error")
logger.critical("I am critical")
logging.debug("a = {a}, b = {b}".format(**kwargs))
logging.info("{a}, {b} 的斜边是 {c}".format(**kwargs))
logging.warning("a={a} 和 b={b} 相等".format(**kwargs))
logging.error("a={a} 和 b={b} 不能为负".format(**kwargs))
logging.critical("{a}, {b} 的斜边是 {c}".format(**kwargs))

4.logHelper类


  logHelper基于logging,做了一些二次封装工作,主要实现设置日志级别、
  格式化日志内容,将日志输出至文件中并可以自定义日志文件大小。
  Arguments:
         name: String. 此字段仅用于传入日志输出中一个名称字段
         maxsize: String. 此字段用于自定义日志文件大小,单位为M
import logging
from logging.handlers import RotatingFileHandler


class LogHelper:
    def __init__(self, name, maxsize):
        """
          logHelper基于logging,做了一些二次封装工作,主要实现设置日志级别、
        格式化日志内容,将日志输出至文件中并可以自定义日志文件大小。
        Arguments:
            name: String. 此字段仅用于传入日志输出中一个名称字段
            maxsize: String. 此字段用于自定义日志文件大小,单位为M
        """
        super().__init__()

        # 是否回显标志
        self.isEcho = False

        # 创建logger实例,logging模块在使用之前首先需要创建这样的一个实例
        self.logger = logging.getLogger(name)

        # 默认设置为DEBUG级别,低于次级别的日志不会写入到文件中
        self.logger.setLevel(level=logging.DEBUG)

        # 格式化日志输出,目前格式为:时间 - 名称 - 级别 - 日志内容
        self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

        # 创建文件Handler,默认日志文件为同级目录下的log.txt文件,最大文件大小为初始化函数中传入,backupCount 为日志备份数量
        self.fileHandler = RotatingFileHandler("log.txt", maxBytes=1024*1024*maxsize, backupCount=1)

        # 设置文件输出的日志级别
        self.fileHandler.setLevel(logging.DEBUG)

        # 设置日志输出格式以及文件输出(此时不会在终端中输出)
        self.fileHandler.setFormatter(self.formatter)
        self.logger.addHandler(self.fileHandler)

    def set_level(self, level):
        """设置日志级别
        Arguments:
            level: int. 日志级别.  debug-10 info-20 warning-30 error-40 critical-50
        """
        self.logger.setLevel(level)
        self.fileHandler.setLevel(level)

    def echo(self):
        # 设置是否回显
        self.isEcho = True

    def debug(self, string):
        # debug
        self.logger.debug(string)
        if self.isEcho:
            return string

    def info(self, string):
        # info
        self.logger.info(string)
        if self.isEcho:
            return string

    def warning(self, string):
        # warning
        self.logger.warning(string)
        if self.isEcho:
            return string

    def error(self, string):
        # error
        self.logger.error(string)
        if self.isEcho:
            return string

    def critical(self, string):
        # critical
        self.logger.critical(string)
        if self.isEcho:
            return string


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

Python Logging 模块 的相关文章

随机推荐

  • 定位shadow

    1 先定位到 shadow root 的宿主节点 此处为 id box 的 div 2 切换到 shadow root 中 3 然后再选择 shadow root 下的 span 标签 import time from selenium i
  • 2022亚太数学杯数学建模竞赛C题(思路、程序......)

    目录 一 英文题目及数据 二 中文翻译题目参考 2 1 题目 2 2 题目 三 思路 程序参考 四 参考文献 一 英文题目及数据 Canada s 49 6 C has set a new temperature record for re
  • 前端高频面试题 js中堆和栈的区别和浏览器的垃圾回收机制

    一 栈 stack 和 堆 heap 栈 stack 是栈内存的简称 栈是自动分配相对固定大小的内存空间 并由系统自动释放 栈数据结构遵循FILO first in last out 先进后出的原则 较为经典的就是乒乓球盒结构 先放进去的乒
  • 将数据导入Hive数据库中,使用python链接Hive读取数据库,转化成pandas的dataframe

    做互联网应用开发过程中 时常需要面对海量的数据存储及计算 传统的服务器已经很难再满足一些运算需求 基于hadoop spark的大数据处理平台得到广泛的应用 本文提供一个导入数据到hive 用python读取hive数据库的例子 这实际是个
  • blender学习记录3--物体的操作

    添加删除物体 删除选中物体按delete或者x 进行选择删除 操作面板 在上一个步骤 比如添加物体 后 在屏幕两侧下方都会出现添加xx 点开这个操作面板就能够将刚添加的物体属性进行选择 若是做了其他步骤还想在修改只能在侧栏的条目或者编辑器类
  • 使用大块内存的设置

    C 如下分配内存的代码 booleantempTag true do try double K NULL int nnz cout lt lt 请输入分配内存大小 MB lt
  • logstash过滤器插件filter详解及实例

    原创作者 峰哥ge 原创地址 https www cnblogs com FengGeBlog p 10305318 html logstash过滤器插件filter grok正则捕获 grok是一个十分强大的logstash filter
  • Docker:数据卷&数据卷容器

    一 概念解析 1 数据卷 数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹 通过docker run v命令可以将数据卷挂载到对应的容器目录空间 进行文件读取 容器卷特性如下 数据卷可以在容器之间共享和重用 容器间传递数
  • MOOC《Python语言程序设计》第6周练习题

    这周讲解了组合数据类型 重点介绍表达和处理一组数据的方法 涉及到多种数据类型 包括 集合类型 序列类型 含元组类型和列表类型 和字典类型 讲解2个颇有用处的实例 基本统计值计算和文本词频统计 其中 即有英文Hamlet的词频统计 也有中文
  • mysql设置utf-8和查询修改数据库、表常用命令

    mysql设置utf 8和查询修改数据库 表常用命令 1 设置utf8字符集 2 查询修改数据库 表的字符集 1 设置utf8字符集 二级目录 默认情况下 通过 show variables like char 命令查询mysql字符编码如
  • 'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件

    今天通过windows cmd客户端输入 solr cmd start 启动solr时 提示 findstr 不是内部或外部命令 也不是可运行的程序或批处理文件 这是PATH环境变量的问题 将windows命令的目录添加到PATH中就好了
  • JDBC连接步骤

    第一步 在项目中新建一个名称叫lib的文件夹 然后将下载的MySQL连接jar包存入到这个lib文件夹中并配置环境 第二步 编写代码 连接数据库并操作数据库中某个表里的数据 基本操作 1 注册驱动 Class forName com mys
  • matlab 非极大值抑制,非极大值抑制算法(matlab实现)

    参考 http www cnblogs com liekkas0626 p 5219244 html function pickLocate nms boxes overlap Non maximum suppression In obje
  • leetcode 字符串压缩

    思路 用双指针的方法 定一个 i 和 j AC代码 class Solution public string compressString string S 两层循环 if S size 0 return S int i 0 j 0 str
  • 【杂谈】概率与随机以及手游抽卡机制的科普

    原文 NGA的一篇随机科普 其中包含了对手游抽卡机制的探讨 本文摘选了我自己感兴趣的部分 真随机 先说点题外话 请先看这个问题 一杯热水和一杯冷牛奶哪个热量更高 很显然这个问题从物理学和营养学的层面会得出相反的答案 先不考虑物理学层面说 一
  • java 静态初始化块中,方法中不可以定义静态变量(重要)

    来源 https zhidao baidu com question 493515697 html 静态变量只能定义在类的内部 不可以定义在静态块或方法中 可以在类内部定义静态变量 在静态块中进行初始化操作 因为类的内部是不允许有操作语句存
  • uniapp开发常见问题整理

    1 自适应尺寸 移动端开发时使用rpx单位 以便适应各种手机像素 避免使用px 2 微信超包限制 小程序规定每个包源码不能超过2M uniapp打包时会将一些公共资源打包到主包中 从而造成小程序无法打包上传 提倡做法 1 底部导航栏对应的界
  • gitlab remote: HTTP Basic: Access denied

    使用 http流程 问题 git push报错 HTTP Basic Access denied 原因 本地git配置的用户名 密码与gitlabs上注册的用户名 密码不一致 解决方案 进入控制面板 用户账号 凭据管理器 windows凭据
  • Linux NAT软路由的简介、入门与配置

    本文目录 1 确认Linux kernel内核版本 2 netfilter的nat table简介 3 用iptables实现SNAT 3 1 多对多 N N 的SNAT 3 2 将一个网段内的某个公网IP移除出SNAT可用的公有IP地址池
  • Python Logging 模块

    Python Logging 模块 1 Logging 模块介绍 介绍连接 https www jianshu com p 7b5e4752932e Python 中的 logging 模块可以让你跟踪代码运行时的事件 当程序崩溃时可以查看