Winston: рдХрд╕реНрдЯрдо рд▓реЙрдЧ рд╕реНрддрд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдлрд╝рд░ре░ 2012  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: winstonjs/winston

рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд▓реЙрдЧ рд╕реНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдБред рдореИрдВрдиреЗ рдиреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ, рдПрдирдкреАрдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдВрд╕реНрдЯрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рдВрд╕реНрдЯрди рд░реЗрдкреЛ рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░реАрдбрдореА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдЪрд▓рддрд╛ рд╣реИ:

 var myCustomLevels = {
    levels: {
      foo: 0,
      bar: 1,
      baz: 2,
      foobar: 3
    },
    colors: {
      foo: 'blue',
      bar: 'green',
      baz: 'yellow',
      foobar: 'red'
    }
  };

  var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels }); 
  customLevelLogger.foobar('some foobar level-ed message');

рд▓реЗрдХрд┐рди рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреА рднрд┐рдиреНрдирддрд╛ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ

  var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)(),
      new (winston.transports.File)({ filename: 'somefile.log' })
    ]
  });

logger.addLevels() рдХреЗ рд╕рд╛рде рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдирдП рд▓реЙрдЧ рд╕реНрддрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореВрд▓ (рдЬрд╛рдирдХрд╛рд░реА, рдбрд┐рдмрдЧ, рдЖрджрд┐) рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ - рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреЛрджрдиреЗ рдФрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдореИрдВрдиреЗ рджреЗрдЦреЗ рдЧрдП рд╕рднреА рдХреЛрдб рдирдореВрдиреЗ рд╕реЗ, рдЕрдкреЗрдХреНрд╖рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓реЙрдЧрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЧрд░ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рд╡рд╣рди рд╕реНрддрд░ рднреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓рдирд╛:

transports: [new winston.transports.Console({level: foobar})]

рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ lib/winston/logger.js рдореЗрдВ рдЗрд╕ рд╕рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ:

if ((transport.level && self.levels[transport.level] <= self.levels[level]) 
    || (!transport.level && self.levels[self.level] <= self.levels[level])) 

рдЪреВрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ Transport.level lib/winston/transports/transport.js рдореЗрдВ info рд╕реЗрдЯ рд╣реИ:

this.level = options.level  || 'info';

рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  1. рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд╣рди рдкрд░ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  2. рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдореЗрдВ info рд╕реНрддрд░ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ

рдпрджрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рд╢рд░реНрдд рдФрд░ рдордЬрдмреВрд░ рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдмрджрд▓рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рднреАред

рдореБрдЭреЗ рдпрд╛ рддреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдмрд╕ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 27 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдкрдХреЛ levels рдФрд░ transports рджреЛрдиреЛрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

 var myCustomLevels = {
    levels: {
      foo: 0,
      bar: 1,
      baz: 2,
      foobar: 3
    },
    colors: {
      foo: 'blue',
      bar: 'green',
      baz: 'yellow',
      foobar: 'red'
    }
  };

  var customLevelLogger = new (winston.Logger)({
    level: 'foo', 
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
  }); 
  customLevelLogger.foobar('some foobar level-ed message');

рдЕрд░реЗ рдЗрдВрдбреЗрдХреНрд╕рдЬреЗрд░реЛ, рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЗ рдереЛрдбрд╝реЗ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ:

var winston = require('winston')
var myCustomLevels = {
    levels: {
      foo: 0,
      bar: 1,
      baz: 2,
      foobar: 3
    }
};

var customLevelLogger = new (winston.Logger)({
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
});
customLevelLogger.foobar('some foobar level-ed message');

рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред рдпрд╣ рдХрдВрд╕реЛрд▓ рдкрд░ рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

ruby-1.9.2-p290:winston-test: node server.js 
ruby-1.9.2-p290:winston-test:

рдпрджрд┐ рдореИрдВ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдбреАрдмрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рджреЛ рд╕реНрддрд░реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛:

var myCustomLevels = {
    levels: {
      info: 0,
      debug: 1,
      baz: 2,
      foobar: 3
    }
};

var customLevelLogger = new (winston.Logger)({
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
});
customLevelLogger.foobar('some foobar level-ed message');

рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:

ruby-1.9.2-p290:winston-test: node server.js 
foobar: some foobar level-ed message
ruby-1.9.2-p290:winston-test:

>.< @JCBarry рдореЗрд░рд╛ рдХреЛрдб рдирдореВрдирд╛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝реЗрдВред рдЖрдк level рд╕рдВрдкрддреНрддрд┐ рдХреЛ winston.Logger рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

 var customLevelLogger = new (winston.Logger)({
    level: 'foo', // You are not passing a level parameter, so it is defaulting to `info` which doesnt exist.
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
  }); 
  customLevelLogger.foobar('some foobar level-ed message');

рдЖрдкрдХрд╛ рд╕рдЯреАрдХ рдХреЛрдб рдирдореВрдирд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдФрд░ рдиреЛрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдЪреВрдВрдХрд┐ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕ рд╕реНрддрд░ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ("foobar"), рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХреНрдпреЛрдВ рдХрд░реЗрдЧрд╛?

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рджреЛрдиреЛрдВ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЬрдм рддрдХ рдЖрдк рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдореЗрдВ "рдбреАрдмрдЧ" рдФрд░ "рдЬрд╛рдирдХрд╛рд░реА" рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЪреАрдЬреЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреАред

рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдЙрди 2 рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИред

http://screencast.com/t/CxWAleAueeRW

рд╕рд╛рде рд╣реА, level:'foo', рдирд┐рдХрд╛рд▓рдиреЗ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рд╛ред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреЛрджрдиреЗ рдФрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдореИрдВрдиреЗ рджреЗрдЦреЗ рдЧрдП рд╕рднреА рдХреЛрдб рдирдореВрдиреЗ рд╕реЗ, рдЕрдкреЗрдХреНрд╖рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓реЙрдЧрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЧрд░ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рд╡рд╣рди рд╕реНрддрд░ рднреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓рдирд╛:

transports: [new winston.transports.Console({level: foobar})]

рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ lib/winston/logger.js рдореЗрдВ рдЗрд╕ рд╕рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ:

if ((transport.level && self.levels[transport.level] <= self.levels[level]) 
    || (!transport.level && self.levels[self.level] <= self.levels[level])) 

рдЪреВрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ Transport.level lib/winston/transports/transport.js рдореЗрдВ info рд╕реЗрдЯ рд╣реИ:

this.level = options.level  || 'info';

рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  1. рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд╣рди рдкрд░ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  2. рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд╕реНрддрд░реЛрдВ рдореЗрдВ info рд╕реНрддрд░ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ

рдпрджрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рд╢рд░реНрдд рдФрд░ рдордЬрдмреВрд░ рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдмрджрд▓рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рднреАред

рдореБрдЭреЗ рдпрд╛ рддреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдмрд╕ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж!

рдЕрд░реЗ рд╕реВрдЪрдХрд╛рдВрдХ,
рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреНрдпрд╡рд╛рдж рдЬреЗрд╕реАрдмреАрд░реА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ({рд╕реНрддрд░: "foobar"})ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрд╕реНрдЯрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдПрдХ рдХрд╛рд▓реА рдХрд▓рд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдЦрдХ рди рд╣реЛрдВред

рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХрд╛рдо рдХрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ 2 рд▓реЙрдЧрд░реНрд╕, рдХрд╕реНрдЯрдо рд▓реЗрд╡рд▓ рдФрд░ рдХрдВрд╕реЛрд▓ рдХрд▓рд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ: https://gist.github.com/2570757

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

var logger = new (Winston.Logger)({
    levels: {trace: 0, notice: 1, warning: 2, error: 3},
    transports: [
        new Winston.transports.Console({
            level: "trace",
            colorize: true
        })
    ],
    colors: {trace: "white", notice: "cyan", warning: "yellow", error: "red"}
});

+1 @ рдЧрд░реНрде

рдзрдиреНрдпрд╡рд╛рдж @ рдЧрд░реНрде

рд╣рд╛рдп, рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВрдиреЗ рдЗрд╕реЗ "рдЬрд╛рдирдХрд╛рд░реА: 0" рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛

levels : {
        info    : 0,
        emerg   : 1,
        alert   : 2,
        crit    : 3,
        err     : 4,
        warn    : 5,
        notice  : 6,
        debug   : 7
}

рдЕрдЬреАрдм, рдореБрдЭреЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛:

рдореЗрд░реЗ рд╕реНрддрд░ рдереЗ (рдореИрдВрдиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛, рдФрд░ рдЯреНрд░реЗрд╕ рдПрдХ рдЬреЛрдбрд╝рд╛) (require('winston').config.syslog.levels)

{"рдЙрднрд░рдирд╛":0,"рдЕрд▓рд░реНрдЯ":1,,"рдХреНрд░рд┐рдЯ":2,,"рддреНрд░реБрдЯрд┐":3,"рдЪреЗрддрд╛рд╡рдиреА":4,"рдиреЛрдЯрд┐рд╕":5,"рдЬрд╛рдирдХрд╛рд░реА":6,"рдбреАрдмрдЧ":7, " рдЯреНрд░реЗрд╕":8}

рдЬрдм рдореИрдВрдиреЗ рдСрд░реНрдбрд░ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ ... рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ syslog.levels рдЙрд▓реНрдЯреЗ рд╣реИрдВред

{"рдЙрднрд░рдирд╛":8,"рдЕрд▓рд░реНрдЯ":7,"рдХреНрд░рд┐рдЯ":6,"рддреНрд░реБрдЯрд┐":5,"рдЪреЗрддрд╛рд╡рдиреА":4,"рдиреЛрдЯрд┐рд╕":3,"рдЬрд╛рдирдХрд╛рд░реА":2,"рдбреАрдмрдЧ":1, " рдЯреНрд░реЗрд╕":0}

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдЬреАрдм рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд┐рд╕рд▓реЙрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдСрд░реНрдбрд░ рдЙрд▓рдЯрд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

+1 @lucastschmidt рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрддрд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдХрд╛рдо рдХреНрдпреЛрдВ рд╣реБрдЖ; рдХреНрдпрд╛ рдпрд╣ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдореВрд▓реНрдпреЛрдВ рдмрдирд╛рдо syslog рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рдерд╛?

рдЦреИрд░ @ kb19 , рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреАред

рдПрдХ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдп рд╕реЗрдЯ: https://github.com/Offirmo/html_tests/blob/master/incubator/_nodexps/winston_004_custom_levels/server.js

рд╣рд╛рдп, рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛

рд╡рд░ рд╡рд┐рдиреНрдпрд╛рд╕ = {
рд╕реНрддрд░: {
рдбрд┐рдмрдЧ: 0,
рдЬрд╛рдирдХрд╛рд░реА: 1,
рд╕рд╣рд╛рдпрддрд╛: 2,
рдЪреЗрддрд╛рд╡рдиреА: 3,
рддреНрд░реБрдЯрд┐: 4,
рдбреЗрдЯрд╛: 5,
рдЗрдирдкреБрдЯ: 6,
рдХреНрд░рд┐рдпрд╛: 7,
рд╕рдВрдХреЗрдд: 8,
рдореВрд░реНрдЦ: 9

 },
 colors: {
     debug: 'blue',
     info: 'green',
     help: 'cyan',
     warn: 'yellow',
     error: 'red',
     data: 'grey',
     input: 'grey',
     verbose: 'cyan',
     prompt: 'grey',
     silly: 'magenta'

 }

};

+1 рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗред рдпрд╣рд╛рдВ рдФрд░ рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред

рд╣рд╛рдБ, рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕рдВрдХреЗрдд рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

+1

рдбрд┐рдЯреНрдЯреЛ: +1:

рдирдорд╕реНрддреЗ,
рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд▓реЙрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд▓реЙрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде, рдбрд┐рдмрдЧ рднреА рдлрд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдХреГрдкрдпрд╛ рдЙрддреНрддрд░ рджреЗрдВ

рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВ: https://gist.github.com/vikas5914/cf568748ac89446e19ecd5e2e6900443

@vikas5914 рдХреЗ рдереНрд░реЗрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ level: рд▓рдХрдбрд╝рд╣рд╛рд░рд╛/рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЧ рд╕реНрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЙрдЧ рд╕реНрддрд░ рдХреА рд╕реАрдорд╛ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ 'рдиреАрдЪреЗ' (рдЕрд░реНрдерд╛рддреН рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде) рд╣реЛрдЧрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдордЭрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд▓реЙрдЧ рд╕реНрддрд░реЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рдХрд░ рд╕рдлрд▓рддрд╛ рдХреНрдпреЛрдВ рдорд┐рд▓реАред

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

KingRial picture KingRial  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Nepoxx picture Nepoxx  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xungwoo picture xungwoo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

anks333 picture anks333  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mrgoos picture mrgoos  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ