使用記錄檔對AEM as a Cloud Service除錯
記錄檔是在AEM as a Cloud Service中偵錯AEM應用程式的第一線,但部署的AEM應用程式必須有充足的登入次數。
指定環境的AEM服務(作者、Publish/Publish Dispatcher)的所有記錄活動都會合併為單一記錄檔案,即使該服務中的不同pod會產生記錄陳述式亦然。
Pod ID會顯示在每個記錄陳述式中,並可篩選或排序記錄陳述式。 Pod ID的格式為:
cm-p<PROGRAM ID>-e<ENVIRONMENT ID>-aem-<author|publish>-<POD NAME>
- 範例:
cm-p12345-e56789-aem-author-abcdefabde-98765
自訂記錄檔
AEM as a Cloud Service不支援自訂記錄檔,但它不支援自訂記錄。
若要讓Java記錄檔可在AEM as a Cloud Service中使用(透過Cloud Manager或Adobe I/OCLI),自訂記錄檔陳述式必須寫入error.log
。 無法從AEM as a Cloud Service存取寫入自訂具名記錄(例如example.log
)的記錄。
可以使用應用程式的org.apache.sling.commons.log.LogManager.factory.config~example.cfg.json
檔案中的Sling LogManager OSGi設定屬性,將記錄檔寫入error.log
。
{
...
"org.apache.sling.commons.log.file": "logs/error.log"
...
}
AEM作者與Publish服務記錄檔
AEM Author和Publish服務都提供AEM執行階段伺服器記錄檔:
-
aemerror
是Java錯誤記錄檔(可在AEM SDK本機Quickstart上的/crx-quickstart/logs/error.log
找到)。 以下是每個環境型別自訂記錄器的建議記錄層級:- 開發:
DEBUG
- 階段:
WARN
- 生產:
ERROR
- 開發:
-
aemaccess
列出對AEM服務的HTTP要求與詳細資料 -
aemrequest
列出向AEM服務提出的HTTP要求及其對應的HTTP回應
AEM Publish Dispatcher記錄
只有AEM Publish Dispatcher提供Apache Web Server和Dispatcher記錄檔,因為這些方面僅存在於AEM Publish層中,而不存在於AEM作者層中。
-
httpdaccess
列出向AEM服務的Apache Web Server/Dispatcher發出的HTTP要求。 -
httperror
列出來自Apache網頁伺服器的記錄訊息,並協助偵錯支援的Apache模組,例如mod_rewrite
。- 開發:
DEBUG
- 階段:
WARN
- 生產:
ERROR
- 開發:
-
aemdispatcher
列出來自Dispatcher模組的記錄訊息,包括從快取訊息中篩選及服務。- 開發:
DEBUG
- 階段:
WARN
- 生產:
ERROR
- 開發:
Cloud Manager cloud-manager
AdobeCloud Manager可讓您透過環境的下載記錄動作,以天為單位下載記錄檔。
您可以透過任何記錄分析工具下載及檢查這些記錄。
使用Cloud Manager外掛程式Adobe I/OCLI aio
Adobe Cloud Manager支援透過Adobe I/OCLI🔗的Adobe I/OCLI及Cloud Manager外掛程式存取AEM as a Cloud Service記錄檔。
首先,使用Cloud Manager外掛程式設定Adobe I/O。
請確定已識別相關的程式識別碼和環境識別碼,並使用list-available-log-options列出用於tail或下載記錄的記錄選項。
$ 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
追蹤記錄 aio-cli-tail-logs
Adobe I/OCLI提供使用tail-logs命令即時從AEM as a Cloud Service追蹤記錄的功能。 在AEM as 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
產生或包含該字串的記錄陳述式。
正在下載記錄檔 aio-cli-download-logs
Adobe I/OCLI提供使用download-logs)命令從AEM as a Cloud Service下載記錄檔的功能。 這會提供與從Cloud Manager網頁UI下載記錄檔相同的最終結果,差異在於download-logs
命令會根據要求的記錄檔天數,整合各天的記錄檔。
$ aio config:set cloudmanager_programid <PROGRAM ID>
$ aio cloudmanager:download-logs <ENVIRONMENT> <SERVICE> <NAME> <DAYS>
瞭解記錄
AEM as 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
使用Pod 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.
建議的記錄層級 log-levels
Adobe對於每個AEM as a Cloud Service環境的記錄層級的一般指導為:
- 本機開發(AEM SDK):
DEBUG
- 開發:
DEBUG
- 階段:
WARN
- 生產:
ERROR
針對每種環境型別設定最適當的記錄層級是AEM as a Cloud Service,記錄層級會保留在程式碼中
- OSGi設定中會維護Java記錄設定
- Dispatcher專案中的Apache網頁伺服器和Dispatcher記錄層級
…因此需要部署才能變更。
用於設定Java記錄層級的環境特定變數
設定每個環境的靜態已知Java記錄層級的替代方法,是使用AEM做為Cloud Service的環境特定變數來引數化記錄層級,以允許透過具有Cloud Manager外掛程式的Adobe I/OCLI動態變更值。
這需要更新記錄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]"
...
}
此方法有其必須考量的缺點:
- 允許有限數量的環境變數,建立變數來管理記錄層級將使用一個。
- 可以透過Cloud Manager、Adobe I/OCLI和Cloud Manager HTTP API以程式設計方式管理環境變數。
- 環境變數的變更必須由支援的工具手動重設。 若忘記將高流量環境(例如生產)重設為較不詳細的記錄層級,可能會淹沒記錄檔並影響AEM效能。
環境特定變數無法用於Apache Web Server或Dispatcher記錄設定,因為這些設定未透過OSGi設定。