C++实现简单的日志记录
C++实现简单的日志记录
//dlogger.h
#ifndef DLOGGER_H
#define DLOGGER_H
#include <iostream>
#include <Mutex>
#include <ctime>
#include <string>
extern std::mutex mt;
//用于获取运行时间
class Duration
{
public:
explicit Duration() : m_start(clock()){}
inline double duration();
private:
clock_t m_start;
};
double Duration::duration()
{
return (double)(clock() - m_start) / CLOCKS_PER_SEC;
}
class DLogger
{
public:
enum LogLevel
{
Log_Info = 0,
Log_Debug,
Log_Warning,
Log_Error,
Log_Fatal,
Level_Num
};
public:
explicit DLogger(const std::string &dir = "");
void log(const char* msg, const char* fileName, int line, LogLevel level = Log_Info);
private:
std::string m_fileName;
static const std::string m_levelMsg[Level_Num];
};
extern std::mutex mt;
#endif
//dlogger.cpp
#include "dlogger.h"
#include <cstring>
std::mutex mt;
const std::string DLogger::m_levelMsg[Level_Num] =
{
"Info",
"Debug",
"Warning",
"Error",
"Fatal"
};
/**
* 为日志文件提供一个目录,不提供目录则表示当前工作目录
*/
DLogger::DLogger(const std::string &dir)
{
char buf[64];
time_t now = time(0);
tm* ltm = localtime(&now);
sprintf(buf, "%d-%d-%d.log", ltm->tm_year + 1900, ltm->tm_mon + 1, ltm->tm_mday);
if(dir.empty())
{
m_fileName = buf;
}
else
{
m_fileName = dir + "\\" + buf;
}
}
/**
* 记录日志
* @param msg [日志信息]
* @param fileName [日志信息文件名]
* @param line [日志信息所在行]
* @param level [日志信息等级]
*/
void DLogger::log(const char* msg, const char* fileName, int line, LogLevel level)
{
mt.lock();
FILE* fp = ::fopen(m_fileName.data(), "a+");
if(!fp)
{
mt.unlock();
return;
}
char buf[1024];
time_t now = time(0);
tm *ltm = localtime(&now);
::sprintf(buf, "%d/%d/%d %d:%d:%d, %s, %d, %s, %s\n",
1900+ltm->tm_year, ltm->tm_mon, ltm->tm_mday,
ltm->tm_hour, ltm->tm_min, ltm->tm_sec,
fileName, line, msg, m_levelMsg[level].data());
::fwrite(buf, sizeof(char),strlen(buf), fp);
::fclose(fp);
mt.unlock();
}
C++实现简单的日志记录的更多相关文章
- Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验
Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...
- 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)
前言: 本章介绍自己写的基于java.util.logging的轻量级日志记录库(baseLog). 该版本的日志记录库犹如其名,baseLog,是个实现日志记录基本功能的小库,适合小型项目使用,方便 ...
- C#日志记录设计与实现(BenXHLog)
C#日志记录设计与实现 日志记录: 日志记录在程序设计开发过程中,是非常重要的,可以供调试和记录数据,虽然说有开源的强大日志管理系统,比如apache的Log4Net,功能可谓强悍,但是有时候,不需要 ...
- 在android中配置 slf4j + log4j 日志记录框架
需求: 在项目开发中,需要记录 操作日志 .起初自己写了个简单的日志记录文本写入到文本的方法,后来随着项目的膨胀,需要考虑更多的操作,开始考虑性能问题. 实现: 考虑使用 slf4j + log4j ...
- Python学习 :常用模块(三)----- 日志记录
常用模块(三) 七.logging模块 日志中包含的信息应有正常的程序访问日志,还可能有错误.警告等信息输出 python的 logging 模块提供了标准的日志接口,你可以通过它存储各种格式的日志, ...
- php 简单通用的日志记录方法
使用file_put_contents 方法来实现简单便捷的日志记录功能 方法1: // use \r\n for new line on windows, just \n on linux func ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
- Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ...
随机推荐
- HBase调优案例(一)——建表长时间等待最后失败
现象: 1.在HBase Shell里执行建表操作会等很久,最终失败: 2.通过代码侧进行建表同样不能成功. 原因排查: 1.查询HMaster日志,发现有接收到建表(create)的RPC请求: ...
- 配置Nginx和Apache允许指定域名CORS跨域访问
前后端分离开发,导致前端项目需要跨域请求后端接口,解决方法有很多,本文只介绍两个: 1. 修改后端程序代码实现允许跨域请求 2. 修改服务器配置文件实现允许跨域请求 正文: 方法1:修改后端程序代码实 ...
- socket基本概念
1.socket 是什么? 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其 ...
- MYSQL,分别用一条语句交换两列的值与两行的值
测试表: CREATE TABLE `test` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, ` DEFAULT CHARSET=utf8 ...
- [论文笔记] Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment
Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment 简介 本文提出了一种网络结 ...
- word中打字会覆盖下一个字
insert键 误按了insert键,此时Word默认为改写模式,输入文本会覆盖后面的内容.
- App测试工具选择
一.功能测试自动化 a) 轻量接口自动化测试: jmeter, b) APP UI层面的自动化 android:UI Automator Viewer,Android Junit,Instrument ...
- Linux监控命令之==>vmstat
一.使用说明 vmstat 可以对操作系统的内存信息.进程状态.CPU 活动.磁盘等信息进行监控,不足之处是无法对某个进程进行深入分析. 二.用法及参数说明 -a:显示活跃和非活跃内存 -f:显示从系 ...
- AndroChef Java Decompile
With AndroChef Java Decompiler you can decompile apk., dex, jar and java class-files. It's simple an ...
- zstack分配的虚拟机的dns设置
环境: $ uname -a Linux 10-57-19-61 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x8 ...