python打印日志方法的使用教程(logging模块)

目录
  • 一、必备技能
    • 1、logging模块的使用
  • 二、logging
    • 1、logging的基本使用
      • 1.1、日志的五个等级(DEBUG/INFO/WARNING/ERROR/CRITICAL)
      • 1.2、打印不同日志等级的方法:
    • 2、自定义日志收集器
      • 2.1、创建日志收集器
  • 总结

一、必备技能

1、logging模块的使用

(1)5个日志等级/以及5个输出日志的内置函数

(2)日志收集器、日志输出渠道的概念

(3)如何自定义日志收集器

(4)如何封装自定义的日志收集器

二、logging

python的官方库,打印日志用的,无需安装,使用时直接调用

1、logging的基本使用

1.1、日志的五个等级(DEBUG/INFO/WARNING/ERROR/CRITICAL)

(1)DEBUG:调试模式下的日志,只给程序员看的日志

(2)INFO:程序正常运行的时候输出的日志

(3)WARN/WARNING:警告信息,当前程序还可以运行,后面有可能出现问题

(4)ERROR:程序执行过程总的错误信息

(5)CRITICAL:发生严重错误,阻塞流程,程序可能无法继续运行

1.2、打印不同日志等级的方法:

(1)logging.debug("调试日志信息")

(2)logging.info("重要日志信息")

(3)logging.warning("警告日志信息")

(4)logging.error("错误日志信息")

(5)logging.critical("致命日志信息")

1.3、日志收集器和日志输出渠道:

日志收集器:

默认收集器的名字为root,默认收集等级为WARNING,通过如下步骤设置收集器的等级

log = logging.getLogger() # 获取日志收集器,默认为root

log.setLevel("等级")  # 等级必须大写

logging.basicConfig(level=logging.DEBUG)  # 设置收集器的等级

日志输出渠道:

默认输出等级为WARNING

输出渠道支持:输出到文件夹和输出到控制台

Demo实例1——默认WARNING等级

import logging
# 打印不同等级的日志(debug、info、warning、error、critical)
# 如下5条日志,只会打印WARNING等级以后的日志
logging.debug("这是一条debug级别的日志")
logging.info("这是一条info级别的日志")
logging.warning("这是一条warning级别的日志")
logging.error("这是一条error级别的日志")
logging.critical("这是一条critical级别的日志")

运行结果 :(只会打印WARNING级别以上的日志)

WARNING:root:这是一条warning级别的日志
ERROR:root:这是一条error级别的日志
CRITICAL:root:这是一条critical级别的日志

Demo实例2——默认的日志收集器

import logging
# # logging.basicConfig(level=logging.DEBUG) 设置日志级别
# 未指定name,默认返回自带的默认的root收集器
# 默认输出WARN级别以上的等级日志
# 如果设置了WARNING以下的等级,则输出WARNING等级以上的日志
# 如果设置了WARNING以上的等级,比如设置了ERROR,则输出ERROR等级以上的日志
log = logging.getLogger()
# log.setLevel("DEBUG")
# log.setLevel("INFO")
# log.setLevel("WARNING")
log.setLevel("ERROR")
# log.setLevel("CRITICAL")

logging.debug("这是一条debug级别的日志")
logging.info("这是一条info级别的日志")
logging.warning("这是一条warning级别的日志")
logging.error("这是一条error级别的日志")
logging.critical("这是一条critical级别的日志")

 运行结果:

ERROR:root:这是一条error级别的日志
CRITICAL:root:这是一条critical级别的日志

2、自定义日志收集器

2.1、创建日志收集器

log = logging.getLogger(name="rose_logger")

不传name参数时,默认返回收集器名字为“root”

传了name参数时,会创建一个新的日志收集器

2.2、创建日志收集渠道

(1)输出到控制台:

pycharm = logging.StreamHandler()

(2)输出到文件:    

file = logging.FileHandler(os.getcwd()+r"\rose.log",encoding="utf-8")

file=handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")

        注意点(参数):

filename, 日志的文件名称(包含路径)

when= 'h', 日志的切割单位

# S - Seconds 秒

# M - Minutes 分钟

# H - Hours 小时

# D - Days 天(24小时)

# midnight - roll over at midnight 日切

# W{0-6} - roll over on a certain day; 0 - Monday 周

interval=1, 滚动周期,与when='h'连动,1-表示以时间为周期

backupCount=0 保留日志文件的个数,设置为10,永远只保存最近的10个文件

2.3、创建日志的输出格式 (1)创建日志格式对象

pycharm_fmt = logging.Formatter(fmt=fmt1)

(2)将日志输出格式绑定到日志输出渠道

pycharm.setFormatter(fmt=pycharm_fmt)  ——设置到控制台日志渠道

file.setFormatter(fmt=pycharm_fmt1)——设置到文件日志渠道

(3)常用的格式模板(也可以自己定义)

fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"

fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'

(4)格式必须按照指定的格式格式化。常用的如下:

%(asctime)s——当前时间

%(funcName)s——模块名

%(lineno)d——行号

%(levelname)s——日志等级名称

%(message)s——具体的日志内容

   Demo实例3——自定义日志收集器和日志格式

import logging,os
from logging import handlers
# 1、创建日志收集器
log = logging.getLogger(name="rose_logger")

# 2、创建日志收集渠道
# 输出控制台
pycharm = logging.StreamHandler()
# 输出文件夹
file = logging.FileHandler(os.getcwd()+r"\rose.log",encoding="utf-8")
# file = handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")

# 3、创建日志的输出格式
fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
# 创建一个日志输出对象
pycharm_fmt = logging.Formatter(fmt=fmt1)
fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'
pycharm_fmt1 = logging.Formatter(fmt=fmt2)

# 4、日志输出格式绑定到日志输出渠道
pycharm.setFormatter(fmt=pycharm_fmt)
file.setFormatter(fmt=pycharm_fmt1)

# 5、直接给收集器设置日志级别就可以了,渠道会继承收集器的日志级别
log.setLevel(level=logging.DEBUG)
# 5、给收集渠道设置日志级别,文件渠道,控制台输出的级别不会一样
# pycharm.setLevel(logging.DEBUG)

# 6、将日志收集渠道绑定到日志收集器
log.addHandler(pycharm)
log.addHandler(file)

log.info(msg="测试")

输出结果:

Demo实例4——封装自定义日志收集器

import logging
from logging import handlers
def create_log(name,level,filename,sh_level,fh_level):
    """
    :param name:  日志收集器名字
    :param level: 日志收集器的等级
    :param filename:  日志文件的名称
    :param sh_level:  控制台输出日志的等级
    :param fh_level:    文件输出日志的等级
    :return: 返回创建好的日志收集器
    """

    # 1、创建日志收集器
    log = logging.getLogger(name)

    # 2、创建日志收集器的等级
    log.setLevel(level=level)

    # 3、创建日志收集渠道和等级
    sh = logging.StreamHandler()
    sh.setLevel(level=sh_level)
    log.addHandler(sh)
    fh = logging.FileHandler(filename=filename,encoding="utf-8")
    # fh1 = handlers.TimedRotatingFileHandler(filename=filename,when="D",interval=1,backupCount=10,encoding="utf-8")
    fh.setLevel(level=fh_level)
    log.addHandler(fh)

    # 4、设置日志的输出格式
    formats = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
    log_format = logging.Formatter(fmt=formats)
    sh.setFormatter(log_format)
    fh.setFormatter(log_format)
    return log

if __name__ == '__main__':
    log = create_log(name="rose_log",level=logging.DEBUG,filename="test_log.log",sh_level=logging.DEBUG,fh_level=logging.DEBUG)
    log.info(msg="--------debug--------")
    log.info(msg="--------info--------")
    log.info(msg="--------warning--------")
    log.info(msg="--------error--------")
    log.info(msg="--------critical--------")

输出结果:

总结

到此这篇关于python打印日志方法使用的文章就介绍到这了,更多相关python打印日志方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 按日期打印Python的Tornado框架中的日志的方法

    网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandler来支持以不同的时间维度归档日志. 然而根据Logging HOWTO的官方指南设置后,却发现新的日志只剩下root的,Tornado内部的logger全部没有生效. 参考stackoverflow上的一个回答,我发现下面的配置能让Tornado内部的logger也用上TimedRotatingFileHandler: # logging.yaml ver

  • Python日志打印里logging.getLogger源码分析详解

    实践环境 WIN 10 Python 3.6.5 函数说明 logging.getLogger(name=None) getLogger函数位于logging/__init__.py脚本 源码分析 _loggerClass = Logger # ...略 root = RootLogger(WARNING) Logger.root = root Logger.manager = Manager(Logger.root) # ...略 def getLogger(name=None): "&quo

  • Python中的logging模块实现日志打印

    目录 方法1:配置并输出日志到标准输出 方法2:配置输出到日志文件 前言: 大家在写代码的时候,经常会使用print打印日志方便排查问题,然而print的问题就是太过简单,缺少时间.日志级别等格式化信息. Python自带的logging模块,很简单就能实现日志的配置和打印,它有两种用法,方法1是把日志输出到标准输出,其实就是命令行界面,方法2则是输出日志到文件,更加方便. 方法1:配置并输出日志到标准输出 import logging   LOG_FORMAT = "%(asctime)s -

  • python日志通过不同的等级打印不同的颜色(示例代码)

    1,不用第三方库 # coding: utf-8 import logging BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) RESET_SEQ = "\033[0m" COLOR_SEQ = "\033[1;%dm" COLORS = { 'WARNING': GREEN, 'INFO': WHITE, 'DEBUG': BLUE, 'CRITICAL': YELLOW, 'ERR

  • 解决python logging遇到的坑 日志重复打印问题

    python 中 logging模块 假如遇到 多线程 或者 多进程 或者在web框架中自定义logging的话(一个请求就是一个独立的线程)非常容易重复打印日志 和造成内存崩溃,所以: 解决方法如下: 重写日志方法 用类: class Log(): import logging def __init__(self): self.logger = logging.getLogger(__name__) # 以下三行为清空上次文件 # 这为清空当前文件的logging 因为logging会包含所有

  • Python中使用logging模块打印log日志详解

    学一门新技术或者新语言,我们都要首先学会如何去适应这们新技术,其中在适应过程中,我们必须得学习如何调试程序并打出相应的log信息来,正所谓"只要log打的好,没有bug解不了",在我们熟知的一些信息技术中,log4xxx系列以及开发Android app时的android.util.Log包等等都是为了开发者更好的得到log信息服务的.在Python这门语言中,我们同样可以根据自己的程序需要打出log. log信息不同于使用打桩法打印一定的标记信息,log可以根据程序需要而分出不同的l

  • python logging日志打印过程解析

    一. 基础使用 1.1 logging使用场景 日志是什么?这个不用多解释.百分之九十的程序都需要提供日志功能.Python内置的logging模块,为我们提供了现成的高效好用的日志解决方案.但是,不是所有的场景都需要使用logging模块,下面是Python官方推荐的使用方法: 任务场景 最佳工具 普通情况下,在控制台显示输出 print() 报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logging.debug()) 发出有关特定事件的警告 warnings.

  • Python 根据日志级别打印不同颜色的日志的方法示例

    本文介绍了Python 根据日志级别打印不同颜色的日志的方法示例,分享给大家,具体如下: # -*-coding:UTF-8-*- import logging import os import time class logger(object): """ 终端打印不同颜色的日志,在pycharm中如果强行规定了日志的颜色, 这个方法不会起作用, 但是 对于终端,这个方法是可以打印不同颜色的日志的. """ #在这里定义StreamHandler

  • python打印日志方法的使用教程(logging模块)

    目录 一.必备技能 1.logging模块的使用 二.logging 1.logging的基本使用 1.1.日志的五个等级(DEBUG/INFO/WARNING/ERROR/CRITICAL) 1.2.打印不同日志等级的方法: 2.自定义日志收集器 2.1.创建日志收集器 总结 一.必备技能 1.logging模块的使用 (1)5个日志等级/以及5个输出日志的内置函数 (2)日志收集器.日志输出渠道的概念 (3)如何自定义日志收集器 (4)如何封装自定义的日志收集器 二.logging pyth

  • Python中zfill()方法的使用教程

    zfill()方法用零垫串来填充左边宽度. 语法 以下是zfill()方法的语法: str.zfill(width) 参数 width -- 这是字符串的最终宽度,即填充零后得到的宽度. 返回值 此方法返回补齐的字符串. 例子 下面的例子显示了zfill()方法的使用. #!/usr/bin/python str = "this is string example....wow!!!"; print str.zfill(40); print str.zfill(50); 当我们运行上面

  • Python中用sleep()方法操作时间的教程

    mktime()方法是localtime()反函数.它的参数是struct_time或全9元组,它返回一个浮点数,为了兼容时time(). 如果输入值不能表示为有效的时间,那么OverflowError或ValueError错误将被引发. Syntax 以下是mktime()方法的语法: time.mktime(t) 参数 t -- 这是struct_time或满9元组. 返回值 此方法返回一个浮点数,对于兼容性time(). 例子 下面的例子显示了mktime()方法的使用. #!/usr/b

  • Python日志logging模块功能与用法详解

    本文实例讲述了Python日志logging模块功能与用法.分享给大家供大家参考,具体如下: 本文内容: logging模块的介绍 logging模块的基础使用 logging模块的扩展使用 logging中的Filter 使用配置文件配置logging和logger 小技巧 想要了解更多?不如看看官方文档. 首发日期:2018-07-05 logging模块的介绍: 它是一个python标准库,所以它的通用性很高,所有的python模块都可以与它合作参与日志记录. 日志级别: 基本 中文意义

  • python中日志logging模块的性能及多进程详解

    前言 Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似.日志是记录操作的一种好方式.但是日志,基本都是基于文件的,也就是要写到磁盘上的.这时候,磁盘将会成为一个性能瓶颈.对于普通的服务器硬盘(机械磁盘,非固态硬盘),Python日志的性能瓶颈是多少呢?今天我们就来测一下.下面话不多说,来一起看看详细的介绍: 测试代码如下: #! /usr/bin/env python #coding=utf-8 # =

  • 解决Python中由于logging模块误用导致的内存泄露

    首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对 我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接的信息, 所以每一个 连接就创建了一个日志实例, 并分配一个 Formatter, 创建日志实例为了区分其他连接 所以我就简单粗暴的用了当前对象的 id 来作为日志名称: import logging class Conne

  • Python使用logging模块实现打印log到指定文件的方法

    本文实例讲述了Python使用logging模块实现打印log到指定文件的方法.分享给大家供大家参考,具体如下: 可能我们经常会使用print来输出信息到窗口,但当我们有很多个py文件需要运行,项目比较庞大的到时候,print简直就是太low了点了.那么我们可以使用强大的logging模块,把输出到指定的本地pc某个路径的文件中. 一.logging的框架 1. Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志 2. Handlers: 决定将日志记录分配至正确的目

  • python标准日志模块logging的使用方法

    最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下.python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: 复制代码 代码如下: import logging# 创建一个loggerlogger = logging.getLogger('mylogger')logger.setLevel(logging.DEBUG)# 创建一个ha

  • python日志logging模块使用方法分析

    本文实例讲述了python日志logging模块使用方法.分享给大家供大家参考,具体如下: 一.从一个使用场景开始 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件 import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log') fh

随机推荐