рд╕рдВрджреЗрд╢ рдЖрд╕рд╛рди рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде ++



рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЙрдкрдХрд░рдг рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, C ++ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдирдЧрд┐рдирдд рддреИрдпрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (Log4cplus, Apache log4cxx, Boost.Log, рдЖрджрд┐) рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ Easylogging ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рд╕рднреА рдХреЛрдб рдПрдХ рд╣реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╕ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИред



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



рдЖрдЗрдП рдПрдХ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдИрдЬреАрд▓реЙрдЧрд┐рдВрдЧ ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ:



#include "easylogging++.h" _INITIALIZE_EASYLOGGINGPP int main(int argv, char* argc[]) { LOG(INFO) << " Habrahabr"; return 0; }
      
      





рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдХрд┐рд╕реА рднреА рд▓рд┐рдмрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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



рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди:





рдХреНрдпреЛрдВ:



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





рдкреНрд░рд╛рд░реВрдк рд╕реЗрдЯрд┐рдВрдЧ



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

 11/06/2014 11:23:29,218 INFO [default] Simple info message 11/06/2014 11:23:29,218 ERROR [default] Simple error message 11/06/2014 11:23:29,218 WARN [default] This is just a warning
      
      





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

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

рдХреНрд╖реЗрддреНрд░ рдЕрдиреБрдХреВрд▓рди
 el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%level %datetime{%H:%m:%s} (%func): %msg"); LOG(INFO) << "  ";
      
      





рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 INFO 11:33:58 (int main(int, char**)):   
      
      







рдкреНрд░рд╛рд░реВрдк рд╡рд┐рд╡рд░рдг рдореЗрдВ рдорд╛рдирдХ рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░, рджрд┐рдирд╛рдВрдХ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо (рд╕реАрдкреАрдкреА), рдЖрдк рд▓реЙрдЧ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

рдЦреБрдж рдХреЗ рдЦреЗрдд
 const char* getMode(void) { switch(mode) { case 1: return "Service"; default: return "App"; } return ""; // just in case } int main(int argv, char* argc[]) { el::Helpers::installCustomFormatSpecifier(el::CustomFormatSpecifier("%mode", getMode)); el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%level %mode: %msg"); LOG(INFO) << "  "; return 0; }
      
      







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

рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░реЗрдВ
 int main(int argv, char* argc[]) { /*     (   ) */ el::Loggers::reconfigureAllLoggers(el::ConfigurationType::ToStandardOutput, "true"); /*     */ el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput); LOG(INFO) << " "; LOG(ERROR) << "   "; LOG(WARNING) << "  "; return 0; }
      
      





рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:





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

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрдврд╝реЗрдВ
 int main(int argv, char* argc[]) { _START_EASYLOGGINGPP(argc, argv); }
      
      







рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░



рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:



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

рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░
 /*    */ class Dummy { public: Dummy(int i, std::string s) : m_Int(i), m_String(s){} int getInt() const{return m_Int;} std::string const& getString() const {return m_String;} private: int m_Int; std::string m_String; }; /*    ,     operator<< */ inline MAKE_LOGGABLE(Dummy, obj, os) { /*        */ os << "{i:"<<obj.getInt()<<", s:"<<obj.getString()<<"}"; return os; } int main(void) { Dummy object(1, "Habrahabr"); LOG(INFO) << "Dummy: " << object; return 0; } /* : 11:03:27 INFO Dummy: {i:1, s:Habrahabr} */
      
      







рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░реЗрдВ



рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреА рдФрд░ рдЗрд╕рдореЗрдВ рдкрде рд╣реЛрдЧрд╛ ../logs/myeasylog.logред

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

рдореИрдиреБрдЕрд▓ рд╕реНрд╡рд┐рдЪ
 int main(void) { LOG(INFO) << "     "; el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Filename, "logs/20140205.log"); LOG(INFO) << "    "; return 0; }
      
      







рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЙрдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА: myeasylog.log рдФрд░ 20140205.logред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ "рдореИрдиреБрдЕрд▓" рдореЛрдб рдореЗрдВ рджрд┐рдП рдЧрдП рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЙрдЧ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреИрдирд┐рдХ рд▓реЙрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)



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

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 /*   .     *    timestamp.*/ int log_sequence = 1; /* Callback       fname  */ void LogsRollout(const char* fname, size_t fsize) { /*        ( ) */ string fileName = fname; size_t position = fileName.find("."); string extractName = (string::npos == position)? fileName : fileName.substr(0, position); extractName = extractName + to_string(log_sequence++) + ".log"; /*     ,   */ int status = rename(fname, extractName.c_str()); if(status) { /*    */ } } int main(void) { /*         */ el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck); /*        1 */ el::Loggers::reconfigureAllLoggers(el::ConfigurationType::MaxLogFileSize, "1024"); /*  callback    */ el::Helpers::installPreRollOutCallback(LogsRollout); /*    */ for(int i=0; i<1024; i++) { LOG(INFO) << "Message #"<< i+1; } return 0; }
      
      







рд╕рд╢рд░реНрдд рдФрд░ рдЖрд╡рдзрд┐рдХ рдЬрд╛рд░реА рдХрд░рдирд╛



рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдореИрдХреНрд░реЛ LOG_IF рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд▓реЙрдЧ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрдд рдкреВрд░реА рдХреА рдЬрд╛рддреА рд╣реИ:

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 LOG_IF(true, INFO) << " "; LOG_IF(false, WARNING) << "  ";
      
      







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



рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рдХреА рдЬрд╛рдБрдЪ рдФрд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ



рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓реЙрдЧ рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдВ рдХреА рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ: CHECK, CHECK_EQ, CHECK_NE, CHECK_NOTNULL , рдЖрджрд┐ред рдпреЗ рдореИрдХреНрд░реЛрдЬрд╝ рдореБрдЦрд░ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рдеред

рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 CHECK(true) << "  "; CHECK_LE(2, 1) << "2 < 1 ???"; CHECK_STREQ(argv[3], "1") << "    1";
      
      





рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ:

 07:12:51,375 FATAL Check failed: [2 <= 1] 2 < 1 ??? 07:12:51,375 WARN Aborting application. Reason: Fatal log at [/home/borg/Temp/App/main.cpp:34] Aborted
      
      







рдпрджрд┐ рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрджрд┐ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рдореЗрдВ FATAL рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред



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

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 #include "easylogging++.h" _INITIALIZE_EASYLOGGINGPP void CustomCrashHandler(int signal) { LOG(ERROR) << " !!"; /*     */ el::Helpers::crashAbort(signal); } int main(int argv, char* argc[]) { /*    */ el::Helpers::setCrashHandler(CustomCrashHandler); /*   0 */ int a = 0; a = 1/a; return 0; }
      
      





рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 17:46:53,074 ERROR  !! Aborted
      
      







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



рдИрдЬрд╝реАрд▓реЙрдЧрд┐рдВрдЧ ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреВрд░рд╛ рд╕реЗрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдРрд╕реЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ред

рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдлрд╛рдпрджреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЗрд╕рдХреА рдХреЙрдореНрдкреИрдХреНрдЯрдиреЗрд╕, рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдоред

рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ C ++ 11 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рд╛рдпрдж, рд▓реЗрдЦрдХ "рд╕рд╛рдзрд╛рд░рдг" C ++ рдХреЗ рд╕рд╛рде рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред



All Articles