rotating_file_handler = RotatingFileHandler(
filename="./logs/log.log", mode="a", maxBytes=1000000, backupCount=100)
rotating_file_handler.setLevel(level=logging.WARNING) # 保存到日志文件的日志等级
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO) # 打印在命令行的日志等级
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
handlers=[rotating_file_handler, stream_handler]
)
asyncqt_logger = logging.getLogger('asyncqt')
asyncqt_logger.setLevel(logging.WARNING)
logging.info("初始化日志完成。")
我使用这样的设置的时候,命令行输出都是正常的
上面这段代码中,可以看到stream_handler是用来打印在命令行的日志的,所以我们可以把它的编码设置为utf-8,代码如下:
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', encoding='utf-8'))
然后在basicConfig中把stream_handler加入到handlers中即可,修改后的代码如下:
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
handlers=[rotating_file_handler, stream_handler]
)
在第一次使用logging打印日志的时候,如下代码打印出来的日志不识别中文,默认的编码格式是ASCII编码
FileHandler有定义编码的默认值,修改为'utf-8' 就可以解决,例如:
fh = logging.FileHandler(logname, encoding='utf-8') # 指定utf-8格式编码