使用ACE日志设施(二)详细介绍(v4)

ACE框架学习 ACE Reactor框架及ACE Reactor实现学习 阅读详情

详细介绍ACE日志设施
基本的日志输出设施

用来输出日志的宏有三个:ACE_DEBUG、ACE_ERROR、ACE_TRACE(这三个宏只需要用ACE_DEBUG即可)

其中前两个一模一样,仅仅是名字不同而已。

ACE_DEBUG((  severity,     formatting-args     ));

ACE_DEBUG((  severity,     formatting-args ,   var_list ));

ACE_DEBUG((  日志级别,   输出内容和格式,  输出变量列表    ));

日志级别:severity
  1. LM_DEBUG  :你的调试信息
  2. LM_INFO :你的业务信息
  3. LM_WARNING:你的告警信息
  4. LM_ERROR:你的错误信息

日志级别的配置(比如)

 -p DEBUG|~INFO|~ERROR|~WARNING
上面的配置表示输出DEBUE级别,其他的不输出),各级别都是平行的关系

格式化输出各种类型的变量:

formatting-args为格式化参数类似printf()函数,格式如下:

例如:

ACE_DEBUG((LM_INFO,"CPU id[%Q] find\n",id));//id 为long long 类型

ACE_DEBUG((LM_ERROR,"can't find id[%d] \n",id));//id 为int类型

 日志重定向及其格式化

日志重定向之前最好清除原来的定向

void clr_flags (u_long f);

之后设置要重定向的地方

void set_flags (u_long f);

日志重定向的参数如下:

例如:

    ACE_LOG_MSG->set_flags(ACE_Log_Msg::STDERR | ACE_Log_Msg::VERBOSE);
显示如下:

2014-09-24 10:43:41.096@<local_host>@2728@LM_ERROR@ACE_INET_Addr::ACE_INET_Addr: <unknown>: Invalid argument
2014-09-24 10:43:41.097@<local_host>@2728@LM_ERROR@[2014-09-24 10:43:41.097001][line:533]ACE_Asynch_Write_Dgram::recv: address family not supported
请按任意键继续. . .

 

多线程动态配置日志

使用ACE_Service_Configuration模式动态配置日志

切记:
让事件循环线程和写日志的线程分开(否则不打印日志)

可以更加详细的配置日志,参考:http://blog.youkuaiyun.com/bat603/article/details/2441905

其中ACE_Service_Configuration配置的最小示例参考:http://blog.youkuaiyun.com/calmreason/article/details/21049259 其中有配置文件的存放和使用等详细信息。

示例:


#include <iostream>
#include <string>
#include "ace/Log_Msg.h"
#include "ace/Service_Config.h"
using namespace std;
#include "ace/Task.h"
#include "ace/Reactor.h"

class TestLogTask : public ACE_Task<ACE_MT_SYNCH>
{
public:
    int open(void* n)
    {
        ACE_DEBUG((LM_DEBUG, "(%t) TestLogTask opened\n"));
        //Activate the Task
        activate(THR_NEW_LWP,*static_cast<int*>(n));
        return 0;
    }
    int svc(void)
    {
        size_t line = 1000;
        for (size_t i =0;i<line;++i)
        {
            ACE_DEBUG((LM_ERROR,"this is line %d*************************************************************************\n",i));
            ACE_DEBUG((LM_DEBUG,"this is a line %d*************************************************************************\n",i));
            ACE_DEBUG((LM_WARNING,"this is a line %d*************************************************************************\n",i));
            ACE_DEBUG((LM_INFO,"this is a line %d*************************************************************************\n",i));
        }

        cout<<"run svc finished!"<<endl;
        return 0;
    }
};

int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) 
{

    if (ACE_Service_Config::open(argc,argv,
        ACE_DEFAULT_LOGGER_KEY,1,0,1) < 0)
    {
        ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%p/n"), ACE_TEXT("Service Config open")), -1);
    }

    TestLogTask t;
    //创建三个线程同时打印
    int thread_number = 3;
    t.open(&thread_number);


    ACE_Reactor::instance()->run_reactor_event_loop();

    ACE_Thread_Manager::instance()->wait();

    return 0;
}


配置文件配置日志:
(1)在可执行程序的当前目录下创建文本文件 svc.conf
(2)文件svc.conf内容是

dynamic Logger Service_Object * ACE:_make_ACE_Logging_Strategy() "-s log.out  -f  STDERR|OSTREAM|VERBOSE_LITE  -p DEBUG|~INFO|~ERROR|~WARNING -i 1 -N 10 -m 20000 -o -w"

由于20000指定了日志文件过大,所以没拆分,如果设置为100是会拆分的(已经验证,读者也可以自己试试);之所以设这么大,是为了方便后面验证三个线程是否都在一直打印

输出截图:(说明三个线程都打印到了最后一条)


上图是其中一个线程打印的最后一条日志


上图是剩下的两个线程打印的最后两条日志。

示例下载与运行:

本示例下载地址:http://pan.baidu.com/s/1c01svcO点击打开链接

说明:

直接运行Debug目录里面的exe即可看到效果,可以先把原来的log文件删除

如果你要重新编译项目,项目VC++属性里面有include路径和library路径,你要确定这两个路径里面有ace目录和lib目录。

如果你的两个目录和我的不一样,那就替换成你自己的对应的ACE的头文件路径和库文件路径,这个两个路径只能保证你编译,不能保证运行,如果你要运行就把你自己的ACE库文件拷贝到项目的Debug目录替换我给你的默认库文件。

详细设置参考:http://blog.youkuaiyun.com/calmreason/article/details/38082009点击打开链接


切记:
让事件循环线程和写日志的线程分开

为什么要使用ACE日志策略?
 因为使用ACE日志策略可以使我们以配置的方式对日志输出进行管理
 更为重要的是,其利用配置参数可以控制日志输出中的各种问题,
 如:可以配置当应用的日志文件到达指定尺寸是,它能够换用新的日志文件
 也可也配置要保留的文件最大数目
 总之,用上ACE日志策略,很多麻烦的事情你都不用管了

ACE日志策略
使用各种特殊标记来表示你打算让日志如何运行:
 上面的配置文件我们已经使用了-s -f -p参数,下面列出一些常用参数的简单说明
 -s 指定文件输出时的文件名
 -f 指定输出的目的地:如OSTREAM ,STDERR,LOGGER等;其中STDERR指控制台;
 -p 指定输出或者禁止输出的级别,如-p DEBUG|~INFO|ERROR|~WARNING ,对四种日志界别分别指定是否打印,注意这里不是LM_DEBUG、LM_INFO等

 -m 指定日志文件的最大尺寸
 -N 指定创建的日志文件的最大数目
 -w 让日志文件在启动和重新配置时被清除
 
ACE日志策略其他
 你是不是觉得这种配置文件的方式过时了呢?
 是的,过时了,所以ACE4.3版后就提供了XML方式的配置文件,并且提供了自动转换以前的配置文件到XML配置文件的方式

关于Linux下使用日志设施:

Linux下使用日志设施和Windows下的使用方法一模一样
(1)在生成可执行程序的当前目录下新建svc.conf
(2)svc.conf里面写配置信息
(3)让你的程序在运行时可以找到ACE.so
注意:生成的日志也出现在当前目录。如果你的程序运行不起来,应该不是代码的问题,而是你的编译器如何找ACE.so,运行时,你的程序如何找到ACE.so的问题。

这里说明一下Linux下使用动态链接库的方法:
(1)一般在Linux下安装程序的时候,程序会修改系统环境变量,使得你可以直接使用这个软件;
(2)如果安装之后是一些动态链接库,这些动态链接库文件也会放在对应的环境变量指定的目录里;
(3)在你编译的程序运行时,你的程序会到系统能提供的环境变量对应的路径里找有没有这个动态链接库文件;
(4)但是有时候安装程序提供的环境变量路径不一定是系统路径,这时候你的程序就找不到它,也就运行不起来了。这时候可以另一个环境变量就很重要了:
export LD_LIBRARY_PATH=${ROOT}/lib:/usr/local/lib:${ROOT}/lib/ace
(4.1)把你的程序需要的so放到上面设置的地址里
(4.2)让这个环境变量生效(执行山门的语句,或者将语句放到脚本里source执行)
ACE简介以及ACE_DLL动态库操作类的使用  1 引言接触ACE已经有长一段时间了,但一直来没有应用的实际需求,因此这方面的学习进展一直很慢,到目前才初步学习了一下日志、TCP/UDP简单网络程序的编写。最近由于工作需要的驱使,学习了ACE_DLL这个类。下面我将从一个完全初学者的角度,谈谈如何认识和了解ACE。2 初识ACE刚开始听到ACE这个词,我就对它产生了兴趣,因为据说它提供了跨平台的网络编程,能够在UNIX下跑 阅读详情

相关推荐

交换芯片数据通路四大核心微架构深度解析

数据通路是交换芯片性能的物理根基,决定着低延迟、高吞吐与突发承载能力。其本质是在硅片约束下对带宽、时序、功耗与统计复用的系统性权衡。Crossbar提供确定性低延迟但受RC延迟与功耗制约;VOQ通过虚拟队列隔离输出争抢,却引入仲裁复杂度与内存开销;Shared Buffer依托统计复用提升缓存利用率,但面临碎片化与管理策略挑战;Cell Fabric以固定长度cell重构交换粒度,在AI与金融等小包敏感场景实现尾延迟稳定。这些架构并非替代关系,而是面向不同网络不确定性(如流量不对称性、突发强度、包长分布)的

weixin_32667955的博客 189

ACE中的Debug的调试及日志输出

ACE_DEBUG介绍及日志输出 ACE_DEBUG  常规的一些输出消息   ACE_ERROR  会提供程序出错的一些低级消息 2个宏的用法上是一致的   ACE_DEBUG(错误级别,"格式串",变量1...变量N)   其中部分错误级别系统定义如下:    LM_SHUTDOWN = 01,系统死机级别     LM_TRACE = 02,跟踪级别

zhghost的专栏 1907

深入构建加密货币价格预测系统:从数据获取到模型优化的完整指南!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1276

ace日志详细解读

ACE_DEBUG介绍及日志输出 ACE_DEBUG  常规的一些输出消息    ACE_ERROR  会提供程序出错的一些低级消息 2个宏的用法上是一致的   ACE_DEBUG(错误级别,"格式串",变量1...变量N)      其中部分错误级别系统定义如下:    LM_SHUTDOWN = 01,系统死机级别     LM_TRACE = 02,跟踪级别     LM_

liyang_nash的专栏 1338

Vivado IP核与约束文件管理指南:解决OOC警告、COE文件丢失与Block Design复用

本文详细介绍了Vivado IP核与约束文件管理的系统化方法,包括解决OOC警告、COE文件丢失与Block Design复用等常见问题。通过IP核锁定机制、分层约束架构和动态约束技术,提升FPGA工程的健壮性和团队协作效率,特别适合中大型项目开发。

weixin_30887919的博客 430

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

丨汀、的博客 511

ACE_DEBUG介绍及日志输出

  ACE_DEBUG  常规的一些输出消息   ACE_ERROR  会提供程序出错的一些低级消息 2个宏的用法上是一致的   ACE_DEBUG(错误级别,"格式串",变量1...变量N)   其中部分错误级别系统定义如下:    LM_SHUTDOWN = 01,系统死机级别     LM_TRACE = 02,跟踪级别     LM_DEBUG = 04,D

TAO工作室Stone Jiang的专栏 6040

YoloV10改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。改进方法简单高效,需要发论文的同学不要错过!

m0_47867638的博客 1094

ACE_DEBUG的溢出错误

 ACE_DEBUG的溢出错误 这个bug又是inmore发现,错误定位ACE_DEBUG在字符串处理中,可能会引发abort。这个bug在5.6.X,和5.4.X(不能确认),5.7.0的版本都存在,我提交了相应的bug后,也许会在5.7.1版本修正。我们可以用一个简单的程序验证这个BUG。#include #include #include  int main(

C++是促进脑死亡的最佳方式 3961

【CVPR2025 DEIM】超详细!手把手训练自己的数据集教学:从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。本文在win系统上训练,最强实时目标检测算法!

本文详细介绍了CVPR2025 DEIM目标检测模型的完整使用流程。内容包含:1)源码下载与虚拟环境配置;2)Visdrone2019数据集准备与配置文件修改;3)训练参数设置及Windows系统常见问题解决方案;4)模型验证、推理测试及热力图生成方法。特别针对Windows用户提供了虚拟环境配置指导,并详细说明了数据集路径设置、参数调整等关键步骤。通过本文的指导,小伙伴可以快速掌握DEIM模型的使用方法,用于学术论文研究和实验分析。

Ai缝合怪、助力小伙伴高效发论文 7636

Transformer实战(39)——多模态生成式Transformer

能够理解多种类型输入的模型被称为多模态模型。多模态学习是人工智能 (Artificial Intelligence, AI) 领域的重要研究方向之一,长期受到众多研究人员的关注。本节将介绍使用多模态模型的生成式 AI,包括文本到图像 (text-to-image) 和文本到音乐 (text-to-music) 的生成模型。将介绍 Stable Diffusion 及其工作原理,同时也将介绍 MusicGen 和 AudioGen 模型。

盼小辉丶的博客 2423

ACE日志输出的几种重定向方式

初学ACE,将自己的一些总结放在这里与大家分享,希望能有所帮助。不当之处恳请大家指正。 1. 输出到stderr ACE输出的默认方式,将日志输出到控制台。如果希望从其他的重定向方式切换到stderr,可以采用如下的方式。 1 ACE_LOG_MSG->open (0, ACE_Log_Msg::STDERR); 2 ACE_DEBUG ((LM_INFO, ACE_TEXT ("

3810

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2871

多线程中使用ACE日志策略示例

多线程中使用ACE日志策略示例2009年10月26日0. 本文介绍    本文通过代码,演示了如何在多线程中使用ACE日志设施(log facilites)代码。本文分为三部分。第一部分概述了ACE日志设施代码;第二部分给出完整的源代份和运行结果;第三部分对相关代码作了说明,其中包括了运行Reactor事件,运行时动态服务加载等。 1. ACE日志策略

TAO工作室Stone Jiang的专栏 2094

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ACE框架学习3

ACE Acceptor-Connector框架学习

RYIJU5YUJTY的博客 1386

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

调整ACE日志时间输出格式

ACE日志输出时用%D输出时间:ACE_DEBUG ((LM_INFO, ACE_TEXT ("%DHi Mom/n")));结果如:Thu Mar 13 2008 17:38:01.453000Hi Mom 格式不符合中文习惯,并且太长。我把源码改了一下,这样输出时间时符合中国习惯(比如:08-05-12 09:37:20.123),并且节省输出长度(Windows下只能

bingozq的专栏 1019

ACE提供的日志记录器

一个后台服务程序,良好的日志系统是不可缺少的。通过日志系统我们可以代替debug程序对服务程序进行调试。更重要的是我们可以运行状态下对服务程序的状态进行监控和跟踪,帮助我们查找修正运行过程中出现的一些不可预料的错误和异常。ACE提供了强大的对日志系统的支持,能够方便的为我们的应用程序建立良好的日志系统。 基本的日志记录 ACE_Log_Msg类使用了类似p

crearo的专栏 2038

ComfyUI v0.12.2 发布——新增 4B ACE Step 1.5 模型支持,修复多项稳定性问题!

代码地址:github.com/Comfy-Org/ComfyUIComfyUI v0.12.2 是一次针对模型支持与内存管理机制✅ 新增 4B ACE Step 1.5 模型支持✅ 修复显存泄漏问题✅ 优化 Dynamic VRAM 初始化与版本兼容逻辑✅ 提升模型推理的稳定性与兼容性此版本虽然结构变化不大,但为未来的大模型扩展与长时推理环境打下了坚实基础。ComfyUI 团队通过 v0.12.2 的更新,再次展现出其对稳定性和扩展性的极致追求。

福大大架构师每日一题 2033

ACE 输出日志

ACE 输出日志

ljx0305的专栏 1837

C++开源TCP/IP网络开发框架:ACE从入门到精通V9.5

ACE快速入门的几个经典例子 ACE初学者使用指南 使用ACE日志设施(一)HelloWorld 使用ACE日志设施(二)详细介绍 ACE_Message_Block ACE_Message_Queue ACE_Message_Queue高低水位 ACE_Thread_Manager ACE_Message_Queue和spawn实现(生产者/消费者) ACE_Task介绍(

C++ 爱好者 make_it_simple888 1万+

新手教程:从安装到播放,Ace Link for macOS完整操作指南

想要在macOS上流畅播放Ace Streams吗?Ace Link是你的终极解决方案!🚀 这款免费的macOS菜单栏应用通过Docker技术,让你轻松享受Ace Stream流媒体内容。无论你是体育赛事爱好者还是影视迷,这篇完整指南将手把手教你从零开始使用Ace Link。 ## 📦 准备工作:安装Docker Ace Link依赖Docker运行Ace Stream引擎,首先确保你的m

gitblog_00635的博客 1017

使用Docker部署ACE-Step的最佳实践配置模板

本文介绍如何使用Docker高效、稳定地部署ACE-Step文本到音乐生成模型,涵盖Dockerfile与docker-compose配置模板,解决CUDA依赖、显存优化、日志输出等常见部署问题,实现一次构建、处处运行的AI服务交付。

weixin_36078669的博客 1043

ACE-Step部署总结:高稳定性服务的监控告警体系

本文介绍了基于星图GPU平台自动化部署ACE-Step镜像的完整方案,该镜像集成开源音乐生成模型,支持多语言歌曲创作。通过ComfyUI可视化工作流,用户可快速实现AI音乐生成、模型微调与应用开发,在短视频配乐、游戏音效等场景中展现强大实用性。

weixin_33506815的博客 723

ACE教程001-2 使用ACE Toolkit的初学者指南

从这里开始,我们继续进行主程序循环。 在某种程度上,当我们这样做时,我们将从最终产品开始,但这是一段非常简单的代码,也是一个很好的起点。 主程序非常简单。 真正的工作是在ACE派生类中完成的。 Kirthika Parameswaran提供了教程1的摘要: 这是一个简单的日志服务器示例。 Reactor用于处理多个客户端请求,使用单个执行线程而不是每个客户端一个线程。 Reactor使用“回...

1576
上一篇: ACE_Proactor TCP(接收什么就打印什么)V1.3
下一篇: 设计一个类能够使用ACE的各种框架
C++程序员Carea
博客等级 码龄18年 1590粉丝 878原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值