Pycharm2023无法正确在控制台输出日志颜色[解决方案]

Pycharm2023无法正确在控制台输出日志颜色

问题

使用logging模块时,无论什么level的日志,在Pycharm的控制台中总是显示红色。
图片来源
问题表现

解决方案

Pycharm2023之前

可以将Run/Debug Configurations -> Emulate terminal in output console 选项打开。(博主只使用过Pycharm2021和2023,其他版本可以参考)

Pycharm2023

Pycharm2023似乎将Emulate terminal in output console 设置移除了,并没有找到相关选项,查询了资料后找到了解决方案:继承StreanHandler后override emit方法。但@davidgilbertson给出的方案虽然可以正确输出颜色,但没有考虑formatter,会导致无法正确格式化输出。

以下代码,可以以对应的颜色正确地格式化输出

代码
class ColorHandler(logging.StreamHandler):
    GRAY8 = "38;5;8"
    GRAY7 = "38;5;7"
    ORANGE = "33"
    RED = "31"
    WHITE = "0"
    PURPLE = "35"
    BLUE = "34"

    def emit(self, record):
        try:
            msg = self.format(record)
            level_color_map = {
                logging.DEBUG: self.BLUE,
                logging.INFO: self.GRAY7,
                logging.WARNING: self.ORANGE,
                logging.ERROR: self.RED,
                logging.CRITICAL: self.PURPLE

            }

            csi = f"{chr(27)}["  # control sequence introducer
            color = level_color_map.get(record.levelno, self.WHITE)

            self.stream.write(f"{csi}{color}m{msg}{csi}m\n")
            self.flush()
        except RecursionError:
            raise
        except Exception:
            self.handleError(record)

log_handler_console = ColorHandler()  # stdout to console
selfdef_fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
formatter = logging.Formatter(selfdef_fmt)
log_handler_console.setFormatter(formatter)

client_logger = logging.getLogger("# Client #")
client_logger.setLevel("DEBUG")
client_logger.addHandler(log_handler_console)

输出结果

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 当PyCharmPython控制台输出乱码时,可能是由于以下原因引起的: 1. 编码设置不正确:可以尝试修改PyCharm的编码设置。在PyCharm的菜单栏中选择"File"->"Settings"->"Editor"->"File Encodings",将"Project Encoding"、"Default encoding for properties files"、"Default encoding for .txt files"等选项设置为与你的代码文件的编码一致。 2. 输出中含有无法解码的字符:在控制台输出中,如果包含了Unicode字符或其他无法解码的字符,可能会导致乱码。可以尝试使用正确的编码对这些字符进行编码和解码,例如使用UTF-8编码。 3. 字体设置问题:如果控制台输出的乱码主要是显示为方块或其他乱码形式,而不是实际字符乱码,可能是由于字体设置问题。可以尝试更改PyCharm字体设置。在PyCharm的菜单栏中选择"File"->"Settings"->"Editor"->"Font",修改Console Font设置为支持你要显示的字符的字体。 4. 操作系统设置问题:如果操作系统的默认编码与PyCharm中的编码设置不一致,也可能导致控制台输出乱码。可以尝试更改操作系统的默认编码设置,使之与PyCharm的编码设置一致。 如果以上方法都没有解决问题,可以尝试使用其他Python集成开发环境(IDE)或命令行来运行同样的代码,观察是否还存在乱码问题。如果在其他环境中没有乱码问题,则可能是PyCharm本身的问题,可以尝试更新或重新安装PyCharm来解决。 ### 回答2: 在PyCharm中,如果python控制台输出乱码,可能是因为以下几个原因: 1. 编码问题:请确保你的代码文件及控制台的编码一致。可以在PyCharm的File -> Settings -> Editor -> File Encodings中设置编码为UTF-8,并勾选"Transparent native-to-ascii conversion"选项。 2. 输出内容包含非ASCII字符:如果输出内容包含中文等非ASCII字符,可以尝试使用Python内建的encode函数来手动指定输出的编码方式。例如:print("中文".encode("utf-8"))。 3. 字体设置:控制台显示乱码可能是因为字体不支持或不正确。可以尝试在PyCharm的File -> Settings -> Editor -> Color Scheme -> Console Font中更改字体,选择一个支持中文的字体。 4. 系统环境配置:有时候乱码问题可能与系统环境配置有关。可以尝试在PyCharm中创建一个全新的项目,并在新项目中运行代码,看看是否还存在乱码问题。如果新项目没有乱码问题,则可能是旧项目的设置有问题,可以尝试重新配置。 综上所述,如果PyCharmpython控制台输出乱码,可以尝试上述解决方法,找出具体原因并进行相应的调整和配置。 ### 回答3: 当pycharmpython控制台输出乱码时,可能是由于以下几个原因导致的: 1. 编码不匹配:Python控制台默认使用UTF-8编码,如果你的输出使用的是其他编码格式,就会出现乱码。可以尝试使用合适的编码格式对输出进行编码,或者将输出转换为UTF-8编码。 2. 操作系统不匹配:有时候,在不同的操作系统上运行相同的代码会导致控制台输出乱码。这是因为不同操作系统默认使用的终端编码不同。可以尝试使用相关函数(如sys.stdout.encoding)获取控制台当前的编码格式,并将输出转换为相应的编码。 3. 字符集问题:可能是由于控制台无法正确识别或显示某些特殊字符集导致输出乱码。可以尝试修改控制台的字符集配置,以确保能够正确显示特殊字符。 4. 程序bug或错误:如果以上方法都没有解决问题,那么可能是程序本身存在问题。可以借助debug工具逐行检查代码,特别是涉及字符串操作的部分,查找潜在的编码或解码问题。 总之,解决pycharmpython控制台输出乱码问题,需要仔细检查代码、输出编码以及操作系统等方面的配置,以找到问题的根源并采取相应的解决措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值