لا يمكنني العثور على مثال لتلوين سطر السجل بالكامل ، على سبيل المثال ،
winston.createLogger({
level: 'debug',
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.colorize({ all: true }),
winston.format.align(),
winston.format.printf((info) => {
const {
timestamp, level, message, ...args
} = info;
// const ts = timestamp.slice(0, 19).replace('T', ' ');
return `${timestamp} ${level}: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
}),
),
}),
],
});
أود تلوين كل شيء في السطر بأكمله. في Winston 2 ، بدا أنه يعمل بشكل جيد وتوقع أنه لا يلون الخط بأكمله.
كيف يمكنني تلوين خط الإخراج بالكامل وتضمين الطابع الزمني باعتباره الإدخال الأول لسطر السجل ، وليس كجزء من نص الرسالة.
المشكلة هي colorize
ستقوم فقط بتلوين مستوى كائن المعلومات أو خصائص الرسالة: https://github.com/winstonjs/logform/blob/master/colorize.js#L92 ، حتى لو opts.all
تم تعيينه. Tbh أعتقد أن هذا يجعل كل الخيارات عديمة الفائدة إلى حد ما ؛ يمكنك فقط تعيين مستوى opts.level و opts.message للحصول على الوظيفة الحالية. يمكن أن يقوم opts.all بدلاً من ذلك ، على سبيل المثال ، بتلوين كل مفتاح في كائن المعلومات ، والذي سيتضمن tiemstamp (النقطة الأخرى هي أن الطابع الزمني يضاف كمفتاح منفصل في المعلومات ، وليس مقدمًا إلى info.message ، بحيث لا يتم تلوينه). إذا كنت ترغب في فتح نموذج PR إلى logform الذي يجعل تلوين جميع مفاتيح المعلومات عندما يكون الخيار opts. كل شيء صحيحًا ، فسأكون سعيدًا بالنظر فيه هناك. شكرا!
الحل السريع لتلوين سطر السجل بالكامل هو:
const colorizer = winston.format.colorize();
const logger = winston.createLogger({
level: 'debug',
format: combine(
winston.format.timestamp(),
winston.format.simple(),
winston.format.printf(msg =>
colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
)
),
transports: [
new transports.Console(),
]
});
التعليق الأكثر فائدة
الحل السريع لتلوين سطر السجل بالكامل هو: