python2.7下使用logging模块记录日志到终端显示乱码问题解决
刚才翻了翻2年以前用python2.7写的一个爬虫程序,主要功能就是把各地市知识产权局/专利局网站的专利相关项目、课题通知,定期爬取和分析,辅助企业进行项目申请。
这里要谈的不是爬虫功能的实现,而是今天重跑程序的时候发现,日志文件正常展现中文,但是终端展现的确实乱码。影响体验,着实比较郁闷。
相关代码如下:
1、python文件是utf-8编码
2、使用logging模块记录日志,同步输出到app.log文件,和终端标准输出。
3、使用了sys.setdefaultencoding的方式来解决乱码问题。
# coding=UTF-8
import sys
import logging reload(sys)
sys.setdefaultencoding('utf8') # @UndefinedVariable cur_path = os.path.dirname(os.path.abspath(sys.argv[0])) logging.basicConfig(level=logging.INFO,
#format='[%(asctime)s] [%(filename)s:%(lineno)d] %(levelname)s %(message)s',
format='[%(asctime)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S, %a',
filename=cur_path+'/../log/app.log',
filemode='w') #################################################################################################
# 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s] [%(filename)s:%(lineno)d] %(levelname)s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#################################################################################################
标准输入是乱码:
[2018-02-19 22:07:37,211] [app_main.py:100] INFO ++++++++++ 寮€濮嬪惎鍔ㄦ姄鍙栫▼搴?.. ++++++++++
[2018-02-19 22:07:37,217] [app_conf.pyo:70] WARNING 娌℃湁鎸囧畾瑕佺瓫閫夋柊闂荤殑璧峰鏃堕棿锛岄粯璁ら€夋嫨褰撴棩銆?
[2018-02-19 22:07:37,224] [app_conf.pyo:73] WARNING 娌℃湁鎸囧畾瑕佺瓫閫夋柊闂荤殑缁撴潫鏃堕棿锛岄粯璁ら€夋嫨褰撴棩銆?
[2018-02-19 22:07:37,227] [base_module.pyo:64] INFO ---------- 寮€濮嬫姄鍙栫綉椤靛唴瀹癸紝骞剁瓫閫夋柊闂荤粨鏋溿€?---------
但是日志文件显示正常:
[2018-02-19 22:07:37, Mon] ++++++++++ 开始启动抓取程序... ++++++++++
[2018-02-19 22:07:37, Mon] 没有指定要筛选新闻的起始时间,默认选择当日。
[2018-02-19 22:07:37, Mon] 没有指定要筛选新闻的结束时间,默认选择当日。
[2018-02-19 22:07:37, Mon] ---------- 开始抓取网页内容,并筛选新闻结果。----------
查了半天,终于发现棋差一招,使用logging记日志的时候,需要带中文的字符串前面再加上 u
比如:
这样就完美解决标准输出乱码问题啦。
python2.7下使用logging模块记录日志到终端显示乱码问题解决的更多相关文章
- python logging 模块记录日志
#日志记录到多文件示例 import logging def error_log(message): file_1_1 = logging.FileHandler('error.log', 'a+', ...
- ubuntu下rhythmbox歌名显示乱码问题解决
问题描述:本人装有双系统,一个是win7,另一个是ubuntu12.04LTS版本,所有的歌曲都在windows磁盘下KuGou目录中,这个时候,使用ubuntu的rhythmbox播放的歌曲的时候, ...
- win8以上windows系统eclipse环境下图片显示乱码问题解决
相信升级了win10系统的诸多安卓开发者在用eclipse时会发现一个很不爽的地方,就是原本win7环境下能正常打开的图片文件现在成了一页乱码,我曾多次碰到这个问题,在网上也很难找到行之有效的具体解决 ...
- git status 下中文显示乱码问题解决
$ git status -s ?? "\350\257\264\346\230\216.txt\n $ printf & ...
- Python 3下使用Matplotlib工具画图,中文显示乱码的问题解决
import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif']=['SimHei'] ...
- Python之路(第十七篇)logging模块
一.logging模块 (一).日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变 ...
- python logging模块使用流程
#!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...
- Python全栈之路----常用模块----logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- python中logging模块的用法
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
随机推荐
- 03.CSS动画-->自定义动画
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ionic--分模块
1. app.js var app=angular.module("myApp",["ionic","myController"," ...
- 转:问题解决:The project cannot be built until build path errors are resolved
转自:http://blog.csdn.net/marty_zhu/article/details/2566299 今天在eclipse里遇到这个问题,之前也遇到过,不过,通过clean一下项目,或者 ...
- MySQL数据库(7)----数据库的选择、创建、删除和更改
1.选择数据库 使用 USE 语句可以选择数据库,并把它指定为MySQL服务器连接的默认(当前)数据库: USE db_name; 要想选择数据库,用户必须要具备相应的访问权限:否则,会出现错误提示. ...
- mysql存储过程模板
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_test`(IN `nodeCode` varchar(100),IN `id` varchar(36) ...
- JDK1.9怎么配置环境变量
- Python 发送邮件案例
文件形式的邮件 #!/usr/bin/env python #coding: utf-8 import smtplib from email.mime.text import MIMEText fro ...
- Python 装饰器的总结
先来了解几个定义: 1,函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例来说明如何定义和调用一个简单的函数: #coding:UTF8 ...
- 面向对象进阶----->反射 getattr 和hasattr方法
判断一个对象有没有血缘关系:isinstance() 里面写的是字类对象和父类名用来判断他们的关系 issubclass()是用来判断两个类是不是有继承的关系 ,括号内 写字类名和父类名 可以判断出 ...
- [Swift] 创建一个对象
创建一个对象 先写一个People类 // // People.swift // Class // // Created by YouXianMing on 15/3/18. // Copyright ...