log4cplus v2.0库的简单使用

Qt/PyQt5等QFileDialog打开文件错误提示log4cplus:ERROR Qt/PyQt5等QFileDialog打开文件错误提示log4cplus:ERROR QFileDialog打开文件错误提示log4cplus:ERRORPyQt5示例代码错误日志信息可能原因解决途径其他 QFileDialog打开文件错误提示log4cplus:ERROR PyQt5示例代码 from PyQt5.QtWidgets import QFileDialog, QApplication,QPushButton,QMainWindow import sys class QMWXXXX(QMa 阅读详情
  •  前言

本篇接上一篇《imx6移植log4cplus库》。

  • 在程序中配置

 主程序:

#include <log4cplus/log4cplus.h>

using namespace std;
using namespace log4cplus;

int main()
{
    //用Initializer类初始化, 根据官方文档建议,放在main()函数最开始位置,替代旧版的log4cplus::initialize()函数
    log4cplus::Initializer initializer;

    //第1步:创建FileAppender,个人对日志需求是滚动更新且保留最新的,故使用RollingFileAppender
    log4cplus::SharedAppenderPtr fileAppender(new log4cplus::RollingFileAppender(
                                                  LOG4CPLUS_TEXT("/var/log/GuidanceLog/GuidanceLog"),
                                                  204800, 2, true, true
                                                  )
                                              );

    //第2步:设置FileAppender使用PatternLayout
    fileAppender->setName(LOG4CPLUS_TEXT("guidance"));
    log4cplus::tstring pattern = LOG4CPLUS_TEXT("%d{%y/%m/%d %H:%M:%S.%q} - %m%n");
    fileAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::PatternLayout(pattern)));

    //第3步:创建一个Logger实例,并设置其日志输出等级
    log4cplus::Logger guidanceLog = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT ("guidance"));
    guidanceLog.setLogLevel(log4cplus::INFO_LOG_LEVEL);

    //第4步:为Logger实例添加FileAppender
    guidanceLog.addAppender(fileAppender);

    //第5步:使用宏将日志输出
    for(int i = 0, j = 0; i < 10000; i++,j--){
        LOG4CPLUS_INFO(guidanceLog, "i = "<<i<<" j = "<<j);
    }

    return 0;
}

 RollingFileAppender构造函数如下:

RollingFileAppender(const log4cplus::tstring& filename,
                            long maxFileSize = 10*1024*1024, // 10 MB
                            int maxBackupIndex = 1,
                            bool immediateFlush = true,
                            bool createDirs = false);

函数参数解释:

filename:文件名,即日志保存到哪个文件,一般推荐用绝对路径,如:“/var/log/test”

MaxFileSize:输出文件的最大大小,默认值10*1024*1024 bytes(即10MB)。实际测试最小值为204800(即200kb),若设置值小于该值,则自动设为204800,且输出以下警告信息:

log4cplus:WARN RollingFileAppender: MaxFileSize property value is too small. Resetting to 204800.

注:该值若在配置文件中配置则支持MB和KB为后缀的值,如1MB、500KB. 

MaxBackupIndex: 日志文件的最大索引,用于限制输出日志文件的个数,默认值1。若该值为1,则最多只生成两个文件,如log,log.1;若该值为2,则最多生成三个文件,如log,log.1,log.2,以此类推。新日志会滚动覆盖旧日志。索引号越大,日志信息越旧!不带索引号(可理解为0)为最新的日志。如log.2是最旧的,log是最新的。

immediateFlush :true = 每次有append event事件,输出流就会被刷新到文件中;若为false,当程序崩溃时,很有可能最后几个日志事件实际上没有写入文件

createDirs :true = 指定的日志路径名中如果有文件夹不存在,则会创建文件夹;false = 与上述相反。此时,若路径中文件夹不存在,则将报错:

log4cplus:ERROR Unable to open file: ……

  • 使用配置文件

 配置文件:log.cfg

#配置格式:
#root logger: log4cplus.rootLogger=[LogLevel], appenderName, appenderName, ...
#non-root loggers: log4cplus.logger.logger_name=[LogLevel|INHERITED], appenderName, appenderName, ...
#LogLevel: TRACE,DEBUG,INFO,WARN,ERROR,FATAL
#logger_name与实例化的对象名一致

#配置GuidanceLog

log4cplus.logger.guidance=TRACE, A1

log4cplus.appender.A1=log4cplus::RollingFileAppender
log4cplus.appender.A1.File=/var/log/GuidanceLog/GuidanceLog
log4cplus.appender.A1.MaxFileSize=200KB # 1MB
log4cplus.appender.A1.MaxBackupIndex=3
log4cplus.appender.A1.ImmediateFlush=true 
log4cplus.appender.A1.CreateDirs=true
log4cplus.appender.A1.layout=log4cplus::PatternLayout
log4cplus.appender.A1.layout.ConversionPattern=%d{%y/%m/%d %H:%M:%S.%q} - %m%n

#配置其它Log同上

 主程序:

#include <log4cplus/log4cplus.h>

using namespace std;
using namespace log4cplus;

int main()
{
    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    //读取配置文件,参数即为配置文件路径
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("./log.cfg"));

    //创建Logger实例
    Logger guidanceLog  = log4cplus::Logger::getInstance("guidance");

    //使用宏将日志输出
    for(int i = 0, j = 0; i < 10000; i++,j--){
        LOG4CPLUS_TRACE(guidanceLog, "i = "<<i<<" j = "<<j);
    }

    return 0;
}

运行后,在/var/log下新建GuidanceLog文件夹,并保存最多4个日志文件:

 打开最新的GuidanceLog文件,如下:

相比较而言,一般建议使用配置文件,后期若想对日志文件进行调整,不需要去修改源代码,只需修改配置文件即可。 

  • 结束

优快云中很多文章所附的官方API参考链接已经失效了,此处更新:

log4cplus: Main Page

ps:相比较pugixml库的官方参考手册,这个参考手册对新手的确不是很友好 ~~o(>_<)o ~~

2022-3-9 更新 

本想简单封装一下,Log_C为封装后的类名,并将以下两步封装成一个初始化函数:

    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    //读取配置文件,参数即为配置文件路径
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("./log.cfg"));
void Log_C::initLogger(const string &cfgFilePath)
{
    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    //读取配置文件,参数即为配置文件路径
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(cfgFilePath));
}

然后在main函数中调用,发现报错:

int main()
{
    Log_C::initLogger("log.cfg");

    /** 省略 **/
}

报错如下:

 看信息猜测是初始化方式不对??

然后,把:

    log4cplus::Initializer initializer;

移动到封装的函数之外再试:

void Log_C::initLogger(const string &cfgFilePath)
{
//    //用Initializer类进行初始化
//    log4cplus::Initializer initializer; //移到函数外,直接在main函数执行

    //读取配置文件,参数即为配置文件路径
    PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(cfgFilePath));
}

int main() {
    
    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    Log_C::initLogger("log.cfg");

    /** 省略 **/
}

可行!!

所以, 结论是:log4cplus的初始化应该直接放在main函数下执行?不可通过其它函数调用的方式?有待研究。

2022-3-10更新

今天又经过了一番测试,发现:“用Initializer类进行初始化”和“读取配置文件”这两步骤不可放在同一个函数中调用。接着昨天的测试,单独将Initializer初始化移出初始化函数或单独将读取配置文件移出初始化函数,就都正常了。原因不明,暂搁置。

作为解决方案,把初始化和读取配置文件分成两个静态成员函数来实现。

2022-3-31 更新

如果想在程序中关闭相应级别日志的输出,比如DEBUG级别的,可使用宏定义:

#define LOG4CPLUS_DISABLE_DEBUG

但是,宏定义需要放在包含log4cplus库的头文件的前面,如

#define LOG4CPLUS_DISABLE_DEBUG

#include <log4cplus/log4cplus.h>

遗留问题:宏定义的开启或关闭是全局的,如果想在每个cpp文件中单独控制开启或关闭,如何实现?因为调试程序时,当某个cpp模块调试好了,就把这个模块的所有debug信息关闭,不用输出。但是当前正在调试的模块则需要输出。使用log4cplus如何实现,待研究。

log4cplus_ARM使用时的问题(头文件、第三方库链接) log4cplus使用时的问题环境:Code::Blocks16.01 (IDE)  deepin(OS) arm-none-linux-gnueabi-gcc (Sourcery CodeBench Lite 2014.05-29) 4.8.3 20140320(toolchain)1 头文件问题1 xxx.h: No such file or directory 找不到文件分析:codeblo... 阅读详情

相关推荐

c++ VS2019中使用Log4cplus打印日志最新介绍、详细编译过程及使用

VS2019中使用Log4cplus打印日志 简述 一、log4cplus介绍 二、log4cplus下载 三、log4cplus配置 3.1 对log4cplus文件借助vs2019进行编译 对目标程序进行配置 四、测试 五、扩展知识补充 ---- vs2019附加库、包含目录等配置

qq_39838607的博客 2529

aubo-i5机械臂加载进rviz遇到的问题

aubo-i5 加载进rviz的部分问题及解决方案

qq_51640367的博客 1284

Microsoft Visual Studio 2010下log4cplus的安装,集成,测试

log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置。  ### 简介 ### log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活

噬日者 9927

C++日志库log4cplus 2.0.2使用(QT5.10+mingw32)

C++日志库log4cplus 2.0.2使用(QT5.10+mingw32) 前言 作为一个码农最抓狂的莫过于自己的程序出BUG了,更崩溃的是我们不能时时刻刻跟踪程序的运行,程序不用吃饭(人家吃电),可是码农需要吃饭休息啊,这个时候我们就很有必要引入一个日志系统(配合dump文件)来记录程序的整个运行周期,以便分析运行状况。这里我们使用的是log4cplus,没错他就是安卓上大名鼎鼎的日志库lo...

haohaohaihuai的博客 1764

VS2013下使用log4cplus

最近工作需要,需要使用log库来完善日志类记录,由于之前没什么经验,遇到了很多困难。 工作环境: X64+VS2013社区版 log4cplus官网下载路径:https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/1.1.3/  具体经历如下: 1:下载了最新版的log4cplus-1.2.0.7源代码。进入.

qq_35850668的博客 2603

C++ 日志 log4cplus 使用与配置指南

log4cplus多种日志级别(TRACE, DEBUG, INFO, WARN, ERROR, FATAL)多种输出方式(控制台、文件、滚动文件、远程 socket 等)自定义日志格式(通过 Layout)配置文件驱动(支持 properties 文件)线程安全(默认启用)// 添加自定义级别(需继承) // 一般不推荐,除非有特殊需求log4cplus是 C++ 项目中一个成熟、稳定、功能丰富的日志解决方案。它通过的设计模式,实现了高度的灵活性和可配置性。

h a 6 6 6 c k 为 你解决复杂难题! 399

linux环境下log4cplus编译安装及简单使用

linux环境下log4cplus编译安装及简单使用

Turn X7 1584

log4cplus使用说明

log4cplus使用说明

c++日志库log4cplus使用

log4cplus是C++实现的常用日志库,具有丰富的日志等级、多线程安全、支持输出到终端或文件等功能

weixin_45312249的博客 1402

QT5.15.2使用的log4cplus资源

软件包以及编译出来的库

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

构建一个带 GPU 支持的深度学习开发镜像;使用 PyTorch 2.5.1(CUDA 12.4)环境;发布并托管 Docker 镜像至 Docker Hub;验证 GPU 环境正常运行!🎉 这将极大提升你的项目部署效率,尤其是在多人协作或跨平台部署场景中。

用大模型重构生活:猫奴程序员的AI智能日常记录 1576

log4cplus 1.2.0 编译,使用记录

需求:根据日期建立文件夹,根据文件大小分包,保存一定时间内的日志 实际上就是RollingFileAppender和DailyRollingFileAppender2个appender的结合 先说结论:官方appender实现不了 网上搜索说TimeBasedRollingFileAppender能实现这种需求,但是本机用的版本比较老,没有 这个appender 由于使用的是vs2008, ...

ybn187的专栏 925

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3270

我配置log4cplus的时候遇到的各种错误

编译log4cplus的时候没遇到任何问题,在使用的时候遇到了2个问题 LOG4CPLUS_WARN LOG4CPLUS_DEBUG 未定义 解决方法:添加头文件 #include error LNK2019: 无法解析的外部符号 "const log4cplus::Appender::`vbtable'" (??_8Appender@log4cplus@@7B@),该符号

kayfandi的专栏 5028

西门子1200数据块BD详解

定义 DB(Data Block)是用于存储用户数据的区域,分为两种类型:核心作用 四、DB块的访问方式 1. 全局DB访问 符号访问(优化块): 绝对地址访问(非优化块):(假设SetPoint占用2字节) 2. 背景DB访问 与FB关联后自动生成,通过FB调用时传递: 五、高级功能与注意事项 数据块的初始化运行时修改DB数据块的下载常见问题 通过合理使用DB块,可显著提升程序的可读性和可维护性。建议优先启用优化块访问并使用符号名编程。如何使用DB数据块 数据块用于存储程序数据。因此,数据块

weixin_51020122的博客 3429

EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站

以上就是搭建xenomai系统及自己的IGH主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3158

log4cplus与g3log性能测试

https://kjellkod.wordpress.com/2015/06/30/the-worlds-fastest-logger-vs-g3log/ g3log作者对spdlog的对比和嘲讽 http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-free-queue-for-c++一个lockfree的queue,被g3...

wqfhenanxc的专栏 2839

YOLOv8的特征蒸馏代码应用讲解(CWD/MGD/mimic/在线蒸馏/逻辑蒸馏)

基于YOLOv8的逻辑蒸馏、特征蒸馏、在线蒸馏等方法代码介绍。

qq_41920323的博客 2582

log4cplus使用

头文件 #pragma once #include <string> #include <log4cplus/logger.h> #include <log4cplus/fileappender.h> #include <log4cplus/layout.h> #include <log4cplus/consoleappender.h> #include <log4cplus/loggingmacros.h> using namesp

mom0123的博客 334

点云配准3:3d-ndt算法在pcl上的实现以及参数设置

3d-ndt算法在pcl上的使用方法以及参数设置

诺有缸的高飞鸟的博客 7891

Python爬虫实战:百度贴吧帖子与评论抓取全攻略(附舆情分析技巧)

基础配置# 要爬取的贴吧名称(替换成自己需要的,比如“XX手游吧”)TIEBA_NAME = "XX手游"# 分页参数(每页50条帖子,可根据需求调整)PAGE_NUM = 3 # 爬取前3页帖子,共150条# 请求头(从浏览器复制自己的,更真实)Win64;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2384

C++工程实践使用log4cplus打印日志

使用log4cplus打印日志。

大雄的博客 716

带洞多边形如何分成凸多边形集合,对多边形进行凸分解?

摘要: 凸分解是计算几何中的经典问题,分为三角化和凸分解两种方法。三角化将带洞多边形转换为简单多边形并分割为三角形,常用算法包括耳剪法、单调多边形三角化等。凸分解则生成更少但更大的凸多边形,常用Hertel-Mehlhorn算法或基于凹点的递归切割。实际应用中建议使用CGAL、Poly2Tri等成熟库处理。三角化适合图形渲染,凸分解更适用于物理引擎和路径规划。关键步骤包括数据校验、选择合适的算法及后处理优化。

插件开发 354

vs2008中log4cplus的配置

在项目中需要添加日志系统,网上找了几个c++的日志系统,发现c++中的日志系统log4xx,log4cplus,glog文档都比较少,然后就一个个尝试,glog首先被排除外了,它好像不能对输出进行配置。然后重点放在了log4xx和log4cplus上面,它们的名字和log4j比较类似,貌似也是apache项目的产物。首先尝试的是log4xx,但是它的配置比较麻烦,除了在apache的链接中下载了l

2413

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

我个人的log4cplus-1.2.2的编译与测试使用,Win7+VS2013环境

log4cplus源码下载: https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/ https://github.com/log4cplus/log4cplus log4cplus官方示例: https://sourceforge.net/p/log4cplus/wiki/CodeExamples/ 一、编译...

$firecat利白的代码足迹$ 1874

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: imx6移植log4cplus库
下一篇: linux指定目录下按文件创建时间清理旧文件的实现
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值