IT评测·应用市场-qidao123.com

标题: c++ 简单的日志类 CCLog [打印本页]

作者: 天空闲话    时间: 2024-6-15 02:24
标题: c++ 简单的日志类 CCLog
此日志类,简单地实现了向标准输出控制台和文件输出日志信息的功能,并能在这两者之间举行切换输出,满意输出日志的不同需求。
代码如下:


  1. /*
  2. *  CCLog.h
  3. *  c++_common_codes
  4. *
  5. *  Created by xichen on 12-1-12.
  6. *  Copyright 2012 cc_team. All rights reserved.
  7. *
  8. */
  9. #ifndef CC_LOG_H
  10. #define CC_LOG_H
  11. #include "ccString.h"
  12. #include <cstdio>
  13. typedef enum _LOG_TYPE
  14. {
  15.     LOG_TYPE_CONSOLE,
  16.     LOG_TYPE_FILE,
  17.     LOG_TYPE_MAX
  18. }LOG_TYPE;
  19. class CCLog
  20. {
  21. public:
  22.     CCLog(const char * fileName = NULL, const char * mode = "at+");    // by default, open file by "at+" mode
  23.     ~CCLog();
  24. public:
  25.     unsigned        write(const CCString & str);
  26.     unsigned        writeEndl();
  27.     void        clearAllData();            // if a file is opened, all contents of the file will be cleared, the file will be opened a second time.
  28. public:
  29.     void        setWriteToConsole();
  30.     void        setWriteToFile();
  31. public:
  32.     LOG_TYPE        getLogType() const { return _logType; }
  33.     CCString        getLogFileName() const { return _fileName; }
  34. private:   
  35.     void        clearConsole()            // not coding ok
  36.     {
  37.        
  38.     }
  39. private:
  40.     CCLog(const CCLog & log);
  41.     CCLog & operator=(const CCLog & log);
  42. private:
  43.     FILE        *_file;
  44.     FILE        *_backupFile;
  45.     CCString        _fileName;
  46.     LOG_TYPE        _logType;
  47. };
  48. #endif
复制代码

  1. /*
  2. *  CCLog.cpp
  3. *  c++_common_codes
  4. *
  5. *  Created by xichen on 12-1-12.
  6. *  Copyright 2012 cc_team. All rights reserved.
  7. *
  8. */
  9. #include "ccLog.h"
  10. CCLog::CCLog( const char * fileName /*= NULL*/, const char * mode /*= "at+"*/ )
  11. {
  12.     if(fileName == NULL)
  13.     {
  14.         _file = _backupFile = NULL;
  15.         _logType = LOG_TYPE_CONSOLE;
  16.         return;
  17.     }
  18.     _logType = LOG_TYPE_FILE;
  19.     _file = fopen(fileName, mode);
  20.     _backupFile = _file;
  21.     if(_file == NULL)
  22.         std::cerr << "Open file error" << std::endl;
  23.     else
  24.         _fileName = CCString(fileName);
  25. }
  26. CCLog::~CCLog()
  27. {
  28.     if(_logType == LOG_TYPE_FILE)
  29.     {
  30.         if(_file != NULL)
  31.         {
  32.             fclose(_file);
  33.             return;
  34.         }
  35.         if(_backupFile != NULL)
  36.         {
  37.             fclose(_backupFile);
  38.         }
  39.     }
  40. }
  41. unsigned CCLog::write( const CCString & str )
  42. {
  43.     if(_logType == LOG_TYPE_CONSOLE)
  44.     {
  45.         std::cout << str;
  46.         return str.length();        // it's not accurate. ????
  47.     }
  48.     fseek(_file, 0, SEEK_END);
  49.     return fwrite(str.c_str(), str.length(), 1, _file);
  50. }
  51. unsigned CCLog::writeEndl()
  52. {
  53.     return write(CCString("\n"));
  54. }
  55. void CCLog::clearAllData()
  56. {
  57.     if(_logType == LOG_TYPE_CONSOLE)
  58.         return;
  59.     if(_backupFile != NULL)
  60.         _file = _backupFile;
  61.     fclose(_file);
  62.     _file = fopen(CCString(_fileName), "wt+");            // clear all the data of file
  63.     _backupFile = _file;
  64.     if(_file == NULL)
  65.         std::cerr << "clearAllData:Open file error" << std::endl;
  66. }
  67. void CCLog::setWriteToConsole()
  68. {
  69.     _logType = LOG_TYPE_CONSOLE;
  70. }
  71. void CCLog::setWriteToFile()
  72. {
  73.     _logType = LOG_TYPE_FILE;
  74. }
复制代码

简单地测试代码如下:
  1. void ccTestLog()
  2. {
  3. #if 1            // CCLog
  4.     CCLog * log = new CCLog(NULL);
  5.     log->write("hello");
  6.     log->write("\t1\n");
  7.     log->write("\txichen\n");
  8.     delete log;
  9.     log = new CCLog("d:\\test\\logtest.txt");
  10.     log->write("ab\t\n1");
  11.     delete log;
  12.     log = new CCLog("d:\\test\\logtest.txt");
  13.     log->write("xiche\t123");
  14.     log->clearAllData();
  15.     log->write("after clear");
  16.     log->setWriteToConsole();
  17.     log->write("the console info");
  18.     log->setWriteToFile();
  19.     log->write("the file content");
  20.     log->writeEndl();
  21.     log->write("the next line\nhehe");
  22.     delete log;
  23. #endif
  24. }
复制代码








微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是步伐员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧履历分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4