peakzhang 发表于 2007-12-18 23:45:14

日志文件的续写问题

我是ACE新手,最近在学ACE的日志策略管理。各位大侠,我在程序中使用了ACE的日志策略来管理写日志文件。可是我把这个程序重启后,发现日志文件被重写了,而不是续写这个日志文件。请问怎样(比如通过ACE_Service_Config的配置)来设置续写日志文件而不是重写呢?

peakzhang 发表于 2007-12-18 23:45:21

很简单,需要你设置log文件的打开方式:

//设置LOG系统
ACE_LOG_MSG->open(argv,ACE_Log_Msg::SYSLOG,ACE_TEXT("Server"));
ACE_LOG_MSG->open(argv,ACE_Log_Msg::STDERR| ACE_Log_Msg::OSTREAM);
//设置LOG信息
ACE_OSTREAM_TYPE * log_stream = NULL;
ACE_NEW_RETURN(log_stream,std::ofstream(".\\Server.log",ios::out|ios::app|ios::binary),-1);

ACE_LOG_MSG->msg_ostream(log_stream,1);
ACE_LOG_MSG->set_flags(ACE_Log_Msg::OSTREAM);

peakzhang 发表于 2007-12-18 23:46:06

但这里没有使用日志策略配置。我想学习的是,如果使用了日志策略配置,怎么样来续写日志策略配置指定的日志文件。而且有可能像下面这样配置日志文件尺寸限制:

dynamic Logger Service_Object * ACE:_make_ACE_Logging_Strategy() "-s log.out -i 1800 -m 1024 -f STDERR|OSTREAM -p INFO"

这样设置后,如果日志文件超过日志尺寸限制时,ACE_Logging_Strategy会把当前日志文件备份到log.out.1、log.out.2......等这样的文件,然后继续重写当前的log.out日志文件。

到此时,如果重置了日志策略,比如最有可能的重启应用程序,如何能保证日志策略是在原有日志的基础上续写日志,而不是把log.out,log.out.1,log.out.2等等这些日志全部覆盖掉?有没有可能通过上面的配置文件来配置?

这些是我在学习ACE_wrappers\tests例子里的日志程序时想到的。

peakzhang 发表于 2007-12-18 23:46:18

这个倒没试验过,未必能做得到吧?我表示怀疑。这个功能属于比较细节、带有偏好性质的功能,ACE未必实现 - 至少我没听闻。

peakzhang 发表于 2007-12-18 23:46:23

可以尝试使用回调,在回调中检查日志状态并且修改定向文件。没干过,不过可以试试。

weberxi_an 发表于 2008-4-16 14:03:13

我现在也想用啊.在哪能找到相关的例子阿

winston 发表于 2008-4-16 17:48:31

ACE书上有写,自己一试便知

chinablueker 发表于 2009-6-3 10:39:12

std::ofstream *pStream = new std::ofstream();
pStream->open("svrupdate.log", std::ios_base::app);
ACE_OSTREAM_TYPE *output = pStream;

ACE_LOG_MSG->msg_ostream (output, 1);
ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);

[ 本帖最后由 chinablueker 于 2009-6-3 10:43 编辑 ]
页: [1]
查看完整版本: 日志文件的续写问题