Winston: لا يتم تلوين تسجيل وحدة التحكم.

تم إنشاؤها على ١٠ نوفمبر ٢٠١٧  ·  22تعليقات  ·  مصدر: winstonjs/winston

أحاول تلوين إخراج وحدة التحكم وهو لا يعمل. الإخراج هو نفس اللون (الأبيض). أنا على 3.0.0-rc1.

const winston = require('winston');
const logLevels = {
  levels: {
    error: 0,
    warn: 1,
    info: 2,
    http: 3,
    sql: 4,
    debug: 5
  },
  colors: {
    error: "red",
    warn: "darkred",
    info: "black",
    http: "green",
    sql: "blue",
    debug: "gray"
  }
};
winston.addColors(logLevels);
const logger = winston.createLogger({...});
logger.add(new winston.transports.Console({colorize: true}));

لقد جربت أيضًا الاقتراح هنا ولكن هذا لا يعمل أيضًا:

logger.add(new winston.transports.Console({format: winston.format.combine(formatter, winston.format.colorize())}));

شكرا،
ألفارو

التعليق الأكثر فائدة

تمكنت من تشغيله جزئيًا باستخدام وثائق نموذج السجل .

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
  );

لست متأكدًا من كيفية التعامل مع إغراق وسيطات JSON.

التحديث هنا هو ما توصلت إليه:

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf((info) => {
      const {
        timestamp, level, message, ...args
      } = info;

      const ts = timestamp.slice(0, 19).replace('T', ' ');
      return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
    }),
  );

screen shot 2017-11-13 at 10 55 05 am

ال 22 كومينتر

تمكنت من تشغيله جزئيًا باستخدام وثائق نموذج السجل .

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
  );

لست متأكدًا من كيفية التعامل مع إغراق وسيطات JSON.

التحديث هنا هو ما توصلت إليه:

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf((info) => {
      const {
        timestamp, level, message, ...args
      } = info;

      const ts = timestamp.slice(0, 19).replace('T', ' ');
      return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
    }),
  );

screen shot 2017-11-13 at 10 55 05 am

بعد ساعتين تمكنت من تشغيل الألوان ، شكرًا Xeoncross !

بدأ Winston وحصل أيضًا على وحدة تحكم بدون ألوان ...
كنت أستخدم رمز تعريف النقل التالي:

new winston.transports.Console({
  format: winston.format.simple()
})

بعد قراءة هذا الموضوع فعلت هذا:

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.simple(),
            winston.format.colorize()
          )
})

ولم يكن هناك فرق.
لذلك قمت بتغيير موضع تنسيق التلوين إلى الأول وحصلت على ألوان تعمل

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.colorize(),
            winston.format.simple()
          )
})

@ abrakadobr ! هذا ما فعل الحيلة.

لا شيء هنا يعمل بالنسبة لي ، ما زلت لا توجد ألوان ، وتسبب تغيير اللون إلى الأعلى في أن يسجل حقل المعلومات السلاسل المشفرة

لقد أنشأت جوهرًا يوضح كيفية استخدام تسجيل Winston & Morgan في تطبيق Expressjs بسيط.

شكرا Xeoncross! نجحت إضافة winston.format.colorize () إلى التنسيق الخاص بي. المثير للاهتمام أن هذا ليس في المستندات. أو على الأقل لم أتمكن من العثور عليه في المستندات.

أحب المرونة الجديدة ، لكنني آمل أن تحصل على توثيق أفضل. لقد قضيت وقتًا طويلاً في الحصول على هذا للعمل. مثال على المكونات واللعب لأولئك منا الذين كانوا يستخدمون winston.cli() سيقطع شوطا طويلا ، شيء مشابه لمثال @ Xeoncross.

هل يعرف أي شخص كيفية القيام بذلك باستخدام إصدار الإصدار الحالي؟ الإصدار المرشح للإصدار ليس خيارًا.

عند قراءة الكود ، يمكنك أيضًا إرسال all إلى colorize كخيار لتلوين السجل بالكامل.

colorize({ all: true })

markhealey @ لقد قمت بالفعل بإزالة تبعية winston من package.json الخاص بي ثم قرأت رسالتك. شكرا لك: +1:

تضمين التغريدة ألق نظرة على: https://github.com/winstonjs/logform/blob/master/timestamp.js . يمكنك تنسيق الطابع الزمني باستخدام معلمة opt format . لكن كن حذرًا مع المنطقة الزمنية

format.combine(
    format.colorize(),
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.align(),
    format.printf(info => {
        const { timestamp, level, message, ...extra } = info;

        return `${timestamp} [${level}]: ${message} ${
            Object.keys(extra).length ? JSON.stringify(extra, null, 2) : ''
        }`;
    }),
)

لا يعمل format.colorize({all:true} حقًا إذا تم تضمين الطابع الزمني ، فإليك مثال عملي لتلوين السطر بالكامل:

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(),
  ]

});

تحقق من مسجل كامل المواصفات الخاص بي

شكرًا abrakadobr ، لقد نجح الحل الذي قدمته معي.

tommuhm أرى العيب الآن. لا يوجد خيار تنسيق مضمّن لـ colorize إذا كان المرء يريد بالفعل تلوين printf بالكامل. هل هذا يعطي معنى بالنسبة لك؟

const { createLogger, format, transports } = require('../');

const logger = createLogger({
  level: 'debug',
  format: format.combine(
    format.timestamp(),
    format.simple(),
    format.printf(info => `${info.timestamp} - ${info.level}: ${info.message}`),
    format.colorize({ all: true })
  ),
  transports: [
    new transports.Console(),
  ]
});

logger.error('wowza');

الجزء الصعب هو أن يكون colorizer معروفًا عندما يكون info "متسلسلًا" (أي عندما يتم تعيين info[MESSAGE] على سلسلة). متابعة العلاقات العامة إلى logform قريبًا - شكرًا للتنقيب في الأمر!

Xeoncross يمكننا أيضًا تحقيق نفس الشيء بطريقة أبسط بكثير

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, colorize, printf } = format;

const level = process.env.LOG_LEVEL || 'debug';

const myFormat = printf(({ level, message, label, timestamp }) => {
    return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
    format: combine(colorize(), timestamp(), myFormat),
    transports: [new transports.Console()]
});

المرجع: https://www.npmjs.com/package/winston#using -custom-logging-levels

أنا أستخدم winston لتسجيل الدخول إلى cloudwatch ومحاولة إضافة لون ولكن بدلاً من ظهور رموز الألوان .. أحاول جميع الحلول المذكورة أعلاه. أدناه هو رمز بلدي

const winston = require('winston');
const {transports, format, createLogger  } = winston;
const { combine,errors,timestamp} = format;

const colorizer = winston.format.colorize();


const logger = createLogger({
    level:  process.env.LOG_LEVEL,
    prettyPrint : true,
    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()
    ]
});

module.exports = {logger};

وفي إخراج وحدة التحكم cloudwatch هو

[34m2019-08-22T13:00:03.325Z - debug: res by id: [
{
    "isActive": true,
    "value": "fNUMheWiwXayKsaYCbUeA7Gg7BtEPIUbakB56XH1",
    "id": "oehlwqlcve",
    "userId": "6b347b41-ddef-4842-83a0-1cd5ca358482"
}
][39m

هذا [39m apear بدلاً من اللون. أي اقتراح؟

-22T13: 00: 03.325Z - تصحيح الأخطاء: الدقة بواسطة المعرف: [

أواجه نفس المشكلة أيضًا. هل تمكنت من إصلاحه؟

-22T13: 00: 03.325Z - تصحيح الأخطاء: الدقة بواسطة المعرف: [

أواجه نفس المشكلة أيضًا. هل تمكنت من إصلاحه؟

أي تحديثات على ذلك؟ هل قمت بحلها بطريقة ما؟

Xeoncross يمكننا أيضًا تحقيق نفس الشيء بطريقة أبسط بكثير

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, colorize, printf } = format;

const level = process.env.LOG_LEVEL || 'debug';

const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
  format: combine(colorize(), timestamp(), myFormat),
  transports: [new transports.Console()]
});

المرجع: https://www.npmjs.com/package/winston#using -custom-logging-levels

لقد فعلت ذلك الحيلة بالنسبة لي في iTerm على MacOS

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

xungwoo picture xungwoo  ·  3تعليقات

bertolo1988 picture bertolo1988  ·  3تعليقات

greenhat616 picture greenhat616  ·  3تعليقات

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ·  3تعليقات

Buzut picture Buzut  ·  3تعليقات