1. 程式人生 > >如何在ABAP Netweaver和CloudFoundry裏記錄並查看日誌

如何在ABAP Netweaver和CloudFoundry裏記錄並查看日誌

abap sap sap雲平臺 cloud-foundry log

Netweaver

要記錄日誌需要有一個checkpoint group,可以自行創建也可以使用標準的。這裏我重用標準的group:DEMO_CHECKPOINT_GROUP。

tcode SAAB,點Display <->Activate進入編輯模式,將Logpoints設置為"Log",日期設為Today,意為當天生效。
技術分享圖片
Netweaver的日誌記錄大多是基於用戶級別的,這一點比較方便。給想打開日誌記錄的用戶創建一個打開日誌開關的配置:
技術分享圖片
新建一個report名稱為ZCONTEXT, 下面代碼的含義是把當前report名稱(包含在環境變量sy-cprog)和當前report的運行環境(online運行還是offline運行)寫入該checkpoint group。因為可能有其他人也會使用該group,所以用SUBKEY區分不同的用戶。

LOG-POINT ID demo_checkpoint_group
SUBKEY sy-uname
FIELDS sy-batch sy-cprog.

技術分享圖片
執行完report後返回SAAB即可查看到記錄的日誌。
技術分享圖片
雙擊能看到記錄的明細。
技術分享圖片

CloudFoundry

總的guideline在SAP官方Github上有。

這裏簡述要點。

SAP雲平臺的CloudFoundry環境裏的日誌記錄推薦使用slf4j(Simple Log Facade for Java)。即Java代碼裏使用slf4j提供的接口進行日誌記錄,而具體的日誌記錄實現可以通過配置文件來指定。

我做了一個例子,全部源代碼在我的github上。

我的例子使用log4j2作為日誌記錄的實現。

(1) 在Java項目的pom.xml裏定義slf4j和log4j2的版本號。

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
  <cf-logging-version>2.1.5</cf-logging-version>
  <log4j2.version>2.8.2</log4j2.version>
  <slf4j.version>1.7.24</slf4j.version>
</properties>

在pom.xml文件的dependency區域維護相關的dependency:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>${slf4j.version}</version>
</dependency>

<dependency>
  <groupId>com.sap.hcp.cf.logging</groupId> 
  <artifactId>cf-java-logging-support-log4j2</artifactId>
  <version>${cf-logging-version}</version>
</dependency>

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>${log4j2.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>${log4j2.version}</version>
</dependency>

<dependency>
  <groupId>com.sap.hcp.cf.logging</groupId>
  <artifactId>cf-java-logging-support-servlet</artifactId>
  <version>${cf-logging-version}</version>
</dependency>

(2) 在CLASSPATH下新建log4j2.xml, 使用如下源代碼:


<Configuration status="warn" strict="true"
packages="com.sap.hcp.cf.log4j2.converter,com.sap.hcp.cf.log4j2.layout">
<Appenders>
<Console name="STDOUT-JSON" target="SYSTEM_OUT" follow="true">
<JsonPatternLayout charset="utf-8" />
</Console>
<Console name="STDOUT" target="SYSTEM_OUT" follow="true">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} [%mdc] - %msg%n" />
</Console>
</Appenders>
<Loggers>
<!-- Jerry: Log level: INFO -->
<Root level="${LOG_ROOT_LEVEL:-INFO}">
<AppenderRef ref="STDOUT-JSON" />
</Root>
<Logger name="com.sap.hcp.cf" level="${LOG_HCP_CF_LEVEL:-INFO}" />
</Loggers>
</Configuration>

(3) 在SAP雲平臺Cockpit裏創建一個新的log instance:

技術分享圖片
取名為jerry-log:
技術分享圖片

(4) 代碼裏的使用:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger LOGGER = LoggerFactory.getLogger(ConnectivityServlet.class);

然後使用LOGGER.info 記錄日誌。
技術分享圖片

(5) 如何查詢記錄的日誌:
點擊Logs標簽頁->Open Kibanna Dashboard, 能看到上圖"Diablo Connecting to backend system"對應的日誌:
技術分享圖片
在log明細裏能看到之前在SAP雲平臺Cockpit裏創建的Log service實例。
技術分享圖片

要獲取更多Jerry的原創技術文章,請關註公眾號"汪子熙"或者掃描下面二維碼:

技術分享圖片

技術分享圖片

如何在ABAP Netweaver和CloudFoundry裏記錄並查看日誌