рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!


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


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рддрдХрдиреАрдХ рдХреЗ рдорд╣рддреНрд╡ рдФрд░ рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдорд╛рдирдХ рдЧрд▓рддрд┐рдпрд╛рдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ .Net рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рд╕реЗ рдЫреЛрдЯреЗ рдЖрд╡реЗрд╖рдг рдХрд┐рдП, рдмрд╕ рдПрдХ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


рдЖрд╡рдВрдЯрди (рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди)


рд╕рдмрд╕реЗ рдЖрдо рдЧрд▓рддреА (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХреЙрд▓ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдкрд╛рд╕ log.Debug(...) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рд╕ рдЫреЛрдЯреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рд▓рд╛рдкрд░рд╡рд╛рд╣реА рд╣реИред


рддреЛ, рд╣рдорд╛рд░реЗ .Net рдореЗрдВ рдорд╛рдирдХ рдХреЛрдб:


 private static readonly ILog Log4NetLog = LogManager.GetLogger(typeof(Program)); private static readonly Logger NLogLog = NLog.LogManager.GetCurrentClassLogger(); private static void PublishData(int id, string name, EMail email, decimal amount) { Log4NetLog.Debug($"Id={id}"); // 1 Log4NetLog.DebugFormat("Id={0}", id); // 2 Log4NetLog.Debug($"Id={id}; name={name}; email={email.Normalize()}; amount={amount}"); // 3 Log4NetLog.DebugFormat("Id={0}; name={1}; email={2}; amount={3}", id, name, email.Normalize(), amount); // 4 NLogLog.Debug($"Id={id}"); // 5 NLogLog.Debug("Id={0}", id); // 6 NLogLog.Debug($"Id={id}; name={name}; email={email.Normalize()}; amount={amount}"); // 7 NLogLog.Debug("Id={0}; name={1}; email={2}; amount={3}", id, name, email.Normalize(), amount); // 8 } 

рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ log4net рдФрд░ NLog рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рджреЗрдЦрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред


рддреЛ рд╕рд╡рд╛рд▓ рдпреЗ рд╣реИрдВ:


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

рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░: рдореЗрдореЛрд░реА рдХреЗрд╡рд▓ "6" рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рдФрд░ рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░: рдЗрд╕реЗ рдкрдХрдбрд╝рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдЕрдХреНрд╕рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдлреИрд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ .Net рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЕрдХреНрд╕рд░ рд╕рдорд╛рди рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ GC рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛ред


рддреЛ рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ:


 Log4NetLog.Debug($"Id={id}"); // 1 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛:


 var temp = string.Format("Id={0}", id); // <--       Log4NetLog.Debug(temp); 

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


рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ:


 Log4NetLog.DebugFormat("Id={0}", id); 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рднреА рдпрд╣рд╛рдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╣реЛрдЧреАред рдореИрдВ рдЖрдкрдХреЛ рдбрд┐рдмрдЧрдлреЙрд░реНрдо рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ:


 void DebugFormat(string format, object arg0) 

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


рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рд▓реЛрдб рдФрд░ рд╕рд░рд▓ рд╣реИ:


 Log4NetLog.Debug($"Id={id}; name={name}; email={email.Normalize()}; amount={amount}"); // 3 

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЧрдП рдереЗ рдХрд┐ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЗрди рдвреЗрд░ рдкрд░ рдЦрдбрд╝реА рд╣реЛрдЧреА рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЗрд╕рд▓рд┐рдП, рддреБрд░рдВрдд рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓ рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд▓рдЧрддреА рд╣реИ:


 Log4NetLog.DebugFormat("Id={0}; name={1}; email={2}; amount={3}", id, name, email.Normalize(), amount); // 4 

рдФрд░ рдРрд╕рд╛ рд╣реИ, рддрдерд╛рдкрд┐, рдЖрдЗрдП рдЧрдгрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:


  • email.Normalize() рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк (рдпрд╛ рд╕реНрдЯреИрдХ рдкрд░ -) рдореЗрдВ рдЖрдмрдВрдЯрд┐рдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╕реЗ рдвреЗрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛)
  • id рдПрдХ рдвреЗрд░ рдореЗрдВ рдЬрд╛рдПрдЧреА, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдорд╛рдирд╛ рдерд╛ред
  • Log4net рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рдВрдмреЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ: void DebugFormat(string format, params object[] args) ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, .Net рдЗрд╕реЗ DebugFormat рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдкрд░ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдЧрд╛ред

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


рдпрд╣ рд░реЗрдЦрд╛ рдвреЗрд░ рдкрд░ рд╡рд╕реНрддреБ рдХреЗ рдЖрд╡рдВрдЯрди рдХреЛ рдЙрдХрд╕рд╛рдПрдЧреА:


 NLogLog.Debug($"Id={id}"); 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдХрдореА рдирд╣реАрдВ рд╣реИ:


 NLogLog.Debug("Id={0}", id); 

рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдПрдирдПрд▓рдУрдЬреА рдХреЗ рдкрд╛рд╕ рдЗрдирдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ: void Debug(string message, int argument) ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдПрдХ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ void Debug<TArgument>([Localizable(false)] string message, TArgument argument) ред рдФрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдореБрдХреНрдХреЗрдмрд╛рдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ JIT рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдмреЗрд╢рдХ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ: рдХреЛрдИ рдореБрдХреНрдХреЗрдмрд╛рдЬреА рдирд╣реАрдВ рд╣реЛрдЧреА)ред


рдореИрдВ рдмрдбрд╝реА рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рд╕реАрдзреЗ рдЬрд╛рдКрдВрдЧрд╛:


 NLogLog.Debug("Id={0}; name={1}; email={2}; amount={3}", id, name, email.Normalize(), amount); 

рддрд╛рдЬреНрдЬреБрдм рдХреА рдмрд╛рдд рд╣реИ, NLog рдиреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЗрдиреЗрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХреА, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: void Debug([Localizable(false)] string message, params object[] args) ред рдФрд░ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдЧрд╛ред


рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕реБрдзрд╛рд░


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


рдирд┐рд╖реНрдХрд░реНрд╖ 2: рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ NLog рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрд╣ рдЬреЗрдиреЗрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ:


 if (NLogLog.IsDebugEnabled) { NLogLog.Debug($"Id={id}; name={name}; email={email.Normalize()}; amount={amount}"); } 

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


рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг


.Net рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЙрдЧрд░ рдХреЗ рдХрд╛рдо рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдкрддрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЙрд▓рд▓рд┐рди рдореЗрдВ рдХреЙрд▓ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рджреВрдВрдЧрд╛ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╡рд╕реНрддреБрддрдГ рднрд╛рд╖рд╛ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рдЗрдирд▓рд╛рдЗрди рд╡рд┐рдзрд┐рдпрд╛рдБ ред рддреЛ, рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХреЛрдб:


 class SomeService{ private companion object : KLogging() fun publishData(id: Int){ logger.debug { "Identity: $id" } } } 

рдФрд░ рдЗрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 class SomeService{ private companion object : KLogging() fun publishData(id: Int){ if(logger.isDebugEnabled){ try{ val message = "Identity: $id" logger.debug(message) }catch (e: Exception){ /*handle*/ } } } } 

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


 class SomeService{ private companion object : KLogging() fun publishData(id: Int){ logger.debug { val idList = getIdList() "Identity: $idList" } } } 

рдпрд╣рд╛рдВ getIdList рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдФрд░ рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 class SomeService{ private companion object : KLogging() fun publishData(id: Int){ if(logger.isDebugEnabled){ try{ val idList = getIdList() val message = "Identity: $idList" logger.debug(message) }catch (){ /*handle*/ } } logger.debug { "Identity: $id" } } } 

рдмрдбрд╝реА рд╡рд╕реНрддреБ ==> рдмрдбрд╝реА рд╡рд╕реНрддреБ рдвреЗрд░


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ .рдиреЗрдЯ / рдЬреЗрд╡реАрдПрдо рдореЗрдВ "рд▓рд╛рд░реНрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдЕрдХреНрд╕рд░ рдирд╡реАрдирддрдо рдкреАрдврд╝реА рдореЗрдВ рддреБрд░рдВрдд рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ (рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╛рдЬрд╛рд╣реА рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдореЗрдореЛрд░реА рдкреИрда рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрддрд░)ред


рд╡рд╛рдкрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 NLogLog.Debug($"Id={id}"); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдЕрдЧрд░ id рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ ToString рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ LOH рдЪреЗрд╣рд░реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ:


  • рдЦреБрдж рдХреЛ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
  • $"Id={id}" рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░рдирд╛
  • рдФрд░ рдЕрдЧрд░ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ (рдФрд░ рдПрд▓рдУрдПрдЪ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реИ), рддреЛ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред

рдФрд░ рдпрд╣рд╛рдВ рдЖрдк рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  • рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ ToString рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NLog рдореЗрдВ рдПрдХ JsonLayout рд╣реИ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдмрд╕ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯреНрд░реАрдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░) рдХреЛ рддреБрд░рдВрдд рд╕реАрд░рд┐рдпрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рдлрд╛рдЗрд▓ рдХреЛ рдЦреБрдж рд▓рд┐рдЦреЗрдВред рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдореИрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓ рдПрдирдПрд▓рдУрдЬреА рдХреЛ рд▓рд┐рдЦреА рдЬрд╛рдПрдЧреА: var filePath = NLog.LogManager.Configuration.AllTargets.OfType<FileTarget>().First().FileName.Render(LogEventInfo.CreateNullEvent()) ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ FileTarget рдХреЛ рд▓реМрдЯрд╛ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рд░ рдХреЛрдИ рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдЖрдк рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕реАрдзреЗ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЕрдкрдиреА рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдбрдВрдк рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ log4j2 (рджреВрд╕рд░рд╛ рд╡рд╛рд▓рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ), рддреЛ рдЖрдк StringBuilderFormattable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ (рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдвреЗрд░ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ)ред

 public interface StringBuilderFormattable { /** * Writes a text representation of this object into the specified {@code StringBuilder}, ideally without allocating * temporary objects. * * @param buffer the StringBuilder to write into */ void formatTo(StringBuilder buffer); } 

рд╕рд┐рдВрдХреНрд░реЛрдирд╕рд┐рдЯреА (рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ)


рдПрдХ рдмрд╛рд░, рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рджреМрд░рд╛рди, рд▓реЙрдЧрд┐рдВрдЧ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдзреЗ рдпреВрдЖрдИ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдХрд╛ рд╣рд┐рд╕рд╛рдм рдерд╛ред рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдЖрдзрд╛ рд╕рдордп logger.Debug рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рд╣рдордиреЗ log4net рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХреЗрд╡рд▓ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред


рдпрд╣рд╛рдБ рд╕реЗ рдореИрдВрдиреЗ рдирд┐рдпрдо 1 рдХреЛ рдШрдЯрд╛ рджрд┐рдпрд╛: рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЛ рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдирд┐рд╢рд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЛрдб рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - NLog рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП - рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ nlog рдЯреИрдЧ (рдпрд╣ рдореБрдЦреНрдп рд╣реИ) рдореЗрдВ async=true nlog ред рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд╣рддрд╛ рд╣реИ:


 <targets async="true"> ... your targets go here ... </targets> 

рдпрджрд┐ рдЖрдк log4net рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╛ рддреЛ рдЗрд╕реЗ NLog рдореЗрдВ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдВ, рдпрд╛ AsyncFileAppender рдмрдирд╛рдПрдВред


рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП: рд▓реЙрдЧрдмреИрдХ рдФрд░ рд▓реЙрдЧ 4 рдЬреЗ 2 рджреЛрдиреЛрдВ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдПрдХ рддреБрд▓рдирд╛ рд╣реИ:


рдЪрд┐рддреНрд░


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рд╕рдм рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ - рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдиреЗ Main рдереНрд░реЗрдб рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо Application.Exit рдпрд╛ Environment.FailFast рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ Flush рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдЖрдк рдпреБрджреНрдз рд╕рд░реНрд╡рд░ рдкрд░ рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рдЫреВрдЯ рдЬрд╛рдПрдЧреАред


рдирд┐рд╖реНрдХрд░реНрд╖


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


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

Source: https://habr.com/ru/post/hi458436/


All Articles