如果您有兴趣将访问日志与其他
werkzeug
日志调用分开,您可以实现以下猴子补丁。
这对于进行开发工作非常方便,因为访问日志对于故障排除非常有用,但是如果在其他日志旁边打印
werkzeug
,对可读性不是很有帮助。
__access_log_enabled__ = False
def log_request(self:werkzeug.serving.WSGIRequestHandler,
code: typing.Union[int, str] = "-",
size: typing.Union[int, str] = "-") -> None:
if not __access_log_enabled__: return
_server_.log_request(handler=self, code=code, size=size)
werkzeug.serving.WSGIRequestHandler.log_request = log_request
以下是一个使用示例:
import werkzeug
import typing
import logging
from logging.handlers import RotatingFileHandler
from datetime import datetime
_server_ = None
class MyServer():
def __init__(self, in_wsgi:bool):
global _server_
_server_ = self
log_werkzeug = logging.getLogger('werkzeug')
log_werkzeug.setLevel(logging.ERROR)
if not in_wsgi:
self.acc_log = logging.getLogger('qflask_access_log')
handler = RotatingFileHandler('./log/access_non_wsgi.log',
maxBytes=100000,
backupCount=5)
handler.setFormatter(logging.Formatter("%(message)s"))
self.acc_log.addHandler(handler)
self.acc_log.setLevel(logging.INFO)
global __access_log_enabled__
__access_log_enabled__ = True
def log_request(self,
handler:werkzeug.serving.WSGIRequestHandler,
code: typing.Union[int, str] = "-",
size: typing.Union[int, str] = "-") -> None:
try:
path = werkzeug.urls.uri_to_iri(handler.path)
msg = f"{handler.command} {path} {handler.request_version}"
except AttributeError:
msg = handler.requestline
code = str(code)
self.acc_log.warning(
f"[{datetime.now().strftime('%y%m%d-%H%M%S.%f')}] {code} {msg} {size}")
这可能是一个很好的功能,可以内置到werkezug中。实际上,如果access_log_enabled = False,则会使任何服务器稍微快一点。