Python logging模块进行封装实现原理解析

1. 简介

      追踪某些软件运行时所发生事件的方法, 可以在代码中调用日志中某些方法来记录发生的事情

一个事件可以用一个可包含可选变量数据的消息来描述

事件有自己的重要性等级

2. 使用logging日志系统四大组件

  • loggers日志器

    • 提供应用程序代码直接使用的接口
  • handlers处理器
    • 用于将日志记录发送到指定的目的位置
  • filters过滤器
    • 过滤, 决定哪些输出哪些日志记录, 其余忽略
  • formatters格式器
    • 控制日志输出格式

使用代码如下

import os, time, logging, sys
from Common.plugs.get_config import r_config

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
if sys.platform == "win32":
  ENV_CONF_DIR = os.path.join(BASE_DIR, 'Common/conf/env_config.ini').replace('/', '\\')
else:
  ENV_CONF_DIR = os.path.join(BASE_DIR, 'Common/conf/env_config.ini')
log_path = r_config(ENV_CONF_DIR, "log", "log_path")

class Log:

  def __init__(self, log_path):
    self.logName = os.path.join(log_path, '{0}.log'.format(time.strftime('%Y-%m-%d')))

  def console_log(self, level, message):
    # 创建一个logger
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    # 创建一个handler,用于 debug 写入日志文件
    debug_file = logging.FileHandler(self.logName, 'a+', encoding='utf-8')
    debug_file.setLevel(logging.DEBUG)

    # 再创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)

    # 定义handler的输出格式

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    debug_file.setFormatter(formatter)
    ch.setFormatter(formatter)

    # 给logger添加handler
    logger.addHandler(debug_file)
    logger.addHandler(ch)

    # 记录一条日志
    if level == 'info':
      logger.info(message)
    elif level == 'debug':
      logger.debug(message)
    elif level == 'warning':
      logger.warning(message)
    elif level == 'error':
      logger.error(message)

    elif level == 'critical':
      logger.critical(message)

    logger.removeHandler(ch)
    logger.removeHandler(debug_file)
    debug_file.close()

  def debug(self, message): #最详细日志信息, 多用于问题诊断
    self.console_log('debug', message)

  def info(self, message): #仅次于DEBUG, 多用于记录关键点信息, 确保程序按预期执行
    self.console_log('info', message)

  def warning(self, message): #低等级故障, 但程序仍能运行, 如磁盘空间不足警告
    self.console_log('warning', message)

  def error(self, message): #由于比WARNING严重的问题, 导致某些功能不能正常运行时的记录
    self.console_log('error', message)

  def critical(self, message): 严重错误, 导致应用程序不能继续运行时的记录
    self.console_log('critical', message)

if __name__ == '__main__':
  Log(log_path).info("adasd")
  Log(log_path).error("dsadasddasd")
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python logging.info在终端没输出的解决

    问题描述: 在pyhton脚本中logging.info("hello world")希望输出'hello world',但是在终端没有输出 解决方法: 在文件开始的地方添加以下内容: logging.getLogger().setLevel(logging.INFO) 补充知识:引用slf4j中Logger.info只打印出文字没有数据 引的是 slf4j 包 import org.slf4j.Logger; import org.slf4j.LoggerFactory; priva

  • python3中的logging记录日志实现过程及封装成类的操作

    作用: 主要记录信息,便于定位查看问题. python logging模块官网: https://docs.python.org/zh-cn/3.7/library/logging.html#formatter-objects 三种定位问题方法: print debug调试:代码写好后,就不需要再进行调试了,所以引入了logger logging.debug() – 一般在测试环境中用 logger:当生产环境中有问题时,可以查看logger定位问题 步骤: 1.初始化日志 收集器 2.设置日志

  • Python logging模块写入中文出现乱码

    一下文件执行将产生乱码,切.log文件显示问好,打不开 import logging def shop_logging(name): name = name+"登录成功!" logger = logging.getLogger() fh = logging.FileHandler("test.log") formatter = logging.Formatter("%(asctime)s - %(name)s-%(levelname)s %(message

  • 解决Python logging模块无法正常输出日志的问题

    废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s class=logging.Formatter [handlers] keys=console, error_file [handler_console] class=logging.StreamHandler formatter=d

  • python logging模块书写日志以及日志分割详解

    本文范例是书写两个日志:错误日志(ERROR级别)和运行日志(DEBUG级别),其中运行日志每日凌晨进行分割 import logging,datetime,logging.handlers from conf import settings if __name__ == "__main__": #两个日志,错误日志和运行日志,输出文件路径及文件名 error_log = settings.ERROR_LOG_FILE run_log = settings.RUN_LOG_FILE l

  • python logging模块的使用总结

    日志级别 CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10 logging.basicConfig()函数中的具体参数含义 filename:指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中: filemode:文件打开方式,在指定了filename时使用这个参数,默认值为"w"还可指定为"a": format:指定handler使用的日志显示格式: datefmt:指定日期时间格式.,格式参考

  • Python logging模块异步线程写日志实现过程解析

    通过logging模块,重写一个logging2模块,独立开启线程,将待写的日志信息异步放入队列,做到日志输出不影响主流程性能,环境python3.8 logging2.py import os import threading import queue import time import datetime import logging from logging.handlers import RotatingFileHandler class logging2(threading.Threa

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

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

  • Python logging模块进行封装实现原理解析

    1. 简介       追踪某些软件运行时所发生事件的方法, 可以在代码中调用日志中某些方法来记录发生的事情 一个事件可以用一个可包含可选变量数据的消息来描述 事件有自己的重要性等级 2. 使用logging日志系统四大组件 loggers日志器 提供应用程序代码直接使用的接口 handlers处理器 用于将日志记录发送到指定的目的位置 filters过滤器 过滤, 决定哪些输出哪些日志记录, 其余忽略 formatters格式器 控制日志输出格式 使用代码如下 import os, time,

  • python @propert装饰器使用方法原理解析

    这篇文章主要介绍了python @propert装饰器使用方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先,@propert的作用是把类中的方法『变成』了属性,方便通过实例访问.propert可以有两种用法:可以把一个方法变成只读属性:可以对一些属性进行过滤. 想象这样一个场景,在实例化一个类之后,需要对类的一个属性进行赋值,这时候是没有对属性属性被赋予的值进行判断的,如果属性被赋予了一个不合适的值,那么代码在后面执行的时候就会

  • Nginx使用Lua模块实现WAF的原理解析

    目录 一.WAF产生的背景 二.什么是WAF 三.工作原理 四.WAF作用 五.WAF和传统防火墙的区别 六.WAF和DDos 七.Nginx WAF功能 八.Nginx Waf防护流程 九.基于Nginx实现的WAF 9.1安装依赖包 9.2安装LuaJIT2.0 9.3安装ngx_devel_kit 9.4安装lua-nginx-module 9.5安装Nginx 9.6安装ngx_lua_waf 9.7测试效果 前言:最近一段时间在写加密数据功能,对安全相关知识还是缺少积累,无意间接触到了

  • 解读python logging模块的使用方法

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 1.可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息: 2.print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据:logging则可以由开发者决定将信息输出到什么地方,以及怎么输出: logging框架中主要由四个部分组成: Loggers: 可供

  • Python logging模块用法示例

    本文实例讲述了Python logging模块用法.分享给大家供大家参考,具体如下: logging模块 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') logging.bas

  • Python socket模块ftp传输文件过程解析

    这篇文章主要介绍了Python socket模块ftp传输文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用环境:python3,window环境,需要在头部声明# -*- coding:utf-8 -*- 实现功能: 将sever端所处文件夹的文件,传输到client端所处的文件夹中. 并且通过md5检测是否出错. 客户端命令的形式是: get 文件名 client处的新文件是 文件名.new ftp_sever.py impo

  • Python中使用gflags实例及原理解析

    这篇文章主要介绍了Python中使用gflags实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装命令pip install python-gflags 使用示例: import gflags FLAGS = gflags.FLAGS gflags.DEFINE_string('name', 'ming', 'this is a value') gflags.DEFINE_integer('qps', 0, 'test qps'

  • python通过opencv实现图片裁剪原理解析

    这篇文章主要介绍了python通过opencv实现图片裁剪原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 图像裁剪的基本概念 : 图像裁剪是指将图像中我们想要的研究区以外的区域去除,经常是按照行政区划或研究区域的边界对图像进行裁剪.例如,一张500×400的图像,我们只想要中间的250×200的区域,就可以使用图像裁剪将四周的区域去除. 在实际开发工作中,我们经常需要对图像进行分幅裁剪,按照ERDAS实际图像分幅裁剪的过程,可以将图像分

  • python logging模块的使用

    默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息. 灵活配置日志级别,日志格式,输出位置 import logging file_handler = logging.FileHandler(filename='x1.log',

随机推荐