前言

  什么是日志?有什么作用?日志是跟踪软件运行时所发生的事件的一种方法,简单来说它可以记录某时某刻运行了什么代码,当出现问题时可以方便我们进行定位。

由python内置了一个logging模块,用户可以通过调用debug()、 info()、 warning()、 error() 、 critical()和notset()等方法进行日志的收集和处理。

一、日志等级

级别 数字值 作用
NOSET 0  废话,等于没写,毫无用处的文字
DEBUG 10 调试,一些额外信息。备注,往往与主体功能无关
INFO 20 主体功能的信息,做了些啥
WARNING 30 警告,提醒下次有可能会触发错误
ERROR 40  错误
CRITICAL 50  极其严重的错误,会影响系统的崩溃

二、日志使用

import logging

#1、初始化日志收集器
logger = logging.getLogger("这是日志收集器名称") #2、设置日志收集器的等级,高于或等于这个级别的日志我才记录
logger.setlevel("DEBUG") #3、初始化日志处理器handler:终端流处理器streamhandler和文件流处理器filehandler
stream_handler = logging.StreamHandler() #4、设置终端流处理器的等级。高于或等于这个级别的日志我才显示
stream_handler.setlevel("INFO") #5、日志收集器logger添加handler
logger.addHandler(stream_handler) #6、初始化日志格式format:
format_str = "%(asctime)s--%(levelname)s--%(filename)s--%(lineno)d--%(name)s--%(message)s" #7、handler添加format
stream_handler.setFormatter(format_str) #8、调用
logger.info("信息")
logger.debug(“调试信息”)

终端流处理器:日志直接在终端中显示(我用的是pycharm,那么就是pycharm控制台显示)

文件流处理器:将日志存储在文件中

一个收集器可以对应多个处理器,也就是说,可以同时设置终端流处理器和文件处理器

file_handler = logging.FileHandler("log.txt",encoding="utf8")

file_handler.setLevel("INFO")

#添加handler
logger.addHandler(file_handler) #handler添加format
file_handler.setFormatter(fmt) #调用

setlevel():相当于过滤器,不设置参数时默认的是WARNING,要大写。只有高于或等于设置的级别才显示。

logger和handler的级别需要比较,哪个级别更高,就以哪个为准

日志格式:https://docs.python.org/zh-cn/3/library/logging.html可以上官方网站查看需要的格式

三、日志封装

import logging

#日志的二次封装
def logging_function(logger_name,
logger_level="DEBUG",
handler_level="INFO",
log_file_name="logging.txt",
encoding="utf8",
format_str="%(asctime)s--%(levelname)s--%(filename)s--%(lineno)d--%(name)s--%(message)s"
): logger = logging.getLogger(logger_name)
logger.setLevel(logger_level)
# 终端流处理器
stream_hangdler = logging.StreamHandler()
stream_hangdler.setLevel(handler_level)
logger.addHandler(stream_hangdler)
# 文件处理器
file_hangdler = logging.FileHandler(log_file_name, encoding=encoding)
file_hangdler.setLevel(handler_level)
logger.addHandler(file_hangdler)
fmt = logging.Formatter(format_str)
stream_hangdler.setFormatter(fmt)
file_hangdler.setFormatter(fmt)
return logger #调用
logging_name="日志收集"
logger=logging_function(logging_name)

日志处理logging的更多相关文章

  1. Oracle补全日志(Supplemental logging)

    Oracle补全日志(Supplemental logging)特性因其作用的不同可分为以下几种:最小(Minimal),支持所有字段(all),支持主键(primary key),支持唯一键(uni ...

  2. 日志模块logging使用心得

    在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...

  3. Python日志输出——logging模块

    Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...

  4. python日志模块logging

    python日志模块logging   1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...

  5. python 重要的日志模块logging

    一,logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  6. 【python】【logging】python日志模块logging常用功能

    logging模块:应用程序的灵活事件日志系统,可以打印并自定义日志内容 logging.getLogger 创建一个log对象 >>> log1=logging.getLogger ...

  7. Python 日志模块logging

    logging模块: logging是一个日志记录模块,可以记录我们日常的操作. logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开. logging日志等级: ...

  8. Python日志模块logging&JSON

    日志模块的用法 json部分 先开一段测试代码:注意  str可以直接处理字典   eval可以直接将字符串转成字典的形式 dic={'key1':'value1','key2':'value2'} ...

  9. python中的第三方日志模块logging

    基本上每个系统都有自己的日志系统,可以使自己写的,也可以是第三方的.下面来简单介绍一下python中第三方的日志模块,入手还是比较简单的,但是也很容易给自己埋雷. 下面是我参考的资料链接 入手demo ...

  10. Pyhon 日志管理 -- logging

    Pyhon 日志管理 -- logging 一直觉得运行程序是能打印日志是一个神奇的事情,不懂日志产生的原理,后来听说Pyhton 有一个logging模块,So,要好好研究一下. 先贴出代码,看看她 ...

随机推荐

  1. 从 Delta 2.0 开始聊聊我们需要怎样的数据湖

    盘点行业内近期发生的大事,Delta 2.0 的开源是最让人津津乐道的,尤其在 Databricks 官宣 delta2.0 时抛出了下面这张性能对比,颇有些引战的味道. 虽然 Databricks ...

  2. tomcat线程池

    tomcat线程池和普通的线程池设计上有所区别,下面主要来看看它是如何设计的 tomcat中线程池的创建 org.apache.tomcat.util.net.AbstractEndpoint#cre ...

  3. 技术专家说 | 如何基于 Spark 和 Z-Order 实现企业级离线数仓降本提效?

    [点击了解更多大数据知识] 市场的变幻,政策的完善,技术的革新--种种因素让我们面对太多的挑战,这仍需我们不断探索.克服. 今年,网易数帆将持续推出新栏目「金融专家说」「技术专家说」「产品专家说」等, ...

  4. Flutter 开启 Windows、macOS 平台支持的命令

    Flutter 的多平台支持除了 Android 和 iOS 是默认开启的以外,比如 Windows.Linux 平台的支持需要手动开启. Flutter config 命令集中,有以下参数是对于平台 ...

  5. HTML短链接

    短链接跳转方法 新建一个目录名称就是短链接字符列如:1 创建一个index.html文件里面添加代码如下 <script type="text/javascript"> ...

  6. 动态规划——leetcode55、跳跃游戏

    1.题目描述:  2.解题方法:动态规划 动态规划解题步骤: 1.确定状态: 最后一步:如果能跳到最后一个下标,我们考虑他的最后一步到n-1(最后一个下标),这一步是从 i 跳过来的,i<n-1 ...

  7. Spark 读Hive并写入HBase

    package com.grady import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.c ...

  8. 利用京东云Web应用防火墙实现Web入侵防护

    摘 要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 1 准备环境 1.1 在京东 ...

  9. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  10. 【loj2538】 【PKUWC 2018】Slay the Spire dp

    我们不难发现,假设抽了x张攻击牌,y张强化牌,那么肯定是打出尽可能多张的强化牌后,再开始出攻击牌(当然最少要一张攻击牌) 我们设G(i,j)表示:所有(抽到的攻击牌牌数为i,打出的攻击牌牌数为j)的方 ...