log4cplus使用DailyRollingFileAppender不在半夜0点切换文件的问题
2017-07-05 19:42
381 查看
由于新项目使用了log4cplus作为日志组件,但上生产后才发现配置了daily按天切换文件,实际切换文件都发生在早上8点钟,也就是每天都有0点到8点共8个小时的日志在以前一天命名的日志文件尾端,虽然说问题不大,但着实对日志监控及部分运维工作造成不必要的工作量,网上搜了下大多说的是使用了UTC时间之类的,本以为这bug官方会很快出修复版本,可惜一直等不到,只好自己调试改代码了,下面是改动的地方
1. 将log4cplus源码目录里的src/fileappender.cxx文件的
namespace
{
static
Time
round_time (Time const & t, time_t seconds)
{
return Time (
t.getTime ()
- static_cast<time_t>(std::fmod (
static_cast<double>(t.getTime ()),
static_cast<double>(seconds))));
}
static
Time
round_time_and_add (Time const & t, Time const & seconds)
{
return round_time(t, seconds) + seconds;
}
} // namespace
改为
namespace
{
static
Time
round_time (Time const & t, time_t seconds)
{
return Time (
t.getTime ()
- static_cast<time_t>(std::fmod (
static_cast<double>(t.getTime ()),
static_cast<double>(seconds))));
}
//Updated by cat 20170321
static
Time
round_time_fix(Time const & t)
{
return Time(t.getTime());
}
static
Time
round_time_and_add (Time const & t, Time const & seconds)
{
return round_time_fix(t) + seconds;
}
} // namespace
2. 如果想在启动时立即切换新文件,可在文件src/fileappender.cxx的方法void DailyRollingFileAppender::init(DailyRollingFileSchedule sch) (位置为紧挨着第1点修改的代码后面) 的最后面添加以下内容
//Added by cat 20170321
rollover(true);
保存重新编译log4cplus即可。
注:本人使用的版本是log4cplus 1.2.0 版本,这个方法对所有平台(windows,linux,AIX)均有效,另,只对daily这一切换方式有详细测试过,其它切换方式请自行调试。
1. 将log4cplus源码目录里的src/fileappender.cxx文件的
namespace
{
static
Time
round_time (Time const & t, time_t seconds)
{
return Time (
t.getTime ()
- static_cast<time_t>(std::fmod (
static_cast<double>(t.getTime ()),
static_cast<double>(seconds))));
}
static
Time
round_time_and_add (Time const & t, Time const & seconds)
{
return round_time(t, seconds) + seconds;
}
} // namespace
改为
namespace
{
static
Time
round_time (Time const & t, time_t seconds)
{
return Time (
t.getTime ()
- static_cast<time_t>(std::fmod (
static_cast<double>(t.getTime ()),
static_cast<double>(seconds))));
}
//Updated by cat 20170321
static
Time
round_time_fix(Time const & t)
{
return Time(t.getTime());
}
static
Time
round_time_and_add (Time const & t, Time const & seconds)
{
return round_time_fix(t) + seconds;
}
} // namespace
2. 如果想在启动时立即切换新文件,可在文件src/fileappender.cxx的方法void DailyRollingFileAppender::init(DailyRollingFileSchedule sch) (位置为紧挨着第1点修改的代码后面) 的最后面添加以下内容
//Added by cat 20170321
rollover(true);
保存重新编译log4cplus即可。
注:本人使用的版本是log4cplus 1.2.0 版本,这个方法对所有平台(windows,linux,AIX)均有效,另,只对daily这一切换方式有详细测试过,其它切换方式请自行调试。
相关文章推荐
- log4cplus使用DailyRollingFileAppender不在半夜0点切换文件的问题
- 使用log4j的DailyRollingFileAppender时只有一个日志文件
- log4j使用DailyRollingFileAppender
- 使用log4cplus时遇到的链接错误:无法解析的外部符号 "public: __thiscall log4cplus::RollingFileAppender::RollingFileAppende
- log4j使用DailyRollingFileAppender
- log4j使用心得之四 -- 自定义DailyRollingFileAppender归档文件名
- DailyRollingFileAppender的使用
- DailyRollingFileAppender的使用
- log4j DailyRollingFileAppender支持保留最近n天,并且可以对一天的文件根据大小切分
- log4j使用DailyRollingFileAppender
- log4j使用DailyRollingFileAppender
- 扩展DailyRollingFileAppender使其支持限定日志文件的数量
- DailyRollingFileAppender的使用
- 使用log4j扩展包的RollingFileAppender生成带时间戳的日志文件
- 扩展log4j系列[二]为DailyRollingFileAppender加上maxBackupIndex属性
- log4j的DailyRollingFileAppender循环输出log文件
- VNC XEN 双鼠标问题 以及 使用 virt-manager 工具创建的 Xen 虚拟机配置文件不在 /etc/xen/ 目录中了
- log4j之DailyRollingFileAppender源码 重写文件名后缀
- lamp使用php处理上传文件,调用move_uploaded_file函数遇到目录写权限问题及解决过程
- Eclipse - CDT使用GDB调试C++的问题-无源文件命名(No source file named)