改进python tornado中的日志记录方法
我正在尝试在函数中记录操作,我编写了以下函数,根据响应类型(即信息、错误、调试和警告)记录对不同文件的响应改进python tornado中的日志记录方法,python,logging,file-handling,log-rotation,Python,Logging,File Handling,Log Rotation,我正在尝试在函数中记录操作,我编写了以下函数,根据响应类型(即信息、错误、调试和警告)记录对不同文件的响应 logging.basicConfig(filename='indivi_service.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) def setup_logger(logger_name, log_file, level=logging.DEBUG):
logging.basicConfig(filename='indivi_service.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
def setup_logger(logger_name, log_file, level=logging.DEBUG):
l = logging.getLogger(logger_name)
formatter = logging.Formatter()
fileHandler = logging.FileHandler(log_file)
fileHandler.setFormatter(formatter)
handler = TimedRotatingFileHandler(logger_name,
when="d",
interval=1,
backupCount=100)
l.setLevel(level)
l.addHandler(fileHandler)
l.addHandler(handler)
setup_logger('debug', r'debug')
setup_logger('error', r'error')
setup_logger('warning', r'warning')
setup_logger('info', r'info')
debug = logging.getLogger('debug')
error = logging.getLogger('error')
warning = logging.getLogger('warning')
info = logging.getLogger('info')
class Info(APIHandler):
@gen.coroutine
def post(self):
req = json.loads(self.request.body)
resp, content = client(item_id=req['item_id'])
debug.debug(content)
info.info(hello world)
warning.warn('warning message')
error.error('error message')
我面临的问题是,每次调用函数时,都会打印两次响应
例如:
信息日志
你好,世界
你好,世界
谁能告诉我为什么会这样。所有日志文件都是这样
谢谢试试:
import logging
import logging.handlers
logging.basicConfig(filename='indivi_service.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
def setup_logger(logger_name, log_file, level=logging.DEBUG):
l = logging.getLogger(logger_name)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = logging.handlers.TimedRotatingFileHandler(str(log_file)+'.log', when="d", interval=1, backupCount=100)
handler.setFormatter(formatter)
l.setLevel(level)
l.addHandler(handler)
setup_logger('debug', r'debug')
setup_logger('error', r'error')
setup_logger('warning', r'warning')
setup_logger('info', r'info')
debug = logging.getLogger('debug')
error = logging.getLogger('error')
warning = logging.getLogger('warning')
info = logging.getLogger('info')
if __name__ == "__main__":
info.info('hello world')
error.info('hello world')
运行此脚本后,file info.log有一个“hello world”,error.log也只有一个“hello world”。使用文件处理程序打开文件的默认值是append,您确定它实际上记录了两次,而不仅仅是运行了两次吗?@dimitris Jim ya我确定它记录了两次。谢谢。实际上,我的要求是做一个TimedRotatingFileHandler,并将不同的响应存储到单独的文件中,如error.log、info.log和debug.log,是否有一种方法可以做到这一点,而不必在两个日志文件中打印。我只想要一个具有TimedRotatingFileHandler和FileHandler功能的文件。有没有一种方法可以用1个处理程序而不是上面使用的2个处理程序来执行类似的操作?必须删除FileHandler并只添加TimedRotatingFileHandler。通过删除FileHandler,我只能在同一个文件中打印所有内容,我希望错误保存在error.log中,警告保存在warning.log中,信息保存在info.logupdate anwser中,错误保存在error.log中,警告保存在warning.log中