首页 > 编程语言 >【进阶13】【自学笔记】Python logging模块封装

【进阶13】【自学笔记】Python logging模块封装

时间:2023-04-17 22:15:15浏览次数:35  
标签:13 logging 进阶 handler error 日志 logger log

一、定义

    Python logging模块是一个可以通过控制日志级别、输出位置等方式来实现记录日志的模块。

 logger对象的不同方法来记录不同级别的日志。

   其中,debug()方法用于记录debug级别的日志,info()方法用于记录info级别的日志,warning()方法用于记录warning级别的日志,error()方法用于记录error级别的日志,critical()方法用于记录critical级别的日志。 

   日志级别从低到高分别是:DEBUG、INFO、WARNING、ERROR、CRITICAL。 

二、代码示例

# -*- coding: utf-8 -*-

"""
封装log方法

"""

import logging
import os
import time
#
#定义日志等级
LEVELS = {
    'debug': logging.DEBUG,
    'info': logging.INFO,
    'warning': logging.WARNING,
    'error': logging.ERROR,
    'critical': logging.CRITICAL
}

logger = logging.getLogger(__name__)        #定义记录器,使用 __name__ 作为记录器名称。
level = 'default'


def create_file(filename):
    """
    判断目录是否存在,不存在创建目录

    """
    path = filename[0:filename.rfind('/')]
    if not os.path.isdir(path):
        os.makedirs(path)
    if not os.path.isfile(filename):
        fd = open(filename, mode='w', encoding='utf-8')
        fd.close()
    else:
        pass

#输出日志到文件的处理器(Handler)
def set_handler(levels):
    if levels == 'error':
        logger.addHandler(MyLog.err_handler)
    logger.addHandler(MyLog.handler)

#删除到日志文件处理器
def remove_handler(levels):
    if levels == 'error':
        logger.removeHandler(MyLog.err_handler)
    logger.removeHandler(MyLog.handler)


def get_current_time():
    return time.strftime(MyLog.date, time.localtime(time.time()))


class MyLog:
    path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    log_file = path+'/Log/log.log'
    err_file = path+'/Log/err.log'
    #setLevel 方法来设置日志记录器(Logger)的记录等级(Level),其中 level 是指定的日志等级名称。
    logger.setLevel(LEVELS.get(level, logging.NOTSET))
    create_file(log_file)
    create_file(err_file)
    date = '%Y-%m-%d %H:%M:%S'
    #将文件处理器设置为一个变量进行接受
    handler = logging.FileHandler(log_file, encoding='utf-8')
    err_handler = logging.FileHandler(err_file, encoding='utf-8')

    @staticmethod
    def debug(log_meg):
        set_handler('debug')
        logger.debug("[DEBUG " + get_current_time() + "]" + log_meg)
        remove_handler('debug')

    @staticmethod
    def info(log_meg):
        set_handler('info')
        logger.info("[INFO " + get_current_time() + "]" + log_meg)
        remove_handler('info')

    @staticmethod
    def warning(log_meg):
        set_handler('warning')
        logger.warning("[WARNING " + get_current_time() + "]" + log_meg)
        remove_handler('warning')

    @staticmethod
    def error(log_meg):
        set_handler('error')
        logger.error("[ERROR " + get_current_time() + "]" + log_meg)
        remove_handler('error')

    @staticmethod
    def critical(log_meg):
        set_handler('critical')
        logger.error("[CRITICAL " + get_current_time() + "]" + log_meg)
        remove_handler('critical')


if __name__ == "__main__":
    MyLog.debug("This is debug message")
    MyLog.info("This is info message")
    MyLog.warning("This is warning message")
    MyLog.error("This is error")
    MyLog.critical("This is critical message")

  

标签:13,logging,进阶,handler,error,日志,logger,log
From: https://www.cnblogs.com/xfbk/p/17327688.html

相关文章

  • CodeStar2023年春第5周周赛普及进阶组
    T1:分段求平均数本题难度中等,划分型DP问题。用dp[i]表示前\(i\)个数最少划分成几段,对\(j=1,2,\cdots,i-1\)判断从\(a_j\)到\(a_i\)划分成一段时,平均数是否为整数,如果是整数,就更新\(dp[i]=\max(dp[i],dp[j-1]+1)\)初始值:\(dp[i]=i\)代码实现#include<b......
  • 自编译玩客云docker版OpenWrt R22.1.1(2022年2月13日更新)
    openwrt本地直接导入玩客云的步骤做了介绍,本篇适合于没有条件编译的朋友。2月13日更新内容:添加插件ttyd、netdata。拉取地址:dockerpulljyhking/onecloud:1.22月11日更新内容:增加s905系列docker版openwrt拉取地址:dockerpulljyhking/onecloud:s905_11月29日优化更新内容:1、简化......
  • 冲刺阶段1(4月13)
    今天我们利用课余时间展开了长达一个小时的讨论,本次讨论主要针对于我们所选择项目的功能进行了细致划分完善了上次大致的界面,本次的界面将会是最后版本的界面。 ......
  • [oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
    变量定义回忆上次内容上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力 编程语言的基础都是变量声明python是如何声明变量的呢? 变量想要定义变量首先明确什么是变量变量就是数值能变的量英文名称varia......
  • [oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
    变量定义回忆上次内容上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力编程语言的基础都是变量声明python是如何声明变量的呢?变量想要定义变量首先明确什么是变量变量就是数值能变的量英文名称variable计算机在内存中分配出空间用来存储这些能变的量那......
  • vue全家桶进阶之路32:Vue3 WatchEffect和watch 监听
    在Vue3中,watchEffect是一个用于监听响应式数据变化的API。它可以在函数内部自动跟踪数据的依赖,并在依赖变化时重新运行函数。watchEffect 的作用以及各个参数的功能讲解:watchEffect(effect:(onInvalidate:InvalidateCbRegistrator)=>void|(()=>void)|Promise<vo......
  • 代码随想录 46天 day198.打家劫舍 | | 337.打家劫舍 III | 213.打家劫舍II
    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能......
  • 代码随想录 day 46 139.单词拆分
    给定一个非空字符串s和一个包含非空单词的列表wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例1:输入:s="leetcode",wordDict=["leet","code"]输出:true解释:......
  • python s12 day13 JavaScript、Dom和jQuery
    1.JavaScriptJavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。1、JavaScript代码存在形式<!--方式一--><scripttype"text/javascript"src="JS文件"></script>......
  • Java开发笔记13(树的结构修改记录)
    1.Controller:/***区域树生成*/@GetMapping("/list")privateResultregionTree(){Stationstation=getStation(getUser());StringstationCode=station.getStationTelecode();List<NewTreeVo>tree=stationInfRelaService.regionTree(stat......