ace 日志配置策略例子


#define ACE_NTRACE 0


// $Id: Use_Logging_Strategy.cpp 14 2007-02-01 15:49:12Z mitza $
#include "ace/Log_Msg.h"
#include "ace/Service_Config.h"
#include "ace/OS.h"
#include "ace/Reactor.h"
#include <ace/Task.h>
#include <ace/Synch.h>


/*
  Put the following in your svc.conf:

  dynamic Logger Service_Object * ACE:_make_ACE_Logging_Strategy() "-s log.out -f STDERR|OSTREAM -p DEBUG|NOTICE"

  There seems to be a bug in ACE_Logging_Strategy in that the priority
  flags are not propagated to spawned threads.
*/

// Listing 1 code/ch03

class LogTask :public ACE_Task<ACE_MT_SYNCH>
{
public:
virtual int svc()
{

  for (int i = 0; i < 100; i++)
  {
   ACE_OS::sleep(1);
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t% this is no. %d/n"),i));
   ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardner/n")));
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnighHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardnert/n")));
   ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardner/n")));
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnighHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardnert/n")));
   ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardner/n")));
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnighHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardnert/n")));
   ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardner/n")));
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnighHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardnert/n")));
   ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardner/n")));
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnighHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardnert/n")));
   ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardner/n")));
   ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnighHowdy PardnerHowdy PardnerHowdy PardnerHowdy PardnerHowdy Pardnert/n")));

  }
  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);
    }
   
    ACE_TRACE(ACE_TEXT("main"));
   

   
   
    LogTask t;
    t.activate();
    ACE_Reactor::instance ()->run_reactor_event_loop ();
    return 0;   
   
}


文件svc.conf内容是
dynamic Logger Service_Object * ACE:_make_ACE_Logging_Strategy() "-s log.out -f STDERR|OSTREAM -p INFO -i 1 -N 3 -m 3 -o"

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

ACE日志策略有那些有用的参数?
 上面的配置文件我们已经使用了-s -f -p参数,下面列出一些常用参数的简单说明
 -s 指定文件输出时的文件名
 -f 指定输出的方向,如OSTREAM ,STDERR,LOGGER等
 -p 指定输出或者禁止输出的级别,如INFO、~INFO
 -m 指定日志文件的最大尺寸
 -N 指定创建的日志文件的最大数目
 -w 让日志文件在启动和重新配置时被清除
 
ACE日志策略其他
 你是不是觉得这种配置文件的方式过时了呢?
 是的,过时了,所以ACE4.3版后就提供了XML方式的配置文件,并且提供了自动转换以前的配置文件到XML配置文件的方式
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值