#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>

最新文章

  1. XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
  2. CentOS 6.5 3.0.4安装agentd
  3. Android 主题和选择器
  4. 动态加载js,css
  5. MVC部署IIS设置
  6. ServiceStack.OrmLite 笔记2 -增
  7. ruby字符串学习笔记5
  8. poj 1678 I Love this Game!
  9. 为什么针对XML的支持不够好?如何改进?
  10. jquery第六期:位置选择器
  11. [转]maven入门
  12. messagebox在最顶层写法
  13. python--DenyHttp项目(2)--ACM监考客户端测试版☞需求分析
  14. [Swift]LeetCode166. 分数到小数 | Fraction to Recurring Decimal
  15. java反射(java.lang.reflect)---java.lang.reflect.Modifier中状态码
  16. hdu 1895 Sum Zero hash
  17. centos7部署fabric-ca错误解决
  18. mobile开发备忘
  19. Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查
  20. linux的shell后门尝试以及Cython转成C代码编译

热门文章

  1. Go-单元测试
  2. HDU 6521 Party
  3. Axure 矩形交互样式与单选按钮组设置
  4. Java_JVM参数-XX:MaxDirectMemorySize 与 两种 ByteBuffer: heap,direct ByteBuffer
  5. 关于CC的完全非线性椭圆方程一书的一些小结
  6. __FILE__、__DIR__区别
  7. 【Java】【10】后台处理Emoji表情
  8. 毕设记录(ajax第一次请求失败,之后成功的问题)
  9. fiddler安装及mock数据
  10. cmd命令往MySQL数据库提交数据