#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配置文件的方式
ace 日志配置策略例子
最新推荐文章于 2024-07-15 15:43:54 发布