LogRock: Logging рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг
2 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╣рдо рдЕрдкрдиреЗ
рдХреНрд▓реАрд╡реЗрд░рдмреНрд░рд╢ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИред рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдбрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВред рд╣рдо рдкреИрд╕реЗ рдФрд░ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░реАрдХреНрд╖рдг рд╕рд╣рд┐рдд рд╕рдм рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдФрд░ рддрд░реНрдХрд╣реАрди рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЗрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ -
рд▓реЙрдЧрд░реЙрдХ (рдЬреАрдердм) ред
рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдЖрдзреБрдирд┐рдХ рд▓реЙрдЧрд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЙрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдпрджрд┐ рдЖрдк рдПрдХ рдЬреАрд╡рд┐рдд рдЬреАрд╡ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдПрдХ рдмрдЧ рдПрдХ рдмреАрдорд╛рд░реА рд╣реИред рдЗрд╕ "рдмреАрдорд╛рд░реА" рдХрд╛ рдХрд╛рд░рдг рдХрдИ рдХрд╛рд░рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдЕрдЧрд░ рд╣рдо рдПрдХ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдПрдХ рдХрд╛рд░рдг рд╕рдВрдмрдВрдз рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдмрдЧ рдХрдИ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдорд╛рдирд╡ рдмреАрдорд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдХреЛрдИ рднреА рд░реЛрдЧреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдиреЗ рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдмрддрд╛рдПрдЧрд╛, рдХреЛрдИ рднреА рдкрд░реАрдХреНрд╖рдХ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рдП рдереЗред
рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЦреБрдж рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛ рд╕рдХреЗ рдХрд┐ "рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ", рд╣рдо
LogRock рдореЙрдбреНрдпреВрд▓
(github) рдХреЛ рд▓реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ ElasticSearch, LogStash рдФрд░ Kibana рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВрдЧреЗред
ElasticSearch рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреВрд░реНрдг-рдкрд╛рда рдЦреЛрдЬ рдЗрдВрдЬрди рд╣реИред рдЖрдк
рдпрд╣рд╛рдВ ElasticSearch рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦ рд╕рдХрддреЗ
рд╣реИрдВ ред
LogStash рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд▓реЙрдЧ
рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЬреЛ ElasticSearch рд╕рд╣рд┐рдд рд▓реЙрдЧ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред
Kibana рдХрдИ рдРрдб-рдСрди рдХреЗ рд╕рд╛рде
ElasticSearch рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рддреНрд░реБрдЯрд┐ (рдпрд╛ рд╕рд┐рд░реНрдл рдорд╛рдВрдЧ рдкрд░) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред Logstash incrementally рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ ElasticSearch рдореЗрдВ рдбреЗрдЯрд╛ рдмрдЪрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Kibana рдореЗрдВ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╣реЗрдЬреЗ рдЧрдП рд▓реЙрдЧ рджреЗрдЦрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд┐рдХреНрдд рдХрд┐рдмрд╛рдирд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ ElasticSearch рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд┐рдмрд╛рдирд╛ рдЯреЗрдмрд▓, рдЧреНрд░рд╛рдл, рдирдХреНрд╢реЗ, рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ ElasticStack рдХреА рд╕реНрдерд╛рдкрдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛!рдПрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдирд╛
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд░реАрдЬреЗрдВрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдПрдХ-рдкреЗрдЬ рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХреМрди рд╕рд╛ рдврд╛рдБрдЪрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдПрдХ рд▓реЙрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
1. рдЧреНрд░рд╛рд╣рдХ
1.0 LogRockред рд╕реНрдерд╛рдкрдирд╛
LogRock рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
npm install logrock yarn add logrock
рез.рез LogRockред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрдЕрдк
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ
import { LoggerContainer } from "logrock"; <LoggerContainer> <App /> </LoggerContainer>
LoggerContainer рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдЯреИрдХ рдмрдирд╛рддрд╛ рд╣реИред
рд╕реНрдЯреИрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬреЛ рдорд╛рдЙрд╕ рдпрд╛ рдХреАрдмреЛрд░реНрдб рдмрдЯрди рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕рдмрд░реНрд░реЗ, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред
LoggerContainer рдореЗрдВ рдХрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
<LoggerContainer active={true|false} limit={20} onError={stack => { sendToServer(stack); }} > <App /> </LoggerContainer>
рд╕рдХреНрд░рд┐рдп - рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛
рд╕реАрдорд╛ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 21 рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдкрд╣рд▓рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд┐рдЫрд▓реЗ 20 рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдереЗред
onError - рдХреЙрд▓рдмреИрдХ рдЬрд┐рд╕реЗ рдПрд░рд░ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрд╕ рдХреЙрд▓рдмреИрдХ рд╕реЗ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ ElasticSearch рдпрд╛ рдмреИрдХрдПрдВрдб рдкрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред
рез.реи LogRockред рд▓реЙрдЧрд┐рдВрдЧ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд▓реЙрдЧрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд▓реЙрдЧ-рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
LogRock рдореЙрдбреНрдпреВрд▓ рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╣реИ рдЬреЛ рдПрдХ LoggerContainer рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рд╣реИ
import React, { useState } from "react"; export default function Toggle(props) { const [toggleState, setToggleState] = useState("off"); function toggle() { setToggleState(toggleState === "off" ? "on" : "off"); } return <div className={`switch ${toggleState}`} onClick={toggle} />; }
рдЗрд╕реЗ рд▓реЙрдЧ рд╕реЗ рдареАрдХ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЯреЙрдЧрд▓ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
function toggle() { let state = toggleState === "off" ? "on" : "off"; logger.info(`React.Toggle|Toggle component changed state ${state}`); setToggleState(state); }
рд╣рдордиреЗ рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Reactред рдЯреЙрдЧрд▓ рд╣рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣реБрдИ, рдЯреЙрдЧрд▓ рдШрдЯрдХ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдШрдЯрдХ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рдореМрдЦрд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред рд╕реНрддрд░реЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдХрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдШрдЯрдХрдбрд╛рдИрдХреИрдЪ" рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 16 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
2. рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рдмреИрдХрдПрдВрдб рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИред рд╡рд┐рдзрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмреИрдХрдПрдВрдб рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓реЙрдЧ рдХрд░реЗрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЕрдиреБрд░реЛрдз рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╣реЗрдбрд░ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд░реНрд╡рд░ рдкрд░, рд╣рдо рдХрд┐рд╕реА рднреА рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рддрд░реНрдХ рдХреЛ рдлреНрд░рдВрдЯрдПрдВрдб рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╡рд░ рдХрд░реЗрдЧрд╛, рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрд▓рд╛рд╕реНрдЯрд┐рдХ рд╕реЗ рдмреИрдХреЗрдВрдб рдкреНрд▓реЗрдЯ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╕реЗрд╢рди рдХреЗ рд╕рд╛рде рднреЗрдЬреЗрдВред
1. рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдкрд░ рд╕рддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
window.SESSION_ID = `sessionid-${Math.random().toString(36).substr(3, 9)}`;
2. рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрд░ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
let fetch = axios.create({...}); fetch.defaults.headers.common.sessionId = window.SESSION_ID;
3. LoggerContainer рдореЗрдВ SessionID рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░ рд╣реИ
<LoggerContainer active={true|false} sessionID={window.SESSION_ID} limit={20} onError={stack => { sendToServer(stack); }} > <App /> </LoggerContainer>
4. рдЕрдиреБрд░реЛрдз рд╕реНрд╡рдпрдВ (рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
logger.info(`store.getData|User is ready for loading... User ID is ${id}`); getData('/api/v1/user', { id }) .then(userData => { logger.info(`store.getData|User have already loaded. User count is ${JSON.stringify(userData)}`); }) .catch(err => { logger.error(`store.getData|User loaded fail ${err.message}`); });
рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд▓реЙрдЧ рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рдЕрдм рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рдордиреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдмреИрдХрдПрдВрдб рдЗрд╕ рд╕рддреНрд░ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреИрдХрдПрдВрдб рдкрд░ рдХреНрдпрд╛ рд╣реБрдЖред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреВрд░реЗ рдЪрдХреНрд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рдмрд▓реНрдХрд┐ рдмреИрдХрдПрдВрдб рдкрд░ рднреАред
3. рдкрд░реАрдХреНрд╖рдХ
рдПрдХ рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдФрдкрдЪрд╛рд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХрднреА-рдХрднреА рдХрд╛рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдкрд░реАрдХреНрд╖рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░, рдПрдХ рдкрд░реАрдХреНрд╖рдХ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдХрджрдо рдХрдИ рдФрд░ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрдкрд╡рд╛рджред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдордВрдЪрди рдкрд░, рдЖрдк рд▓реЙрдЧреНрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдХ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рд╣реА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде ElasticSearch рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред

рдЕрдЧрд░, рдлрд┐рд░ рднреА, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдХ рдЖрдЧреЗ рдХреНрд▓рд┐рдХ рди рдХрд░реЗрдВ рдФрд░ рдПрдХ рдореГрдд рдЕрдВрдд рдореЗрдВ рди рдЬрд╛рдПред
рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореМрдд рдХреА рдиреАрд▓реА рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдХреЗ рдвреЗрд░ рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ рдкрд░ рдкрд╛рда рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдиреАрдЪреЗ - рдЗрд╕рдХреЗ рдкреВрд░реНрд╡ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпред рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЖрдИрдбреА рднреА рдорд┐рд▓рддреА рд╣реИ, рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЪреБрдирдиреЗ рдФрд░ рдЯрд┐рдХрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдмрд╛рдж рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдЗрд╕ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдмрд╛рдирд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, LoggerContainer рдХреЗ рдЕрдкрдиреЗ рдЧреБрдг рд╣реИрдВред
<LoggerContainer active={true|false} limit={20} bsodActive={true} bsod={BSOD} onError={stack => { sendToServer(stack); }} > <App /> </LoggerContainer>
bsodActive - BSOD рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ / рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (BSOD рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ)
bsod рдПрдХ рдШрдЯрдХ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
UI LoggerContainer рдореЗрдВ рдПрдХ рдмрдЯрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
context.logger.onError(context.logger.getStackData());
4. LogRockред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛
рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕реНрдЯрдбрдЖрдЙрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<LoggerContainer active={true|false} limit={20} bsodActive={true} bsod={BSOD} onError={stack => { sendToServer(stack); }} stdout={(level, message, important) => { console[level](message); if (important) { alert(message); } }} > <App /> </LoggerContainer>
stdout рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рд╕рдВрджреЗрд╢ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╣реА рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рд╕рдВрджреЗрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдИ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
logger.log('Something was wrong', true);
рдЙрдиреНрдирдд рд▓реЙрдЧрд┐рдВрдЧ
рдпрджрд┐ рдЖрдк Redux, рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЬ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреАред
рдкреНрд░рднрд╛рд╡реА рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рд▓реЙрдЧрд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЙрдЧ-рдЗрди (рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдзрд┐рдпреЛрдВ, рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рд╡рд┐рдзрд┐рдпреЛрдВ) рдХреЗ рд╕рд╛рде рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбреЗрдХреЛрд░реЗрдЯрд░ - "@" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЯрд┐рдкреНрд╕
рдЙрддреНрдкрд╛рджрди рд╕рд╣рд┐рдд рд▓реЙрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ, рдХреЛрдИ рднреА рдкрд░реАрдХреНрд╖рдХ рдХреЛрдИ рдЕрдбрд╝рдЪрди рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛ред
рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддреЗ рдореЗрдВ рд▓реЙрдЧ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред
рдкрд╛рд╕рд╡рд░реНрдб, рдмреИрдВрдХ рд╡рд┐рд╡рд░рдг рдФрд░ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬрд╛рдирдХрд╛рд░реА рд▓реЙрдЧ рди рдХрд░реЗрдВ!рд▓реЙрдЧреНрд╕ рдХреА рдЕрддрд┐рд░реЗрдХ рднреА рдЦрд░рд╛рдм рд╣реИ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВред
рд╡рд┐рдХрд▓реНрдк
рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ:
- рд░реЛрд▓рдмрд╛рд░ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИред рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдорд╛рд╣ $ 150 рдХреЗ рд▓рд┐рдП 500 рд╣рдЬрд╛рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
- рд╕рдВрддрд░реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИред рдЖрдкрдХреЛ $ 200 рдкреНрд░рддрд┐ рдорд╛рд╣ 1 рдорд┐рд▓рд┐рдпрди рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
рджреЛрдиреЛрдВ рд╕реЗрд╡рд╛рдПрдВ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдФрд░ рдмреИрдХрдПрдВрдб рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ
рд▓реЙрдЧрд┐рдВрдЧ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ, рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рднреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ Google Analytics рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреВрд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬрдм рдЖрдк рдРрдк рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреАрд╡рди рдЙрд╕рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреА рдЙрдкрдЬ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд░рд╣реЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд▓реЙрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реБрдзрд╛рд░реЗрдВред рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рд╕рдореГрджреНрдзрд┐ рд▓рд┐рдЦреЗрдВ :)
PS рдпрджрд┐ рдЖрдк рдХреЛрдгреАрдп, Vue, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдореБрдЭреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА -
рдпрд╣рд╛рдБ ред