使用記錄檔對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 ManagerAdobe 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 — 下載記錄檔

您可以透過任何記錄分析工具下載及檢查這些記錄。

使用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]"
    ...
}

此方法有其必須考量的缺點:

環境特定變數無法用於Apache Web Server或Dispatcher記錄設定,因為這些設定未透過OSGi設定。

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69