C++linux下使用clog和重定向实现写日志

C++linux下使用clog和重定向实现写日志

  • 实现文件
  • 基本功能
  • 测试
  • 编译
  • 运行
  • 额外知识点

实现文件

LogUtil.hpp

/**
* 通用日志实现
* lsl
* 2024-06-04
*/#ifndef LOGUTIL_HPP
#define LOGUTIL_HPP
#include<iostream>
#include <time.h>
#include <cstring>
#define __FILENAME__ (strrchr(__FILE__, '/') ? (strrchr(__FILE__, '/') + 1):__FILE__)
char* __DATETIME__(){ char format[32]="%Y-%m-%d %X";time_t tt = time(NULL);struct tm ltm;localtime_r(&tt, &ltm);char*s=new char[32];strftime(s, 32, format, &ltm);return s; };
#define LogInfo(msg) (std::clog<<"["<<__DATETIME__()<<"][INFO]["<<__FILENAME__<<"]["<<__FUNCTION__<<":"<<__LINE__<<"] "<<msg<<std::endl)
#define LogWarn(msg) (std::clog<<"["<<__DATETIME__()<<"][WARN]["<<__FILENAME__<<"]["<<__FUNCTION__<<":"<<__LINE__<<"] "<<msg<<std::endl)
#define LogError(msg) (std::clog<<"["<<__DATETIME__()<<"][ERROR]["<<__FILENAME__<<"]["<<__FUNCTION__<<":"<<__LINE__<<"] "<<msg<<std::endl)
#endif // LOGUTIL_HPP

基本功能

三种日志类型,INFO,WARN,ERROR
日志携带日期时间
日志携带文件名、函数名和日志所在行。

测试

prog1.cc

#include<LogUtil.hpp>
int main(){LogInfo("测试"<<11<<"hahah ");LogWarn("测试2"<<11<<"hahah ");LogError("测试3"<<11<<"hahah ");return 0;
}

编译

g++ prog1.cc LogUtil.hpp -I./ -o logutil

运行

./logutil &>log_20240604.log
[root@localhost myPractice]# ./logutil &>log_20240604.log
[root@localhost myPractice]# cat log_20240604.log 
[2024-06-04 18:02:01][INFO][prog1.cc][main:3] 测试11hahah 
[2024-06-04 18:02:01][WARN][prog1.cc][main:4] 测试211hahah 
[2024-06-04 18:02:01][ERROR][prog1.cc][main:5] 测试311hahah 

额外知识点

  1. main函数是int类型,return 0说明程序正常退出。 通过命令 echo &? 能查看到退出情况。
  2. 重定向 < 输入,对应cin, 标准输出1>,对应cout, 错误输出2>,对应cerr,clog。
  3. 1>>tt.log 追加输出, 2>>tt.log, &>>tt.log 所有追加输出到一个文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LED驱动IC:HC2161,升压型LED恒流驱动ic,供应LED灯杯单节电池以上供电的LED灯串平板显示LED背光大功率LED照明

LED驱动IC&#xff1a; HC2161:升压型LED恒流驱动ic 概述&#xff1a;HC2161是一款高效率、高精度的升 压型大功率LED恒流驱动控制芯片。 HC2161内置高精度误差放大器&#xff0c;固 定关断时间控制电路&#xff0c;恒流驱动电路等&#xff0c; 特别适合大功率、多个高亮…

七年

七年 我&#xff0c;回来了&#xff0c;七年后。回看之前的文章&#xff0c;当初的情意浓浓&#xff0c;患得患失&#xff0c;真的是恍如隔世。 经历了重重波折&#xff0c;父母反对&#xff0c;奔赴广州&#xff0c;云南危机&#xff0c;房名危机&#xff0c;都没把我们拆散…

鸿蒙开发接口定制管理:【@ohos.configPolicy (配置策略)】

配置策略 配置策略提供按预先定义的定制配置层级获取对应定制配置目录和文件路径的能力。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本模块接口均为系统接口&#xff0c;三方应用不支持调…

Kaggle平台进行Python版本降级

前言 最近在复现语音合成模型VITS&#xff0c;由于目前没有算力故去Kaggle白嫖运算资源。 VITS的运行环境要求如下 Cython0.29.21 librosa0.8.0 matplotlib3.3.1 numpy1.18.5 phonemizer2.2.1 scipy1.5.2 tensorboard2.3.0 torch1.6.0 torchvision0.7.0 Unidecode1.1.1截至2…

21.过拟合和欠拟合示例

1. 背景介绍 在机器学习和深度学习中&#xff0c;过拟合和欠拟合是两个非常重要的概念。过拟合指的是模型在训练数据上表现很好&#xff0c;但在新的测试数据上效果变差的情况。欠拟合则是指模型无法很好地拟合训练数据的情况。这两种情况都会导致模型无法很好地泛化&#xff…

视频号小店,常见的违规条例!98%的商家必犯的违规细节!

哈喽~我是电商月月 做电商&#xff0c;不管哪个平台都有属于自己的规则条例&#xff0c;这些违规细节&#xff0c;一定要提前了解 所以今天&#xff0c;月月就给大家分享一下&#xff0c;做视频号小店的话&#xff0c;有哪些常见的违规细节 这里我们分三点讲解 一&#xff…

【分享】两种方法禁止修改Word文档

对于比较重要的Word文件&#xff0c;不想被随意编辑修改&#xff0c;可以试试以下两个方法&#xff0c;不清楚的小伙伴&#xff0c;一起来看看吧&#xff01; 方法1&#xff1a;设置“只读方式” 我们可以给Word文档设置以“只读方式”打开&#xff0c;这样就算编辑修改了文档…

如何通过SD-WAN提升企业沟通效率

在数字化飞速发展的今天&#xff0c;企业对大数据和实时商业数据传输的需求日益增长。传统的专线连接技术已无法满足企业对快速部署商业应用和高效网络连接的需求。在这种背景下&#xff0c;SD-WAN成为提升企业网络沟通效率的关键技术。 SD-WAN的灵活部署模式 SD-WAN提供了高度…

6月软考新通知:24下集成大概率是中级蕞简单的一门

2024下半年软考6月新通知&#xff1a; 一、24下软考考试时间安排&#xff1a; 24下半年软考报名时间&#xff1a;8月19日-9月15日 24下半年软考考试时间&#xff1a;11月9-12日 24下半年软考成绩查询&#xff1a;12月中&#xff08;预计&#xff09; 二、考情分析 24上软考…

09_JavaWeb会话

1.会话 HTTP是一种无状态协议&#xff1b; HTTP协议对于发送过请求或者响应都不做持久化处理具体来说就是客户端发送请求&#xff0c;服务器接收请求&#xff0c;但是服务器自身不会记录每一条请求都是由哪一个客户端发出的&#xff1b; 会话管理是通过Cookie和Session配合解…

【排序】插入排序,希尔排序

前面我们讲述了冒泡排序和选择排序&#xff0c;我们本章讲的排序方法是插入排序&#xff0c;插入排序是希尔排序实现的基础函数&#xff0c;大家一定要好好理解插入排序的逻辑&#xff0c;这样才能在后面学习希尔排序的时候&#xff0c;更容易的去理解&#xff0c;我们直接开始…

关于无法通过脚本启动Kafka集群的解决办法

启动Kafka集群时&#xff0c;需要在每台个节点上启动启动服务&#xff0c;比较麻烦&#xff0c;通过写了以下脚本来进行启停&#xff1b;发现能正常使用停止功能&#xff0c;不能正常启动Kafka&#xff1b; Kafka启停脚本&#xff1a; ## 以防不能通过shell脚本启动Kafka服务…

富格林:揭露黑幕平台保障安全

富格林指出&#xff0c;很多黑幕平台都会将自己包装得光鲜亮丽后&#xff0c;再出来诱惑投资者&#xff0c;使得投资者资金安全得不到保障&#xff0c;有苦说不出。富格林表示&#xff0c;黑幕平台的套路其实是非常常见的&#xff0c;只要投资者熟知并能够分辨出&#xff0c;就…

C盘扩容——只能删除C盘右边的磁盘对C盘进行扩展

winR弹出命令框 输入&#xff1a;compmgmt.msc 进入磁盘管理页面 注意&#xff1a;被删除盘如果有重要数据信息&#xff0c;请备份。 或者删除之前转移至其他盘&#xff0c;否则删除之后&#xff0c;则无法找回。 尤其是安装的软件。 规范安装目录十分重要。 将C盘右边的磁盘&a…

最全 Inno Setup 教程-[FILE] Flag参数

【1】此参数是一个附加选项的集合。可以使用空格将多个选项分隔开。 【2】支持以下选项&#xff1a; 32位 当在“Source”和“DestDir”参数中使用{sys}常量时&#xff0c;将该常量映射到32位系统目录。将“regserver”和“regtypelib”标志设置为将文件视为32位&#xff0c;…

安防综合管理系统EasyCVR视频汇聚平台GA/T 1400协议中的关键消息交互示例

在当今的信息化时代&#xff0c;公共安全防范日益成为保障社会和谐稳定的关键。视频监控系统作为现代安全防范的重要手段&#xff0c;正不断在公安、交通、城市管理等领域发挥着越来越重要的作用。而GA/T 1400协议视图库&#xff0c;作为公安视频图像信息应用系统的标准&#x…

Vue3 子组件访问父组件的方法 - 父组件访问子组件的属性或方法 - 子组件修改父组件的值

一。子组件访问父组件的方法 //父组件 <DialogEditing close-dialog"handleClose" /> const handleClose () > {};//子组件 const emit defineEmits(["closeDialog"]); const close () > {emit("closeDialog"); // 使用 };二。父…

健身日记之倒立俯卧撑学习——起始日2024.6.4

文章目录 前言 自我介绍 昔日计划 新目标计划 瓶颈突破尝试 参考视频及文章 前言 有轻微健身基础&#xff0c;正式接触街健五大神技&#xff0c;立志在两年内解锁全部&#xff0c;将有机会的进行日常训练和目标肌群锻炼&#xff0c;这里向大家展示我的计划和安排&#xf…

opencv-python(五)

opencv的颜色通道中顺序是B&#xff0c;G&#xff0c;R。 图像属性 import cv2img cv2.imread(jk.jpg) print(fshape{img.shape}) print(fsize{img.size}) print(fdtype{img.dtype}) shape&#xff1a;图像像素的行&#xff0c;列&#xff0c;通道 size&#xff1a;行数 X …

YonSuite收款通,助力企业618更快收款

随着电商节日“618”的临近&#xff0c;各大企业纷纷摩拳擦掌&#xff0c;准备在这场年中大促中大展身手。然而&#xff0c;随着销售额的激增&#xff0c;收款管理问题也愈发凸显&#xff0c;成为制约企业快速发展的重要瓶颈。在这个关键时刻&#xff0c;YonSuite收款通凭借其卓…