У меня есть приложение create response, и часто во время отладки я люблю регистрировать объекты и строки вместе.Я использую 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]}'
, и вы сможете увидеть строку и развернуть объект.Кроме того, почему, когда я использую токен %o
, я пытаюсь напечатать объект, который печатается вместе с моим сообщением, а другие токены нет?Я подозреваю, что неправильно использую пользовательское форматирование.