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 = ;
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类的更多相关文章
- python+selenium之自定义封装一个简单的Log类
python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- Python之自定义封装一个简单的Log类
参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...
- C++定义一个简单的Computer类
/*定义一个简单的Computer类 有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等, 有两个公有成员函数run.stop.cpu为CPU类的一个对象, ram为RAM类的一个对象, ...
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cl ...
- 一个简单的string类,读书看报系列(一)
对于这个类,写过程序的都知道应该含有的方法是 初始化.销毁.拼接.求长度.清除.判断是否为空等.还有一些操作符重载 一.先看初始化: 可以想到应该有默认构造的的.带有字符串的.带有默认字符的.还有一个 ...
- Python一个简单的数据库类封装
#encoding:utf-8 #name:mod_db.py '''使用方法:1.在主程序中先实例化DB Mysql数据库操作类. 2.使用方法:db=database() db.fet ...
- 自己写的一个简单的Tab类
//------------- PS_DOM 功能函数 start----------------var PS_DOM ={ indexOf: function(arr, e){ for(var i= ...
- 实现一个简单的Log框架
实际上算不上框架,只是自己对日志框架的一点理解. 核心接口:Logger,供调用者完成不同等级的日志输出 package com.lichmama.log.service; public interf ...
随机推荐
- LeetCode:Merge k Sorted Lists
题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- 使用html2canvas实现浏览器截图
最近做项目为了解决全局异常信息记录,研究了一下浏览器全屏截图功能,方便用户发现异常时能够快速截图发给管理员.最终记录的异常信息如下,上面的[截图报告管理员]就是使用html2canvas前端插件实现的 ...
- Mongodb学习笔记二(Mongodb基本命令)
第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...
- Visual Studio 2015的坑:中文字符串编译后成乱码
(2015年8月5日更新:微软已经修复了Roslyn的这个bug,详见 https://github.com/dotnet/roslyn/pull/4303 ) 昨天,我们用VS2015编译了博客程序 ...
- JavaMeloay配置用于系统监控
JavaMelody JavaMelody能够监控Java或Java EE应用程序服务器的运行状况,并以图标的方式显示:java内存.CPU使用情况.用户Session数量.JDBC连接数.http请 ...
- Django-跨站请求
//用户验证Tonken 在Html 中 设置一个Token {% csrf_token %} //在代码Views.py 中返回值添加 context_instance=RequestContext ...
- 【OpenJudge 191】【POJ 1189】钉子和小球
http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...
- 用JS写了一个打字游戏,反正我是通不了关
今天想写个简单的游戏, 打字游戏好像都没写过, 那么就写打字游戏吧, gamePad包含了关卡的信息, 可以用来调整给个关卡字符下落的速度: getRandom函数会返回一个字符对象, 这个对象包含了 ...
- Android中Shape的使用
先看一下文档对Shape Drawable的描述: Shape Drawable An XML file that defines a geometric shape, including color ...
- 上网八个常用cmd命令你掌握了几个?
上网八个常用cmd命令你掌握了几个? 一.ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握 ...