zoukankan      html  css  js  c++  java
  • ACE服务端编程5:ACE日志输出和跟踪

    服务器程序经常需要在命令行中显示错误消息、状态或者用来跟踪程序的执行路径,最简单的方法是使用printf。

    ACE提供了更强大日志设施:

    1、可以在编译时启用或禁用宏;

    2、可以动态的启用或禁用宏;

    3、支持日志严重级别;

    4、支持日志重定向;

    5、支持多线程安全和线程级配置;

    使用ACE的日志相关功能,需要引入<ace/Log_Msg.h>头文件。

    ACE日志输出


    ACE提供了两个宏来支持日志输出:ACE_DEBUG、ACE_ERROR。

    这两个宏的内部实现和行为都是一样,只是为了在语义上区分调试信息和错误信息。

    在引入<ace/Log_Msg.h>头文件前添加以下定义可以关闭日志输出,ACE_DEBUG、ACE_ERROR将被替换为空语句:

    #define ACE_NLOGGING 1

    ACE_DEBUG、ACE_ERROR的使用示例:

    ACE_DEBUG((LM_STARTUP, ACE_TEXT("Startup.
    ")));
    
    ACE_DEBUG ((LM_DEBUG,
                  ACE_TEXT ("hook2: %d
    "),
                  *paramp));
    
    ACE_ERROR((LM_ERROR, ACE_TEXT("config file %s is not found.
    "), szConfigFile.c_str())

    使用ACE_DEBUG、ACE_ERROR宏需要注意的地方是需要使用两对括号来包过参数。

    第一个参数是严重级别,ACE可配置日志严重级别来显示或关闭该级别的日志输出:

    LM_DEBUG、LM_ERROR、LM_INFO、LM_ALERT、LM_WARNING等,级别没有优先级之分,最常用的是LM_DEBUG、LM_ERROR。

    第二个参数支持格式化字符串,常用的指令集:

    %A:浮点数

    %s:字符串

    %d:十进制数

    %M:严重级别

    %N:文件名称

    %P:进程ID

    %t:线程ID

    %D:当前时间

    %I:缩进

    ACE调用跟踪


    ACE定义了ACE_TRACE宏用于跟踪函数的调用,具体说就是在其定义的地方产生输出,在退出其作用域时产生另一条输出。

    ACE_TRACE的实现是被展开为一个栈上的对象,在其构造和析构函数中分别输出日志。

    void foo()
    {
        ACE_TRACE(ACE_TEXT("foo
    "))
        int a = 0;
        int b = 0;
        int c = b;
    }

    ACE_TRACE只接收单个字符串,不支持格式化字符串,输出的日志严重级别为LM_TRACE。

    ACE_TRACE默认是禁用的,网上经常有朋友反映看不到ACE_TRACE的输出,而很多回答也是错的,单纯在项目中定义#define ACE_NTRACE 0也是无法起作用的。

    必须在ace/config.h头文件中,在引用其他头文件前定义并且重新编译ACE库:

    #define ACE_NTRACE 0
    

    记录,为更好的自己!转载请注明出处!

  • 相关阅读:
    菜鸟学JS(一)——上传图片之上传前预览图片
    菜鸟学JS(二)——上传图片之上传后查看大图
    FTP文件操作之下载文件
    FTP文件操作之删除文件
    上传图片之上传前判断文件格式与大小
    FTP文件操作之上传文件
    ASP.NET中的几种弹出框提示
    dbo.fn_trace_gettable
    Blocked Process Report
    extended property
  • 原文地址:https://www.cnblogs.com/ym123/p/4531429.html
Copyright © 2011-2022 走看看