#coding: utf-8
import logging
import logging.config
class SingleLevelFilter(object):
def __init__(self, pass_level):
self.pass_level = pass_level
def filter(self, record):
if self.pass_level == record.levelno:
return True
return False
LEVEL_COLOR = {
logging.DEBUG: '\33[2;39m',
logging.INFO: '\33[0;37m',
logging.WARN: '\33[4;35m',
logging.ERROR: '\33[5;31m',
logging.FATAL: '\33[7;31m'
}
class ScreenHandler(logging.StreamHandler):
def emit(self, record):
try:
msg = self.format(record)
stream = self.stream
fs = LEVEL_COLOR[record.levelno] + "%s\n" + '\33[0m'
try:
if isinstance(msg, unicode) and getattr(stream, 'encoding', None):
ufs = fs.decode(stream.encoding)
try:
stream.write(ufs % msg)
except UnicodeEncodeError:
stream.write((ufs % msg).encode(stream.encoding))
else:
stream.write(fs % msg)
except UnicodeError:
stream.write(fs % msg.encode("UTF-8"))
self.flush()
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)
def init_logger():
conf = {'version': 1,
'disable_existing_loggers': True,
'incremental': False,
'formatters': {'myformat1': {'class': 'logging.Formatter',
'format': '|%(asctime)s|%(name)s|%(filename)s|%(lineno)d|%(levelname)s|%(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S'}
},
'filters': {'filter_by_name': {'class': 'logging.Filter',
'name': 'logger_for_filter_name'},
'filter_single_level_pass':{'()': 'mylogger.SingleLevelFilter',
'pass_level': logging.WARN}
},
'handlers': {'console': {'class': 'logging.StreamHandler',
'level': 'INFO',
'formatter': 'myformat1',
'filters': ['filter_single_level_pass', ]},
'screen': {'()': 'mylogger.ScreenHandler',
'level': logging.INFO,
'formatter': 'myformat1',
'filters': ['filter_by_name', ]}
},
'loggers': {'logger_for_filter_name': {'handlers': ['console', 'screen'],
'filters': ['filter_by_name', ],
'level': 'INFO'},
'logger_for_all': {'handlers': ['console', ],
'filters': ['filter_single_level_pass',],
'level': 'INFO',
'propagate': False}
}
}
logging.config.dictConfig(conf)
if __name__ == '__main__':
init_logger()
logger_for_filter_name = logging.getLogger('logger_for_filter_name')
logger_for_filter_name.debug('logger_for_filter_name')
logger_for_filter_name.info('logger_for_filter_name')
logger_for_filter_name.warn('logger_for_filter_name')
logger_for_filter_name.error('logger_for_filter_name')
logger_for_filter_name.critical('logger_for_filter_name')
logger_for_all = logging.getLogger('logger_for_all')
logger_for_all.debug('logger_for_all')
logger_for_all.info('logger_for_all')
logger_for_all.warn('logger_for_all')
logger_for_all.error('logger_for_all')
logger_for_all.critical('logger_for_all')</span>
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- 以打印日志为荣之logging模块详细使用
啄木鸟社区里的Pythonic八荣八耻有一条: 以打印日志为荣 , 以单步跟踪为耻; 很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python ...
- (转)python logging模块
python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...
- Python常用模块--logging
(转载) 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python内置的标准模块,主要用于 ...
- Python入门之logging模块
本章目录: 一.logging模块简介 二.logging模块的使用 三.通过JSON或者YMAL文件配置logging模块 ===================================== ...
- python基础学习十 logging模块详细使用【转载】
很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,主要用于输出 ...
- Python标准模块--logging(转载)
转载地址:http://www.cnblogs.com/zhbzz2007/p/5943685.html#undefined Python标准模块--logging 1 logging模块简介 log ...
- python logging模块【转载】
转自:https://www.cnblogs.com/dahu-daqing/p/7040764.html 参考:老顽童log模块,讲的很细致,基本上拿到手就可以直接用了,很赞 1 logging模块 ...
- [转载] 每个 Python 程序员都要知道的日志实践
原文: http://python.jobbole.com/81666/ 在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果 ...
随机推荐
- SVN导出差异版本更新的文件列表
对于在服务器上没有使用版本控制的运维人员来说,每次SVN修改的文件都需要查看更改日志,一个个查找出来再更新到服务器,过程实在是痛苦 那么有没有一种方法跑个命令比对一下版本就哗啦啦的把修改好的文件复制出 ...
- Hadoop入门
一.Hadoop是什么 1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 2)Hadoop主要解决,海量数据的存储和海量数据的分析计算问题. 3)广义上来说,Hadoop通常是指 ...
- vim编辑器-多行加注释与去注释
在使用vim编辑器时,有时候需要对多行代码进行加注释或去注释,下面将介绍两种方法. 方法一:块选择模式 1. 插入注释 (1)首先按键盘上的ESC进入命令行模式 (2)再按Ctrl+V进入VISUAL ...
- scrapy框架使用笔记
目前网上有很多关于scrapy的文章,这里我主要介绍一下我在开发中遇到问题及一些技巧: 1,以登录状态去爬取(带cookie) -安装内容: brew install phantomjs (MAC上) ...
- f-stack中ipc传递指针从应用中读取信息时挂掉
f-stack中ipc传递指针从应用中读取信息时挂掉 如:创建bridge0./ifconfig bridge0 create./ifconfig f-stack-0 down./ifconfig f ...
- A*算法介绍
你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...
- 强化学习(八):Eligibility Trace
Eligibility Traces Eligibility Traces是强化学习中很基本很重要的一个概念.几乎所有的TD算法可以结合eligibility traces获得更一般化的算法,并且通常 ...
- labview web发布局域网内访问
按照labview的web访问具体步骤操作完之后,把电脑的网络要设置在局域网环境下,网络要处于专用网络中,就可以进行局域网内访问
- k-近邻法(kNN)
原理: 已知一个训练样本集(有标签),计算待测试样本与所有训练样本的距离. 按距离从小到大进行排序并取前 k 个,统计 k 个中出现次数最多的分类为分类结果. 优点:精度高,对异常值不敏感,无数据输入 ...
- orace如何创建函数并调用
我们来定义一个oracle的函数 create or replace function 方法名(参数名1 参数类型,参数名2 参数类型,参数名3 参数类型)return 返回类型 is num_C n ...