YLog4C
本文目录导航:
YLog4C--跨平台通用C++日志类
YLog4C是一个通用的C++日志类,已在Windows、Linux和Arm Linux平台下用于多个实战项目。
本类代码独立使用,只有一个cpp和一个h文件,不依赖其他第三方库和文件。
基本上只需把文件加到工程即可直接编译使用,偶尔有编译不过的,也只是头文件包含问题,修改对应包含即可。
这是laody完全自主开发的代码,若有问题或建议,请联系Email: 认为一个好工具类的使用应该是“拿来就用,用完不管”,YLog4C类也依据此原则,没有任何多余步骤,包含YLog4c.h,直接使用:编译运行后,直接在运行目录创建log文件:程序同时在控制台和日志文件输出如下内容:如在Linux或其他非Visual C++环境,请在工程目录创建stdafx.h文件,内容可为空。
程序默认行为如下所示,可调用接口进行个性化设置,设置立即生效。
1、日志路径为程序运行目录。
2、日志文件名格式:目录+应用程序名称+“_+日期+,应用程序名称为运行文件名,从首个“-”符号截断,如“ylog-v1.0”将截断为“ylog”。
3、每个日志文件最大100M,超过此尺寸,原文件更换为“xxxx_”(N为从1递增的整数),并建立新的日志文件。
4、每天最多4个日志文件,超过此数量,自动删除后缀最大的日志文件。
1、按日志级别由高到低,分别有Fatal、Error、Warn、Info、Debug和Buff六个调用接口,除Buff接口调用格式固定外,其他接口均与printf函数相同,采用可变参数格式。
2、低于当前已设置级别的调用不会输出任何内容,比如假设系统正常上线运行后,设置了级别为Info,则高于此级别的Fatal、Error、Warn、Info调用会输出,而低于此级别的Debug和Buff被屏蔽,不输出任何内容。
3、日志输出的日期通常已在文件名体现,因此日志行只按时分秒格式输出时间。
Info调用输出的格式是“hh:mm:ss 日志内容”,其他调用在日志内容前插入调用点的源文件名称和行数,方便问题定位。
4、为了能插入文件名和行数,调用实际采用宏定义方式,因此虽然类定义了LogBuff等公共函数,但请不要直接调用,而是调用前面描述的六个输出调用接口。
YLog4C不需任何设置就能工作的很好,实际上,笔者通常在项目中只做日志文件目录和日志级别两种设置。
个性化设置函数是静态成员函数,更改类的静态全局变量,立即生效,因此可以在系统运行过程中动态更新日志的行为。
设置应用程序名称、日志文件目录、日志文件的最多个数、是否输出到控制台、是否输出到文件、是否输出到函数、设置日志级别、是否每天一个文件、设置日志文件最大长度、设置是否打印线程ID、设置是否实时刷新等功能。
文件已发布在github上,网址: laody555/YLog4C。

史上最详细的网络编程实战教程
本文通过介绍libhv——一个比libevent、libev、libuv更易用的跨平台国产网络库,旨在提供网络编程实战教程,帮助读者更好地理解TCP/UDP/SSL/HTTP/WebSocket网络编程。
libhv提供了带非阻塞IO和定时器的事件循环,适用于开发TCP/UDP/SSL/HTTP/WebSocket客户端/服务端。
项目/ithewei/libhv码云镜像/libhv/技术交流群libhv博客专栏/catlibhv源码分析/qu1993/calibhv教程00--目录libhv是一个跨平台网络库,适用于开发TCP/UDP/SSL/HTTP/WebSocket客户端/服务端。
libhv教程01--介绍与体验libhv是一个高性能事件循环库,寓意High-performance event loop library(高性能事件循环库)。
Linux与mac用户可直接执行getting_脚本体验libhv编写的http服务端httpd与http客户端curl的便利。
运行效果如下:httpd与curl代码在examples目录下,是完整的命令行程序。
可直接通过浏览器访问,地址栏输入:127.0.0.1:8080/、127.0.0.1:8080/downloads/、127.0.0.1:8080/ping。
libhv教程02--编译与安装libhv提供Makefile与cmake两种构建方式。
推荐类Unix系统使用Makefile,Windows平台编译请使用cmake。
确保已安装openssl,或自行安装。
libhv源码编译通过github Actions确保在三个主要平台(linux、windows、macosx)上顺利通过编译。
libhv教程03--链库与使用生成头文件与库文件后,编写测试程序验证链库。
测试代码示例见examples/hmain_。
编译运行后,可以看到hmain_test程序提供了包括打印帮助信息、打印版本信息等功能。
libhv教程04--编写一个完整的命令行程序一个完整的命令行程序应具备哪些功能?libhv提供示例代码hmain_test,参考examples/hmain_实现。
编译运行后,可以看到程序具备打印帮助信息、打印版本信息、测试配置文件、后台运行等功能。
libhv教程05--事件循环以及定时器的简单使用事件循环概念的前置说明对于理解网络编程至关重要。
libhv的event模块封装了多种平台的IO多路复用机制,提供了统一的事件接口。
此模块包括IO事件、定时器事件、idle空闲事件、自定义事件。
libhv教程06--创建一个简单的TCP服务端以TCP echo server为例,使用libhv创建TCP服务端。
编译运行后,类unix系统可使用nc作为客户端测试,windows端可使用telnet作为客户端测试。
libhv教程07--创建一个简单的TCP客户端完整TCP/UDP客户端程序参考examples/nc.c,c++版本示例代码见evpp目录下的TcpClient_。
libhv教程08--创建一个简单的UDP服务端以UDP echo server为例,使用libhv创建UDP服务端。
编译运行后,可使用nc作为客户端测试。
libhv教程09--创建一个简单的UDP客户端完整TCP/UDP客户端程序参考examples/nc.c,c++版本示例代码见evpp目录下的UdpClient_。
libhv教程10--创建一个简单的HTTP服务端以HTTP协议为例,使用libhv创建HTTP服务端。
c版本示例代码参考examples/http_server_,c++版本示例代码参考evpp目录下的HttpServer_。
libhv教程11--创建一个简单的HTTP客户端完整HTTP客户端示例代码参考examples/,模拟实现了curl命令行程序。
libhv教程12--创建一个简单的WebSocket服务端以WebSocket协议为例,使用libhv创建WebSocket服务端。
示例代码参考examples/websocket_server_。
libhv教程13--创建一个简单的WebSocket客户端WebSocket客户端示例代码参考examples/websocket_client_。
libhv教程14--实现一个纯C版jsonrpc框架使用libhv实现一个200行内的jsonrpc框架,借助libhv提供的接口hio_set_unpack设置拆包规则,大大节省了处理粘包与分包的成本。
libhv教程15--实现一个C++版protorpc框架实现一个200行内的C++版protorpc框架,使用evpp模块+protobuf实现。
创作不易,如果你觉得不错,请在github上star下吧。
C/C++实战009:解决errorC2065未声明的标识符
今天编译程序的时候出现一个奇怪的错误,全是******未声明的标识符错误,程序是在VS2012下调试的,用的是之前在别的电脑写好的程序,也编译通过了,只是现在拿过来对程序进行了一些小的修改而已。
通常在定义某个类型的变量时我们都需要引入相应的头文件,系统才能别该标识符,比如说我们要定义个string类型的变量,那么我们就要引入头文件和空间名才能使用string标识符:而这里我也将该引入的头文件都引入 了程序当中,可是问什么就是无法识别相应的标识符呢?在警告栏发现头文件信息并没有被识别,而是被系统在查找预编译头使用时跳过了,因为如果在中未引入相关.h文件出现这样的错误很正常,但是现在是已经引入了相关的头文件,却还是出现了error C2065、error C3861、error C2228...的错误。
也就是说头文件在这里并没有生效,而是被直接跳过了,自然其对应的标识符也会无法识别的。
然后我把#include stdafx.h 头文件移到最上面在尝试调试,结果竟然不在报未声明的标识符错误了,直接编译成功了。
这里还有个错误提示,当遇到无法解析外部符号时我们要查看下我们引用的文件可能不全,这里我就是没把“”这个文件引入到项目中才导致错误的(将这个文件添加到项目目录中在引入项目即可)。
这次做个记录,以后就知道了,原来引入头文件还是有顺序之分的,不能随意的放置头文件,位置也要放正确,不然又莫名其妙的报错了。
深入了解Java日志框架:JUL�Logback�Log4j�Log4j2的实现与应用
google教程python,google python style guide
weblogic日志空间满的影� (weblogic)
Verilog状�机 以检测1101�列为例 (verilog)
Verilog状�机 (verilog HDL)
用verilog设计一个å�Œæ¥4ä½�二进制å�¯é€†è®¡æ•°å™¨ (用verilog设计一个å��进制计数器)
verilogè¯æ³•å¦ä¹ 2 完全掌æ�¡æœ‰é™�状æ€�机的写法 (verilog)