猴子补丁的应用,猴子补丁来改变日志。

打这个猴子补丁,就可以不需要修改任何一处代码,就能使项目中所有py文件的所有控制台日志变彩色和可点击跳转。

import logging

class ColorHandler(logging.Handler):
    """
    A handler class which writes logging records, appropriately formatted,
    to a stream. Note that this class does not close the stream, as
    sys.stdout or sys.stderr may be used.
    """

    terminator = ‘\n‘
    bule = 96 if os.name == ‘nt‘ else 36
    yellow = 93 if os.name == ‘nt‘ else 33

    def __init__(self, stream=None,):
        """
        Initialize the handler.

        If stream is not specified, sys.stderr is used.
        """
        logging.Handler.__init__(self)
        self.formatter = logging.Formatter(
            ‘%(asctime)s - %(name)s - "%(pathname)s:%(lineno)d" - %(funcName)s - %(levelname)s - %(message)s‘,
            "%Y-%m-%d %H:%M:%S")
        if stream is None:
            stream = sys.stdout  # stderr无彩。
        self.stream = stream

    def flush(self):
        """
        Flushes the stream.
        """
        self.acquire()
        try:
            if self.stream and hasattr(self.stream, "flush"):
                self.stream.flush()
        finally:
            self.release()

    def emit(self, record):
        """
        Emit a record.

        If a formatter is specified, it is used to format the record.
        The record is then written to the stream with a trailing newline.  If
        exception information is present, it is formatted using
        traceback.print_exception and appended to the stream.  If the stream
        has an ‘encoding‘ attribute, it is used to determine how to do the
        output to the stream.
        """
        # noinspection PyBroadException
        try:
            msg = self.format(record)
            stream = self.stream
            if record.levelno == 10:
                # msg_color = (‘\033[0;32m%s\033[0m‘ % msg)  # 绿色
                msg_color = (‘\033[0;%sm%s\033[0m‘ % (32 , msg))  # 绿色
            elif record.levelno == 20:
                msg_color = (‘\033[0;%sm%s\033[0m‘ % (self.bule, msg))  # 青蓝色 36    96
            elif record.levelno == 30:
                msg_color = (‘\033[0;%sm%s\033[0m‘ % (self.yellow, msg))
            elif record.levelno == 40:
                msg_color = (‘\033[0;35m%s\033[0m‘ % msg)  # 紫红色
            elif record.levelno == 50:
                msg_color = (‘\033[0;31m%s\033[0m‘ % msg)  # 血红色
            else:
                msg_color = msg
            # print(msg_color,‘***************‘)
            stream.write(msg_color)
            stream.write(self.terminator)
            self.flush()
        except Exception:
            self.handleError(record)

    def __repr__(self):
        level = logging.getLevelName(self.level)
        name = getattr(self.stream, ‘name‘, ‘‘)
        if name:
            name += ‘ ‘
        return ‘<%s %s(%s)>‘ % (self.__class__.__name__, name, level)

logging.StreamHandler = ColorHandler   # 这里就是打猴子补丁
from logging import StreamHandler

logger = logging.getLogger(‘abc‘)
print(logger.handlers)
print(StreamHandler().formatter)
logger.addHandler(StreamHandler())
logger.setLevel(10)

def my_func():
    logger.debug(11111111111111)
    logger.info(22222222222222)
    logger.warning(33333333333)
    logger.error(4444444444444)
    logger.critical(555555555555)
    print(logger.handlers)

if __name__ == ‘__main__‘:
    my_func()

原来

打狗子补丁后,也就是执行下面这句话,就能使日志变彩色和可跳转。

logging.StreamHandler = ColorHandler

原文地址:https://www.cnblogs.com/ydf0509/p/11221043.html

时间: 2024-08-28 21:08:48

猴子补丁的应用,猴子补丁来改变日志。的相关文章

weblogic补丁下载与安装补丁的方法

文章目录1.根据漏洞报告下载补丁2.补丁包上传解压到Linux3.关于OPatch4.安装补丁4.1单个补丁安装4.2查看已安装的补丁4.3多个补丁安装4.4单个补丁回滚4.5多个补丁回滚4.6验证补丁是否应用到Oracle Home 由于绿盟扫描出了机器上安装的weblogic12c存在漏洞,需要进行补丁升级.weblogic安装的版本是12.1.3,需要使用Generic通用包安装的weblogic才能进行补丁升级,参见Linux命令行安装weblogic12c 1.根据漏洞报告下载补丁①根

加入WSUS补丁服务器并下载补丁

--------加入WSUS补丁服务器并下载补丁_不安装------- @echo off reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v AccountDomainSid /freg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v PingID /freg delete HKLM\SOFTWARE\M

linux下补丁制作及打补丁实例【转】

转自:http://www.latelee.org/using-gnu-linux/diff-and-patch-on-linux.html 搞ARM有一段时日了,期间看了不少开发板的手册,手册的内容多数为教我们如何使用开发板,而不是教我们如何开发.手册中少不了显示linux下的命令,不过对这些命令有几点看法: 1.很多操作都使用了绝对路径,我想大约是为了表示这个路径的关系吧,不然的话,对于新手来说,来回几个cd,就搞不清楚在哪个目录了,这点表示赞同.不过对于我来说,实在不会如此操作: 2.统一

Win10 PC一周年更新正式版14393.447 64位更新补丁KB3200970下载 Flash补丁Kb3202790下载

微软在今天凌晨推送了Win10 PC一周年更新正式版14393.447,本次更新补丁代号为KB3200970,面向Win10一周年更新正式版的PC用户. 更新日志 • 提升了多媒体音频.远程桌面以及IE11浏览器的可靠性 • 修复了阻碍用户连接VPN的问题 • 修复了重新开启的计划任务无法在“任务调度程序”中运行的问题 • 修复了“接入点名称(Access Point Name/APN)”数据库的更新问题 • 修复了日语字符在被输入法编辑器转换后丢失的问题 • 修复了系统托盘区的Wi-Fi图标在

git制作补丁Patch和应用补丁Patch

1 先找到指定的提交id,比如 cc451ef67a301003bbaf5bf616e08f1a3221268e 2 到git代码目录中,敲命令制作Patch git format-patch cc451ef67a301003bbaf5bf616e08f1a3221268e 3 命令执行完成后,在当前目录生成若干个.patch的文件 把生成的.patch文件打包上传到服务器上并解压出来(步骤省略) 4 在服务器上应用补丁Patch 清除之前的错误信息 git am --abort 应用补丁 gi

log4j 动态改变日志的输出路径

实际背景 客户有客户端多台,每个客户端有自己的唯一编号.输出的日志要根据每个客户端的编号生成,例如10001_demo.log,10002_demo.log 方法 1.网上给出的第一种方法是: 在log4j的配置文件中log4j.appender.file.File=${log.dir}/${log.file}中,使用${}形式定义变量,在后台使用 System.setProperty("log.dir","/home/..."),来设置变量值.但我测试了多次,这样

Linux打补丁的一些问题

linuxpatchlinux内核文档commandheader类unix操作系统有一个很有趣的特性就是源代码级的补丁包.在windows上我们打补丁都是运行一个可执行的程序,然后就可以把补丁打完了,这对于最终用户是非常方便的,但是对我们这些求知欲比较强的Linux fans来说就有点不过瘾了,因为我们不知道里面是怎么做的.而Linux的补丁就有趣多了,我们首先获得程序的源代码和对应的补丁文件,然后给源代码打补丁,产生新的源代码文件.然后再编译这个新的源代码文件,就获得了打过补丁的新程序了. 如

Vijos1019 补丁VS错误[最短路 状态压缩]

描述 错误就是人们所说的Bug.用户在使用软件时总是希望其错误越少越好,最好是没有错误的.但是推出一个没有错误的软件几乎不可能,所以很多软件公司都在疯狂地发放补丁(有时这种补丁甚至是收费的).T公司就是其中之一. 上个月,T公司推出了一个新的字处理软件,随后发放了一批补丁.最近T公司发现其发放的补丁有致命的问题,那就是一个补丁在排除某些错误的同时,往往会加入另一些错误. 此字处理软件中只可能出现n个特定的错误,这n个错误是由软件本身决定的.T公司目前共发放了m个补丁,对于每一个补丁, 都有特定的

基于自适应热补丁的Android内核漏洞生态修复方案

1. 背景 Android内核漏洞严重影响了Android平台的安全.一旦内核被攻破,所有依赖内核完整性的安全机制都岌岌可危(比如加密.进程隔离.支付.指纹验证等).作为Android平台最后的防线,TrustZone也会受到威胁,因为内核可以从很多被信任的接口向TrustZone发起攻击.因此,理想情况下Android生态圈应该及时消灭内核漏洞.然而从Google的Android Security Bulletin上看,Android内核漏洞的数量呈飞快上涨的趋势(Figure 1所示).虽然