ACE日志服务器

    技术2025-04-28  13

     

           

        林(2011-1-28

     

    一、日志服务器的架构:

    日志服务器由三部分组成:

    a)         应用程序日志库

    作用:输出日志。

    依赖库:ACE

    b)        客户端日志DAEMON

    作用:收集同一台服务器上所有应用程序的日志,并转发到指定的日志服务器上。

    组件:

    配置服务管理器(windows下ACE_wrappers/netsvcs/servers/ace_netsvcs.exe, linux下ACE_wrappers/netsvcs/servers/main

    配置服务管理器配置文件(svc.conf

    日志服务库(netsvcs

             依赖库:

                    ACEnetsvcspthread

             注意,在linux下配置文件中配置 ACEnetsvcs库时,请使用绝对路径

    c)        日志服务器

    作用:存储各应用程序生成的日志。以便以后查询。

    组件:

    配置服务管理器(windows下ACE_wrappers/netsvcs/servers/ace_netsvcs.exe, linux下ACE_wrappers/netsvcs/servers/main

    配置服务管理器配置文件(svc.conf

    日志服务库(netsvcs

    依赖库:

                    ACEnetsvcspthread

             注意,在linux下配置文件中配置 ACEnetsvcs库时,请使用绝对路径

     

     

    二、使用:

    1)        服务器的配置:

    在日志服务器上,配置服务管理器的配置文件,加入日志策略服务和日志服务。

    a)        日志策略服务:

    dynamic Logger Service_Object * ACE:_make_ACE_Logging_Strategy() " -f STDERR|VERBOSE"

    “”中的为参数,可以设置日志的输出位置,详细程序等策略。参数如下:

    /**

       * Parse arguments provided in svc.conf file.

       * @arg '-f' Pass in the flags (such as OSTREAM, STDERR, LOGGER, VERBOSE,

       *           SILENT, VERBOSE_LITE) used to control logging.

       * @arg '-i' The interval (in seconds) at which the logfile size is sampled

       *           (default is 0, i.e., do not sample by default).

       * @arg '-k' Set the logging key.

       * @arg '-m' Maximum logfile size in Kbytes.

       * @arg '-n' Set the program name for the %n format specifier.

       * @arg '-N' The maximum number of logfiles that we want created.

       * @arg '-o' Specifies that we want the no standard logfiles ordering

       *           (fastest processing in handle_timeout()).  Default is not to

       *           order logfiles.

       * @arg '-p' Pass in the process-wide priorities to either enable (e.g.,

       *           DEBUG, INFO, WARNING, NOTICE, ERROR, CRITICAL, ALERT,

       *           EMERGENCY) or to disable (e.g., ~DEBUG, ~INFO, ~WARNING,

       *           ~NOTICE, ~ERROR, ~CRITICAL, ~ALERT, ~EMERGENCY).

       * @arg '-s' Ensure that the OSTREAM flag is set and log to the @a filename.

       * @arg '-t' Pass in the thread-wide priorities to either enable (e.g.,

       *           DEBUG, INFO, WARNING, NOTICE, ERROR, CRITICAL, ALERT,

       *           EMERGENCY) or to disable (e.g., ~DEBUG, ~INFO, ~WARNING,

       *           ~NOTICE, ~ERROR, ~CRITICAL, ~ALERT, ~EMERGENCY).

       * @arg '-w' Cause the logfile to be wiped out, both on startup and on

       *           reconfiguration.

       */

    b)        日志服务:

    dynamic Thr_Server_Logging_Service Service_Object * netsvcs:_make_ACE_Thr_Server_Logging_Acceptor() active "-p 20020"

     

    “”中为日志服务的参数:

    -p  :日志服务器的监听端口号

     

    2)        客户端日志DAEMON

    在应用服务器上配置服务管理器(ismg_daemon)的配置文件,加入客户端日志

    DAEMON服务。

    dynamic Client_Logging_Service Service_Object * netsvcs:_make_ACE_Client_Logging_Acceptor() active "-p 20020 h 10.10.1.69"

     

    “”中为客户端日志DAEMON参数:

    -p :日志服务器的端口

    -h:日志服务器的IP地址

    -l:本机IP

    -k: 设置 the logging key.即本地的监听IP和端口

    (默认:

    # if !defined (ACE_DEFAULT_LOGGER_KEY)

    #   if (ACE_HAS_STREAM_LOG_MSG_IPC == 1)

    #     define ACE_DEFAULT_LOGGER_KEY ACE_TEXT ("/tmp/server_daemon")

    #   else

    #     define ACE_DEFAULT_LOGGER_KEY ACE_TEXT ("localhost:20012")

    #   endif /* ACE_HAS_STREAM_LOG_MSG_IPC==1 */

    # endif /* ACE_DEFAULT_LOGGER_KEY */

    3)        应用程序输出日志:

    你可以直接使用ACE日志宏进行日志输出,详见《ACE日志库使用》。

    一般我们在开发中常使用三种级别的日志输出(调试级别、错误级别、信息级别),所以我定义了三个宏:

    LOG_DEBUG(X, …)

    LOG_ERROR(X, …)

    LOG_INFO(X, …)

    如果你不是使用配置服务管理器,为了能使用你的程序可以按指定的策略进行输出。为此定义了一个初始化宏。

    LOG_INIT(argn, argv)

    你可以按前面策略服务所讲的参数进行设置。如果你要自定日志输出策略,你必须在程序启动时调用这个宏进行日志策略初始化。默认的日志输出是直接输出到stderr

     

    三、日志输出格式约定

    a)         信息级别:

    各元互素分隔符用 :  分隔,第一个元素为此信息名字

    MONITOR:clients:0:close:0:srv_handler:0:recvPackage:0:error:0:heart:0:sends:0:packages:0:resend:0:responsion:0:error:0:buffer:0

    b)        错误级别:

    请输出错误返回码,和错误内容,第一个元素为此模块名字

    c)        调试级别:

    输出调试内容,第一个元素为此模块名字

    最新回复(0)