往ABAP gateway system上和CloudFoundry 部署HTML5应用
ABAP Gateway system
用WebIDE部署
用Eclipse Team provider部署
执行report /UI5/UI5_UPLOAD_INTO_MIME
Cloud Foundry
在manifest.yml文件里指定buildpack,

然后到manifest.yml文件所在的根目录下,执行命令行:
cf push -f ./approuter-manifest.ymlcf push首先会将整个应用的文件上传到Cloud Foundry上:
因为我的manifest.yml里未指定Nodejs buildpack的版本号,因此使用服务器上默认版本1.6.21:

下载nodejs buildpack后进行build:

build成功:

在build日志能能看到详细步骤。

使用SAP云平台的CloudFoundry部署应用:

在cockpit遇到错误信息:instance: a0abe2b5-7623-4cf1-4c65-0c79, index: 0, exit_description: APP/PROC/WEB: Exited with status 254, reason: CRASHED


使用命令查看部署日志:cf logs connectvity-demo-approuter --recent
2018-05-30T11:33:30.95+0800 [CELL/0] OUT Starting health monitoring of container2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! Linux 4.4.0-119-generic2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! argv "/home/vcap/deps/0/node/bin/node" "/home/vcap/deps/0/bin/npm" "start"2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! node v6.13.12018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! npm v3.10.102018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! path /home/vcap/app/package.json2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! code ENOENT2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! errno -22018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! syscall open2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent ENOENT: no such file or directory, open '/home/vcap/app/package.json'2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent ENOENT: no such file or directory, open '/home/vcap/app/package.json'2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent This is most likely not a problem with npm itself2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent and is related to npm not being able to find a file.2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent2018-05-30T11:33:31.69+0800 [APP/PROC/WEB/0] ERR npm ERR! Please include the following file with any support request:发现原因是build时找不到package.json. 但我确认我部署的zip文件里存在package.json
解决方案
使用CLI进行部署:
cf push -f ./approuter-manifest.yml问题解决:


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
这里简述要点。
SAP云平台的CloudFoundry环境里的日志记录推荐使用slf4j(Simple Log Facade for Java)。即Java代码里使用slf4j提供的接口进行日志记录,而具体的日志记录实现可以通过配置文件来指定。
我做了一个例子,全部源代码在我的上。我的例子使用log4j2作为日志记录的实现。
(1) 在Java项目的pom.xml里定义slf4j和log4j2的版本号。
1.8
1.8
2.1.5
2.8.2
1.7.24
在pom.xml文件的dependency区域维护相关的dependency:
org.slf4j
slf4j-api
${slf4j.version}
com.sap.hcp.cf.logging
cf-java-logging-support-log4j2
${cf-logging-version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j2.version}
org.apache.logging.log4j
log4j-core
${log4j2.version}
com.sap.hcp.cf.logging
cf-java-logging-support-servlet
${cf-logging-version}
(2) 在CLASSPATH下新建log4j2.xml, 使用如下源代码:
(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实例。
