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 ...
随机推荐
- LintCode2016年8月22日算法比赛----骰子求和
骰子求和 题目描述 扔n个骰子,向上面的数字之和为 S .给定 Given n,请列出所有可能的 S 值及其相应的概率. 样例 给定n=1,返回 [ [1, 0.17], [2, 0.17], [3, ...
- grep用法详解:grep与正则表达式
首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支 ...
- EF6 按条件更新多行记录的值
using (var db = new MyDbContext()) { string fromUser = ""; //sender string toUser = " ...
- PRML读书笔记——线性回归模型(上)
本章开始学习第一个有监督学习模型--线性回归模型."线性"在这里的含义仅限定了模型必须是参数的线性函数.而正如我们接下来要看到的,线性回归模型可以是输入变量\(x\)的非线性函数. ...
- 2 模拟登录_Post表单方式(针对chinaunix有效,针对csdn失效,并说明原因)
参考精通Python网络爬虫实战 首先,针对chinaunix import urllib.request #原书作者提供的测试url url="http://bbs.chinaunix.n ...
- org.springframework.data.mongodb.core.MongoTemplate]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.core.convert.support.ConversionServiceFactory.cr
spring-data-mongo 和spring core包冲突.解决办法: <dependency> <groupId>org.springframework.data&l ...
- html,css,javascript角色划分
html负责文档的structure和content css负责文档内容的长相 javascript负责定义和文档的interaction交互
- Frequently Used Algo
1. 链表 链表逆转 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* prev = NULL; w ...
- C# 按位或,按位与, 按位异或
a != b -----> a = a | b , a 或者 b 只要有一个为 1, 那么,a 的最终结果就为 1 a &= b -----> a = a & b ...
- 沉淀再出发:java中注解的本质和使用
沉淀再出发:java中注解的本质和使用 一.前言 以前XML是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,XML的内容也越来越复杂,维护成本变高.于是就有人提 ...