比如:
目前的想法是生成不同级别的 logger ,每个 logger 打印到不同的文件。但不太好吧。
请教: 有人做过吗?
1
backto17 2016-10-13 14:36:29 +08:00
可以的,给 logger 添加不同级别的 filehandler
|
2
hwsdien 2016-10-13 14:56:45 +08:00
handler 有 setLevel
|
3
lxy 2016-10-13 15:44:36 +08:00
如果你给同一个 logger 设置不同级别的 FileHandler 会有一个缺陷:在该 FileHandler 设定级别以上的记录都会被记录。
比如,如果你设置记录级别为 logging.INFO ,那么除了 INFO 以外 logging.WARNING 等以上级别的也会被记录,造成记录冗余。 我也想知道有没有解决这个问题的方法或者第三方库。 |
4
fds 2016-10-13 15:55:11 +08:00
哦,可以考虑后期通过 Logstash, Fluentd 等等处理,最近还有些 go 语言写的类似服务。
|
6
yuyang 2016-10-13 16:23:13 +08:00
class DebugFilter(logging.Filter):
def filter(self, record): return record.levelno == logging.DEBUG class InfoFilter(logging.Filter): def filter(self, record): return record.levelno == logging.INFO 其它的自己改吧 |
7
backto17 2016-10-13 16:29:02 +08:00 1
完整的 demo
# coding: utf-8 ''' @date: 2016-10-13 @author: alex.lin ''' import logging class LogLevelFilter(logging.Filter): def __init__(self, name='', level=logging.DEBUG): super(LogLevelFilter,self).__init__(name) self.level = level def filter(self, record): return record.levelno == self.level # create logger logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) fh_info = logging.FileHandler('logging_info.log') fh_info.setLevel(logging.INFO) fh_debug = logging.FileHandler('logging_debug.log') fh_debug.setLevel(logging.DEBUG) filter_info = LogLevelFilter(level=logging.INFO) filter_debug = LogLevelFilter(level=logging.DEBUG) fh_info.addFilter(filter_info) fh_debug.addFilter(filter_debug) logger.addHandler(fh_info) logger.addHandler(fh_debug) logger.debug('for debug') logger.info('for info') logger.error('for error') |
8
ryd994 2016-10-14 11:51:41 +08:00 via Android
其实一个 grep 就解决的问题…………
|