日志是在AEMas a Cloud Service中调试AEM应用程序的首选工具,但取决于已部署的AEM应用程序中是否有足够的日志记录。
给定环境的AEM服务(创作、发布/发布调度程序)的所有日志活动都会合并到单个日志文件中,即使该服务中的不同Pod会生成日志语句。
面板ID在每个log语句中提供,并允许过滤或拼合log语句。 面板ID的格式为:
cm-p<PROGRAM ID>-e<ENVIRONMENT ID>-aem-<author|publish>-<POD NAME>
cm-p12345-e56789-aem-author-abcdefabde-98765
AEM as aCloud Services不支持自定义日志文件,但支持自定义日志记录。
使Java日志在AEMas a Cloud Service中可用(通过 Cloud Manager 或 Adobe I/OCLI),则必须编写自定义日志语句 error.log
. 写入自定义命名日志的日志,如 example.log
,将无法从AEMas a Cloud Service访问。
日志可以写入 error.log
在应用程序的 org.apache.sling.commons.log.LogManager.factory.config~example.cfg.json
文件。
{
...
"org.apache.sling.commons.log.file": "logs/error.log"
...
}
AEM创作和发布服务都提供AEM运行时服务器日志:
aemerror
是Java错误日志(位于 /crx-quickstart/logs/error.log
(在AEM SDK本地快速启动中)。 以下是 建议的日志级别 对于每种环境类型的自定义日志记录器:
DEBUG
WARN
ERROR
aemaccess
列出发往AEM服务的HTTP请求及详细信息aemrequest
列出对AEM服务发出的HTTP请求及其相应的HTTP响应只有AEM Publish Dispatcher会提供Apache Web服务器和Dispatcher日志,因为这些方面仅存在于AEM发布层中,而不存在于AEM创作层中。
httpdaccess
列出对AEM服务的Apache Web服务器/调度程序发出的HTTP请求。httperror
列出来自Apache Web服务器的日志消息,并帮助调试支持的Apache模块,例如 mod_rewrite
.
DEBUG
WARN
ERROR
aemdispatcher
列出来自Dispatcher模块的日志消息,包括从缓存消息中过滤和提供内容。
DEBUG
WARN
ERROR
Adobe云管理器允许通过环境的下载日志操作按天下载日志。
可以通过任何日志分析工具下载和检查这些日志。
AdobeCloud Manager支持通过 Adobe I/OCLI 和 用于Adobe I/OCLI的Cloud Manager插件.
首先, 使用Cloud Manager插件设置Adobe I/O.
确保已识别并使用相关的计划ID和环境ID list-available-log-options 列出用于 尾 或 下载 日志。
$ aio cloudmanager:list-programs
Program Id Name Enabled
14304 Program 1 true
11454 Program 2 true
11502 Program 3 true
$ aio config:set cloudmanager_programid <PROGRAM ID>
$ aio cloudmanager:list-environments
Environment Id Name Type Description
22295 program-3-dev dev
22310 program-3-prod prod
22294 program-3-stage stage
$ aio cloudmanager:list-available-log-options <ENVIRONMENT ID>
Environment Id Service Name
22295 author aemaccess
22295 author aemerror
22295 author aemrequest
22295 publish aemaccess
22295 publish aemerror
22295 publish aemrequest
22295 dispatcher httpdaccess
22295 dispatcher httpderror
22295 dispatcher aemdispatcher
Adobe I/OCLI能够使用从AEMas a Cloud Service实时跟踪日志 尾日志 命令。 跟踪在AEMas a Cloud Service环境中执行操作时,对于观看实时日志活动非常有用。
$ aio config:set cloudmanager_programid <PROGRAM ID>
$ aio cloudmanager:tail-logs <ENVIRONMENT ID> <SERVICE> <NAME>
其他命令行工具,如 grep
可与 tail-logs
为帮助隔离目标日志语句,例如:
$ aio cloudmanager:tail-logs 12345 author | grep com.example.MySlingModel
…仅显示从生成的日志语句 com.example.MySlingModel
或在其中包含该字符串。
Adobe I/OCLI提供使用从AEMas a Cloud Service下载日志的功能 下载日志)命令。 这会提供与从Cloud Manager Web UI下载日志相同的最终结果,不同之处在于 download-logs
命令根据请求的日志天数整合日志。
$ aio config:set cloudmanager_programid <PROGRAM ID>
$ aio cloudmanager:download-logs <ENVIRONMENT> <SERVICE> <NAME> <DAYS>
AEMas a Cloud Service中的日志具有多个将日志语句写入其中的Pod。 由于多个AEM实例写入同一日志文件,因此在调试时了解如何分析和减少噪音至关重要。 要解释,请执行以下操作 aemerror
使用日志代码段:
01.01.2020 12:00:00.000 [cm-p12345-e56789-aem-author-abcdefg-1111] *DEBUG* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Preparing to collect resources
01.01.2020 12:00:01.002 [cm-p12345-e56789-aem-author-abcdefg-2222] *WARN* [qtp40782847611-87] com.example.services.impl.ExampleServiceImpl Unable to resolve resource [ /content/example ] to a resource. Aborting.
01.01.2020 12:00:02.003 [cm-p12345-e56789-aem-author-abcdefg-1111] *ERROR* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Unable to collect any resources
使用面板ID(日期和时间之后的数据点),可以通过服务中的Pod或AEM实例来整理日志,从而更便于跟踪和了解代码执行。
Pod cm-p12345-e56789-aem-author-abcdefg-1111
01.01.2020 12:00:00.000 [cm-p12345-e56789-aem-author-abcdefg-1111] *DEBUG* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Preparing to collect resources
01.01.2020 12:00:02.003 [cm-p12345-e56789-aem-author-abcdefg-1111] *ERROR* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Unable to collect any resources
Pod cm-p12345-e56789-aem-author-abcdefg-2222
01.01.2020 12:00:01.002 [cm-p12345-e56789-aem-author-abcdefg-2222] *WARN* [qtp2078364989-269] com.example.services.impl.ExampleServiceImpl Unable to resolve resource [ /content/example ] to a resource. Aborting.
Adobe对每个AEMas a Cloud Service环境的日志级别的一般指导如下:
DEBUG
DEBUG
WARN
ERROR
为每种环境类型设置最合适的日志级别是使用AEMas a Cloud Service,日志级别在代码中进行维护
…因此,需要部署才能进行更改。
为每个环境设置静态的已知Java日志级别的替代方法是使用AEM作为Cloud Service 环境特定变量 以参数化日志级别,允许通过 Adobe I/OCLI和Cloud Manager插件.
这需要更新日志记录OSGi配置以使用特定于环境的变量占位符。 默认值 对于日志级别,应设置为 Adobe推荐. 例如:
/apps/example/config/org.apache.sling.commons.log.LogManager.factory.config~example.cfg.json
{
...
"org.apache.sling.commons.log.names": ["com.example"],
"org.apache.sling.commons.log.level": "$[env:LOG_LEVEL;default=DEBUG]"
...
}
这种方法有其不利之处,必须加以考虑:
特定于环境的变量不适用于Apache Web服务器或调度程序日志配置,因为这些变量未通过OSGi配置进行配置。