Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单独文件中的Flask审核日志_Python_Logging_Flask - Fatal编程技术网

Python 单独文件中的Flask审核日志

Python 单独文件中的Flask审核日志,python,logging,flask,Python,Logging,Flask,我很难理解python是如何进行日志记录的,以及如何设置它们以实现我想要的目标 我想要的是,除了我的常规flask日志(记录应用程序错误、信息、api调用等)之外,还有一个单独的自定义日志,只记录非常特定的事件,这些事件不一定与信息或警告之类的级别相关联,它们只是消息,所以我目前拥有的就是这些 # My flask set up file_handler = RotatingFileHandler('upload_service.log') file_handler.setFormatter(F

我很难理解python是如何进行日志记录的,以及如何设置它们以实现我想要的目标

我想要的是,除了我的常规flask日志(记录应用程序错误、信息、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"])
这使我能够分离出日志记录,而不会让审计文件被任何常规日志记录所污染。目前,这一切正常,但我看到有很多事情可以通过使用过滤器和flask来完成,以便自动记录诸如IP地址、用户名等内容,而不是像我现在这样手动完成

我想做这样的事

# 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日志文档大约一天了,只是没有弄清楚如何处理这个问题

据我所知,您在
Flask
中有特定的路由/端点,这些路由/端点必须使用其他记录器处理程序?例如,
/index
-默认记录器处理程序,
/order
-附加处理程序.Close。这可能会让我走上正轨。我想要的基本上是一个额外的日志处理程序,我显式地写入它。也许我把它叫做“处理者”是不对的。我只是想要一些我可以在路由之间共享的东西,这些路由记录了与普通日志记录不同的某些数据。你能添加一个路由的例子吗?