log_sys.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "stdafx.h"
  2. # include "log_sys.h"
  3. #include "minwinbase.h"
  4. string currTime() {
  5. // 获取当前时间,并规范表示
  6. char tmp[64];
  7. time_t ptime;
  8. time(&ptime); // time_t time (time_t* timer);
  9. strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S, ", localtime(&ptime));
  10. //SYSTEMTIME st;
  11. //GetLocalTime(&st);
  12. //char tmp[64] = { 0 };
  13. //sprintf_s(tmp, "[%04d %02d %02d] [%02d:%02d:%02d.%3d]", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  14. //return tmp;
  15. }
  16. Logger::Logger(){
  17. // 默认构造函数
  18. this->target = terminal;
  19. this->level = debug;
  20. cout << "[WELCOME] " << __FILE__ << " " << currTime() << " : " << "=== Start logging ===" << endl;
  21. }
  22. Logger::Logger(log_target target, log_level level, string path){
  23. this->target = target;
  24. this->path = path;
  25. this->level = level;
  26. string tmp = ""; // 双引号下的常量不能直接相加,所以用一个string类型做转换
  27. string welcome_dialog = tmp + "[Welcome] " + __FILE__ + " " + currTime() + " : " + "=== Start logging ===\n";
  28. if (target != terminal){
  29. this->outfile.open(path, ios::out | ios::app); // 打开输出文件
  30. this->outfile << welcome_dialog;
  31. }
  32. if (target != file){
  33. // 如果日志对象不是仅文件
  34. cout << welcome_dialog;
  35. }
  36. }
  37. void Logger::output(string text, log_level act_level){
  38. string prefix;
  39. if(act_level == debug) prefix = "[DEBUG] ";
  40. else if(act_level == info) prefix = "[INFO] ";
  41. else if(act_level == warning) prefix = "[WARNING] ";
  42. else if(act_level == error) prefix = "[ERROR] ";
  43. else prefix = "";
  44. prefix += __FILE__;
  45. prefix += " ";
  46. string output_content = prefix + currTime() + " : " + text + "\n";
  47. if(this->level <= act_level && this->target != file){
  48. // 当前等级设定的等级才会显示在终端,且不能是只文件模式
  49. cout << output_content;
  50. }
  51. if(this->target != terminal)
  52. outfile << output_content;
  53. }
  54. void Logger::DEBUG(string text){
  55. this->output(text, debug);
  56. }
  57. void Logger::INFO(string text){
  58. this->output(text, info);
  59. }
  60. void Logger::WARNING(string text){
  61. this->output(text, warning);
  62. }
  63. //void Logger::ERROR(string text){
  64. // this->output(text, error);
  65. //}
  66. void logger_test(){
  67. Logger logger(Logger::file_and_terminal, Logger::debug, "result.log");
  68. logger.DEBUG("What happend?");
  69. logger.INFO("This is good.");
  70. logger.WARNING("Yes...");
  71. //logger.ERROR("IO Error!");
  72. }