logging的简单介绍

用作记录日志,默认分为六种日志级别(括号为级别对应的数值)

  1. NOTSET(0)
  2. DEBUG(10)
  3. INFO(20)
  4. WARNING(30)
  5. ERROR(40)
  6. CRITICAL(50)

special

  • 在自定义日志级别时注意不要和默认的日志级别数值相同
  • logging 执行时输出大于等于设置的日志级别的日志信息,如设置日志级别是 INFO,则 INFO、WARNING、ERROR、CRITICAL 级别的日志都会输出。

logging常见对象

  • Logger:日志,暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效。
  • LogRecord :日志记录器,将日志传到相应的处理器处理。
  • Handler :处理器, 将(日志记录器产生的)日志记录发送至合适的目的地。
  • Filter :过滤器, 提供了更好的粒度控制,它可以决定输出哪些日志记录。
  • Formatter:格式化器, 指明了最终输出中日志记录的格式。

logging基本使用

logging 使用非常简单,使用  basicConfig()  方法就能满足基本的使用需要;如果方法没有传入参数,会根据默认的配置创建Logger 对象,默认的日志级别被设置为 WARNING,该函数可选的参数如下表所示。

参数名称

参数描述

filename

日志输出到文件的文件名

filemode

文件模式,r[+]、w[+]、a[+]

format

日志输出的格式

datefat

日志附带日期时间的格式

style

格式占位符,默认为 "%" 和 “{}”

level

设置日志输出级别

stream

定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常

handles

定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常

logging代码

 logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error") logging.critical("critical")

测试结果

 WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical

但是当发生异常时,直接使用无参数的  debug() 、 info() 、 warning() 、 error() 、 critical() 方法并不能记录异常信息,需要设置  exc_info=True  才可以,或者使用  exception() 方法,还可以使用  log() 方法,但还要设置日志级别和  exc_info 参数

 a = 5
b = 0
try:
c = a / b
except Exception as e:
# 下面三种方式三选一,推荐使用第一种
logging.exception("Exception occurred")
logging.error("Exception occurred", exc_info=True)
logging.log(level=logging.ERROR, msg="Exception occurred", exc_info=True)

logging之Formatter对象

Formatter 对象用来设置具体的输出格式,常用格式如下表所示

格式

变量描述

%(asctime)s

将日志的时间构造成可读的形式,默认情况下是精确到毫秒,如 2018-10-13 23:24:57,832,可以额外指定 datefmt 参数来指定该变量的格式

%(name)

日志对象的名称

%(filename)s

不包含路径的文件名

%(pathname)s

包含路径的文件名

%(funcName)s

日志记录所在的函数名

%(levelname)s

日志的级别名称

%(message)s

具体的日志信息

%(lineno)d

日志记录所在的行号

%(pathname)s

完整路径

%(process)d

当前进程ID

%(processName)s

当前进程名称

%(thread)d

当前线程ID

%threadName)s

当前线程名称

logging封装类

 #!/usr/bin/env python
# -*- coding: utf-8 -*- """
__title__ = logging工具类
__Time__ = 2019/8/8 19:26
"""
import logging
from logging import handlers class Loggers:
__instance = None def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls, *args, **kwargs)
return cls.__instance def __init__(self):
# 设置输出格式
formater = logging.Formatter(
'[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[%(funcName)s:%(lineno)d] : %(message)s')
# 定义一个日志收集器
self.logger = logging.getLogger('log')
# 设定级别
self.logger.setLevel(logging.DEBUG)
# 输出渠道一 - 文件形式
self.fileLogger = handlers.RotatingFileHandler("./test.log", maxBytes=5242880, backupCount=3) # 输出渠道二 - 控制台
self.console = logging.StreamHandler()
# 控制台输出级别
self.console.setLevel(logging.DEBUG)
# 输出渠道对接输出格式
self.console.setFormatter(formater)
self.fileLogger.setFormatter(formater)
# 日志收集器对接输出渠道
self.logger.addHandler(self.fileLogger)
self.logger.addHandler(self.console) def debug(self, msg):
self.logger.debug(msg=msg) def info(self, msg):
self.logger.info(msg=msg) def warn(self, msg):
self.logger.warning(msg=msg) def error(self, msg):
self.logger.error(msg=msg) def excepiton(self, msg):
self.logger.exception(msg=msg) loggers = Loggers() if __name__ == '__main__':
loggers.debug('debug')
loggers.info('info')

logzero封装类

 #!/usr/bin/env python
# -*- coding: utf-8 -*- """
__title__ = logzero日志封装类
__Time__ = 2019/8/8 19:26
"""
import logging import logzero
from logzero import logger class Logzero(object):
__instance = None def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls, *args, **kwargs)
return cls.__instance def __init__(self):
self.logger = logger
# console控制台输入日志格式 - 带颜色
self.console_format = '%(color)s' \
'[%(asctime)s]-[%(levelname)1.1s]-[%(filename)s]-[%(funcName)s:%(lineno)d] 日志信息: %(message)s ' \
'%(end_color)s '
# 创建一个Formatter对象
self.formatter = logzero.LogFormatter(fmt=self.console_format)
# 将formatter提供给setup_default_logger方法的formatter参数
logzero.setup_default_logger(formatter=self.formatter) # 设置日志文件输出格式
self.formater = logging.Formatter(
'[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[%(funcName)s:%(lineno)d] 日志信息: %(message)s')
# 设置日志文件等级
logzero.loglevel(logging.DEBUG)
# 输出日志文件路径和格式
logzero.logfile("F:\\imocInterface\\log/tests.log", formatter=self.formater) def debug(self, msg):
self.logger.debug(msg=msg) def info(self, msg):
self.logger.info(msg=msg) def warning(self, msg):
self.logger.warning(msg=msg) def error(self, msg):
self.logger.error(msg=msg) def exception(self, msg):
self.logger.exception(msg=msg) logzeros = Logzero() if __name__ == '__main__':
logzeros.debug("debug")
logzeros.info("info")
logzeros.warning("warning")
logzeros.error("error")
a = 5
b = 0
try:
c = a / b
except Exception as e:
logzeros.exception("Exception occurred")

Python常用库 - logging日志库的更多相关文章

  1. python常用框架及第三方库

    python常用框架及第三方库 一.Web框架 1.Django: 开源web开发框架,它鼓励快速开发,并遵循MVC设计,比较庞大,开发周期短.Django的文档最完善.市场占有率最高.招聘职位最多. ...

  2. python中的logging日志模块

    日志是程序不可或缺的一部分.它可以记录程序的运行情况,帮助我们更便捷地发现问题,而python中的logging日志模块给我们提供了这个机会. logging给我们提供了五种函数用来输出日志:debu ...

  3. python logging日志库

    项目中使用的日志库是使用python官方库logging封装的,但是居然一直么有设置日志自动滚动,经常会受到告警说哪台机器磁盘空间又满,清理一下,于是研究一下,解决这个问题. 参考:https://d ...

  4. Python入门之logging日志模块以及多进程日志

    本篇文章主要对 python logging 的介绍加深理解.更主要是 讨论在多进程环境下如何使用logging 来输出日志, 如何安全地切分日志文件. 1. logging日志模块介绍 python ...

  5. python找寻合适的日志库logging Handler——Handler自定义实现

    最近在用python tornado开发一个app的服务端.投产的系统肯定需要包含日志功能,这里就自然想到了用python自带的logging库.   logging中日志内容的输出都交由Handle ...

  6. python常用的内置库

    标准库: import os os.getcwd()  //返回当前工作路径 os.chdir('/server/accesslogs')   # Change current working dir ...

  7. Python模块学习 ---- logging 日志记录

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4cp ...

  8. Python常用模块--logging

    (转载) 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python内置的标准模块,主要用于 ...

  9. python中的logging日志

    logging使用 import logging import os from logging import handlers from constants.constants import Cons ...

随机推荐

  1. .gitignore 文件配置

    git 使用过程中,有许多文件或者文件夹是不希望更新到远程仓库了,因为他们比较占地方,这个时候我们可以利用 .gitignore 文件忽略文件. 按项目进行忽略 .gitignore 文件用于忽略文件 ...

  2. 2019 年百度之星 初赛一 1002 Game

    传送门 Problem Description 度度熊在玩一个好玩的游戏.游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格.现在他要依次完成 n 个任 ...

  3. 比特币学习笔记(一)---在windows下编译搭建比特币环境

    最近打算研究下比特币源码,却发现这套源码正常情况下得在linux下编译运行,而我的机器是windows的. 怎么办呢? 起初打算用mingw和cygwin搞搞看,试了许久后发现行不通,必须转到linu ...

  4. Sentinel :微服务哨兵

    1. Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentin ...

  5. NOIP2004普及组第3题 FBI树

    /* 1106: NOIP2004普及组第3题 FBI树 时间限制: 1 Sec 内存限制: 128 MB 提交: 10 解决: 9 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 我 ...

  6. Linux系统上安装配置MAVEN

    1,下载maven 首先进入maven下载目录:http://maven.apache.org/download.cgi 2,上传maven到linux系统 以下操作路径都是本人习惯,目录可以随意更改 ...

  7. Cannot create PoolableConnectionFactory (Could not create connection to database server.)

    是由于mysql驱动版本太低导致. 本人 jdk版本是1.8.0_211,mysql版本是8.0.17,mysql-connector-java版本是5.1.39, 后来把mysql-connecto ...

  8. 02.flask-script

    网址:https://pypi.org/project/Flask-Script/ 文档:https://flask-script.readthedocs.io/en/latest/ 1.安装 2.新 ...

  9. Django SQLite3的使用

    https://blog.csdn.net/qq_34485436/article/details/72805908

  10. Docker windows nano server容器中安装ssh实现远程登录管理

    [问题] 使用ServiceMonitor.exe作为前台进程运行起来的容器无法attach. 无法远程连接到运行中的容器中进行管理. [解决方法] 在container中新建管理员用户,通过SSH实 ...