我在掌握python如何进行日志记录以及如何设置它们以实现我正在寻找的内容时遇到了一些麻烦。
我想要的是添加到我的常规烧瓶日志中,记录应用程序错误,信息,API调用等是有一个单独的自定义日志,只记录非必要的非特定事件与信息或警告等级相关联它们只是消息所以我现在拥有的就是这个。
# My flask set up
file_handler = RotatingFileHandler('upload_service.log')
file_handler.setFormatter(Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
这会处理我的正常日志记录,然后我需要自定义日志记录,我已经把它放在我的课程中
logger = logging.getLogger('audit')
logger.setLevel(logging.DEBUG)
file_handler = RotatingFileHandler('audit.log')
file_handler.setFormatter(Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
对于我的记录我只是做
logger.info("You changed something %s", request.headers["X-FORWARDED-FOR"])
这只是让我分离出我的日志记录,而不是我的审计文件被任何常规的烧瓶记录污染了。现在这个工作正常但我看到有很多东西可以使用过滤器和烧瓶的东西来自动记录IP地址,用户名和类似http://roryokeeffe.com/production-logging-in-flask-python/之类的东西,而不必手动像我现在这样做
我想做这样的事情。
# My flask set up
file_handler = RotatingFileHandler('upload_service.log')
file_handler.setFormatter(Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(logging.INFO)
audit_handler = RotatingFileHandler('audit.log')
audit_handler .setFormatter(Formatter(
'%(asctime)s %(levelname)s: %(ip) %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
audit_handler.setLevel(logging.DEBUG)
app.logger.addHandler(file_handler)
app.logger.addHandler(audit_handler)
context_provider = ContextualFilter()
app.logger.addFilter(context_provider)
在我的代码中,我希望能够以某种方式将事件捕获到特定日志中。
current_app.logger.info("This is a regular log")
# Can I get a particular handler here ?
current_app.logger.handlers["audit"].info("This is a special log file")
有没有人有任何策略来接近这样的事情或更改我的日志配置?我现在已经扫描了python日志记录文档大约一天,而且没有更清楚如何处理这个问题。