您如何在Winston的同一行记录日志以及对象和字符串?

时间:2018-12-10 19:32:31

标签: reactjs typescript console.log string-interpolation winston

我有一个create react应用,经常在调试时喜欢将对象和字符串记录在一起。我正在使用Winston 3.1.0,并创建了一个使用Winston这样的记录器类:

import * as winston from 'winston';

const format = winston.format;
const level = (environment.name === 'prod') ? 'warning' : 'debug';

export default class MyLogger {
   public source:string;
   public logger: winston.Logger;

   constructor(src:string){
        this.source = src;

    this.logger = winston.createLogger({
        format: format.combine(
            format.splat(),
            format.simple(),
            format.colorize(),
            format.label({label: `[MyReactApp: ${this.source}]`}),
            format.timestamp(),
            format.json({replacer:null, value:3}),
            format.printf(info => {
                return `${info.label} ${info.level}: ${info.message}`;
              }),
            // format.prettyPrint(),
              ),
        level,
        levels: winston.config.syslog.levels,
        transports: [new winston.transports.Console()]
    });
  }

// Similar abstracted methods

public debug = (message:any) =>{
        return this.logger.log('debug','%o', message, {});
}

在我的App.tsx文件中,我尝试过这样调用它(环境是另一个类的对象):

import MyLogger from './MyLogger';

private logger:MyLogger;
this.logger = new MyLogger('App.tsx');

this.logger.debug(`Envirnoment: ${environment}`);
// Output: [MyReactApp: App.tsx] debug: Environment: [object Object], %o {}

this.logger.debug(environment);
// Output: [MyReactApp: App.tsx] debug: %o { obj1: {key1: val1}, obj2:{key2: val2}, key3: val3,... }

我不知道如何以与Console.log在浏览器中相同的方式来打印控制台,在控制台中您可以一起打印字符串和对象,通常使用'[string]${[object]}'语法,并且d能够看到字符串并展开对象。此外,为什么在我使用%o令牌时为什么要尝试打印与消息一起打印的对象,而其他令牌却没有呢? 我怀疑我使用的自定义格式有误。

0 个答案:

没有答案