Логгер для шлейфа 4 - PullRequest
       3

Логгер для шлейфа 4

0 голосов
/ 11 мая 2019

Как реализовать регистратор в режиме loop back 4 server. Для каждого запроса необходимо захватить код состояния и запросить IP.

Я пытался использовать log4j для создания логгера, но я могу звонить только на уровне своего класса. https://loopback.io/doc/en/lb4/Decorators_inject.html


    *application.ts:*

    const log4js = require('log4js');

    log4js.configure({
    appenders: { cheese: { type: 'file',     filename: 'cheese.log' } },
    categories: { default: { appenders:    ['cheese'], level: 'error' } }
    });
    const logger = log4js.getLogger('cheese');

    //inside application
    app.bind('logger.widget').to(logInfo)
    function logInfo(info: string) {
    logger.info(info);
    }


     *controller.ts class*:

    import {inject} from '@loopback/context';
    export class WidgetController {

    // injection for property
    @inject('logger.widget')
    private logger: Function;

    @get('/hello')
    greet() {
    this.logger("hello request called") 
    return "Hello world";
    }
    }



Ответы [ 2 ]

1 голос
/ 12 мая 2019

Я обнаружил, что через Interceptor мы можем создать журнал.

var uniqid = require('uniqid');
import { RestBindings } from '@loopback/rest';
import { Interceptor } from '@loopback/context';

log4js.configure({
  appenders: { cheese: { type: 'dateFile', filename: 'cheese.log', pattern: '.yyyy-MM-dd-hh-mm', compress: true } },
  categories: { default: { appenders: ['cheese'], level: 'debug' } }
});

const logger = log4js.getLogger(process.env.NODE_ENV);

logger.info("Application starts and running")
export const log: Interceptor = async (invocationCtx, next) => {
  // Wait until the interceptor/method chain returns
  const req = await invocationCtx.get(RestBindings.Http.REQUEST);
  logger.info("Requestid - " + uniqid() + "| Request IP -" + req.ip);

  try {
    logger.info('Starting - Class-' + invocationCtx.targetClass.name + ' | Method-' + invocationCtx.methodName);
    //logger.debug("Requestid - " + uniqid() + "| Request IP -" + req.ip);
    const result = await next();
    const res = await invocationCtx.get(RestBindings.Http.RESPONSE);

    logger.info('Ending - Class-' + invocationCtx.targetClass.name + ' | Method-' + invocationCtx.methodName);
    logger.info("Response Status Code - " + res.statusCode);

    return result;
  } catch (e) {
    logger.error(e);
    throw e;
  }
};

В вашем классе добавьте объект-перехватчик с этим объектом журнала

Class:

import { intercept } from '@loopback/context';
import {Log} from './Log'
  @intercept(log) // `log` is an interceptor function and above object
export class PingController {
//Your code
 }
0 голосов
/ 13 мая 2019

Также есть Concept Called Sequence, где запрос получен перед передачей остальному API.

Также мы можем добавить регистратор в файл Sequence.ts

Ссылка: https://loopback.io/doc/en/lb4/Sequence.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...