Log file rotation in file appender is broken
How to reproduce the problem
- Make sure that your config.ini file for hived contains (more or less) standard entries:
log-appender = {"appender":"stderr","stream":"std_error","time_format":"iso_8601_microseconds"} {"appender":"p2p","file":"logs/p2p/p2p.log","time_format":"iso_8601_milliseconds", "delta_times": false}
...
log-logger = {"name":"default","level":"all","appender":"stderr"} {"name":"user","level":"all","appender":"stderr"} {"name":"p2p","level":"warn","appender":"p2p"}
- Check that current source code of
load_logging_config
function (defined in logging_config.cpp) contains this snippet:
// construct a default file appender config here
// filename will be taken from ini file, everything else hard-coded here
fc::file_appender::config file_appender_config;
file_appender_config.filename = file_name;
file_appender_config.flush = true;
file_appender_config.rotate = true;
file_appender_config.rotation_interval = fc::hours(1);
file_appender_config.rotation_limit = fc::days(1);
This code sets up file rotation for every file appender defined in config.ini file. In our case it configures p2p
appender to rotate the log files every hour, deleting the ones older that one day.
- (optional) Reduce time needed to see the problem, modifying the code above, e.g.
file_appender_config.rotation_interval = fc::minutes(2);
file_appender_config.rotation_limit = fc::minutes(10);
- Run hived and wait for rotation_interval. See
logs/p2p
subdirectory of hived working directory. See that no rotation happened - there is only one log file there, and a link to it. However when you stop hived, the rotation will actually take place and another log file appears there.
The broken code
To be supplemented
Proposed solution
To be supplemented