配置日志
Solr 日志是了解系统中发生情况的关键方式。有几种方法可以调整默认的日志配置。
临时日志设置
在需要时,有几种方法可以临时更改日志级别。
日志屏幕
您可以使用管理用户界面临时更改 Solr 的日志输出量。在左侧菜单中选择 日志] 链接。
请注意,日志级别也会在下次 Solr 重启时重置。
管理 Web 界面的这部分允许您为许多不同的日志类别设置日志级别。幸运的是,任何 未设置 的类别都将具有其父级的日志级别。这使得可以通过调整其父级的日志级别来一次更改多个类别。
当您选择菜单:日志[级别]时,您会看到以下菜单
Solr 类以目录树结构显示在左列中,表示类路径。当前级别显示在右列中。
目录显示其当前的日志级别。以黄色突出显示的行表示该类当前已启用日志记录。日志级别菜单浮动在这些之上。要为特定目录设置日志级别,请单击右列中的当前级别,此时将出现日志级别菜单。选择所需日志级别旁边的按钮。
日志级别更改将分发到集群中的所有节点。
可能的日志级别如下
级别 | 结果 |
---|---|
ALL |
报告所有内容。 |
TRACE |
报告所有内容,但最不重要的消息除外。 |
DEBUG |
报告配置错误。 |
INFO |
报告所有内容,但正常状态除外。 |
WARN |
报告所有警告。 |
ERROR |
仅报告最严重的警告。 |
FATAL |
仅报告致命事件。 |
OFF |
关闭日志记录。 |
UNSET |
删除以前的日志设置。 |
允许一次进行多个设置。
日志级别 API
还有一种方法可以将 REST 命令发送到 admin/info/logging
端点来执行相同的操作。
示例
-
V1 API
-
V2 API
curl -X GET "https://127.0.0.1:8983/solr/admin/info/logging?set=root:WARN"
curl -X PUT https://127.0.0.1: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-<端口号>-console.log
日志文件,并自动禁用 log4j2.xml
中配置的 CONSOLE 日志记录器,这与您手动从 rootLogger 中删除 CONSOLE appender 的效果相同。
此外,在 log4j2.xml
中,如果默认的 32MB 日志轮换大小阈值对于生产服务器来说太小,则应将其增加到更大的值(例如 100MB 或更大)。
<SizeBasedTriggeringPolicy size="100 MB"/>
当大小达到 20MB 时,JVM 会轮换 Java 垃圾回收日志,最多保留 9 代。
每次启动或重启 Solr 时,log4j2 都会执行日志轮换。
记录慢查询
对于高容量搜索应用程序,记录每个查询可能会产生大量的日志,并且根据容量的大小,可能会影响性能。如果您挖掘这些日志以获取有关应用程序的更多见解,那么记录每个查询请求可能很有用。
另一方面,如果您只关心与请求相关的警告和错误消息,则可以将日志详细程度设置为 WARN。但是,这会带来一个潜在问题,即您不会知道是否有任何查询很慢,因为慢查询仍然以 INFO 级别记录。
Solr 提供了一种方法,可以将日志详细程度阈值设置为 WARN,并且能够设置一个延迟阈值,超过该阈值的请求将被视为“慢”请求,并将该请求以 WARN 级别记录,以帮助您识别应用程序中的慢查询。要启用此行为,请在 solrconfig.xml
的 query 部分中配置 <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
更改保留的天数。