Winston: рдХреНрдпрд╛ рдХреЛрдИ рд╕реНрдореГрддрд┐ рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕реБрдирдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

рдЬрдм рдореИрдВ рдХрдВрд╕реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рд╢реНрд░реЛрддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ:
logger.on ('рд▓реЙрдЧрд┐рдВрдЧ', (рдкрд░рд┐рд╡рд╣рди, рд╕реНрддрд░, рд╕рдВрджреЗрд╢, рдореЗрдЯрд╛) => рд▓реЙрдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ....

рд▓реЗрдХрд┐рди рдореИрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрди рд╕рдХрддрд╛ рд╣реВрдВ?
рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрдВрд╕реЛрд▓/рдлрд╝рд╛рдЗрд▓/HTTP рдкрд░ рднреЗрдЬреЗ рдЧрдП рд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рд▓реЙрдЧ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВред

рдЪреАрдпрд░реНрд╕ред

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

@ lonix1 @indexzero рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

import { Writable } from 'stream';

let output = ''
const stream = new Writable()
stream._write = (chunk, encoding, next) => {
     output = output += chunk.toString()
     next()
}

const streamTransport = new winston.transports.Stream({ stream })
const logger = winston.createLogger({ transports: [streamTransport]})
logger.info('test message')
const logEvents = output.trim().split('\n')
assert(logEvents[0].includes('test message'))

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

winston@3 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП: winston.transports.Memory рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХрд┐рд╕реА рднреА рдмрдлрд╝рд░ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░реАрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрдЬрд╛рдп winston.transports.Stream рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ winston < 3 рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ winston.transports.Memory рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕реЗ winston@3 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдзрд╛рд░рд╛рдПрдВ рдмреИрдХ рдкреНрд░реЗрд╢рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдХреГрдкрдпрд╛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ winston рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдп рдореВрд▓ рдкреНрд░рд╢реНрди рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ - рдХреНрдпрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ?

рд╣рдо рдпрд╣ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХреЗрдВред

@ lonix1 @indexzero рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

import { Writable } from 'stream';

let output = ''
const stream = new Writable()
stream._write = (chunk, encoding, next) => {
     output = output += chunk.toString()
     next()
}

const streamTransport = new winston.transports.Stream({ stream })
const logger = winston.createLogger({ transports: [streamTransport]})
logger.info('test message')
const logEvents = output.trim().split('\n')
assert(logEvents[0].includes('test message'))

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ IE11 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

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

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

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

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

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

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

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ