我有一个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
令牌时为什么要尝试打印与消息一起打印的对象,而其他令牌却没有呢?
我怀疑我使用的自定义格式有误。