在软件开发中,为程序建立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 = ;
if ((err = _taccess_s(pwchLogFilePath, )) != )
{
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, , MAX_PATH);
::GetModuleFileName(NULL, szFilePath, MAX_PATH); (_tcsrchr(szFilePath, _T('\\')))[] = ;      // 删除文件名,只获得路径字符串
CString strFilePath = szFilePath;
strFilePath = strFilePath + LOG_FILE_NAME; return strFilePath;
}

  使用方法: 

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

VC++ 一个简单的Log类的更多相关文章

  1. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

  2. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  3. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...

  4. C++定义一个简单的Computer类

    /*定义一个简单的Computer类 有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等, 有两个公有成员函数run.stop.cpu为CPU类的一个对象, ram为RAM类的一个对象, ...

  5. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

  6. 一个简单的string类,读书看报系列(一)

    对于这个类,写过程序的都知道应该含有的方法是 初始化.销毁.拼接.求长度.清除.判断是否为空等.还有一些操作符重载 一.先看初始化: 可以想到应该有默认构造的的.带有字符串的.带有默认字符的.还有一个 ...

  7. Python一个简单的数据库类封装

    #encoding:utf-8 #name:mod_db.py '''使用方法:1.在主程序中先实例化DB Mysql数据库操作类.      2.使用方法:db=database()  db.fet ...

  8. 自己写的一个简单的Tab类

    //------------- PS_DOM 功能函数 start----------------var PS_DOM ={ indexOf: function(arr, e){ for(var i= ...

  9. 实现一个简单的Log框架

    实际上算不上框架,只是自己对日志框架的一点理解. 核心接口:Logger,供调用者完成不同等级的日志输出 package com.lichmama.log.service; public interf ...

随机推荐

  1. LeetCode:Merge k Sorted Lists

    题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...

  2. 使用html2canvas实现浏览器截图

    最近做项目为了解决全局异常信息记录,研究了一下浏览器全屏截图功能,方便用户发现异常时能够快速截图发给管理员.最终记录的异常信息如下,上面的[截图报告管理员]就是使用html2canvas前端插件实现的 ...

  3. Mongodb学习笔记二(Mongodb基本命令)

    第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...

  4. Visual Studio 2015的坑:中文字符串编译后成乱码

    (2015年8月5日更新:微软已经修复了Roslyn的这个bug,详见 https://github.com/dotnet/roslyn/pull/4303 ) 昨天,我们用VS2015编译了博客程序 ...

  5. JavaMeloay配置用于系统监控

    JavaMelody JavaMelody能够监控Java或Java EE应用程序服务器的运行状况,并以图标的方式显示:java内存.CPU使用情况.用户Session数量.JDBC连接数.http请 ...

  6. Django-跨站请求

    //用户验证Tonken 在Html 中 设置一个Token {% csrf_token %} //在代码Views.py 中返回值添加 context_instance=RequestContext ...

  7. 【OpenJudge 191】【POJ 1189】钉子和小球

    http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...

  8. 用JS写了一个打字游戏,反正我是通不了关

    今天想写个简单的游戏, 打字游戏好像都没写过, 那么就写打字游戏吧, gamePad包含了关卡的信息, 可以用来调整给个关卡字符下落的速度: getRandom函数会返回一个字符对象, 这个对象包含了 ...

  9. Android中Shape的使用

    先看一下文档对Shape Drawable的描述: Shape Drawable An XML file that defines a geometric shape, including color ...

  10. 上网八个常用cmd命令你掌握了几个?

                   上网八个常用cmd命令你掌握了几个? 一.ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握 ...