Add logger to the server 60/88560/2
authorRami <rmohamed.ext@orange.com>
Mon, 27 May 2019 15:23:37 +0000 (17:23 +0200)
committerRami <rmohamed.ext@orange.com>
Thu, 30 May 2019 09:39:54 +0000 (11:39 +0200)
- add logger with interceptor for requests

Change-Id: Iecb6b6e51c28aadcc4eec3bb69dc38f4e0e346c5
Issue-ID: CCSDK-1295
Signed-off-by: Rami <rmohamed.ext@orange.com>
cds-ui/server/package.json
cds-ui/server/src/controllers/ping.controller.ts
cds-ui/server/src/datasources/blueprint.datasource-template.ts
cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts
cds-ui/server/src/index.ts
cds-ui/server/src/logger/logger.ts [new file with mode: 0644]
cds-ui/server/src/sequence.ts

index 738a7df..5b8f7e6 100644 (file)
@@ -46,7 +46,7 @@
     ],
     "dependencies": {
         "@loopback/boot": "^1.0.8",
-        "@loopback/context": "^1.4.0",
+        "@loopback/context": "^1.16.0",
         "@loopback/core": "^1.1.3",
         "@loopback/openapi-v3": "^1.1.5",
         "@loopback/repository": "^1.1.1",
         "loopback-connector-rest": "^3.4.1",
         "multer": "^1.4.1",
         "multiparty": "^4.2.1",
-        "nodemon": "^1.18.10"
+        "nodemon": "^1.18.10",
+        "winston": "^3.2.1"
     },
     "devDependencies": {
-        "@loopback/build": "^1.1.0",
+        "@loopback/build": "^1.5.5",
         "@loopback/testlab": "^1.0.3",
         "@loopback/tslint-config": "^2.0.3",
         "@types/bluebird": "^3.5.26",
index d3098bc..660863a 100644 (file)
@@ -19,8 +19,9 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import { Request, RestBindings, get, ResponseObject } from '@loopback/rest';
 import { inject } from '@loopback/context';
+import { get, Request, ResponseObject, RestBindings } from '@loopback/rest';
+import { logger } from '../logger/logger';
 
 /**
  * OpenAPI response for ping()
@@ -61,6 +62,7 @@ export class PingController {
     },
   })
   ping(): object {
+    logger.warn('Calling ping from %s', this.req.url)
     // Reply with a greeting, the current time, the url, and request headers
     return {
       greeting: 'Hello from LoopBack',
index 3cbf095..f5dad3a 100644 (file)
@@ -5,6 +5,7 @@ export default {
     "connector": "rest",
     "baseURL": controllerApiConfig.url,
     "crud": false,
+    "debug": true,
     "operations": [{
         "template": {
             "method": "GET",
index b987e58..1c459e0 100644 (file)
@@ -5,6 +5,7 @@ export default {
     "connector": "rest",
     "baseURL": controllerApiConfig.url + "/dictionary",
     "crud": false,
+    "debug": true,
     "operations": [{
             "template": {
                 "method": "GET",
index 0485249..3afc0a7 100644 (file)
@@ -19,9 +19,9 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import { CdsUiServerApplication } from './application';
 import { ApplicationConfig } from '@loopback/core';
-
+import { CdsUiServerApplication } from './application';
+import { logger } from './logger/logger';
 export { CdsUiServerApplication };
 
 export async function main(options: ApplicationConfig = {}) {
@@ -30,8 +30,8 @@ export async function main(options: ApplicationConfig = {}) {
   await app.start();
 
   const url = app.restServer.url;
-  console.log(`Server is running at ${url}`);
-  console.log(`Try ${url}/ping`);
+  logger.info(`Server is running at ${url}`);
+  logger.info(`Try ${url}/ping`);
 
   return app;
 }
diff --git a/cds-ui/server/src/logger/logger.ts b/cds-ui/server/src/logger/logger.ts
new file mode 100644 (file)
index 0000000..6acbd39
--- /dev/null
@@ -0,0 +1,25 @@
+import { createLogger, format, transports } from 'winston';
+
+const { combine, timestamp, printf, splat, errors, colorize } = format;
+const logFormat = printf(({ level, message, timestamp }) => {
+    return `${timestamp} ${level} ${message}`
+});
+const logger = createLogger({
+    level: 'info',
+    format: combine(
+        splat(),
+        timestamp(),
+        colorize(),
+        errors({ stack: true }),
+        logFormat
+    ),
+    transports: [
+        new transports.Console()
+    ]
+});
+
+if (process.env.NODE_ENV === 'production') {
+    logger.add(new transports.File({ filename: '/var/log/ONAP/CDS-UI/server/server.log'}))
+}
+
+export { logger };
\ No newline at end of file
index b270931..b282cbc 100644 (file)
@@ -30,6 +30,7 @@ import {
   Send,
   SequenceHandler,
 } from '@loopback/rest';
+import { logger } from './logger/logger';
 
 const SequenceActions = RestBindings.SequenceActions;
 
@@ -45,6 +46,8 @@ export class MySequence implements SequenceHandler {
   async handle(context: RequestContext) {
     try {
       const { request, response } = context;
+      logger.info("Incoming request from %s %s and with header %s query %s params %s",
+        request.method, request.url, JSON.stringify(request.headers), JSON.stringify(request.query), JSON.stringify(request.params))
       const route = this.findRoute(request);
       const args = await this.parseParams(request, route);
       const result = await this.invoke(route, args);