logging dictconfig
2024-08-26 03:40:48
#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>
最新文章
- XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
- CentOS 6.5 3.0.4安装agentd
- Android 主题和选择器
- 动态加载js,css
- MVC部署IIS设置
- ServiceStack.OrmLite 笔记2 -增
- ruby字符串学习笔记5
- poj 1678 I Love this Game!
- 为什么针对XML的支持不够好?如何改进?
- jquery第六期:位置选择器
- [转]maven入门
- messagebox在最顶层写法
- python--DenyHttp项目(2)--ACM监考客户端测试版☞需求分析
- [Swift]LeetCode166. 分数到小数 | Fraction to Recurring Decimal
- java反射(java.lang.reflect)---java.lang.reflect.Modifier中状态码
- hdu 1895 Sum Zero hash
- centos7部署fabric-ca错误解决
- mobile开发备忘
- Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查
- linux的shell后门尝试以及Cython转成C代码编译
热门文章
- Go-单元测试
- HDU 6521 Party
- Axure 矩形交互样式与单选按钮组设置
- Java_JVM参数-XX:MaxDirectMemorySize 与 两种 ByteBuffer: heap,direct ByteBuffer
- 关于CC的完全非线性椭圆方程一书的一些小结
- __FILE__、__DIR__区别
- 【Java】【10】后台处理Emoji表情
- 毕设记录(ajax第一次请求失败,之后成功的问题)
- fiddler安装及mock数据
- cmd命令往MySQL数据库提交数据