获取 Kafka 事件流日志文件
当使用 KafkaStream
对象处理 Kafka® 流事件时,使用日志文件来帮助调试事件流处理问题。这些文件包含与从 Kafka 流读取和写入事件相关的所有警告、错误和其他信息。您可以从这些来源生成日志文件:
连接到 Kafka 主题的
KafkaStream
对象 - 每个对象生成一个日志文件,其中包含有关从 Kafka 服务器读取的信息。librdkafka
Kafka C/C++ 客户端库 - 该库生成一个日志文件,其中包含有关来自 Kafka 服务器的写入的信息。
对于这两个源,您可以配置日志级别,以控制写入日志文件的输出量。您可以设置这些日志级别,按从最不详细到最详尽的顺序列出:
off
- 未启用日志记录(librdkafka
库的默认设置)fatal
- 仅记录强制关闭 Kafka 连接的错误error
- 记录所有错误(kafkaStream
对象的默认设置)warn
- 记录所有错误和警告info
- 记录有关主要流处理活动的错误、警告和高级信息debug
- 除了先前描述的选项中的信息外,还记录调试信息trace
- 除了先前描述的选项中的信息外,还记录堆栈跟踪信息
您还可以在部署的应用程序中配置日志级别。
配置 kafkaStream
对象日志记录
每个 KafkaStream
对象的日志文件都会生成到当前文件夹中的此文件中。
log\topic_name.log
是 topic_name
KafkaStream
对象连接到的 Kafka 主题的名称。如果 log
文件夹不存在,则 KafkaStream
对象会创建它。
默认情况下,这些对象的日志级别设置为 error
。要更改日志级别,请更新 Streaming Data Framework for MATLAB® Production Server™ 安装中包含的 log4j.properties.template
文件。通过在 MATLAB 命令提示符下输入此命令来打开该文件。
open(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','mps','streaming', ... '+matlab','+io','+stream','+event','+kafka','collector','log4j.properties.template'))
要更改 log4j.properties.template
文件中的日志级别,您必须更新所有指定日志级别的位置中的日志级别。例如,要将日志级别从 error
更改为 debug
,请在 log4j.properties.template
文件中搜索包含此代码的行。
.level = error
在每一行中,将此代码更新为以下内容:
.level = debug
或者,要快速查看从 Kafka 主题收到的最后一个错误的信息,请使用 loggederror
函数。将您的 KafkaStream
对象作为输入参量传递给此函数。
为了生成日志,流处理数据框架使用 Log4j Java® 库的 2 版。有关此库的更多详细信息,请参阅 https://logging.apache.org/log4j/2.x/
。
配置 librdkafka
库日志
当启用 librdkafka
库的日志记录时,该库会在当前文件夹中生成一个名为 mw_rdkafka.log
的文件。如果日志文件不存在,KafkaStream
对象将创建它。
默认情况下,librdkafka
库的日志级别设置为 off
。要启用日志记录,请使用此 MATLAB 命令:
matlab.io.stream.event.kafka.internal.admin(log=logLevel);
logLevel
是一个字符串或字符向量,表示前面描述的日志级别,例如 "error"
、"warn"
或 "debug"
。例如,将 logLevel
设置为 "debug"
可启用日志记录并将日志级别设置为调试模式。
在已部署的应用程序中配置日志记录
当您使用由 package
或 streamingDataCompiler
函数创建的工程文件打包已部署的应用程序时,打包过程会将配置文件复制到应用程序的 for_redistribution
文件夹中。当您启动 Kafka 连接器将流处理数据从 Kafka 主题推送到由 MATLAB Production Server 托管的应用程序时,您将使用这些文件。要在 Kafka 连接器中启用日志记录,请将 log4j.properties.template
文件复制到名为 log4j.properties
的新文件中。然后,编辑这个新文件来选择日志级别并设置日志文件的名称。
要设置日志级别,请将 *.level
属性设置为所需的日志级别,如 配置 kafkaStream 对象日志记录 部分所述。要设置日志文件的名称,请将文本 !ArchiveName!
更改为所需日志文件的名称。!ArchiveName!
文本出现在以下行:
appender.rolling.fileName = ${basePath}!ArchiveName!.out appender.rolling.filePattern = ${basePath}!ArchiveName!%i.out
例如,要将输出日志消息发送到文件 RecamanSum.out
,请将这些行更改为:
appender.rolling.fileName = ${basePath}RecamanSum.out appender.rolling.filePattern = ${basePath}RecamanSum%i.out
要控制 librdkafka
日志记录,请编辑位于以下路径的 rdkafkalog.properties
文件:
open(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','mps','streaming', ... '+matlab','+io','+stream','+event','+kafka','collector','rdkafkalog.properties'))
该文件以只读权限安装,因此在编辑该文件之前必须使其可写。为了使您的更改生效,您必须在使用 package
或 streamingDataCompiler
函数创建可部署存档之前编辑此文件。打包将 rdkafka.properties
文件合并到您的应用程序中。虽然打包后您无法更改此文件,但您可以使用环境变量来控制 MATLAB Production Server 加载 rdkafka.properties
文件的位置。
您可以通过设置 rdkafka.properties
中的值来更改日志级别和日志文件名。例如,要将日志级别从 fatal
(默认)更改为 info
,请将 level=fatal
行更改为 level=info
。
类似地,file
属性设置输出日志文件的完整路径。默认值为 mw_rdkafka.log
,如下所示:
file=mw_rdkafka.log
如果没有文件夹规范,则该文件位于托管已部署的流处理应用程序的 MATLAB Production Server 实例的顶级文件夹中,该文件夹是 auto_deploy
文件夹的父文件夹。如果您将多个流处理应用程序部署到同一个 MATLAB Production Server 实例,请使此文件名特定于应用程序。例如:
file=recamanSum_rdkafka.log
如果保持文件名不变,则该文件将由该服务器托管的所有流处理应用程序共享。
要更改文件出现的文件夹,请使用适合平台的语法指定完整或相对路径。
Windows® | Linux® 或 Mac |
---|---|
|
|
要临时更改 MATLAB Production Server 加载 rdkafka.properties
文件的位置,请使用环境变量 MW_IOSTREAM_RDKAFKA_LOG_CONFIG
。您必须在启动托管应用程序的 MATLAB Production Server 实例之前设置此环境变量。您还必须在启动该实例的环境中设置此变量。否则,MATLAB Production Server 无法找到环境变量。此环境变量设置会更改由 MATLAB Production Server 实例托管的所有应用程序的 rdkafka.properties
的位置。此环境变量仅用于临时故障排除。
为了临时使所有流处理应用程序根据未部署的 rdkafka.properties
文件中设置的文件和日志级别配置 rdkafka
日志记录,请将 MW_IOSTREAM_RDKAFKA_LOG_CONFIG
设置为未部署文件的完整路径。例如:
Windows | Linux 或 Mac |
---|---|
set MW_IOSTREAM_RDKAFKA_LOG_CONFIG=c:\mps_logs\recamanSum_rdkafka.log | setenv MW_IOSTREAM_RDKAFKA_LOG_CONFIG /myusername/mps_logs/recamanSum_rdkafka.log |
向 MathWorks 技术支持提供日志文件
如需更多调试帮助,您可以将日志文件提供给 MathWorks® 技术支持。在提供日志文件之前,将日志级别设置为 trace
。
使用之前提供的信息找到日志文件。
将日志文件附加到 MathWorks 技术支持的新票或现有票上。请联系技术支持。