AEM as a Cloud Service的日志记录 logging-for-aem-as-a-cloud-service
AEM as a Cloud Service是一个平台,客户可以在此平台上包含自定义代码,以便为其客户群创建独特的体验。 有鉴于此,日志记录服务是一个关键功能,可用于调试和了解在本地开发和云环境(特别是AEM as a Cloud Service的开发环境)中代码的执行情况。
AEM as a Cloud Service日志记录和日志级别在配置文件中进行管理,这些配置文件作为AEM项目的一部分存储在Git中,并通过Cloud Manager部署为AEM项目的一部分。 AEM as a Cloud Service中的日志记录可以划分为三个逻辑集:
- AEM日志记录,在AEM应用程序级别执行日志记录
- Apache HTTPD Web Server/Dispatcher日志记录,用于在Publish层上执行Web服务器和Dispatcher的日志记录。
- CDN日志记录(如其名称所示)在CDN上执行日志记录。 此功能将在9月初逐步向客户推出。
AEM日志记录 aem-logging
AEM应用程序级别的日志记录由三个日志处理:
- AEM Java日志,用于呈现AEM应用程序的Java日志记录语句。
- HTTP请求日志,用于记录有关AEM提供的HTTP请求及其响应的信息
- HTTP访问日志,用于记录摘要信息和AEM提供的HTTP请求
AEM Java日志记录 aem-java-logging
AEM as a Cloud Service提供对Java log语句的访问。 AEM应用程序的开发人员应遵循常规Java日志记录最佳实践,在以下日志级别记录有关自定义代码执行的相关语句:
虽然Java日志记录支持若干其他级别的日志记录粒度,但AEM as a Cloud Service建议使用上述三个级别。
AEM日志级别是通过OSGi配置为每个环境类型设置的,这反过来会提交到Git,并通过Cloud Manager部署到AEM as a Cloud Service。 因此,最好保持日志语句一致且环境类型众所周知,以确保在Cloud Service时通过AEM提供的日志在最佳日志级别可用,而无需使用更新的日志级别配置重新部署应用程序。
示例日志输出
22.06.2020 18:33:30.120 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *ERROR* [qtp501076283-1809] io.prometheus.client.dropwizard.DropwizardExports Failed to get value from Gauge
22.06.2020 18:33:30.229 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *INFO* [qtp501076283-1805] org.apache.sling.auth.core.impl.SlingAuthenticator getAnonymousResolver: Anonymous access not allowed by configuration - requesting credentials
22.06.2020 18:33:30.370 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *INFO* [73.91.59.34 [1592850810364] GET /libs/granite/core/content/login.html HTTP/1.1] org.apache.sling.i18n.impl.JcrResourceBundle Finished loading 0 entries for 'en_US' (basename: <none>) in 4ms
22.06.2020 18:33:30.372 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *INFO* [FelixLogListener] org.apache.sling.i18n Service [5126, [java.util.ResourceBundle]] ServiceEvent REGISTERED
22.06.2020 18:33:30.372 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *WARN* [73.91.59.34 [1592850810364] GET /libs/granite/core/content/login.html HTTP/1.1] libs.granite.core.components.login.login$jsp j_reason param value 'unknown' cannot be mapped to a valid reason message: ignoring
日志格式
配置记录器 configuration-loggers
AEM Java日志被定义为OSGi配置,因此使用运行模式文件夹定位特定的AEM as a Cloud Service环境。
通过Sling LogManager工厂的OSGi配置为自定义Java包配置Java日志记录。 有三种受支持的配置属性:
org.apache.sling.commons.log.names
org.apache.sling.commons.log.level
org.apache.sling.commons.log.names
指定的记录Java包的日志级别org.apache.sling.commons.log.file
logs/error.log
更改其他LogManager OSGi配置属性可能会导致AEM as a Cloud Service中出现可用性问题。
以下是三种AEM as a Cloud Service环境类型的推荐日志记录配置示例(使用com.example
的占位符Java包)。
开发 development
/apps/my-app/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": "debug"
"org.apache.sling.commons.log.file": "logs/error.log"
}
暂存 stage
/apps/my-app/config.stage/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": "warn"
"org.apache.sling.commons.log.file": "logs/error.log"
}
生产 productiomn
/apps/my-app/config.prod/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": "error"
"org.apache.sling.commons.log.file": "logs/error.log"
}
AEM HTTP请求日志记录 aem-http-request-logging
AEM as a Cloud Service的HTTP请求日志记录可按时间顺序深入分析向AEM发出的HTTP请求及其HTTP响应。 此日志有助于了解向AEM发出的HTTP请求以及处理和响应这些请求的顺序。
了解此日志的关键是按其ID映射HTTP请求和响应对,这些ID由括号中的数值表示。 请求及其相应响应在日志中通常具有其他HTTP请求和响应。
示例日志
29/Apr/2020:19:14:21 +0000 [137] > POST /conf/global/settings/dam/adminui-extension/metadataprofile/ HTTP/1.1 [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
...
29/Apr/2020:19:14:22 +0000 [139] > GET /mnt/overlay/dam/gui/content/processingprofilepage/metadataprofiles/editor.html/conf/global/settings/dam/adminui-extension/metadataprofile/main HTTP/1.1 [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
...
29/Apr/2020:19:14:21 +0000 [137] <- 201 text/html 111ms [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
...
29/Apr/2020:19:14:22 +0000 [139] <- 200 text/html;charset=utf-8 637ms [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
日志格式
配置日志 configuring-the-log
无法在AEM as a Cloud Service中配置AEM HTTP请求日志。
AEM HTTP访问日志记录 aem-http-access-logging
AEM作为Cloud ServiceHTTP访问日志记录按时间顺序显示HTTP请求。 每个日志条目表示访问AEM的HTTP请求。
此日志有助于快速了解向AEM发出的HTTP请求(如果这些请求通过查看随附的HTTP响应状态代码成功)以及HTTP请求完成所用的时间。 通过按用户筛选日志条目,此日志还有助于调试特定用户的活动。
示例日志输出
cm-p1234-e26813-aem-author-59555cb5b8-8kgr2 - example@adobe.com 30/Apr/2020:17:37:14 +0000 "GET /libs/granite/ui/references/clientlibs/references.lc-5188e85840c529149e6cd29d94e74ad5-lc.min.css HTTP/1.1" 200 1141 "https://author-p10711-e26813.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/en/images/example.jpeg&_charset_=utf8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
cm-p1234-e26813-aem-author-59555cb5b8-8kgr2 - example@adobe.com 30/Apr/2020:17:37:14 +0000 "GET /libs/dam/gui/coral/components/admin/customthumb/clientlibs.lc-60e4443805c37afa0c74b674b141f1df-lc.min.css HTTP/1.1" 200 809 "https://author-p10711-e26813.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/en/images/example.jpeg&_charset_=utf8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
cm-p1234-e26813-aem-author-59555cb5b8-8kgr2 - example@adobe.com 30/Apr/2020:17:37:14 +0000 "GET /libs/dam/gui/coral/components/admin/metadataeditor/clientlibs/metadataeditor.lc-4a2226d8232f8b7ab27d24820b9ddd64-lc.min.js HTTP/1.1" 200 7965 "https://author-p10711-e26813.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/en/images/example.jpeg&_charset_=utf8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
/libs/granite/ui/references/clientlibs/references.lc-5188e85840c529149e6cd29d94e74ad5-lc.min.css
"https://author-p1234-e4444.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/wknd/en/adventures/surf-camp-in-costa-rica/adobestock_266405335.jpeg&_charset_=utf8"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
配置HTTP访问日志 configuring-the-http-access-log
无法在AEM as a Cloud Service中配置HTTP访问日志。
Apache Web Server和Dispatcher日志记录 apache-web-server-and-dispatcher-logging
AEM as a Cloud Service为Publish上的Apache Web Server和Dispatcher层提供三个日志:
- Apache HTTPD Web Server访问日志
- Apache HTTPD Web Server错误日志
- Dispatcher日志
这些日志仅可用于Publish层。
这组日志提供了在向AEM as a Cloud Service Publish层发送HTTP请求以将其送达AEM应用程序之前的见解。 这一点非常重要,因为理想情况下,发送到Publish层服务器的大多数HTTP请求都由Apache HTTPD Web Server和AEM Dispatcher缓存的内容提供,并且永远不会访问AEM应用程序本身。 因此,AEM的Java、请求或访问日志中没有这些请求的日志语句。
Apache HTTPD Web Server访问日志 apache-httpd-web-server-access-log
Apache HTTP Web Server访问日志为每个到Publish层的Web服务器/Dispatcher的HTTP请求提供语句。 从上游CDN提供的请求不会反映在这些日志中。
请参阅官方Apache文档中有关错误日志格式的信息。
示例日志输出
cm-p1234-e5678-aem-publish-b86c6b466-qpfvp - - 17/Jul/2020:09:14:41 +0000 "GET /etc.clientlibs/wknd/clientlibs/clientlib-site/resources/images/favicons/favicon-32.png HTTP/1.1" 200 715 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0"
cm-p1234-e5678-aem-publish-b86c6b466-qpfvp - - 17/Jul/2020:09:14:41 +0000 "GET /etc.clientlibs/wknd/clientlibs/clientlib-site/resources/images/favicons/favicon-512.png HTTP/1.1" 200 9631 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0"
cm-p1234-e5678-aem-publish-b86c6b466-qpfvp - - 17/Jul/2020:09:14:42 +0000 "GET /etc.clientlibs/wknd/clientlibs/clientlib-site/resources/images/country-flags/US.svg HTTP/1.1" 200 810 "https://publish-p6902-e30226.adobeaemcloud.com/content/wknd/us/en.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0"
日志格式
配置Apache HTTPD Web Server访问日志 configuring-the-apache-httpd-webs-server-access-log
此日志无法在AEM as a Cloud Service中进行配置。
Apache HTTPD Web Server错误日志 apache-httpd-web-server-error-log
Apache HTTP Web Server错误日志为Publish层的Web服务器/Dispatcher中的每个错误提供了语句。
请参阅官方Apache文档中有关错误日志格式的信息。
示例日志输出
Fri Jul 17 02:19:48.093820 2020 [mpm_worker:notice] [pid 1:tid 140272153361288] [cm-p1234-e30226-aem-publish-b86c6b466-b9427] AH00292: Apache/2.4.43 (Unix) Communique/4.3.4-20200424 mod_qos/11.63 configured -- resuming normal operations
Fri Jul 17 02:19:48.093874 2020 [core:notice] [pid 1:tid 140272153361288] [cm-p1234-e30226-aem-publish-b86c6b466-b9427] AH00094: Command line: 'httpd -d /etc/httpd -f /etc/httpd/conf/httpd.conf -D FOREGROUND -D ENVIRONMENT_PROD'
Fri Jul 17 02:29:34.517189 2020 [mpm_worker:notice] [pid 1:tid 140293638175624] [cm-p1234-e30226-aem-publish-b496f64bf-5vckp] AH00295: caught SIGTERM, shutting down
日志格式
配置Apache HTTPD Web Server错误日志 configuring-the-apache-httpd-web-server-error-log
mod_rewrite日志级别由文件conf.d/variables/global.var
中的变量REWRITE_LOG_LEVEL定义。
可将其设置为error、warn、info、debug和trace1 - trace8,默认值为warn。 要调试RewriteRules,建议将日志级别提升为trace2。 建议使用Dispatcher SDK调试重写规则。 AEM as a Cloud Service的最大日志级别为debug
。 因此,当前不可能在云中有效调试重写规则。
有关详细信息,请参阅mod_rewrite模块文档。
要为每个环境设置日志级别,请使用global.var文件中相应的条件分支,如下所述:
Define REWRITE_LOG_LEVEL debug
<IfDefine ENVIRONMENT_STAGE>
...
Define REWRITE_LOG_LEVEL warn
...
</IfDefine>
<IfDefine ENVIRONMENT_PROD>
...
Define REWRITE_LOG_LEVEL error
...
</IfDefine>
Dispatcher日志 dispatcher-log
示例
[17/Jul/2020:23:48:06 +0000] [I] [cm-p12904-e25628-aem-publish-6c5f7c9dbd-mzcvr] "GET /content/wknd/us/en/adventures.html" - 475ms [publishfarm/0] [action miss] "publish-p12904-e25628.adobeaemcloud.com"
[17/Jul/2020:23:48:07 +0000] [I] [cm-p12904-e25628-aem-publish-6c5f7c9dbd-mzcvr] "GET /content/wknd/us/en/adventures/climbing-new-zealand/_jcr_content/root/responsivegrid/carousel/item_1571266094599.coreimg.jpeg/1473680817282/sport-climbing.jpeg" 302 10ms [publishfarm/0] [action none] "publish-p12904-e25628.adobeaemcloud.com"
[17/Jul/2020:23:48:07 +0000] [I] [cm-p12904-e25628-aem-publish-6c5f7c9dbd-mzcvr] "GET /content/wknd/us/en/adventures/ski-touring-mont-blanc/_jcr_content/root/responsivegrid/carousel/item_1571168419252.coreimg.jpeg/1572047288089/adobestock-238230356.jpeg" 302 11ms [publishfarm/0] [action none] "publish-p12904-e25628.adobeaemcloud.com"
日志格式
配置Dispatcher错误日志 configuring-the-dispatcher-error-log
调度程序日志级别由文件conf.d/variables/global.var
中的变量DISP_LOG_LEVEL定义。
可将其设置为error 、 warn 、 info 、 debug和trace1 ,默认值为warn。
虽然Dispatcher日志记录支持几个其他级别的日志记录粒度,但AEM as a Cloud Service建议使用以下所述的级别。
要为每个环境设置日志级别,请在global.var
文件中使用相应的条件分支,如下所述:
Define DISP_LOG_LEVEL debug
<IfDefine ENVIRONMENT_STAGE>
...
Define DISP_LOG_LEVEL warn
...
</IfDefine>
<IfDefine ENVIRONMENT_PROD>
...
Define DISP_LOG_LEVEL error
...
</IfDefine>
CDN日志 cdn-log
AEM as a Cloud Service提供对CDN日志的访问,这些日志对于包括缓存命中率优化在内的用例非常有用。 无法自定义CDN日志格式,并且没有将其设置为不同模式(例如“信息”、“警告”或“错误”)的概念。
示例
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"rid": "974e67f6",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"host": "example.com",
"url": "/content/hello.png",
"method": "GET",
"res_ctype": "image/png",
"cache": "PASS",
"status": 200,
"res_age": 0,
"pop": "PAR",
"rules": "match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked"
}
日志格式
CDN日志不同于其他日志,它遵循JSON格式。
如何访问日志 how-to-access-logs
云环境 cloud-environments
可通过以下方式访问云服务的AEM as a Cloud Service日志:通过Cloud Manager界面下载,或使用命令行界面在命令行跟踪日志。Adobe I/O 有关详细信息,请参阅Cloud Manager日志记录文档。
其他Publish地区的日志 logs-for-additional-publish-regions
如果为特定环境启用了其他发布区域,则可以从Cloud Manager下载每个区域的日志,如上所述。
其他发布区域的AEM日志和Dispatcher日志将在环境ID之后的前3个字母中指定该区域,以下示例中的 nld2 即代表位于荷兰的其他AEM发布实例:
cm-p7613-e12700-nld2-aem-publish-bcbb77549-5qmmt 127.0.0.1 - 07/Nov/2023:23:57:11 +0000 "HEAD /libs/granite/security/currentuser.json HTTP/1.1" 200 - "-" "Java/11.0.19"
本地 SDK local-sdk
AEM as a Cloud Service SDK提供日志文件以支持本地开发。
AEM日志位于文件夹crx-quickstart/logs
中,可以在其中查看以下日志:
- AEM Java日志:
error.log
- AEM HTTP请求日志:
request.log
- AEM HTTP访问日志:
access.log
Apache层日志(包括Dispatcher)位于保存Dispatcher的Docker容器中。 有关如何启动Dispatcher的信息,请参阅Dispatcher文档。
要检索日志,请执行以下操作:
-
在命令行中,键入
docker ps
以列出容器 -
要登录到容器,请键入“
docker exec -it <container> /bin/sh
”,其中<container>
是上一步骤中的调度程序容器ID -
导航到
/mnt/var/www/html
下的缓存根 -
日志位于
/etc/httpd/logs
下 -
Inspect日志:可在XYZ文件夹下访问日志,在其中查看以下日志:
- Apache HTTPD Web服务器访问日志 —
httpd_access.log
- Apache HTTPD Web Server错误日志 —
httpd_error.log
- Dispatcher日志 —
dispatcher.log
- Apache HTTPD Web服务器访问日志 —
日志也直接打印到终端输出上。 大多数情况下,这些日志应该为DEBUG,可通过在运行Docker时作为参数传递Debug级别来实现此目的。 例如:
DISP_LOG_LEVEL=Debug ./bin/docker_run.sh out docker.for.mac.localhost:4503 8080
调试生产和暂存 debugging-production-and-stage
在特殊情况下,需要更改日志级别,以便在暂存或生产环境中以更精细的粒度进行记录。
虽然这是可能的,但需要更改Git中配置文件的日志级别(从Warn和Error更改为Debug),并执行部署到AEM as a Cloud Service以将这些配置更改注册到环境中。
根据由Debug写入的流量和日志语句的数量,这可能会导致对环境的性能产生负面影响,因此,建议对暂存和生产调试级别进行以下更改:
- 谨慎行事,而且只在绝对必要时
- 恢复到适当级别并尽快重新部署
日志转发 log-forwarding
虽然可以从Cloud Manager下载日志,但一些组织认为将这些日志转发到首选日志记录目标比较有利。 AEM支持将日志流式传输到以下目标:
- Azure Blob存储
- Datadog
- HTTPD
- Elasticsearch(和OpenSearch)
- Splunk
有关如何配置此功能的详细信息,请参阅日志转发文章。