请教 python 如何分日志级别分文件输出?

2016-10-13 14:09:14 +08:00
 JhOOOn

比如:

  1. logger.info() => info_file.log
  2. logger.error() => err_file.log

目前的想法是生成不同级别的 logger ,每个 logger 打印到不同的文件。但不太好吧。

请教: 有人做过吗?

5410 次点击
所在节点    Python
8 条回复
backto17
2016-10-13 14:36:29 +08:00
可以的,给 logger 添加不同级别的 filehandler
hwsdien
2016-10-13 14:56:45 +08:00
handler 有 setLevel
lxy
2016-10-13 15:44:36 +08:00
如果你给同一个 logger 设置不同级别的 FileHandler 会有一个缺陷:在该 FileHandler 设定级别以上的记录都会被记录。
比如,如果你设置记录级别为 logging.INFO ,那么除了 INFO 以外 logging.WARNING 等以上级别的也会被记录,造成记录冗余。
我也想知道有没有解决这个问题的方法或者第三方库。
fds
2016-10-13 15:55:11 +08:00
哦,可以考虑后期通过 Logstash, Fluentd 等等处理,最近还有些 go 语言写的类似服务。
backto17
2016-10-13 16:12:52 +08:00
@lxy 你可以再给每个 filehandler 添加 filter 就行了
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

其它的自己改吧
backto17
2016-10-13 16:29:02 +08:00
完整的 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')
ryd994
2016-10-14 11:51:41 +08:00
其实一个 grep 就解决的问题…………

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312491

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX