当前位置: 首页 > news >正文

VC++ 一个简单的Log类

  在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试。

  下面实现了一个简单的Log类,使用非常简单,仅供参考。

 // CLogHelper.h : header file for log information
 //

 #pragma once

 class CLogHelper
 {
 public:
     CLogHelper(void);
     ~CLogHelper(void);
     static void WriteLog(LPCTSTR lpszLog);

 private:
     static CString MakeFilePath();
     static CString MakeLogMsg(LPCTSTR lpszLog);
 };

    

// LogHelper.cpp : implementation file
//

#include "StdAfx.h"
#include "LogHelper.h"
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale>

#define LOG_FILE_NAME     _T("*Log.log")

CLogHelper::CLogHelper(void)
{
}

CLogHelper::~CLogHelper(void)
{
}

void CLogHelper::WriteLog( LPCTSTR lpszLog )
{
    // 获取日志文件路径
    static CString strLogFilePath = _T("");
    if (strLogFilePath.IsEmpty())
    {
        strLogFilePath = MakeFilePath();
    }
    // 判断日志文件是否存在,不存在则创建
    wchar_t* pwchLogFilePath = strLogFilePath.AllocSysString();
    errno_t err = 0;
    if ((err = _taccess_s(pwchLogFilePath, 0)) != 0)
    {
        CStdioFile file;
        if(file.Open(strLogFilePath, CStdioFile::modeCreate))
        {
            file.Close();
        }
    }
    // 向日志文件写入日志
    CStdioFile file;
    if (file.Open((LPCTSTR)strLogFilePath, CStdioFile::modeWrite | CStdioFile::shareDenyNone))
    {
        CString strMsg = MakeLogMsg(lpszLog);
        file.SeekToEnd();
        char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
        setlocale( LC_CTYPE, "chs" );  // 设定区域
        file.WriteString(strMsg);
        setlocale( LC_CTYPE, old_locale );
        free( old_locale );        // 还原区域设定
        file.Close();
    }

}

CString CLogHelper::MakeLogMsg(LPCTSTR lpszLog)
{
    CTime time = CTime::GetCurrentTime();
    CString strMsg = time.Format("[%Y-%m-%d %H:%M:%S] ");
    strMsg = strMsg + lpszLog + _T("\r\n");
    return strMsg;
}

CString CLogHelper::MakeFilePath()
{
    // 获取当前进程路径
    TCHAR szFilePath[MAX_PATH];
    memset(szFilePath, 0, MAX_PATH);
    ::GetModuleFileName(NULL, szFilePath, MAX_PATH);

    (_tcsrchr(szFilePath, _T('\\')))[1] = 0;      // 删除文件名,只获得路径字符串
    CString strFilePath = szFilePath;
    strFilePath = strFilePath + LOG_FILE_NAME;

    return strFilePath;
}

  使用方法: 

CString strLogMsg = _T("程序开始运行...");
CLogHelper::WriteLog(strLogMsg);

 

相关文章:

  • java基础加强
  • 23种设计模式总结(三)
  • 一个WIndows Server 2008 R2 AD组策略复制排错过程(Warning 13508)
  • 两个基本概念 标称型数据和数值型数据
  • bootstrap 不兼容ie8 的问题
  • Frenetic Python实验(三)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • Java内存模型深度解析:重排序 --转
  • CentOS防火墙iptables的配置方法详解
  • 66哲理,哪一句让你茅塞顿开
  • 第八章   前七章总结考试
  • python中初始化实例属性
  • SpringMVC常用注解的用法
  • ionic ng-repeat 循环传值
  • Windows下xgboot安装
  • 《Java编程思想》读书笔记-对象导论
  • Angular 响应式表单之下拉框
  • codis proxy处理流程
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • FineReport中如何实现自动滚屏效果
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MySQL几个简单SQL的优化
  • Mysql优化
  • vue-cli3搭建项目
  • 初识 beanstalkd
  • 面试总结JavaScript篇
  • 做一名精致的JavaScripter 01:JavaScript简介
  • linux 淘宝开源监控工具tsar
  • ​Linux·i2c驱动架构​
  • # C++之functional库用法整理
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (笔试题)分解质因式
  • (二)linux使用docker容器运行mysql
  • (十一)手动添加用户和文件的特殊权限
  • (原創) 未来三学期想要修的课 (日記)
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net Web窗口页属性
  • .NET 反射 Reflect
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET的微型Web框架 Nancy
  • .net连接oracle数据库
  • .NET中使用Redis (二)