
рд╡рд┐рдХрд╛рд╕, рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рдорд░реНрдерди рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╣реИрдВ:
"рдХреНрдпрд╛ рд╣реБрдЖ?" ,
"рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдерд╛?" ,
"рджрд┐рдирд╛рдВрдХ рдкреНрд░рд╛рд░реВрдк рдХреНрдпрд╛ рд╣реИ?" ,
"рд╕реЗрд╡рд╛ рдЬрд╡рд╛рдм рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ?" рдЖрджрд┐
рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд▓реЙрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдЗрди рдФрд░ рдХрдИ рдЕрдиреНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рдпрддреНрддрддрд╛ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрдХрд░реНрд╖рдХ рд▓рдХреНрд╖реНрдп рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП, Eclair рд▓реЙрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ, рдЬреЛ рдХрдИ рдХрдВрдмрд▓реЛрдВ рдХреЛ рдЦреАрдВрдЪреЗ рдмрд┐рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХрдВрдмрд▓ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдиреАрдЪреЗред
рд▓реЙрдЧрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ
рдпрджрд┐ рдЖрдк рдкрд░рд┐рд╕рд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреБрд░рдВрдд рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЧ рдЗрд╕рдХреА рдПрд▓реНрдмреА рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдХреЗрд╡рд▓ рд╡рд╣ рдЖрд╡реЗрджрди рдХреА рд╕рдлрд▓рддрд╛ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ microservice рдореЗрдВ рдХреЛрдИ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ, рдЖрд╕рдиреНрди рд╕рд┐рд╕реНрдЯрдо рдореЛрдмрд╛рдЗрд▓ рдФрд░ рдирдХрдЪрдврд╝рд╛ рд╣реИрдВред "рджреЛрд╣рд░рд╛рдПрдВ", "рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛", "рдбрдмрд▓-рдЪреЗрдХ" - рдпрд╣ рд╕рдм рдореБрд╢реНрдХрд┐рд▓ рдФрд░ / рдпрд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: "рдХреНрдпрд╛ рд╣реБрдЖ?" рдХрд┐рд╕реА рднреА рд╕рдордп ред ред рд▓реЙрдЧ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдбреЗрд╡рд▓рдкрд░, рдкрд░реАрдХреНрд╖рдХ, рдХрднреА-рдХрднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рдХрднреА-рдХрднреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ, рдХрднреА-рдХрднреА рд╕рдорд░реНрдерди рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ - рдХреБрдЫ рднреА рд╣реЛрддрд╛ рд╣реИред - рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрдореНрд╕ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред
рд╕реЗрд╡рд╛ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз (рдпрд╛ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛) рд╕рдмрд╕реЗ рдЕрдХреНрд╕рд░ рдХрдИ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХрд╛ рд▓реЙрдЧ рдЖрдорддреМрд░ рдкрд░ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ "рдЕрдиреБрдХреНрд░рдорд┐рдХ" рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реНрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдзрд╛рд░рд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ "рдЕрдиреБрдХреНрд░рдорд┐рдХ" рджреВрд╕рд░реЗ рд╡рд┐рдорд╛рди рд╕реЗ рдмрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╕реАрдорд╛рдПрдВ рдкрд╛рдардХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред - рд▓реЙрдЧ рдХреЛ рдореВрд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдПрдХреНрд╕рдПрдордПрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЙрдЧ рдХреЛ рдПрдХреНрд╕рдПрдордПрд▓ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЙрдореНрдкреИрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕реБрдВрджрд░ (рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ) рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрд╕рдлрд▓рддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╕рдлрд▓рддрд╛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЦреЗрд▓рдиреЗ рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреБрди: рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред - рд▓реЙрдЧ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдмрдВрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ (рдЕрдиреБрд░реЛрдз), рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдбреЗрдЯрд╛ (рдЙрддреНрддрд░), рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдиреБрд░реЛрдз рдФрд░ рдЙрдирд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрдХреНрд╕рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реЗ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдзреАрди рд╣реИрдВ: рд╢реЗрд▓реНрдл рдЬреАрд╡рди рдпрд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рджреНрд╡рд╛рд░рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧ рд▓рд╛рдЗрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд░рд╛рд╢рд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред - рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдпрдорд┐рдд рд▓реЙрдЧ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ (рдмрд╛рдЗрдЯ рдПрд░реЗ, рдмреЗрд╕ 64, ..), рдЧреНрд░рд╛рд╣рдХреЛрдВ / рднрд╛рдЧреАрджрд╛рд░реЛрдВ / рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдФрд░ рдХрд╛рдиреВрдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╣рд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдореИрдиреБрдЕрд▓ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЙрдзрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рд╣рд╛рде рдХреНрдпреЛрдВ рдирд╣реАрдВ?
org.slf4j.Logger
рд▓реЗрдВ (рдХрд┐рд╕реА рднреА рд╕реВрдЯ рдХреЗ
org.slf4j.Logger
рдХреЗ рд╕рд╛рде рдЗрд╕реЗ
org.slf4j.Logger
рдХрд░реЗрдВ) рдФрд░ рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦреЗрдВред рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢, рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкрдХрдбрд╝рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреБрдЫ рдбреЗрдЯрд╛ред рдХреНрдпрд╛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рд╣рд╛рдБ, рд▓реЗрдХрд┐рди:
- рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ (рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ) рдмрдврд╝ рд░рд╣реА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдмрд╣реБрдд рд╣рдбрд╝рддрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА (рд╕рдлрд▓ рд╕рдорд░реНрдерди, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде) рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВред
- рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рдЖрд▓рд╕реНрдп рдмрди рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ
static
рдХреНрд╖реЗрддреНрд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИ (рдареАрдХ рд╣реИ, рд▓реЛрдореНрдмреЛрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд▓рд╕реА рд╣реИрдВред рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдЖрд▓рд╕реНрдп рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ, рдпрд╣ рдорд╣рд╛рди рдЖрд▓рд╕реНрдп рд╣реИ: рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рджреБрдирд┐рдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд░рд╣рд╛ рд╣реИред - рд╕рднреА рдкрдХреНрд╖реЛрдВ рдкрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрд░реНрдХреНрд╕ рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рдВ, рд╡реЗ рдЫреЛрдЯреЗ рдФрд░ рд╕реБрдВрджрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдлреНрд▓рд┐рдк рдкрдХреНрд╖ рд╣реИ: рдХрдИ рд╣реИрдВ! рд╢реБрд░реБрдЖрдд рд╕реЗ рдЕрдВрдд рддрдХ рдПрдХ рдПрдХрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдХреНрд╕рд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд░рд╛рд╕рдд рдЙрд╕рдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдлреВрдЯрддреАред рдЦреБрд╢, рд▓рдЧрд╛рдП рдЧрдП рдирд┐рдпрдореЛрдВ рдХреЗ рдмреЛрдЭ рд╕реЗ рджрдмреЗ рдирд╣реАрдВ, рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЙрдЧ рдкреНрд░рд╛рд░реВрдк, рдЕрдкрдиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЕрдкрдиреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рдПрдХ рдХрд░реНрддрд╡реНрдп рдорд╛рдирддрд╛ рд╣реИред рдлрд┐рд░, рд╢рд╛рдирджрд╛рд░ рдврдВрдЧ рд╕реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд░ рд╡рд░реНрдЧ рдЕрд▓рдЧ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рднрд╛рд░реАред
- рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЖрдкрдХреЗ рд▓реЙрдЧ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди рдЖрдЗрдбрд┐рдпрд╛ рднреА рдЙрд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рдПрдЧрд╛ред рд▓реЙрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рдЕрд╕рдВрднрд╡ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ Javadoc рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред рдЙрд╕реА рд╕рдордп, рдХрдо рд╕реЗ рдХрдо Javadoc рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдирд╣реАрдВ, рдХреЛрдИ рднреА рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИ) рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЙрдЧ рдХреЗ рджрд░реНрд╢рдХ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред
- MDC (рдореИрдкреНрдб рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЙрдиреНрд╕реЗрдкреНрдЯ) рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИред рдПрдордбреАрд╕реА рдХреЗ рдореИрдиреБрдЕрд▓ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрд╛рд░рд╛ рдореЗрдВ рдХрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдордп рдкрд░ рд╕рдлрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдк рдПрдХ
ThreadLocal
рдХреЛ рдЧреИрд░-рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рде рдФрд░ рдЖрдВрдЦреЗрдВ, рдореИрдВ рдХрд╣рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд╕рдВрднрд╡ рд╣реИред
рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХреНрд▓реЗрдпрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдПрдХреНрд▓реЗрдпрд░ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд▓реЙрдЧ рдХреЛрдб рдХреЗ рд▓реЗрдЦрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдиреНрдпреВрдирддрдо рдХреЛрдб рдмрдирд╛рддреЗ рд╣реБрдП рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред
рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛, рдПрдХреНрд▓реЗрдпрд░ рдХреЗ рд▓рд╛рдн рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред
Eclair рд▓реЙрдЧ рдПрдиреЛрдЯреЗрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ:
- рд╡рд┐рдзрд┐ рд╕реЗ рдкреНрд░рд╡реЗрд╢ / рдирд┐рдХрд╛рд╕ рд╡рд┐рдзрд┐ / рдЕрдкрд╡рд╛рдж / рддрд░реНрдХ / рддрд░реНрдХ / рдорд╛рди рд╡рд┐рдзрд┐ рд╕реЗ рд▓реМрдЯрд╛
- рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж: рдХреЗрд╡рд▓ рдЬрд╣рд╛рдБ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ
- рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓реЙрдЧ рдХрд╛ "рд╡рд┐рд╡рд░рдг" рдмрджрд▓рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕рдмрд╕реЗ рдХрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддрд░реНрдХреЛрдВ (рд╕рднреА рдпрд╛ рдХреБрдЫ) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рддрдереНрдп
- JSON / XML / рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ (рдЬреИрдХреНрд╕рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░, JAXB рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░): рдпрд╣ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдкреНрд░рд╛рд░реВрдк рд╕рдмрд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ
- рдШреЛрд╖рдгрд╛рддреНрдордХ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдПрдордбреАрд╕реА рдСрдЯреЛ-рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реНрдкреЗрд▓ (рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд▓реИрдВрдЧреНрд╡реЗрдЬ) рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ
- рдПрди рд▓реЙрдЧрд░реНрд╕ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдПрдХреНрд▓реЗрдпрд░ рдХреА рд╕рдордЭ рдореЗрдВ "рд▓рдХрдбрд╝рд╣рд╛рд░рд╛" рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдмреАрди рд╣реИ рдЬреЛ
EclairLogger
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рдЖрдк рдЙрд╕ EclairLogger
рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдирд╛рдо рд╕реЗ, рдЙрдкрдирд╛рдо рд╕реЗ рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред - рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХреНрд▓реЗрдпрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╕рднреА рдЖрдЧрд╛рдореА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде), рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐
private
рдкрджреНрдзрддрд┐ рдкрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред - рдореЗрдЯрд╛ рдПрдиреЛрдЯреЗрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЙрдиреНрд╣реЗрдВ рдХрд╣рддрд╛ рд╣реИ): рдЖрдк рдХреБрдЫ рдореВрд▓ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп "рд╕рдВрд╡реЗрджрдирд╢реАрд▓" рдбреЗрдЯрд╛ рдХреЛ рдореБрдЦреМрдЯрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо: рдПрдХреНрд╕рдкреАрде-рд╢реАрд▓реНрдбрд┐рдВрдЧ рдПрдХреНрд╕рдПрдордПрд▓ рд╕реЗ рдмрд╛рд╣рд░
- "рдореИрдиреБрдЕрд▓" рдореЛрдб рдореЗрдВ рдПрдХ рд▓реЙрдЧ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрдирд╡реЛрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░
Supplier
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЛ "рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд" рдХрд░рддрд╛ рд╣реИ: рддрд░реНрдХреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реБрдП "рдЖрд▓рд╕реА"
рдПрдХреНрд▓реЗрдпрд░ рдХреЛ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдкрд╛рдЪреЗ 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд
рдЧрд┐рдЯрд╣рдм рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИ ред
рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ 8, рдорд╛рд╡реЗрди рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ 1.5+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рд╡реЗрди рд╕реЗрдВрдЯреНрд░рд▓ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ:
<dependency> <groupId>ru.tinkoff</groupId> <artifactId>eclair-spring-boot-starter</artifactId> <version>0.8.3</version> </dependency>
рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ
EclairLogger
рдХрд╛ рдПрдХ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрд┐рдд рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдП рдЧрдП рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдБ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЙрдЧред
рдЙрджрд╛рд╣рд░рдг рдЦрдВрдб рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХреА рдкрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рдкреВрд░рд╛ рд╕реЗрдЯ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд░рд▓рддрдо рдЙрджрд╛рд╣рд░рдг
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ DEBUG рд╣реИред
@Log void simple() { }
рдЕрдЧрд░ рд╕реНрддрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ | ... рдлрд┐рд░ рд▓реЙрдЧ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ |
---|
TRACE DEBUG | DEBUG [] rteeExample.simple > DEBUG [] rteeExample.simple < |
INFO WARN ERROR | - |
рд▓реЙрдЧ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рд▓реЙрдЧ рд╡рд┐рд╡рд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрдо рдЙрдкрд▓рдмреНрдз рд╕реНрддрд░ (рдпрд╛рдиреА, TRACE рдХреЗ рдХрд░реАрдм), рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧред
@Log(INFO) boolean verbose(String s, Integer i, Double d) { return false; }
рд╕реНрддрд░ | рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ |
---|
TRACE DEBUG | INFO [] rteeExample.verbose > s="s", i=4, d=5.6 INFO [] rteeExample.verbose < false |
INFO | INFO [] rteeExample.verbose > INFO [] rteeExample.verbose < |
WARN ERROR | - |
рдлрд╝рд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдЕрдкрд╡рд╛рдж рд▓реЙрдЧрд┐рдВрдЧ
рд▓реЙрдЧ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЪрдпрдирд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдЧрд┐рд░рд╡реА рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
NullPointerException
рдХреЛ WARN рд╕реНрддрд░ рдкрд░ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, ERROR рд╕реНрддрд░ рдкрд░
Exception
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ), рдФрд░
Error
рдмрд┐рд▓реНрдХреБрд▓ рднреА рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реЛрдЧреА (рдХреНрдпреЛрдВрдХрд┐
Error
рдкрд╣рд▓реЗ рдПрдиреЛрдЯреЗрд╢рди
@Log.error
рдХреЗ рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреВрд╕рд░реА рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред
@Log.error(level = WARN, ofType = {NullPointerException.class, IndexOutOfBoundsException.class}) @Log.error(exclude = Error.class) void filterErrors(Throwable throwable) throws Throwable { throw throwable; }
рд╕реНрддрд░ | рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ |
---|
TRACE DEBUG INFO WARN | WARN [] rteeExample.filterErrors ! java.lang.NullPointerException java.lang.NullPointerException: null at rteeExampleTest.filterErrors(ExampleTest.java:0) .. ERROR [] rteeExample.filterErrors ! java.lang.Exception java.lang.Exception: null at rteeExampleTest.filterErrors(ExampleTest.java:0) ..
|
ERROR | ERROR [] rteeExample.filterErrors ! java.lang.Exception java.lang.Exception: null at rteeExampleTest.filterErrors(ExampleTest.java:0) .. |
рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ
@Log.in(INFO) void parameterLevels(@Log(INFO) Double d, @Log(DEBUG) String s, @Log(TRACE) Integer i) { }
рд╕реНрддрд░ | рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ |
---|
TRACE | INFO [] rteeExample.parameterLevels > d=9.4, s="v", i=7 |
DEBUG | INFO [] rteeExample.parameterLevels > d=9.4, s="v" |
INFO | INFO [] rteeExample.parameterLevels > 9.4 |
WARN ERROR | - |
рдкреНрд░рд┐рдВрдЯрдЖрдЙрдЯ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ
рдкреНрд░рд┐рдВрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ "рдкреНрд░рд┐рдВрдЯрд░" рдХреЛ рдкреНрд░реА- рдФрд░ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
maskJaxb2Printer
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ XPath рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
"//s"
рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ
"********"
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рд╕реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрд╕реА рд╕рдордп,
jacksonPrinter
Dto
"рдЬреИрд╕рд╛ рд╣реИ" рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ред
@Log.out(printer = "maskJaxb2Printer") Dto printers(@Log(printer = "maskJaxb2Printer") Dto xml, @Log(printer = "jacksonPrinter") Dto json, Integer i) { return xml; }
рд╕реНрддрд░ | рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ |
---|
TRACE DEBUG | DEBUG [] rteeExample.printers > xml=<dto><i>5</i><s>********</s></dto>, json={"i":5,"s":"password"} DEBUG [] rteeExample.printers < <dto><i>5</i><s>********</s></dto> |
INFO WARN ERROR | - |
рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрдИ рд▓реЛрдЧ
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд▓реЙрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдзрд┐ рдХреЛ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ (
@Primary
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреЛрдЯреЗрдЯ) рдФрд░ рдСрдбрд▓реЙрдЧрдЧрд░
auditLogger
ред рдЖрдк рдХрдИ рд▓реЙрдЧрд░реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рд▓реЙрдЧ рдЗрд╡реЗрдВрдЯ рдХреЛ рди рдХреЗрд╡рд▓ рд╕реНрддрд░ (TRACE - ERROR) рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рднреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ slf4j рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдЧ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдФрд░
auditLogger
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рднрдВрдбрд╛рд░рдг (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рдлреНрдХрд╛ рдореЗрдВ) рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред
@Log @Log(logger = "auditLogger") void twoLoggers() { }
рдПрдордбреАрд╕реА рдкреНрд░рдмрдВрдзрди
рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП MDCs, рдПрдиреЛрдЯреЗрдЯ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдПрдордбреАрд╕реА рд░рд┐рдХреЙрд░реНрдб рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрдкреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ: рд╕реНрдерд┐рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рд░ рд╕реНрдереИрддрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
1 + 1
рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реБрдП,
jacksonPrinter
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ,
static
рд╡рд┐рдзрд┐ рдХреЛ
randomUUID
ред
global = true
рд╕рд╛рде MDCs
global = true
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдирд╣реАрдВ рд╣рдЯрд╛рдИ рдЬрд╛рддреА рд╣реИ: рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЙрдЧ рдХреЗ рдЕрдВрдд рддрдХ MDC рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рд░рд┐рдХреЙрд░реНрдб рд╢реЗрд╖ рд╣реИред
@Log void outer() { self.mdc(); } @Mdc(key = "static", value = "string") @Mdc(key = "sum", value = "1 + 1", global = true) @Mdc(key = "beanReference", value = "@jacksonPrinter.print(new ru.tinkoff.eclair.example.Dto())") @Mdc(key = "staticMethod", value = "T(java.util.UUID).randomUUID()") @Log void mdc() { self.inner(); } @Log.in void inner() { }
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:
DEBUG [] rteeExample.outer >
DEBUG [beanReference={"i":0,"s":null}, sum=2, static=string, staticMethod=01234567-89ab-cdef-ghij-klmnopqrstuv] rteeExample.mdc >
DEBUG [beanReference={"i":0,"s":null}, sum=2, static=string, staticMethod=01234567-89ab-cdef-ghij-klmnopqrstuv] rteeExample.inner >
DEBUG [beanReference={"i":0,"s":null}, sum=2, static=string, staticMethod=01234567-89ab-cdef-ghij-klmnopqrstuv] rteeExample.mdc <
DEBUG [sum=2] rteeExample.outer <
рдкреИрд░рд╛рдореАрдЯрд░ MDC рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░
рдпрджрд┐ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдордбреАрд╕реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдиреЛрдЯреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рдВрджрд░реНрдн рдХреЗ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣рд╛рдВ
"s"
рдЯрд╛рдЗрдк
String
рд╕рд╛рде рд╡рд░реНрдЧ
Dto
рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИред
@Log.in void mdcByArgument(@Mdc(key = "dto", value = "#this") @Mdc(key = "length", value = "s.length()") Dto dto) { }
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:
DEBUG [length=8, dto=Dto{i=12, s='password'}] rteeExample.mdcByArgument > dto=Dto{i=12, s='password'}
рдореИрдиреБрдЕрд▓ рд▓реЙрдЧрд┐рдВрдЧ
"рдореИрдиреБрдЕрд▓" рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣
ManualLogger
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
Supplier
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ "рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд" рд╣реЛрдЧрд╛ред
@Autowired private ManualLogger logger; @Log void manual() { logger.info("Eager logging: {}", Math.PI); logger.debug("Lazy logging: {}", (Supplier) () -> Math.PI); }
рд╕реНрддрд░ | рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ |
---|
TRACE DEBUG | DEBUG [] rteeExample.manual > INFO [] rteeExample.manual - Eager logging: 3.141592653589793 DEBUG [] rteeExample.manual - Lazy logging: 3.141592653589793 DEBUG [] rteeExample.manual < |
INFO | INFO [] rteeExample.manual - Eager logging: 3.141592653589793 |
WARN ERROR | - |
рдПрдХреНрд▓реЗрдпрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдПрдХреНрд▓реЗрдпрд░ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓реЙрдЧ рдХреЛ рдХрд╣рд╛рдВ рдФрд░ рдХрд┐рддрдиреА рджреЗрд░ рддрдХ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред рдПрдХреНрд▓реЗрдпрд░ рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдХреНрд▓реЗрдпрд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕реНрдЯреЛрд░реЗрдЬ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред
EclairLogger
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХ рд▓реЙрдЧ рдХреЛ рд▓реЙрдЧрдмреИрдХ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
@Bean public EclairLogger eclairLogger() { LoggerFacadeFactory factory = loggerName -> { ch.qos.logback.classic.LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); ch.qos.logback.classic.Logger logger = context.getLogger(loggerName);
рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреЗ "рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ" рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдПрдХреНрд▓реЗрдпрд░ рд╡рд╕рдВрдд рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреНрд░реЙрдХреНрд╕реА рддрдВрддреНрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
- рдЕрдЧрд▓реЗ рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдЧрдП рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдирдЧрдгреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд┐рд░ рдЬрд╛рдПрдЧреАред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдпреЗ рдиреБрдХрд╕рд╛рди рдмрд╣реБрдд рдХрдо рд╣реИрдВред рдпрджрд┐ рдкреНрд░рд╢реНрди рд▓реАрдб рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдЙрдарддрд╛ рд╣реИ, рддреЛ рдХрдИ рдкреНрд░рднрд╛рд╡реА рдЕрдиреБрдХреВрд▓рди рдЙрдкрд╛рдп рд╣реИрдВред рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдкреНрд░рд╡реЗрд╢ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдПрдХ рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдирд╣реАрдВред
- рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ "рдмреНрд▓реЛрдЯ" рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХред рдпрджрд┐ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░реЙрдХреНрд╕рд┐рд╕ рдХреЗ рд▓рдВрдмреЗ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрджреНрд░рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдореАрдкрд╡рд░реНрддреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛ред
-
рд╣рд░ рд╡рд░реНрдЧ рдФрд░ рд╣рд░ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :
private
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рдмреАрди рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНтАНрд╡рдпрдВ рдХреА рдЖрд╡рд╢реНтАНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЖрдк рдРрд╕реА рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ рдЫрджреНрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рд╕реЗрдо рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐ред
рдЕрдВрдд рдореЗрдВ
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдХрд░рдг, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреА рддрд░рд╣, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗрд╡рд▓ рд╕рддрд╣реА рд░реВрдк рд╕реЗ рдЙрд╕ рдкрдХреНрд╖ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЖрд▓реЛрдЪрдирд╛, рд╡рд┐рдЪрд╛рд░, рд╕рдВрдХреЗрдд, рд▓рд┐рдВрдХ - рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдЖрдкрдХреА рдХрд┐рд╕реА рднреА рднрд╛рдЧреАрджрд╛рд░реА рдХрд╛ рдЧрд░реНрдордЬреЛрд╢реА рд╕реЗ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ! рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд▓реЗрдпрд░ рдХреЛ рдЙрдкрдпреЛрдЧреА рдкрд╛рддреЗ рд╣реИрдВред