首页 > 编程语言 >python日志模块回顾

python日志模块回顾

时间:2023-12-03 21:45:16浏览次数:46  
标签:FOREGROUND python self color 模块 path 日志 message

日志模块配置文件logging.yaml

version: 1
formatters:
  simple:
    format: '[%(asctime)s %(thread)d] [%(levelname)s] %(message)s'  # 日志内容的格式化,具体参数问GPT或百度
    dateformat: '%Y-%m-%d %H:%M:%S.%f'
handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout
  console_err:
    class: logging.StreamHandler
    level: ERROR
    formatter: simple
    stream: ext://sys.stderr
  file:
    class: logging.FileHandler  # 文件
    level: DEBUG
    formatter: simple
    mode: a # 追加写入,每次记录日志都在文件后面追加内容
    encoding: utf-8 # 编码
    filename: my_log.log  # 将日志写入的文件,指定路径,只有文件名则是当前路径
loggers:
  simpleExample: # 代码中获取的日志名
    level: DEBUG  # 该日志记录器的级别,从下往上包含
    handlers: [console,file]  # 与上面handlers的自己关联
    propagate: no
#root:
#  level: DEBUG
#  handlers: [file]

 

日志工具类:

#! /usr/bin/env python
# coding=gbk
import datetime
import logging, os
import ctypes
import logging.config

import yaml

from config.pathconfig import PathConfig

FOREGROUND_WHITE = 0x0007
FOREGROUND_BLUE = 0x01  # text color contains blue.
FOREGROUND_GREEN = 0x02  # text color contains green.
FOREGROUND_RED = 0x04  # text color contains red.
FOREGROUND_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN

STD_OUTPUT_HANDLE = -11
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)


def set_color(color, handle=std_out_handle):
    bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
    return bool


class Logger:

    def __init__(self):
        # 路径配置文件类,管理项目根目录下的文件夹路径
        sp = PathConfig()
        # 从路径config中读取日志文件夹logs的路径,使用当前年月日作为文件名
        path = sp.logs + '/%s.log' % datetime.datetime.now().strftime("%Y-%m-%d")
        self.__create_log_file(path)
        # 读取日志配置文件配置
        with open(sp.config + '/logging.yaml', 'r') as f:
            # 使用Yaml模块加载配置文件内容到字典中
            # yaml.load(f,Loader=yaml.FullLoader)方法是使用PyYAML库加载YAML文件的一种常见方式,使用FullLoader类作为加载器,以确保安全加载YAML数据
            dict_conf = yaml.load(f, Loader=yaml.FullLoader)
        # 将日志的yaml配置文件中文件路径改为自定义
        dict_conf['handlers']['file']['filename'] = path
        # 使用修改后的配置字典来配置日志系统
        logging.config.dictConfig(dict_conf)
        # 获取名为'simpleExample'的日志记录器
        self.logger = logging.getLogger('simpleExample')

    def __create_log_file(self, path):
        file_name = os.path.basename(path)
        file_path = path.replace("/" + file_name, "")
        if not os.path.exists(file_path):
            os.makedirs(file_path)
            # 在指定目录下创建文件
            with open(path, 'w', encoding="utf-8") as f:
                f.write(
                    "############################# %s CREATE NEW LOG FILE #############################\n" % datetime.datetime.now().strftime(
                        "%Y-%m-%d %H:%M:%S"))

    def debug(self, message):
        self.logger.debug(message)

    def info(self, message):
        self.logger.info(message)

    def war(self, message, color=FOREGROUND_YELLOW):
        set_color(color)
        self.logger.warning(message)
        set_color(FOREGROUND_WHITE)

    def error(self, message, color=FOREGROUND_RED):
        set_color(color)
        self.logger.error(message)
        set_color(FOREGROUND_WHITE)

    def cri(self, message):
        self.logger.critical(message)

创建日志文件前需要判断这个文件及其路径是否存在,不存在先创建文件。

 

标签:FOREGROUND,python,self,color,模块,path,日志,message
From: https://www.cnblogs.com/0099-ymsml/p/17873857.html

相关文章

  • 数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGB
    全文链接:https://tecdat.cn/?p=34434原文出处:拓端数据部落公众号分析师:ShilinChen离职率是企业保留人才能力的体现。分析预测职员是否有离职趋向有利于企业的人才管理,提升组织职员的心理健康,从而更有利于企业未来的发展。解决方案任务/目标采用分类这一方法构建6种模型对职......
  • 模块与包
    模块--》文件包--》文件夹我们将类似功能的模块放到一起(包)内,要用时直接导入即可语法:import模块名as别名:---》取别名是为了可以节省时间,简化代码importwin32processaspro#以后直接用pro即可模块分为三种:1.内置模块2.第三方模块3.自定义模块导......
  • Logstash分析Nginx日志
    六、Logstash分析Nginx日志实现思路:1.将Nginx普通日志转换为json2.将Nginx日志的时间格式进行格式化输出3.将Nginx日志的来源IP进行地域分析4.将Nginx日志的user-agent字段进行分析5.将Nginx日志的bytes修改为整数6.移除没有用的字段,message、headers6.1架构......
  • python 解压可迭代对象赋值给多个变量
    1.2解压可迭代对象赋值给多个变量问题如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError。那么怎样才能从这个可迭代对象中解压出N个元素出来?解决方案Python的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时候,你想统计下家庭作业......
  • centos查看日志文件内容,包含某个关键字的前后5行日志内容
    简述centos查看日志的几种方法centos查看日志文件内容,包含某个关键字的前后5行日志内容前情提示系统:一说部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行如果无法下载......
  • 【PUSDN】centos查看日志文件内容,包含某个关键字的前后5行日志内容,centos查看日志的几
    简述centos查看日志的几种方法centos查看日志文件内容,包含某个关键字的前后5行日志内容前情提示系统:一说部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行如果无法下载......
  • pythont基础-条件流程语句
    1、条件流程语句1、if语句if表达式1:语句if表达式2:语句elif表达式3:语句else:语句elif表达式4:2、for循环语句#以下for实例中使用了break语句,break语句用于跳出当前循环体:sites=["Baidu","Google","Runoob","Taobao"]forsitein......
  • Python基础_01_MarkDown语法基础
    MarkDown基础语法[一]Typora(1)下载官网:Typora官方中文站(typoraio.cn)正版价格及介绍:89元/3台设备;89元三个设备码(重装系统设备码失效)绿色版:网盘链接[.\Typora\resources文件夹下替换(app.asar)](2)部分设置主题更改:Typora官方主题库下载完成后,解压压缩包后将.css......
  • python基础-encode()、decode()函数
    1、encode()函数用于将字符串转换为指定编码格式的字节序列语法:其中,encoding是指定的编码格式,例如UTF-8、GBK等;errors是可选参数,用于指定编码错误的处理方式。string.encode(encoding,errors)示例s="周杰伦"bs1=s.encode("gbk")#bytes类型bs2=s.encode("utf......
  • python基础-字典
    1、字典定义字典是一种可变的容器,可以存储任意类型的数据字典中的每个数据都是用"键"(key)进行索引,而不像序列可以用下标进行索引【集合可以用下标进行搜索】字典中的数据没有先后关系,字典的存储是无序的【集合set存储也是无序的】字典的表示方式是以{}括起来,以冒号(......