• c++日志类


     1 /*
     2 简单日志类
     3 */
     4 #ifndef LOGGER_H_
     5 #define LOGGER_H_
     6 #include <string>
     7 #include <time.h>
     8 #include <Windows.h>
     9 using namespace std;
    10 //日志级别枚举  
    11 typedef enum LogLevel  
    12 {  
    13     信息 = 0,  //什么都不记录  
    14     错误,     //只记录严重错误  
    15     警告,     //记录严重错误,普通错误  
    16     致命,   //记录严重错误,普通错误,警告  
    17 };  
    18 class CLog{
    19 
    20 public:
    21     CLog();
    22     ~CLog();
    23     //写日志方法
    24     void Log(string msg,LogLevel level );
    25 protected:
    26     //初始化
    27     void GetExeName();
    28     //获取当前系统时间
    29     string GetCurrentTime();
    30     string m_Name;
    31     string m_Path;
    32 };
    33 #endif

     1 #include "stdafx.h"
     2 #include "Log.h"
     3 #include <fstream>  
     4 CLog::CLog()
     5 {
     6     if (m_Name.size()>0) m_Name.clear();
     7     if (m_Path.size()>0) m_Path.clear();
     8     this->GetExeName();
     9     
    10 }
    11 CLog::~CLog()
    12 {
    13     
    14 }
    15 void CLog::GetExeName()
    16 {
    17     // 取进程执行文件名称
    18     char szExeName[MAX_PATH ]={0};  
    19     //GetModuleFileNameA(NULL, szExeName, MAX_PATH);
    20     if ( ::GetModuleFileNameA(NULL, szExeName, MAX_PATH) > 0)//获取当前进程已加载模块的文件的完整路径
    21     {
    22         char* pBegin = szExeName;
    23         char* pTemp  = szExeName;
    24         
    25 
    26         while ( *pTemp != 0 )
    27         {
    28             if ( *pTemp == '\' )
    29             {
    30                 pBegin = pTemp + 1;
    31 
    32             }
    33             pTemp++;
    34 
    35         }
    36         //(strrchr(szExeName, '\'))[0] = 0; // 删除文件名,只获得路径字串  
    37         m_Path.insert(0,szExeName);
    38         m_Name.insert(0,pBegin);
    39         int a = m_Name.find('.');
    40         m_Name.erase(a);
    41         ZeroMemory(szExeName,sizeof(szExeName));
    42         sprintf_s(szExeName,"%s%s",m_Name.c_str(),".log");
    43         m_Name.clear();
    44         m_Name.insert(0,szExeName);
    45         
    46     }
    47 }
    48 void CLog::Log(string msg,LogLevel level )
    49 {
    50     ofstream outfile;  
    51     outfile.open(m_Name.c_str(),ios::out|ios::app|ios::ate);
    52   switch(level)
    53   {
    54       case 信息:
    55           if (outfile.is_open()) outfile<<this->GetCurrentTime().c_str()<<m_Path.c_str()<<": "<<msg.c_str()<<" -->信息"<<endl;
    56           break;
    57       case 错误:
    58           if (outfile.is_open()) outfile<<this->GetCurrentTime().c_str()<<m_Path.c_str()<<": "<<msg.c_str()<<" -->错误"<<endl;
    59           break;
    60       case 警告:
    61           if (outfile.is_open()) outfile<<this->GetCurrentTime().c_str()<<m_Path.c_str()<<": "<<msg.c_str()<<" -->警告"<<endl;
    62           break;
    63       case 致命:
    64           if (outfile.is_open()) outfile<<this->GetCurrentTime().c_str()<<m_Path.c_str()<<": "<<msg.c_str()<<" -->致命"<<endl;
    65           break;
    66   }
    67   outfile.close();
    68 }
    69 
    70 string CLog::GetCurrentTime()
    71 {
    72     struct tm t;   //tm结构指针
    73     time_t now;  //声明time_t类型变量
    74     time(&now);      //获取系统日期和时间
    75     localtime_s(&t, &now);   //获取当地日期和时间
    76     char temp[50] = {0};
    77     sprintf_s(temp,"[%d-%d-%d %d:%d:%d]" ,t.tm_year + 1900,t.tm_mon + 1,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec);    
    78     std::string  pTemp=temp;
    79     return pTemp;
    80 }
    
    
    
     
  • 相关阅读:
    微擎开发笔记
    Array对象的方法实现(1)----Array.prototype.push和Array.prototype.concat(实现常规参数的功能)
    ThinkCMF 5 基础门户CMS框架的模板widget标签实现
    [转]mysql为什么默认有那么多root用户,还有用户名为空的用户?
    PHP 5.4特性 trait
    道破人性
    c#使用easyhook库进行API钩取
    黑马eesy_15 Vue:04.综合案例(前端Vue实现)
    黑马eesy_15 Vue:04.Vue案例(ssm环境搭建)
    黑马eesy_15 Vue:03.生命周期与ajax异步请求
  • 原文地址:https://www.cnblogs.com/AquaGot/p/7241289.html
Copyright © 2020-2023  润新知