下面是在windows下编程实现的日志打印,写的比较简单,可以根据实际情况进行修改使用。

宏WRITELOG在vs2013可以正常使用。

在vs2003和vs2010可能会报错,可以直接使用myLog函数,就是比较麻烦,需要传参数(__FILE__, __FUNCTION__, __LINE__)

这个例子日志会一直保存在同一个文件,如果想要每小时生成一个新的日志文件,请看https://www.cnblogs.com/nanqiang/p/9642231.html

log.h

#pragma once
#define WRITE_LOG_ENABLE //启用日志打印 #include <string>
#include <Windows.h>
#include <stdio.h>
using std::string;
using std::wstring;
extern const char* g_pLogPath; string GetTime();
int myLog(const char* pSourcePath, const char* pFunName, const long lLine, const char* fmt, ...); #ifdef WRITE_LOG_ENABLE
#define WRITELOG(format, ...) myLog(__FILE__, __FUNCTION__, __LINE__, format, ##__VA_ARGS__) #else
#define WRITELOG(format, ...) #endif

log.cpp

#include  "Log.h"
#include "StdAfx.h"
#include <string>
#include <Windows.h>
#include <stdio.h>
using std::string;
using std::wstring; const char* g_pLogPath = ".\\test.log"; string GetTime()
{
SYSTEMTIME st;
::GetLocalTime(&st);
char szTime[] = { };
sprintf(szTime, "%04d-%02d-%02d %02d:%02d:%02d %d ", st.wYear, st.wMonth, st.wDay, st.wHour, \
st.wMinute, st.wSecond, st.wMilliseconds);
return szTime;
}
int myLog(const char* pFileName, const char* pFunName, const long lLine, const char* fmt, ...)
{
int ret = ;
//va_list是一个字符串指针,用于获取不确定个数的参数
va_list args;
//读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中
//的参数列表,从低地址到高地址一个一个的把参数内容读出来的过程
va_start(args, fmt);
//该函数会根据参数fmt字符串来转换格式并格式化数据,然后将结果输出到参数Stream指定的文件中
//直到出现字符串结束的\0为止。
FILE* fp = NULL;
fp = fopen(g_pLogPath, "a+");
string strTime = GetTime();
fprintf(fp, "%s ", strTime.c_str());//写时间 int nFileNameLen = strlen(pFileName);
char szLine[] = { };
sprintf(szLine, "%ld", lLine);
int nLineLen = strlen(szLine);
int nSpaceLen = - nFileNameLen - nLineLen;
for (int i = ; i < nSpaceLen; ++i)
{
fwrite(" ", , , fp);
}
fprintf(fp, "%s:%ld ", pFileName, lLine);
ret = vfprintf(fp, fmt, args); //获取完所有参数之后,为了避免发生程序瘫痪,需要将 ap指针关闭,其实这个函数相当于将args设置为NULL
va_end(args);
fflush(fp);
fclose(fp);
return ret;
}

main.cpp

// WriteLog.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "log.h" int _tmain(int argc, _TCHAR* argv[])
{
for (int i = ; i < ; i++)
{
WRITELOG("打印%s%d%s%\n", "hello...", , "hello...");
}
string test = "结束打印";
WRITELOG("%s\n", test.c_str());
WRITELOG("\n");
// system("pause");
return ;
}

windows 下编程实现打印日志的更多相关文章

  1. Windows下编程--模拟时钟的实现

    windows下编程--模拟时钟的实现: 主要可以分为几个步骤: (1)   编写按键事件处理(启动和停止时钟) (2)   编写时钟事件处理,调用显示时钟函数 (3)   编写显示时钟函数,要调用显 ...

  2. Windows下编程2----- C语言常用函数举例

    几个小函数 1.    //MessageBoxA(0,"网络故障,重新登录","qq error",3); //弹出对话框 2.    //ShellExec ...

  3. 使用IDEA2017在Windows下编程并测试Hadoop2.7+Spark2.2+Azkaban

    1. 下载好IDEA HADOOP SPARK 首先,配置IDEA, 在插件管理中使用IDEA在线库安装scala插件, 在在线库直接搜索即可; 其次,配置Maven选项, 将Maven添加到IDEA ...

  4. windows下查看 mysql二进制日志文件

    有时候需要将linux中的mysql从线上linux种down到windows查看,但是这种binlog日志是二进制的,应该怎么查看呢? 使用window上的mysqlbinlog.exe将其转码到另 ...

  5. windows下 定时删除tomcat日志和缓存。可以保留天数

    forfiles /p "e:\Program Files\Tomcat 7.0\logs" /s /m *.log /d -5 /c "cmd /c del @path ...

  6. Nginx - Windows下nginx定时分割日志

    1.建立批处理脚本,c:\soft\demo.bat @echo off taskkill /F /IM nginx.exe > nul cd C:\soft\nginx-1.11.3 rem ...

  7. windows下为mysql添加日志

    mysql的配置文件 [mysqld] …… log-error="D:/phpStudy/log/mysql/mysql_log_err.txt" log="D:/ph ...

  8. 寻找Windows下MySQL的错误日志

    https://blog.csdn.net/dreamcs/article/details/53502625

  9. windows下的socket网络编程

    windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...

随机推荐

  1. python3.6小程序

    # 查询类python 3.6 pycharm中运行(唔错) people = { '王飞': { '电话': '2341', '地址': '西方镇忘川村' }, '小瘪三': { '电话': '91 ...

  2. NB-IoT协议及其PSM

    物联网技术发展趋势是LPWAN,其中尤其以NB-IoT和eMTC最为代表.NB-IoT和eMTC各有优劣,使用场景互有不同. 低功耗可以说是物联网技术的核心,本着关注低功耗的方向,适当了解NB IoT ...

  3. SkylineGlobe的PopupMessage里面嵌入的网页如何与主页面交互通讯

    1.主页面调用PopupMessage,如果需要传值,就是普通的页面间的传值就可以实现了. a.html页面调用PopupMessage创建方法,url传入b.html?x=111&y=22; ...

  4. C#宣告一个变量

    在C#程序里,宣告一个变量,是件很容易的事情.如下面,宣告一个变量,并赋值: ; Console.WriteLine(type); bool type1 = false; Console.WriteL ...

  5. 使用odoo官方dockerfile 创建最新版镜像

    以odoo11.0为例 1.检出odoo/docker仓:git clone https://github.com/odoo/docker.git 2.打开目录 http://nightly.odoo ...

  6. Luogu P1447 [NOI2010]能量采集

    Preface 最近反演题做多了看什么都想反演.这道题由于数据弱,解法多种多样,这里简单分析一下. 首先转化下题目就是对于一个点\((x,y)\),所消耗的能量就是\(2(\gcd(x,y)-1)+1 ...

  7. [Oracle]如何查看 10046 trace 中的 tim= ... 的具体时刻

    可以在  Linux 下,用下列方式: 如10046 trace 文件中如果有如下的内容:... tim = 1503032923 可以用 date 命令加 option 来看它的时刻: date - ...

  8. 基于uFUN开发板和扩展板的联网校准时钟

    项目概述 上周在uFUN试用群里看到管理员说试用活动快结束了,要抓紧完成评测总结,看大家的评测总结也都写了,我也不能落后啊!正好最近做的扩展板到手了,于是赶紧进行调试,做了一个不用校准的时钟,时钟这种 ...

  9. C# 时间戳与DateTime互转

    #region 转换时间为unix时间戳 /// <summary> /// 转换时间为unix时间戳 /// </summary> /// <param name=&q ...

  10. 浅谈nornalize.css(含源码)

    Normalize.css是一种CSS reset的替代方案.经过@necolas和@jon_neal花了几百个小时来努力研究不同浏览器的默认样式的差异,这个项目终于变成了现在这样. 我们创造norm ...