Можно ли использовать Winston Logger на внешнем интерфейсе для регистрации? - PullRequest
0 голосов
/ 30 июня 2018

Я создаю полное приложение со стеком

NodeJs, Angular 6, ExpressJs и MongoDB

Мне удалось создать сервер, и он отлично работает, вместо использования console.log при регистрации ошибок в моем приложении, я решил использовать Winston Logger, вот что у меня сейчас

Серверная сторона

var appRoot = require('app-root-path');
var winston = require('winston');

// define the custom settings for each transport (file, console)
var options = {
    file: {
        level: 'info',
        filename: `${appRoot}/logs/app.log`,
        handleExceptions: true,
        json: true,
        maxsize: 5242880, // 5MB
        maxFiles: 5,
        colorize: false,
    },
    console: {
        level: 'debug',
        handleExceptions: true,
        json: false,
        colorize: true,
    },
};

// instantiate a new Winston Logger with the settings defined above
const logger = winston.createLogger({
    transports: [
        new winston.transports.File(options.file),
        new winston.transports.Console(options.console)
    ],
    exitOnError: false, // do not exit on handled exceptions
});

// create a stream object with a 'write' function that will be used by `morgan`
logger.stream = {
    write: function (message, encoding) {
        // use the 'info' log level so the output will be picked up by both transports (file and console)
        logger.info(message);
    },
};

module.exports = logger;

Примечание: Winston на стороне сервера работает отлично

на стороне клиента

Я хочу использовать winston в своем приложении Angular 6 на стороне клиента.

Пример: в одном из моих компонентов у меня есть это.

import * as logger from "winston";
.........
 this.activeRouter.params.subscribe((params) => {
      // tslint:disable-next-line:prefer-const
      let id = params['id'];
      this.moviesService.getReview(id)
        .subscribe(review => {
          console.log(review);
          this.review = review;
        });
    });

Как видите, я использую console.log(review), вместо журнала консоли я хотел бы использовать Winston.

Как использовать Winston logger на стороне клиента? Я новичок во всем этом, любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Да, это возможно, однако транспорт по умолчанию для браузера очень ограничен. Я рекомендую использовать https://www.npmjs.com/package/winston-transport-browserconsole

npm install winston-transport-browserconsole -S

Он прост в использовании и поддерживает ведение журнала объектов json:

import * as winston from "winston";
import BrowserConsole from 'winston-transport-browserconsole';

const level = "debug";
winston.configure({
    transports: [
        new BrowserConsole(
            {
                format: winston.format.simple(),
                level,
            },
        ),
    ],
});

winston.debug("DEBUG ", {a: 1, b: "two"});
0 голосов
/ 30 июня 2018

Согласно этому билету: https://github.com/winstonjs/winston/issues/287 он почти готов для использования браузером? Или в основном готов? Похоже, они недавно начали поддерживать логирование в среде браузера.

...