рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 3 рдкрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдмрджрддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд▓реЙрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдореБрдЭреЗ error.message рдпрд╛ рд╕реАрдзреЗ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдореЗрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:
`` рдХреЙрдиреНрд╕реНрдЯ {рдХреНрд░рд┐рдПрдЯрд▓реЙрдЧрд░, рдлреЙрд░реНрдореЗрдЯ, рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ} = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рд╡рд┐рдВрд╕реНрдЯрди');
рдХреЙрдиреНрд╕ {рдЧрдардмрдВрдзрди, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк, рд▓реЗрдмрд▓, рдкреНрд░рд┐рдВрдЯрдл} = рдкреНрд░рд╛рд░реВрдк;
const environment = process.env.NODE_ENV;
const timestampFormat = 'YYYY-MM-DD HH:mm:SS';
const loggerFormat = printf((info) => {
return `[${info.label}] ${info.message}`;
});
logger = createLogger({
format: combine(
label({ label: 'immoliste' }),
format.colorize({ all: true }),
format.splat(),
format.simple(),
loggerFormat
),
transports: [
new transports.Console({
level: 'debug',
colorized: true
})
]
});
рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
logger.error('Error sending contact message:', JSON.stringify(err));
рдореБрдЭреЗ рдХреЗрд╡рд▓ рдорд┐рд▓рд╛:
[mylabel] Error sending contact message:
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рд░ рдЪреАрдЬ рдХреЛ рд╕рдЦреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдзреЗ рдореЗрдВ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рд╕реАрдзрд╛ рдерд╛ред
+1
@eyp рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?
logger.error('Error sending contact message:%o', {foo: "bar"});
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рд╣реИ:
https://github.com/winstonjs/logform/blob/master/splat.js
рдЬрд┐рд╕реЗ рдЖрдк рдиреЛрдб рд╕реЗ util.format
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
https://nodejs.org/api/util.html#util_util_format_format_args
рддреЛ %o
, %O
рдФрд░ %j
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
%o
рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╡рд┐рдВрд╕реНрдЯрди рдиреЗ util.format рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╛рди рд╕реНрд╡рд░реВрдкрдг рдкреИрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред
рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж!
рд╡рд┐рдВрд╕реНрдЯрди 3.1.0
рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдБ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдБ:
рдХреЙрдиреНрд╕реНрдЯ рдбреАрдмрдЧрдХрдВрд╕реЛрд▓ = рдирдпрд╛ рд╡рд┐рдВрд╕реНрдЯрди.рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯреНрд╕ред рдХрдВрд╕реЛрд▓ ({
рд╕реНрддрд░: 'рдбреАрдмрдЧ',
рдкреНрд░рд╛рд░реВрдк: рд╡рд┐рдВрд╕реНрдЯрди.format.combine (winston.format.simple ()),
рд╣реИрдВрдбрд▓ рдЕрдкрд╡рд╛рдж: рд╕рддреНрдп
})
рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред рдЬреЛрдбрд╝реЗрдВ (рдбреАрдмрдЧ рдХрдВрд╕реЛрд▓)
рдХреЛрдб рдореЗрдВ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: logger.debug('%o', req.query)
рдореБрдЭреЗ рдЬреЗрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд╣рд▓реЗ "% o" рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдиреАрдЪреЗ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ:
рдбрд┐рдмрдЧ: %o {"рдСрдлрд╕реЗрдЯ":"73000",,"рдЧрд┐рдирддреА":"3",,"рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк":"2018-10-29 15:02:08"}
рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рдЖрдо рддреМрд░ рдкрд░ %o рдХреЛ util.format() рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рд╡рд╣рд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ %o рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, logger.debug(req.query) рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ util.format рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
const queryFormatted = util.format('%o', req.query)
logger.debug(queryFormatted)
@frenzymind рдпрд╛ рдЙрд╕ рдХрд╛рдо рдХреЛ рдЖрдЬрдорд╛рдПрдВ рдЬреЛ рдореВрд▓ рдореБрджреНрджреЗ рдкрд░ @mingchuno рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, logger.debug(req.query) рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
@eponymz рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ: рдбрд┐рдмрдЧ: [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] {"рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк": "2018-10-30 11:14:04"}
const queryFormatted = util.format('%o', req.query)
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реЛрд░ рд╣реИред
рдХреНрдпрд╛ рджреВрд╕рд░реЗ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗ? рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЕрдЧрд░ рдЖрдк рд▓реЙрдЧ рдореЗрдВ рдХреНрд╡реЗрд░реА рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЙрд╕ mingchuno рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВред
рд╣рд╛рдВ, рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЬреЗрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдорд┐рдВрдЧрдЪреБрдиреЛ рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ% o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдВрд╕реНрдЯрди "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдЖрдЬрдорд╛рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ% o рднреА рдЫрдкрд╛ рд╣реБрдЖ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдбреАрдмрдЧ рд╕реНрддрд░ рдкрд░ splat() рдкреНрд░рд╛рд░реВрдк рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?
рд╣рд╛рдВ, рдореБрдЭреЗ рд╡рд╕реНрддреБ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд▓рдВрдмрд┐рдд %o
рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЧ рд╣реИ?
рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИ? рдпрд╣ рдорд╛рдирдХ рд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рдореБрдЭреЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдШрдВрдЯрд╛ рд▓рдЧрд╛) рдХреЗ рдмрдЬрд╛рдп
console.log('Log me plz: ', {'ok': 'logged'});
(рд╡рд┐рдВрд╕реНрдЯрди 3.x) рд╕рднреА рд▓реЙрдЧрд┐рдВрдЧ рдХреЙрд▓реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
logger.info('Log me plz: %o', {'ok':'logged'});
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдБ? рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ...
рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрд╣ рдПрдХ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡рд┐рдВрд╕реНрдЯрди 2 рдХреЗ рд╕рд╛рде, рдореИрдВ рдмрд╕ рд╕рднреА console.X
рдХреЛ winston.X
рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рдерд╛ред рдЕрдЪрд╛рдирдХ рдмрджрд╕реВрд░рдд рдкреНрд░рд╛рд░реВрдк рдЯреИрдЧ рдХреНрдпреЛрдВ?
рддреЛ рдлрд┐рдХреНрд╕ %o
рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ?
рд╣рд╛рдВ!
рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛% o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ:
const prettyJson = format.printf(info => {
if (info.message.constructor === Object) {
info.message = JSON.stringify(info.message, null, 4)
}
return `${info.level}: ${info.message}`
})
const logger = createLogger({
level: 'info',
format: format.combine(
format.colorize(),
format.prettyPrint(),
format.splat(),
format.simple(),
prettyJson,
),
transports: [
new transports.Console({})
],
})
рддреЛ рдпрд╣ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ ....
logger.info({ hi: 123 })
...рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ
info: {
"hi": 123
}
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ :D рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ "%o" рдХрд╛ рджреЛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛
рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛% o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ:
const prettyJson = format.printf(info => { if (info.message.constructor === Object) { info.message = JSON.stringify(info.message, null, 4) } return `${info.level}: ${info.message}` }) const logger = createLogger({ level: 'info', format: format.combine( format.colorize(), format.prettyPrint(), format.splat(), format.simple(), prettyJson, ), transports: [ new transports.Console({}) ], })
рддреЛ рдпрд╣ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ ....
logger.info({ hi: 123 })
...рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ
info: { "hi": 123 }
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ :D рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ "%o" рдХрд╛ рджреЛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛
рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд╣реИ, рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рд▓реЙрдЧрд░ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?
рдХреЗрд╡рд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЯрд╛рдЗрдкрдСрдлрд╝ info.message === 'рдСрдмреНрдЬреЗрдХреНрдЯ'
````
рдХреЗ рдмрдЬрд╛рдП
```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
info.message.constructor === рд╡рд╕реНрддреБ
````
рдЬрдм рд╕рдВрджреЗрд╢ рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
(рдЙрджрд╛: [{рд╣рд╛рдп: "456"}]
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрд╣ рдПрдХ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡рд┐рдВрд╕реНрдЯрди 2 рдХреЗ рд╕рд╛рде, рдореИрдВ рдмрд╕ рд╕рднреА
console.X
рдХреЛwinston.X
рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рдерд╛ред рдЕрдЪрд╛рдирдХ рдмрджрд╕реВрд░рдд рдкреНрд░рд╛рд░реВрдк рдЯреИрдЧ рдХреНрдпреЛрдВ?