C++-实现日志log功能
作者:Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
场景需求
开发软件或者进行其他编程工作时,软件可能会长时间运行,但是!一旦突然崩溃就让人一脸懵逼,此时,日志log的功能就体现出来了,如果在日常编程的时候,有同步编写日志模块的好习惯,那么后期进行调试或者bug修复就很容易定位问题所在,大大提高开发效率哦~
相关函数说明
A.获取工作目录路径
/**
* @brief GetProgramDir 获取当前工作目录路径
* @return 路径
*/
string GetProgramDir()
{char FullPath[MAX_PATH]; // 声明路径string strPath = "";GetModuleFileNameA(NULL, FullPath, MAX_PATH); // 获取当前运行程序的绝对路径strPath = (string)FullPath; // 转为string型int pos = static_cast<int>(strPath.find_last_of('\\', strPath.length()));return strPath.substr(0, pos); // 返回当前文件夹,不带文件名
}
B.获取当前时间
/**
* @brief GetCurrentTimeA 获取当前时间信息
* @return
* 需要用到time.h和ctime
*/
string GetCurrentTimeA(tm in)
{tm *ct = ∈int year, month, day, hour, minute, second;// 年月日时分秒。year = ct->tm_year + 1900; // 年份基础从1900开始的,所以要加上month = ct->tm_mon + 1; // 月份是0-11,对应1-12月day = ct->tm_mday;hour = ct->tm_hour;minute = ct->tm_min;second = ct->tm_sec;char temp[100]; // 创建字符数组。sprintf(temp, "%04d-%02d-%02d %02d:%02d:%02d: ", year, month, day, hour, minute, second);// 时间信息合并。string out(temp); // 转化为string型return move(out); // 用move(string)速度快很多。
}
C.书写日志内容
/**
* @brief WriteLog 写进日志
* @param msg 内容
* @return 状态码
*/
int WriteLog(string msg)
{struct tm *local;time_t t;t = time(NULL);local = localtime(&t);string dtime = GetCurrentTimeA(*local);ofstream outfile;outfile.open(GetProgramDir() + "\\" + "log.txt", ios::app); //文件的物理地址,文件的打开方式, 如果没有会自动创建if (outfile.is_open()){outfile << dtime << msg << "\n";outfile.close();return 0;}else{return 1;}
}
可能遇到的问题
可能出现sprintf和localtime不安全的警告提示,vs2017反正会出现,这个没啥影响,直接屏蔽掉就行~
屏蔽方案:
项目设置->C/C++->预处理器->预处理器定义,加上_CRT_SECURE_NO_WARNINGS即可。
C++实现代码
#include <iostream>
#include <fstream>
#include <sstream>
#include <time.h>
#include <ctime>
#include <Windows.h>using namespace std;string GetProgramDir();
string GetCurrentTimeA(tm in);
int WriteLog(string msg);int main(void)
{WriteLog("ready!!!!");Sleep(500);WriteLog("go!!!!");Sleep(500);WriteLog("yes!!!!");return 0;
}string GetProgramDir()
{char FullPath[MAX_PATH]; // 声明路径string strPath = "";GetModuleFileNameA(NULL, FullPath, MAX_PATH); // 获取当前运行程序的绝对路径strPath = (string)FullPath; // 转为string型int pos = static_cast<int>(strPath.find_last_of('\\', strPath.length()));return strPath.substr(0, pos); // 返回当前文件夹,不带文件名
}string GetCurrentTimeA(tm in)
{tm *ct = ∈int year, month, day, hour, minute, second;// 年月日时分秒。year = ct->tm_year + 1900; // 年份基础从1900开始的,所以要加上month = ct->tm_mon + 1; // 月份是0-11,对应1-12月day = ct->tm_mday;hour = ct->tm_hour;minute = ct->tm_min;second = ct->tm_sec;char temp[100]; // 创建字符数组。sprintf(temp, "%04d-%02d-%02d %02d:%02d:%02d: ", year, month, day, hour, minute, second);// 时间信息合并。string out(temp); // 转化为string型return move(out); // 用move(string)速度快很多。
}int WriteLog(string msg)
{struct tm *local;time_t t;t = time(NULL);local = localtime(&t);string dtime = GetCurrentTimeA(*local);ofstream outfile;outfile.open(GetProgramDir() + "\\" + "log.txt", ios::app); //文件的物理地址,文件的打开方式, 如果没有会自动创建if (outfile.is_open()){outfile << dtime << msg << "\n";outfile.close();return 0;}else{return 1;}
}
测试效果
我写的代码都力求简单好理解,方便大家自由发挥,不然一坨代码扔上去属实可能看不太懂。。。
如果这个功能有帮助到你,给点个赞吧嘿嘿~
C++-实现日志log功能相关推荐
- php实现项目的日志记录功能,tp5框架使用composer实现日志记录功能示例
本文实例讲述了tp5框架使用composer实现日志记录功能.分享给大家供大家参考,具体如下: tp5实现日志记录 1.安装 psr/log composer require psr/log 它的作用 ...
- 配置Haproxy增加日志记录功能
2019独角兽企业重金招聘Python工程师标准>>> CentOS 7上yum安装的Haproxy,默认没有记录日志.需要做一下配置才能记录日志. 1.创建日志文件/var/log ...
- 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
Quartz.NET是一个非常强大的作业调度框架,适用于各种定时执行的业务处理等,类似于WINDOWS自带的任务计划程序,其中运用Cron表达式来实现各种定时触发条件是我认为最为惊喜的地方. Quar ...
- java core日志在哪里_java-如何在未启用日志记录功能的情况下在...
我已使用CXF 3.0.0 Milestone1创建了Rest服务,并且试图在SEND阶段的Out Interceptor中获取HTTP响应的正文,并将其放入String变量中,而未在xml配置文件中 ...
- 运维记录 - 业务日志清理功能
线上某些系统业务跑一段时间后,日志就会越来越多,考虑到业务机器磁盘有限,需要添加业务日志清理功能.根据日志所在分区磁盘使用情况来判断是否清理日志,比如当日志分区磁盘空间使用超过90%时,将一周前的日志 ...
- 如何正确使用日志Log
如何正确使用日志Log title: 如何正确使用日志Log date: 2015-01-08 12:54:46 categories: [Python] tags: [Python,log] --- ...
- Android 各层中日志打印功能的应用
Android 各层中日志打印功能的应用 1. HAL层 头文件:#include <utils/Log.h> 对应的级别 打印方法 VERBOSE LOGV() DEBUG LOG ...
- 扩展log4j2日志归档功能预研
背景 因项目日志管理不够规范,日志文件需人为维护,这将会因人为原因导致日志误删的情况,现为了规范日志归档因此现对log4j2日志归档功能进行扩展预研,如有问题欢迎指正. 软件版本 log4j2 2.1 ...
- 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.
创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证. 一.显示页面 新建一个登录页面,即login.jsp <%--Created by In ...
最新文章
- Intellij IDEA 没办法创建java文件
- Codeforces Round #321 (Div. 2) D Kefa and Dishes(dp)
- 国内国外虚拟主机的对比
- Spring MVC——POST请求application/x-www-form-urlencoded方式参数嵌套POJO解决方案
- Spring Data Redis:Sentinel的高可用性
- ListString 和 ArrayListString的区别
- yolov3 使用darknet的python接口使用
- informix软件
- 【如何选择到合适的天线-天线参数讲解 】
- tpac100控制器设置教程_TP-link AC控制器统一管理AP设置指导
- Vs code PIO一直loading
- 阿里云服务器部署学习笔记
- 华侨大学教务系统评教脚本----一键评教
- 计算机视觉基础——3D空间坐标点的重建(三角测量)
- 紫外线检测仪,WKM-UV1,紫外线检测仪UV汞灯LEDUV通用
- 关系型数据库选型MySQL、 Oracle、SQL server、DB2、PostgreSql
- 动态规划dp练习 7.4
- linux系统安装腾达U1无线网卡驱动
- html个人浮水入门day02
- Python的attr三兄弟(getattr、hasattr、setatter)