Я настроил свой экземпляр следующим образом
import { format, transports, createLogger, addColors, config } from 'winston'
import env from '@config'
const envLevelMap: { [key: string]: string } = {
test: 'warning',
development: 'trivial',
staging: 'debug',
production: 'error',
}
const customConfig: {
levels: config.AbstractConfigSetLevels
colors: config.AbstractConfigSetColors
} = {
levels: {
error: 0,
warning: 1,
info: 2,
debug: 3,
trivial: 4,
},
colors: {
error: 'bold red yellowBG',
warning: 'italic yellow blackBG',
info: 'bold green whiteBG',
debug: 'underline blue whiteBG',
trivial: 'italic cyan magentaBG',
},
}
const logger = <Extensions.Winston.CustomLeveledWinstonLogger>createLogger({
levels: customConfig.levels,
transports: [
new transports.Console({
level: envLevelMap[env.nodeEnv],
format: format.combine(
format.colorize(),
format.timestamp({ format: 'hh:mm:ss' }),
format.json(),
format.prettyPrint(),
format.splat(),
format.errors({ stack: true }),
),
}),
],
})
addColors(customConfig.colors)
export default logger
И указанный экземпляр выводит следующее
{
message: 'Some message',
level: '\u001b[47m\u001b[32m\u001b[1minfo\u001b[22m\u001b[39m\u001b[49m',
timestamp: 04:34:27
}
Как вы, возможно, заметили, свойство level уровня зарегистрированного объекта имеет вид Werid строка с методом, используемым для входа прямо в середине. В приведенном выше примере указанным методом является «информация». «Странная» часть строки - фактически информация, которую консоль должна обработать, чтобы придать зарегистрированному сообщению соответствующее форматирование (цвет, шрифт и т. Д. c.).
Я использую консоль "cmd", но я уверяю вас, что это не является частью проблемы, поскольку Winston будет правильно регистрировать (цвета и все), когда я использовал простой экземпляр Winston. Проблема возникает только тогда, когда я пытаюсь настроить пользовательские уровни и цвета, даже если я делаю это в соответствии с документами . https://www.npmjs.com/package/winston#using -custom-logging-level .
Я использую TypeScript, кстати (на случай, если это как-то актуально).