C++高性能服务器
日志系统
前言
本文内容:日志系统 所属专栏:Linux高性能服务器 作者主页:紫荆鱼 创作时间:2022-2-26
返回目录(建议收藏):Linux C++高性能服务器Sylar跟写
[文章目录]
日志系统
1、运行展示2、遇到的困难3、代码 1、运行展示
最下面为输出格式日志信息
2、遇到的困难
这是困惑我1个月的问题,但是我发现代码的逻辑一点也没有问题,于是我百度“段错误(核心已转储)”是什么原因造成的:
栈溢出:于是我ulimit改变栈的大小,但是无效!内存泄漏: 我想到的是智能指针shared_ptr可能没有及时释放,导致内存泄漏,于是我排查了很久,发现一切正常阿。这一次我真的疯了,TM难道有野指针?内核段访问:不可能是这个原因,我彻底疯了。
我慢慢按照执行的顺序排查,发现“段错误点”,如下代码:
//m_formatter是LogFormatter的对象m_formatter->format(std::cout, logger, level, event);
我发现对象调用public function居然无法访问数据成员,天哪!难道代码也六亲不认? 这个问题困惑我3天时间,于是我怀疑:
shared_from_this()
返回的是另一个对象,但是要访问的是另一个对象的数据,造成越界访问,于是我很坚信就是这个错误,就这样有花掉我很多时间。最后依然无效。
最后方案:太搞笑了,我把
m_formatter.reset(new LogFormatter("%d{%Y-%m-%d %H:%M:%S}%T%t%T%N%T%F%T[%p]%T[%c]%T%f:%l%T%m%n"));
在构造函数中初始化了另一个类的m_formatter。这下我终于明白了!
3、代码
1.CMake
CMAKE_MINIMUM_REQUIRED(VERSION 3.16.3)PROJECT(angel)SET(CMAKE_VERBOSE_MAKEFILE ON)SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -rdynamic -O0 -ggdb -std=c++11 -Wall -Wno-deprecated -Werror -Wno-unused-function")SET(LIB_SRC angel/log.cpp )ADD_LIBRARY(angel SHARED ${LIB_SRC})#ADD_LIBRARY(angel_static STATIC ${LIB_SRC})#SET_TARGET_PROPERTIES(angel_static PROPERTIES OUTPUT_NAME "angel")ADD_EXECUTABLE(test tests/log_test.cpp)ADD_DEPENDENCIES(test angel)TARGET_link_LIBRARIES(test angel)SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
log、h
#ifndef __ANGEL_LOG_H__#define __ANGEL_LOG_H__#include #include #include #include #include #include #include #include #include
log.cpp
#include "log.h"#include