Winston: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (0)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдорд╛рд░реНрдЪ 2013  ┬╖  87рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: winstonjs/winston

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

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

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

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

logger.info('info logged');
logger.error('error logged');

process.exit(0);
// the two logs get written out to console, but not to the winston.log file/
bug important winston-file

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

@danielweck рдирд╣реАрдВ, рдпрд╣ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ: #1629 #1504!

6 рд╕рд╛рд▓, рдпрд╣ рд╕рд╣реА рд╣реИ, _рдорд╣рддреНрд╡рдкреВрд░реНрдг_ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП 6 рд╕рд╛рд▓ред рдпрд╣ рд╕реАрдорд╛ рд░реЗрдЦрд╛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред

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

рдиреЛрдб рдореЗрдВ рдХрдВрд╕реЛрд▓ред * рд╡рд┐рдзрд┐рдпрд╛рдБ async рд▓рд┐рдЦ рд░рд╣реА рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд╣рди async рд╣реИред рдиреЛрдб рдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕реЛрдорд╡рд╛рд░ реирел рдорд╛рд░реНрдЪ реирежрезрей рдХреЛ резреп:рекрел рдмрдЬреЗ рдпреВрд░реА рдЬрд╝рд╛рдкреБрдЪрд▓рдХ рдиреЗ рд▓рд┐рдЦрд╛:

рдЬрдм рдЖрдкрдиреЗ рд╡рд┐рдВрд╕реНрдЯрди рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ process.exit(0) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдВрд╕реНрдЯрди рдХрднреА рднреА рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдФрд░ рд▓реЙрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд╡рд┐рдВрд╕реНрдЯрди рдЦреБрд╢реА рд╕реЗ рдЗрд╕ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлреНрд▓рд╢ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд▓реЙрдЧрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдлреНрд▓рд╢ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рднреА рдареАрдХ рд░рд╣реВрдВрдЧрд╛ред
рдЗрд╕ рд╕рдордп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ 'рдлреНрд▓рд╢' рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдореБрдЭреЗ рд▓реЙрдЧрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдпрд╛ рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЕрдм рддрдХ рдмрдВрдж/рд╕рдорд╛рдкреНрдд/рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдИ рднрд╛рдЧреНрдп рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЙрдЧ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ..
рд╡рд░ рд╡рд┐рдВрд╕реНрдЯрди = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рд╡рд┐рдВрд╕реНрдЯрди'); рд╡рд░ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ = рдирдпрд╛ (рд╡рд┐рдВрд╕реНрдЯрдиред рд▓рдХрдбрд╝рд╣рд╛рд░рд╛) ({ рдкрд░рд┐рд╡рд╣рди: [рдирдпрд╛ (winston.transports.Console) (), рдирдпрд╛ (winston.transports.File) ({рдлрд╝рд╛рдЗрд▓ рдирд╛рдо: 'winston.log'})]}); logger.info ('рдЬрд╛рдирдХрд╛рд░реА рд▓реЙрдЧ рдХреА рдЧрдИ'); рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред рддреНрд░реБрдЯрд┐ ('рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХреА рдЧрдИ'); рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (0); // рджреЛ рд▓реЙрдЧ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрд╕реНрдЯрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓/

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub (https://github.com/flatiron/winston/issues/228) рдкрд░ рджреЗрдЦреЗрдВред

рд╣рдореНрдоред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдорд╛рд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реЙрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдПрдХ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ () рдХреЗ рдЕрдВрджрд░ рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝реА рд╕рдордп рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╡рд┐рдВрд╕реНрдЯрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддрд╛ рд╣реИ?

рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, console.log рдФрд░ рдорд┐рддреНрд░ рд╕рдордХрд╛рд▓рд┐рдХ рд╣реИрдВ ред

@yzapuchlak рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рднреА рдпрд╣реА рдХрд░рддрд╛ рд╣реВрдВред

@yzapuchlak setTimeout рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ _probably_ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ рдкрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реЛрдЧреАред

2000 рдпрд╛ 5000 рдХрд╛ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрд░реА рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдирд╣реАрдВ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░ рдХрд┐рддрдирд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рдореБрдЭреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ рдореЛрд░реНрдЪреЗ рдкрд░ рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдореИрдВ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЦреЛрджреВрдВрдЧрд╛ред

@dtex рдореИрдВрдиреЗ рдЕрднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ (рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЙрдЧ рд▓рд┐рдЦреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдИ рд▓реЙрдЧ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

logger.info('winston - info logged');
logger.error('winston - error logged');

logger.info('winston - exiting now', { seriously: true }, function(err, level, msg, meta) {
  console.log('console - CALLING PROCESS EXIT');
  process.exit(0);
});

logger.warn('winston - I probably should only appear in console, not the log file?');

@yzaouchiak рдЬрд┐рдЬреНрдЮрд╛рд╕реБ, рдХреНрдпрд╛ рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг 0.6.2 рд╣реИ?

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

рдореБрдЭреЗ рд╡рд┐рдВрд╕реНрдЯрди 0.7.2 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдлрд▓рддрд╛ рдХреЗ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред

рдпрд╣ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ #288 рдФрд░ log4js-node рд╕рдорд╕реНрдпрд╛ (https://github.com/nomiddlename/log4js-node/issues/148) рдХреЗ рд╕рдорд╛рди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж рдИрд╡реЗрдВрдЯ рд▓реВрдк рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд▓рдВрдмрд┐рдд рдПрд╕рд┐рдВрдХ рдХреЙрд▓ (рдЬреИрд╕реЗ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрддрд╛ рд╣реИ) рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рд╣рдо рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджреЗрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ WritableStreams process.exit() рдпрд╛ рдЕрдирдЪрд╛рд╣реЗ рдЕрдкрд╡рд╛рдж рдкрд░ рдлреНрд▓рд╢рд┐рдВрдЧ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд▓реЙрдЧ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд░рд╛рдЗрдЯреЗрдмрд▓рд╕реНрдЯреНрд░реАрдо рдбреНрд░реЗрди рди рд╣реЛ рдЬрд╛рдПред рдлрд┐рд░ рдпрджрд┐ рдХреЛрдИ process.exit рдпрд╛ рди рдЖрдпрд╛ рд╣реБрдЖ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдРрд╕реЗ рдХрд┐рд╕реА рднреА рд▓реЙрдЧ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдбреНрд░реЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд▓реЙрдЧ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд▓реЙрдЧрд▓реЙрд╕ рдХреЛ рд░реЛрдХреЗрдЧрд╛ред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

https://github.com/nomiddlename/log4js-node/issues/148 . рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд

#288 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рддред

рдпрд╣рд╛рдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП ~ 0.9.0 рд╕рд╛рде рдЕрд╕рдлрд▓

рд╣рд╛рдБ, рдореИрдВ рдЕрднреА рднреА рдкрд╣рд▓реЗ @yzapuchlak рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рд╡рд┐рдВрд╕реНрдЯрди рдХреА рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ process.exit рдХрд░рддреЗ рд╣реИрдВ рддреЛ

рдЗрд╕рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЙрдЧрд┐рдВрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдПрдХ рдПрд╕рд┐рдВрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рдкреВрд░реЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддреЗ рд╣реИрдВред

рддреЛ рдореИрдВ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреНрдпрд╕реНрдд рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рдХреЛ рдорд┐рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ process.exit рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд╛рдл рдФрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХреЗ рд╕рднреА рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИрдХ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕рднреА рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдбрд┐рд╕реНрдХ рдпрд╛ рдПрд╕рдПрд╕рдбреА рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдПрдХрдорд╛рддреНрд░ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╕реНрдЯреНрд░реАрдо рдХреЗ drain рдИрд╡реЗрдВрдЯ рдХреЛ рд╕реБрдирдирд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЖрд╡реЗрджрди рд▓рдЧрд╛рддрд╛рд░ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдкреА рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рд╣реИрдХ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рдареАрдХ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд▓реЙрдЧ рдХреЛ рдлрд╝реНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдХреЙрд▓рдмреИрдХ/рд╡рд╛рджрд╛/рдЬреЛ рдХреБрдЫ рднреА)ред рд╕рд┐рдВрдХ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рд╕реЗ process.on('exit') рдореЗрдВ рд▓реЙрдЧ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдПрд╕рд┐рдВрдХ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рд╕рд┐рдВрдХ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рддреЛ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡рд┐рдВрд╕реНрдЯрди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд┐рдВрдХ рд▓рд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрдм рдЪреАрдЬреЗрдВ рдлреНрд▓рд╢ рдХреА рдЬрд╛рддреА рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдПрдХ рдзрд╛рд░рд╛ рдХреА рдирд╛рд▓реА рдХреА рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛, рдзрдиреНрдпрд╡рд╛рдж!

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдЖрдк рд▓рдЧрднрдЧ setTimeout рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд _stream рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

// log then exit(1)
logger.error("The thing to log", function(err) {
  var numFlushes = 0;
  var numFlushed = 0;
  Object.keys(logger.transports).forEach(function(k) {
    if (logger.transports[k]._stream) {
      numFlushes += 1;
      logger.transports[k]._stream.once("finish", function() {
        numFlushed += 1;
        if (numFlushes === numFlushed) {
          process.exit(1);
        }
      });
      logger.transports[k]._stream.end();
    }
  });
  if (numFlushes === 0) {
    process.exit(1);
  }
});

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ _not рдкрд░реНрдпрд╛рдкреНрдд_ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдлрд╝реНрд▓рд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ finish рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣рд╛ рд╣реВрдБ: https://nodejs.org/api/stream.html#stream_event_finish рдмрдЬрд╛рдп рд╡рд┐рдВрд╕реНрдЯрди рдХреЗ flush рдпрд╛ closed рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рднреА рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ: /

рдЗрд╕рдХреЛ рдЖрдЬрдорд╛рдУред рдпрд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред process.exit рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд▓реЙрдЧ рдХреЛ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд▓реЙрдЧрд░ рдХреЛ process.exit рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред

рд▓рдХрдбрд╝рд╣рд╛рд░рд╛.рдЬреЗрдПрд╕:

var winston = require('winston');

winston.loggers.add('my-logger', {
    console: {
        level: 'debug',
        colorize: true,
        timestamp: true,
        handleExceptions: true
    },
    file: {
        level: 'info',
        colorize: false,
        timestamp: true,
        filename: 'file.log',
        handleExceptions: true
    }
});

var logger = winston.loggers.get('my-logger');


/* ******* *
 * EXPORTS
 * ******* */

exports.exitAfterFlush = function(code) {
    logger.transports.file.on('flush', function() {
        process.exit(code);
    });
};

exports.info = function() {
    logger.info.apply(this, arguments);
};

exports.warn = function() {
    logger.info.apply(this, arguments);
};

exports.error = function() {
    logger.info.apply(this, arguments);
};

рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ:

var logger = require('./logger.js');
logger.exitAfterFlush(0);
logger.info('Done!');

NodeJS v4.1.2 рдФрд░ рд╡рд┐рдВрд╕реНрдЯрди 1.1.0 . рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛

рдореИрдВ @ da-mkay рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

function closeAllLoggersAndDisconnect() {
    "use strict";

    let openCount = 0;

    Object.keys(loggerInstance.transports).forEach((key) => {

        let transportInstance = loggerInstance.transports[key];

        if (typeof transportInstance.close === "function") {
            transportInstance.close();
            openCount++;
        }

        transportInstance.on("closed", () => {
            openCount--;
        });

        setInterval(() => {
            if (openCount === 0) {
                if (process.connected) {
                    process.disconnect();
                }
            }
        }, 100);
    });
}

рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ:

winston.error("Error Occured", err, () => {
    closeAllLoggersAndDisconnect();
});

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ close рд╡рд┐рдзрд┐ рдХреЛ loggerInstance рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ closed рдШрдЯрдирд╛ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣реА рдпрд╣ close рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ

@Kegsay рдХрд╛ рдЙрдкрдпреЛрдЧ

рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде @Kegsay рдХреЗ рдХрджрдореЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ

рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 2.2.0 ред

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ? 3 рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ред рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

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

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

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

рджреВрд╕рд░реА рдУрд░, рд╡рд╛рджреЛрдВ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ (рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛) рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреА рдЬрд╛рдП рдЬрд┐рдиреНрд╣реЗрдВ рд░рджреНрдж рдХрд░рдиреЗ/рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ/ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдмрдВрдж рдХрд░реЗрдВ рдЬреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ winston.log_and_exit() , рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ winston.log_and_exit() ред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд┐рдВрд╕реНрдЯрди рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рд╢рд╛рдпрдж рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реЛрдЧреА, рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рдврд╛рдВрдЪреЗ рдХрд╛ рд╣рдХрджрд╛рд░ рд╣реЛрдЧрд╛ (рджреЗрдЦреЗрдВ рдХрд░реНрд▓реА рдХрд╛ рдирд┐рдпрдо)ред

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

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдФрд░ рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ)ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣реА рдереА рдХрд┐ рдЬреЛ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред

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

рдЕрдиреНрдп рд▓реЛрдЧ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж рдЕрдиреНрдп JS рдХреЛрдб рдХреЛ рдЪрд▓рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрддрд┐рдо рд▓реЙрдЧ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

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

рдХреНрдпрд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдЯрдбрд╛рдЙрди рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬреЛ рд▓реМрдЯрдиреЗ рдФрд░/рдпрд╛ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдмрдХреБрдЫ рдлрд╝реНрд▓рд╢ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛? рдпрд╣ рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

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

@mscharley рдЗрд╕ рдкреНрд░рдХрд╛рд░ log4js рдпрд╣ рдХрд░рддрд╛ рд╣реИ - рдПрдХ log4js.shutdown рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдХреЙрд▓рдмреИрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рднреА рдПрдкреЗрдВрдбрд░реНрд╕ (рд╡рд┐рдВрд╕реНрдЯрди рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХрд╣рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдиреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╢рд┐рд╖реНрдЯреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╢рдЯрдбрд╛рдЙрди рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХреЗрдВред

рдореИрдВ log4js рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдВрд╕реНрдЯрди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд╡реИрд╕реЗ - рдмрд╕ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ winston.log_and_exit() рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ log4js.shutdown() рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рд╢рд┐рд╖реНрдЯреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ writable.end(complete) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, ( appenders.filter(a => a.shutdown).forEach(a => a.shutdown(complete)); ) рдЬреЛ рдЕрднреА рднреА рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╢рдЯрдбрд╛рдЙрди рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @mscharley рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ fileSync рдПрдкреЗрдВрдбрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП shutdown() рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддрд╛рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреВрд░реНрдг рд▓реЙрдЧ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХреЗрдВ рдЬрдм рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдВрдж...

рд╣рд╛рдВ, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ fileSync рдкрд░рд┐рд╡рд╣рди рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдпрд╣ рд╢реБрджреНрдз рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдореА рд╣реЛред

@jdthorpe рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд╛рдл-

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

рдЗрд╕реЗ рдХрдм рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╣ рдЕрдм 3 рд╕рд╛рд▓ рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдХрдо рд╕реЗ рдХрдо рд╣рдо рдЙрд╕ рд▓реЙрдЧрд░ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп shutdown() рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИ imo

рдЗрд╕рдХреЗ рд▓рд┐рдП +1

рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ shutdown(callback) рдЬреЛрдбрд╝рдирд╛ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рд╡рд╣рди рдЕрдкрдиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рд╕реВрдЪрдирд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ" рд╣реИрдВ; рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдлрд╛рдИ рд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреБрдЫ рднреА winston рдХреЛрд░ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐ рдореЗрдВ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ - рдЙрд╕рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд╣рди рдХреЗ рд░рд┐рд╕рд╛рд╡ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рддреЛ winston рдХреЛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ... рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрдм рд╣рдо рд╕рднреА рднрд╛рд░реА рднрд╛рд░реЛрддреНрддреЛрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд╣рди рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЫрджреНрдо рдХреЛрдбред

```рдЬреЗрдПрд╕
рд╢рдЯрдбрд╛рдЙрди (рдХреЙрд▓рдмреИрдХ) {
рд╡рд░ рдкрд░рд┐рд╡рд╣рди рдЧрдгрдирд╛ = рдкрд░рд┐рд╡рд╣рди.рд▓рдВрдмрд╛рдИ
рд╡рд░ рд╕рдорд╛рдкреНрдд = 0;
// рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд▓рд┐рдП
рдЕрдЧрд░ (рдкрд░рд┐рд╡рд╣рди.рд╢рдЯрдбрд╛рдЙрди) {
рдкрд░рд┐рд╡рд╣рдиред рд╢рдЯрдбрд╛рдЙрди (рдлрд╝рдВрдХреНрд╢рди () {
// рд╕рдорд╛рдкреНрдд рдЧрд┐рдирддреА рдмрдврд╝рд╛рдПрдБред
// рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореВрд▓ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
});
} рдЕрдиреНрдп {
// рдкрд░рд┐рд╡рд╣рди (рдЕрднреА рддрдХ) рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
// рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рд╕рдорд╛рдкреНрдд рдХрд╛рдЙрдВрдЯрд░
}
}

рдЗрд╕реЗ v3.x рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ (рдПрдХ рдРрд╕рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдорд╛рдирддрд╛ рд╣реИ рдЬреЛ async / await )


рдПрдХрд▓ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд▓рд┐рдП:

const logTransport = new winston.transports.File({filename: '/log/app.log'})

global.log = winston.createLogger({transports: [logTransport]})

// helper to exit with a given return code, but only after the logger is finished
// this will return a Promise that will never resolve, thus halting execution
log.exit = (exit = 5) => {
  return new Promise(() => {
    logTransport.on('finished', () => process.exit(exit))
  })
}



рдПрдХрд╛рдзрд┐рдХ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд▓рд┐рдП (рдЕрд╡рд╛рдВрдЫрд┐рдд):

```рдЬреЗрдПрд╕
рдХреЙрдиреНрд╕реНрдЯ рд▓реЙрдЧрдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреНрд╕ = [рдирдпрд╛ рд╡рд┐рдВрд╕реНрдЯрди.рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреНрд╕.рдлрд╛рдЗрд▓ ({рдлрд╝рд╛рдЗрд▓ рдирд╛рдо: '/log/app.log'})]

Global.log = рд╡рд┐рдВрд╕реНрдЯрди.рдХреНрд░рд┐рдПрдЯрд▓реЙрдЧрд░ ({рдкрд░рд┐рд╡рд╣рди: [рд▓реЙрдЧрдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ]})

// рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ, рд▓реЗрдХрд┐рди рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА
// рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрднреА рд╣рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛
log.exit = (рдирд┐рдХрд╛рд╕ = 5) => {
рдирдпрд╛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ (() => {
рд╡рд╛рджрд╛.рд╕рдм(
logTransports.map (рдкрд░рд┐рд╡рд╣рди => рдирдпрд╛ рд╡рд╛рджрд╛ (рд╕рдВрдХрд▓реНрдк => рдкрд░рд┐рд╡рд╣рдиред рдкрд░ ('рд╕рдорд╛рдкреНрдд', рд╕рдВрдХрд▓реНрдк)))
)ред рддрдм (() => рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ))
})
}

</details>
<br>
Then, call with `await` like:

```js
try {
  something()
} catch(e) {   
  //do something with the error
  await log.exit(5) // <--- nothing will happen past this line as the promise will never resolve!
  // <--- process will have exited before it reaches here
  trySomethingElse() // <--- this will never be called, and control wont return to the calling code
}

рдЯреВрдЯрд╛ рд╣реБрдЖ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд┐рдВрд╕реНрдЯрди-рд▓реЙрдЧ-рдПрдВрдб-рдПрдЧреНрдЬрд┐рдЯ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ

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

@mscharley рдХреНрдпрд╛ рдЙрдкрд░реЛрдХреНрдд await рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рд╢рд╛рдпрдж log.exit() рдмрдЬрд╛рдп рдПрдХ рдмреЗрд╣рддрд░ рдПрдкреАрдЖрдИ await log.finish() рд╣реЛрдЧрд╛ рдЬреЛ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреНрд╕ рдиреЗ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рджреЗрдВ ( process.exit рдХреЙрд▓ рдХрд░реЗрдВ, рд▓реИрдордбрд╛ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ done рдХреЙрд▓рдмреИрдХ, рдЖрджрд┐)

рд╡рд┐рдВрд╕реНрдЯрди рдХреЗ рдЕрдВрджрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЬреЛрд░ рджреЗ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛? рдРрд╕рд╛ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЬреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдХреБрдЫ рдЦрд╛рд╕ рд╣реИ рдлрд┐рд░ рднреА рд╣рдордиреЗ рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЗрд╕ рджреАрд╡рд╛рд░ рдХреЛ рдорд╛рд░рд╛ рд╣реИ - рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рд╡рд┐рдВрд╕реНрдЯрди рд╕реЗ рджреВрд░ рдЪрд▓реЗ рдЧрдПред рд▓реЙрдЧреНрд╕ рдХреЛ рдЦреЛрдирд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ - рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдиреЗ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдЦрддрд░рдирд╛рдХ рд▓рдЧрддрд╛ рд╣реИред

log4js-node рдиреЗ рд╕рднреА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде process.exit() рдЬреИрд╕реЗ рдХреЙрд▓рдмреИрдХ рд▓реЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд┐рдВрд╕реНрдЯрди рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

log4js-рдиреЛрдб рдпрд╣ рддрдм рд╣реИ

рдХреЛрдИ рдЕрдкрдбреЗрдЯреНрд╕? рд╕рдорд╕реНрдпрд╛ рдмрд╣реБрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред

рдХрд┐рд╕реА рднреА рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рдХреИрд▓рдХреБрд▓рд╕ рд╣реИ:

  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЗ рд▓реЙрдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдзреАрдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреА рд▓рд╛рдЧрдд рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЙрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ process.exit() рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрдлрд╝рд░ рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рдлрд╝ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рд╡рд┐рдВрд╕реНрдЯрди рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрд╕реНрдЯрди-рд▓реЙрдЧ-рдПрдВрдб-рдПрдЧреНрдЬрд┐рдЯ рдкреИрдХреЗрдЬ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░рддрд╛ рд╣реИред
  • рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдХреЛрдб process.exit() рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдПрдХ рдСрди-рдПрдЧреНрдЬрд┐рдЯ рд╣реБрдХ рд╣реИ, рддреЛ рдЙрд╕ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдмрдлрд╝рд░ рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рдлрд╝ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рд╡рд┐рдВрд╕реНрдЯрди-рд▓реЙрдЧ-рдПрдВрдб-рдПрдЧреНрдЬрд┐рдЯ рднреА рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдк AWS рд▓реИрдореНрдмреНрдбрд╛ рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдСрди-рдПрдЧреНрдЬрд┐рдЯ рд╣реБрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдЦреЛрдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рд╡реНрдпрд╛рдкрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕рдВрдпреЛрдЧ рд╕реЗ, @ рд╢реБрд░реБрдЖрдд-рдлрд┐рд░ рд╕реЗ рдпрд╣ log_and_exit() рд╡рд┐рдзрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ log-4js рдХреА shutdown() рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@jdthorpe рд▓реЗрдХрд┐рди winston-log-and-exit рд╡рд┐рдВрд╕реНрдЯрди 3 рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

@VRuzhentsov рдУрд╣, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@jdthorpe рдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛

const transport = new Transport();
const logger = createLogger({
  transports: [
    transport 
  ]
})

logger.finish = (exitCode) => {
  transport.on('finish', () => process.exit(exitCode));
  transport.close();
};

const shutDown = (exitCode) => {
  logger.info('Shutting down');
  logger.finish(exitCode);
};

shutDown(1);

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

logger.info('winston - info logged');
logger.error('winston - error logged');
process.nextTick(() => {
    process.exit(0)
})

@ рд░реЗрдбрд╣рд╛рдЯ-рд░реИрдкреНрдЯрд░ред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рд░ рд╕рдордп рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реА рдЯрд┐рдХ () рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рдЖрдкрдХреЗ рдмрдлрд░ рд╕рд╛рдлрд╝ рд╣реЛ рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд▓реЙрдЧрд░реНрд╕ рдЬрд┐рди рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреЛрдП рд╣реБрдП рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...

рдпрд╣ рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:

            logger.error(`No value specified for ${value} variable! Node will exit now...`);
            logger._flush(() => {
                process.exit(1);
            })

рдХреНрдпрд╛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ v3 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ?

https://github.com/winstonjs/winston/blob/master/README.md#awaiting -logs-to-be-write-in-winston

@danielweck рдирд╣реАрдВ, рдпрд╣ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ: #1629 #1504!

6 рд╕рд╛рд▓, рдпрд╣ рд╕рд╣реА рд╣реИ, _рдорд╣рддреНрд╡рдкреВрд░реНрдг_ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП 6 рд╕рд╛рд▓ред рдпрд╣ рд╕реАрдорд╛ рд░реЗрдЦрд╛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред

рдореИрдВ рдПрдХ waitForWinston() рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

const winston = require('winston');

const fileTransport = new winston.transports.File({ name: 'file', filename: FILE_PATH });
const consoleTransport = new winston.transports.Console({ name: 'console', stderrLevels: ['error'] });
const transports = [
    fileTransport,
    consoleTransport
];
winston.configure({
    level: 'verbose',
    transports,
    format: winston.format.cli()
});
winston.log('info', 'TEST MSG');
try {
    await waitForWinston();
} catch (err) {
    console.log(err);
}
process.exit(0);
const waitForWinston = async () => {
    return new Promise(async (resolve, _reject) => {
        for (const transport of transports) {
            try {
                await closeWinstonTransportAndWaitForFinish(transport);
            } catch (err) {
                console.log(err);
            }
        }
        resolve();
    });
};
const closeWinstonTransportAndWaitForFinish = async (transport) => {
    if (!transport.close) {
        // e.g. transport.name === 'console'
        return Promise.resolve();
    }
    // e.g. transport.name === 'file'

    return new Promise(async (resolve, _reject) => {
        transport._doneFinish = false;
        function done() {
            if (transport._doneFinish) {
                return; // avoid resolving twice, for example timeout after successful 'finish' event
            }
            transport._doneFinish = true;
            resolve();
        }
        setTimeout(() => { // TODO: use a cancellable setInterval instead
            done();
        }, 5000); // just in case the 'finish' event never occurs
        const finished = () => {
            done();
        };

/* Update: `stream.end()` does not flush pending writes, so this solution is inadequate.  For some reason, in recent tests `transport.close();` + `transport.once('finish', ...);` works just fine ... not sure why this works now though! (it used to fail!) */

/*
        if (transport._stream) {
            transport._stream.once('finish', finished);
            transport._stream.end();
        }
*/
            transport.once('finish', finished);
            transport.close();
    });  
};

рдЕрджреНрдпрддрди: stream.end() рд▓рдВрдмрд┐рдд рд▓реЗрдЦрди рдлреНрд▓рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣рд╛рд▓ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ transport.close(); + transport.once('finish', ...); рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! (рдпрд╣ рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рдерд╛!)

рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реЗ рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
transport._stream.once('finish', finished); transport._stream.end();
рдХреА рдмрдЬрд╛рдп:
transport.once('finish', finished); transport.close();
(рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд╛рдЗрдордЖрдЙрдЯ рд░рдгрдиреАрддрд┐ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ/рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ)

рдЖрд╕рд╛рди рддрд░реАрдХрд╛:

logger.error(`No value specified for ${missing_vars.join(',')} variable! Node will exit now...`, () => {
            process.exit(1);
        });

@danielweck рдХреНрдпрд╛ рдЖрдк рдХрднреА рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рдкрд╛рдП? рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╡рд┐рдВрд╕реНрдЯрди 3.x рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди 2.x рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрд▓рдЧ рд▓реЙрдЧрд░ рдвреВрдВрдврдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

@matttowerssonos , IIRC, рдпреЗ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╡рд┐рдВрд╕реНрдЯрди @ 2 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ

BTW, рдореБрдЭреЗ Winston@3 рдкрд░ рдЦреЛрдП рд╣реБрдП рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдкрдиреЗ рдирдП рдЕрдВрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВред

@cjbarth рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

  process.on(type as any, (err: ErrorExtended) => {
    const processLogger: Logger = loggers.get('processLogger');

    processLogger.error(errorFormatter(err, type));

    processLogger.on('finish', function () {
      processLogger.end();
      console.log('never reaches here');
      process.exit(1);
    });
  });

processExit('uncaughtException');
// log and exit for unhandledRejection events.
processExit('unhandledRejection');

@stephanoparaskeva рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ finish рдИрд╡реЗрдВрдЯ рдХреЛ рдХрднреА рднреА processLogger рдкрд░ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрднреА рднреА processLogger.end() рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ, рдЬрдм рд╡рд┐рдВрд╕реНрдЯрди рд▓реЙрдЧрд┐рдВрдЧ рдкреВрд░реА рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ finish рдИрд╡реЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рднреА рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ process.disconnect() рдХреЗ рдмрдЬрд╛рдп process.exit() , рдЬреЛ рдирд╛рд▓реА рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрддрд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред

@stephanoparaskeva рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ finish рдИрд╡реЗрдВрдЯ рдХреЛ рдХрднреА рднреА processLogger рдкрд░ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрднреА рднреА processLogger.end() рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ, рдЬрдм рд╡рд┐рдВрд╕реНрдЯрди рд▓реЙрдЧрд┐рдВрдЧ рдкреВрд░реА рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ finish рдИрд╡реЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рднреА рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ process.disconnect() рдХреЗ рдмрдЬрд╛рдп process.exit() , рдЬреЛ рдирд╛рд▓реА рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрддрд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред

рдЧреЛрдЪрд╛, рддреЛ рдРрд╕рд╛ рдХреБрдЫ?

process.on(type as any, (err: ErrorExtended) => {
  const processLogger: Logger = loggers.get('processLogger');

  processLogger.error(errorFormatter(err, type));
  processLogger.end()

  processLogger.on('finish', function () {
    process.disconnect();
  });
});

// log and exit for uncaughtException events.
processExit('uncaughtException');
// log and exit for unhandledRejection events.
processExit('unhandledRejection');

@stephanoparaskeva рдЬреЛ рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред

рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ processLogger.end() рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХреНрдпреЛрдВрдХрд┐ finish рдИрд╡реЗрдВрдЯ рдХреЗрд╡рд▓ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЖрдЧ рд▓рдЧрдиреА рдЪрд╛рд╣рд┐рдП, рдЙрд╕ рд╕рдордп рддрдХ рд╣реИрдВрдбрд▓рд░ рдмрд╛рдзреНрдп рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рдЬрд╣рд╛рдВ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдкрд╣рд▓реЗ рдмрд╛рдзреНрдп рд╣реИ, рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

@cjbarth
рдУрд╣, рдЖрдк рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдХреИрд╕реЗ рдмрд╛рдВрдзрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдЧрд╛:

processLogger.on('finish', () => {
    this.process.disconnect();
  });

@stephanoparaskeva рд╣рд╛рдБред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ

{
  this.process.disconnect();
}

рд╡рд╕реНрддреБ processLogger рджреНрд╡рд╛рд░рд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд finish рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://stackoverflow.com/a/59260151

рдпрджрд┐ рдЖрдк process.exit рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рдФрд░ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдХреЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЙрдЪрд┐рдд рд╢рдЯрдбрд╛рдЙрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП https://stackoverflow.com/a/37592669 рджреЗрдЦреЗрдВ: @deedf рдХрд┐рд╕ рдмрд╛рдд рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд╕рд▓рд╛рд╣ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рд▓рд┐рдП рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ред

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

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рд╡рд┐рдВрд╕реНрдЯрди рджреНрд╡рд╛рд░рд╛ рдХреИрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд▓реЙрдЧрд░ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдореЗрдВ рд▓реЙрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд┐рдВрд╕реНрдЯрди-рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЕрдЧрд░ рдореИрдВ logger.end() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рд▓реЙрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╣реБрдд рдЬрд▓реНрджреА рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдФрд░ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕рд╣рд╛рдп рд╣реВрдБ

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рд╡рд┐рдВрд╕реНрдЯрди рджреНрд╡рд╛рд░рд╛ рдХреИрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд▓реЙрдЧрд░ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдореЗрдВ рд▓реЙрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд┐рдВрд╕реНрдЯрди-рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЕрдЧрд░ рдореИрдВ logger.end() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рд▓реЙрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╣реБрдд рдЬрд▓реНрджреА рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдФрд░ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕рд╣рд╛рдп рд╣реВрдБ

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рддреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди process.exit() рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рддреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди process.exit() рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ?

рд╣рд╛рдВ, рдиреЛрдбрдЬ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рджреЗрдЦреЗрдВ https://stackoverflow.com/a/37592669

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рддреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди process.exit() рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ?

рд╣рд╛рдВ, рдиреЛрдбрдЬ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рджреЗрдЦреЗрдВ https://stackoverflow.com/a/37592669

рдЦреИрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ process.exit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП uncaughtException рдФрд░ unhandledRejection рд╕реБрди рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рдЖрд╡реЗрджрди рдЫреЛрдбрд╝ рджреЗрдВред рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЖрдкрдиреЗ рдХрд╣рд╛рдБ рджреЗрдЦрд╛ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рдХрд╛рд╕ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЖрдкрдиреЗ рдХрд╣рд╛рдБ рджреЗрдЦрд╛ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рдХрд╛рд╕ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ?

рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рдХрд┐ рдЖрдкрдХреА рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдмрдЧ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╢реАрд░реНрд╖рдХ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЖрдкрдиреЗ рдХрд╣рд╛рдБ рджреЗрдЦрд╛ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рдХрд╛рд╕ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ?

рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рдХрд┐ рдЖрдкрдХреА рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдмрдЧ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╢реАрд░реНрд╖рдХ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рдореБрджреНрджреЗ рдкрд░ рдЖрддреЗ рд╣реИрдВ рдЬреЛ 8 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЙрдЪрд┐рдд рд╕рд╣рд╛рдпрддрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рддреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди process.exit() рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ?

рд╣рд╛рдВ, рдиреЛрдбрдЬ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рджреЗрдЦреЗрдВ https://stackoverflow.com/a/37592669

рдЦреИрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ process.exit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП uncaughtException рдФрд░ unhandledRejection рд╕реБрди рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рдЖрд╡реЗрджрди рдЫреЛрдбрд╝ рджреЗрдВред рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ рд╡рд┐рдВрд╕реНрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡реИрд╕реЗ рднреА рд▓реЙрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдлреЗрдВрдХреЗрдЧрд╛?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рдорд╕реНрдпрд╛" "рд╣рд▓" рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ() рдХреЛ рдХреЙрд▓ рди рдХрд░рдХреЗ рдмрд╕ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЖрдкрдиреЗ рдХрд╣рд╛рдБ рджреЗрдЦрд╛ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рдХрд╛рд╕ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ?

рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рдХрд┐ рдЖрдкрдХреА рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдмрдЧ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╢реАрд░реНрд╖рдХ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рдореБрджреНрджреЗ рдкрд░ рдЖрддреЗ рд╣реИрдВ рдЬреЛ 8 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЙрдЪрд┐рдд рд╕рд╣рд╛рдпрддрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдПрдХ рд╣рдХрджрд╛рд░ рдмрд╡реНрд╡рд╛ рдХреА рддрд░рд╣ рд░реЛрдП рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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