吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1855|回复: 2
收起左侧

[C&C++ 转载] 打印日志

[复制链接]
古月不傲 发表于 2020-12-31 06:35
本帖最后由 古月不傲 于 2020-12-31 15:33 编辑

[C++] 纯文本查看 复制代码
#ifndef __WIND_LOG_H__
#define __WIND_LOG_H__ 

#include <iostream>
#include <cstdarg>
#include <cstring>
#include <sys/time.h>
#include <time.h>
#include <fcntl.h>
#include <unistd.h>

// 日志相关
namespace wind_log
{
#define wind_cpymem(dst, src, n) (((char *) memcpy(dst, src, n)) + (n))
#define LOG_MAX_ERR_SIZE 1024

	class CLog
	{
		public:
			CLog() = default;
			CLog(const CLog &) = delete;
			CLog &operator =(const CLog &) = delete;

		public:
			~CLog()
			{
			}

			static CLog &get_instance()
			{
				static CLog obj;
				return obj;
			}

			inline void open_fd()
			{
				this->m_fdLog = open("log.txt",  O_CREAT | O_WRONLY | O_APPEND, 0644);
			}

			inline void close_fd()
			{
				close(this->m_fdLog);
				this->m_fdLog = -1;
			}

			void write_log(const char *fmt, ...)
			{
				if (fmt == nullptr)
					return;

				char 			errBuf[LOG_MAX_ERR_SIZE]{};
				char 			strTime[128]{};
				char 			argsBuf[1024]{};
				char *			pTemp;
				struct timeval  tv; 			// 时间
				struct tm 		stTime;  		// 时间格式
				time_t 			seconds;
				va_list 		args;

				// 获取经过的时间
				gettimeofday(&tv, nullptr);
				seconds = tv.tv_sec;

				// 把经过的时间转化为本地时间
				localtime_r(&seconds, &stTime);
				stTime.tm_mon++;
				stTime.tm_year += 1900;

				// 格式化时间
				sprintf(strTime,
						"[%4d/%02d/%02d %02d:%02d:%02d]	",
						stTime.tm_year, stTime.tm_mon,
						stTime.tm_mday, stTime.tm_hour,
						stTime.tm_min,  stTime.tm_sec);

				va_start(args, fmt);
				pTemp = wind_cpymem(errBuf, strTime, strlen(strTime));
				// va_list格式化函数
				vsprintf(argsBuf, fmt, args);
				pTemp = wind_cpymem(pTemp, argsBuf, strlen(argsBuf));
				va_end(args);

				// 如果没有写 \n的情况
				if (*--pTemp != '\n')
					// 这里不可以pTemp++ 要先++
					wind_cpymem(++pTemp, "\n", 1);

				// 由于上面判断了,所以要跳过 \n
				pTemp++;
				write(this->m_fdLog, errBuf, pTemp - errBuf);
			}
		private:
			int m_fdLog = -1;
	};
}

#endif

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wouimk 发表于 2020-12-31 09:55
谢谢分享,支持原创,局域网的其它计算机使用本机打印机 有记录吗
斗地主专用 发表于 2020-12-31 14:43
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表