Plone的格式化日志记录
项目描述
ftw.structlog
本软件包实现了 Plone 中的结构化请求日志记录。
它通过写入日志文件(每个实例一个)来实现,每行包含一个JSON条目,记录每个请求的信息。这个JSON条目包含了Z2日志提供的信息,以及更多,以结构化的键/值对形式呈现。
安装
通过将ftw.structlog添加到你的构建工具列表中安装它。然后运行构建工具并重新启动你的实例。
[instance]
eggs +=
ftw.structlog
或者,将其作为你包的setup.py文件的依赖项添加。
记录的信息
示例条目
{
"bytes": 6875,
"cient_ip": "127.0.0.1",
"duration": 0.30268411636353,
"host": "127.0.0.1",
"method": "GET",
"referer": "http:\/\/localhost:8080\/plone",
"site": "plone",
"status": 200,
"timestamp": "2017-07-29T12:30:58.000750+02:00",
"url": "http:\/\/localhost:8080\/plone\/my-page",
"user": "john.doe",
"user_agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/60.0.3112.113 Safari\/537.36",
"view": "some_view"
}
记录的JSON条目包含以下数据
键 |
值 |
---|---|
字节 |
响应体的大小(以字节为单位)(Content-Length) |
client_ip |
请求源的主机(尊重X-Forwarded-For) |
duration |
在ZPublisher中处理请求花费的时间(从IPubStart到IPubSuccess / IPubFailure 的时间) |
host |
已弃用。你应该使用client_ip。 |
method |
HTTP请求方法 |
referer |
Referer |
site |
Plone站点ID |
status |
HTTP响应状态 |
timestamp |
请求接收的时间(ISO 8601的非天真本地时间,服务器的本地时区由tzlocal确定) |
url |
请求的URL(如果存在,包括查询字符串) |
user |
已认证用户的用户名,否则为"Anonymous" |
user_agent |
User-Agent |
view |
浏览器视图或REST API端点的名称(见下文) |
如果已安装并集成SQLAlchemy,并且通过z3c.saconfig进行集成,则SQL查询时间也会被记录。对于执行SQL查询的请求,将有一个额外的键sql_query_time,包含该请求期间所有SQL查询的累积时间。
键 |
值 |
---|---|
sql_query_time |
请求期间所有SQL查询的累积时间(以秒为单位) |
日志目的地
ftw.structlog默认将日志记录到文件,但也可以配置为记录到Fluentd / Fluent Bit实例。
记录到文件
默认情况下,ftw.structlog将记录到本地文件,每行一个JSON对象。
将为每个Zope2实例创建一个日志文件,其位置和名称将来自实例的事件日志路径。如果实例的事件日志路径是var/log/instance2.log,则JSON日志文件的路径将是var/log/instance2-json.log。
注意:由于ftw.structlog从事件日志路径派生其日志文件名,必须在zope.conf中配置事件日志,否则ftw.structlog不会记录任何请求,并通过根日志器大声抱怨。
当在其他项目中运行测试时,可以通过设置环境变量FTW_STRUCTLOG_MUTE_SETUP_ERRORS=true来静默这些错误。
记录到Fluentd
如果已设置环境变量FLUENT_HOST,则ftw.structlog将使用Fluentd Forward协议记录到该Fluent主机,而不是记录到本地文件。FLUENT_HOST(可选)允许指定端口号,如果未设置,则默认为24224。
为了使ftw.structlog能够为记录到Fluentd的事件使用合适的标签,Pod命名空间需要在KUBERNETES_NAMESPACE环境变量中公开。
视图名称
尝试记录被调用的浏览器视图或REST API端点的名称,以便能够轻松地对特定视图进行分组,而不必依赖URL字符串解析。
然而,这是故意限制的,目的是只处理最常见和最有用的案例。它还通过将非常常见的请求(CSS和JS资源)归类到共同名称下,以避免在日志中填充过多的不同值。
以下表格展示了不同“视图”名称的记录示例
视图类型 |
view |
---|---|
常规浏览器视图 |
‘some_view’ |
常规浏览器视图,发布属性 |
‘some_view/attr’ |
plone.rest命名服务 |
|
具有路径参数的plone.rest命名服务 |
|
plone.rest未命名的GET/POST/… |
‘context’ |
CSS |
‘portal_css’ |
JS |
‘portal_javascripts’ |
资源 |
‘++resource++’ |
主题资源 |
‘++theme++’ |
链接
版权
本软件包的版权归4teamwork所有。
ftw.structlog采用GNU通用公共许可证,版本2。
变更日志
1.4.1 (2023-04-04)
Fluentd日志:使用K8s命名空间标签。[lgraf]
1.4.0 (2023-02-01)
添加对日志记录到Fluentd的支持。[lgraf]
1.3.1 (2020-05-19)
SQL查询日志:在尝试注释可能尚未准备就绪的请求时更加谨慎(例如,在测试期间)。[lgraf]
1.3.0 (2020-05-19)
记录浏览器视图和REST API服务的视图名称。[deiferni, lukasg]
1.2.0 (2020-05-19)
如果存在SQLAlchemy,则跟踪查询执行时间。[lgraf]
1.1.0 (2019-01-11)
已弃用:字段host已被弃用。相反,应使用新引入的client_ip字段来获取客户端的IP地址。[lgraf]
始终将缺少的referer记录为空字符串,而不是null。[lgraf]
1.0.1 (2017-09-03)
如果无法找到eventlog配置以从中推导日志位置,则优雅地失败。而不是阻止实例启动,使用root记录器记录一个明显的错误消息。[lgraf]
1.0.0 (2017-09-03)
初始实现[lgraf]
项目详情
ftw.structlog-1.4.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9f7d3fda8f450b1abc15abdb0ec592efcc3f846aad3691cbf78f8ab94dc3ad2d |
|
MD5 | 5e6ad5586b414b09146d02f5a65bbd90 |
|
BLAKE2b-256 | fc757bf18c1983048f5a6cf84a34ea59e7795627a92c31d18a997faa4df8d6d6 |