配置日志记录
Solr 日志是了解系统中发生情况的关键方式。有几种方法可以调整默认日志记录配置。
临时日志记录设置
有几种方法可以在需要时临时更改日志级别。
日志记录屏幕
您可以使用管理用户界面临时更改 Solr 的日志记录输出量。选择左侧菜单中的日志记录] 链接。
请注意,日志级别也会在下次重新启动 Solr 时重置。
管理 Web 界面中的此部分允许您为许多不同的日志类别设置日志级别。幸运的是,任何未设置的类别都将具有其父级的日志级别。这可以通过调整其父级的日志级别来一次更改多个类别。
当您选择菜单:日志记录[级别] 时,您会看到以下菜单
Solr 类以目录树结构显示在左栏中,表示类路径。当前级别显示在右栏中。
目录显示为其当前日志级别。以黄色突出显示的行表示该类当前已启用日志记录。日志级别菜单悬浮在这些内容之上。要为特定目录设置日志级别,请单击右栏中的当前级别,日志级别菜单将出现。选择您所需日志级别旁边的按钮。
日志级别更改将分发到集群中的所有节点。
可能的日志级别如下
级别 | 结果 |
---|---|
全部 |
报告所有内容。 |
跟踪 |
报告除最不重要的消息之外的所有内容。 |
DEBUG |
报告配置错误。 |
INFO |
报告除正常状态之外的所有内容。 |
WARN |
报告所有警告。 |
ERROR |
仅报告最严重的警告。 |
FATAL |
仅报告致命事件。 |
OFF |
关闭日志记录。 |
UNSET |
移除之前的日志设置。 |
允许一次设置多个设置。
日志级别 API
还有一种方法是向 admin/info/logging
端点发送 REST 命令来执行相同操作。
示例
V1 API
curl -X GET "http://localhost:8983/solr/admin/info/logging?set=root:WARN"
V2 API
curl -X PUT http://localhost:8983/api/node/logging/levels -H 'Content-Type: application/json' -d '
[
{"logger": "root", "level": "WARN"}
]
'
在启动时选择日志级别
您可以在启动 Solr 时临时选择不同的日志级别。有两种方法
第一种方法是在启动 Solr 之前设置 SOLR_LOG_LEVEL
环境变量,或将同一变量置于 bin/solr.in.sh
或 bin/solr.in.cmd
中。该变量必须包含一个大写字符串,其中包含受支持的日志级别(见上文)。
第二种方法是使用 -v 或 -q 选项启动 Solr,有关详细信息,请参见 Solr 控制脚本参考。示例
# Start with verbose (DEBUG) looging
bin/solr start -f -v
# Start with quiet (WARN) logging
bin/solr start -f -q
永久日志设置
Solr 使用 Log4J 版本 2.21.0 进行日志记录,该日志记录使用 server/resources/log4j2.xml
进行配置。花点时间检查 log4j2.xml
文件的内容,以便熟悉其结构。
默认情况下,Solr 日志消息将被写入 SOLR_LOGS_DIR/solr.log
。日志消息的格式可以通过 修改 <PatternLayout/>
中使用的模式 或通过更改布局实现来更改,例如,可以使用 <JsonTemplateLayout/>
来配置 JSON 格式的日志文件。
当您准备在生产环境中部署 Solr 时,将变量 SOLR_LOGS_DIR
设置为您希望 Solr 编写日志文件的位置,例如 /var/solr/logs
。您可能还需要调整 log4j2.xml
。请注意,如果您按照 将 Solr 投入生产 中提供的说明将 Solr 作为服务安装,则请参阅 /var/solr/log4j2.xml
,而不是默认的 server/resources
版本。
在后台启动 Solr(-f
选项)时,除了 solr.log
之外,所有日志都将发送到控制台。在后台启动 Solr 时,它会将所有 stdout
和 stderr
输出写入 solr-<port>-console.log
中的日志文件,并自动禁用 log4j2.xml
中配置的 CONSOLE 记录器,其效果与您手动从 rootLogger 中删除 CONSOLE 追加器相同。
此外,在 log4j2.xml
中,如果默认日志轮换大小阈值 32MB 对生产服务器来说太小,则应将其增加到更大的值(例如 100MB 或更多)。
<SizeBasedTriggeringPolicy size="100 MB"/>
当大小达到 20M 时,Java 垃圾回收日志由 JVM 轮换,最多 9 代。
每次启动或重新启动 Solr 时,log4j2 都会执行日志轮换。
记录慢查询
对于大容量搜索应用程序,记录每个查询可能会生成大量日志,并且根据容量可能会影响性能。如果您挖掘这些日志以获得对应用程序的更多见解,那么记录每个查询请求可能很有用。
另一方面,如果您只关心与请求相关的警告和错误消息,则可以将日志详细程度设置为 WARN。但是,这会带来一个潜在问题,即您不知道是否有任何查询很慢,因为慢查询仍以 INFO 级别记录。
Solr 提供了一种方法,可将日志详细级别阈值设置为 WARN,并且能够设置一个延迟阈值,高于该阈值时,请求会被视为“慢”,并将该请求以 WARN 级别记录到日志中,以帮助您识别应用程序中的慢查询。要启用此行为,请在 solrconfig.xml 的查询部分中配置 <slowQueryThresholdMillis>
元素
<slowQueryThresholdMillis>1000</slowQueryThresholdMillis>
任何花费的时间超过指定阈值的查询都将以 WARN 级别作为“慢”查询记录到日志中。您可以找到所有这些查询的日志文件名为 solr_slow_requests.log
,它位于 SOLR_LOGS_DIR
中(请参阅永久日志设置,以了解有关定义日志位置的更多信息)。
记录选择请求参数
除了上面描述的日志记录选项之外,还可以使用一个名为 logParamsList
的附加请求参数,仅记录选定的请求参数列表(例如与查询一起发送的那些参数)。有关更多信息,请参阅logParamsList 参数部分。
在 SolrCore 上进行选择性日志记录
Solr 使用 o.a.s.c.SolrCore.Request 以 INFO 级别记录所有核心请求。可以通过将这些记录器的级别更改为 WARN 或 ERROR 来完全禁用此功能,或者通过在 log4j2.xml 中对请求路径使用 MarkerFilter
来更具选择性地禁用此功能。
例如
<Logger name="org.apache.solr.core.SolrCore.Request" level="info">
<Filters>
<MarkerFilter marker="/get" onMatch="DENY" onMismatch="NEUTRAL"/>
<MarkerFilter marker="/replication" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
</Logger>
请求日志记录
默认情况下,每个传入的 HTTP(s) 请求都以标准NCSA 格式
记录在名为 $SOLR_LOG_DIR/<yyyy_mm_dd>.request.log
的文件中,每天滚动一次。默认情况下,保留 3 天的请求日志。您可以通过环境变量或在 solr.in.sh
/solr.in.cmd
中设置 SOLR_REQUESTLOG_ENABLED=false
来禁用请求日志记录。您可以通过系统属性 -Dsolr.log.requestlog.retaindays
更改保留的天数。