如果在Python中使用logging模块写入中文时出现了乱码,可以按照以下步骤解决:
- 设置编码
在Python文件中加入以下代码:
import logging
import codecs
import sys
# 设置编码为utf-8
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
# 创建一个logger
logger = logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)
其中,codecs.getwriter
方法可以将sys.stdout
转换成utf-8
编码,这样就能够输出中文了。
- 设置文件编码
如果需要将日志写入文件,则需要设置文件编码。可以使用logging.FileHandler
来设置文件编码,例如:
# 设置文件编码
fh = logging.FileHandler("log.txt", encoding="utf-8")
fh.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
其中,logging.FileHandler
中的encoding
参数设置为utf-8
即可。
示例1:
import logging
import codecs
import sys
# 设置编码为utf-8
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
# 创建一个logger
logger = logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)
# 创建一个输出到控制台的StreamHandler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)
# 创建一个输出到文件的FileHandler
file_handler = logging.FileHandler("log.txt", encoding="utf-8")
file_handler.setLevel(logging.INFO)
file_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
# 测试输出日志信息
logger.debug("这是一条debug级别的日志")
logger.info("这是一条info级别的日志")
logger.warning("这是一条warning级别的日志,包含中文字符:余额不足")
logger.error("这是一条error级别的日志,包含中文字符:文件不存在")
logger.critical("这是一条critical级别的日志,包含中文字符:系统崩溃")
示例2:
import logging
import codecs
import sys
# 设置编码为utf-8
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
# 创建一个logger
logger = logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)
# 创建一个输出到控制台的StreamHandler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)
# 创建一个输出到文件的FileHandler
file_handler = logging.FileHandler("log.txt", encoding="utf-8")
file_handler.setLevel(logging.INFO)
file_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
# 测试输出日志信息
class MyException(Exception):
def __init__(self, message):
self.message = message
logger.error(self.message)
raise MyException("这是一条自定义异常,包含中文字符:模块未安装")
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python logging模块写入中文出现乱码 - Python技术站