Merge pull request #958 from pwm1234/pwm1234/rotate_on_open
Pwm1234/rotate on open
This commit is contained in:
commit
2463fe92bd
@ -31,13 +31,17 @@ template<typename Mutex>
|
|||||||
class rotating_file_sink final : public base_sink<Mutex>
|
class rotating_file_sink final : public base_sink<Mutex>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
rotating_file_sink(filename_t base_filename, std::size_t max_size, std::size_t max_files)
|
rotating_file_sink(filename_t base_filename, std::size_t max_size, std::size_t max_files, bool rotate_on_open=false)
|
||||||
: base_filename_(std::move(base_filename))
|
: base_filename_(std::move(base_filename))
|
||||||
, max_size_(max_size)
|
, max_size_(max_size)
|
||||||
, max_files_(max_files)
|
, max_files_(max_files)
|
||||||
{
|
{
|
||||||
file_helper_.open(calc_filename(base_filename_, 0));
|
file_helper_.open(calc_filename(base_filename_, 0));
|
||||||
current_size_ = file_helper_.size(); // expensive. called only once
|
current_size_ = file_helper_.size(); // expensive. called only once
|
||||||
|
if (rotate_on_open && current_size_ > 0)
|
||||||
|
{
|
||||||
|
rotate_();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// calc filename according to index and file extension if exists.
|
// calc filename according to index and file extension if exists.
|
||||||
@ -146,15 +150,15 @@ using rotating_file_sink_st = rotating_file_sink<details::null_mutex>;
|
|||||||
|
|
||||||
template<typename Factory = default_factory>
|
template<typename Factory = default_factory>
|
||||||
inline std::shared_ptr<logger> rotating_logger_mt(
|
inline std::shared_ptr<logger> rotating_logger_mt(
|
||||||
const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files)
|
const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files, bool rotate_on_open=false)
|
||||||
{
|
{
|
||||||
return Factory::template create<sinks::rotating_file_sink_mt>(logger_name, filename, max_file_size, max_files);
|
return Factory::template create<sinks::rotating_file_sink_mt>(logger_name, filename, max_file_size, max_files, rotate_on_open);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Factory = default_factory>
|
template<typename Factory = default_factory>
|
||||||
inline std::shared_ptr<logger> rotating_logger_st(
|
inline std::shared_ptr<logger> rotating_logger_st(
|
||||||
const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files)
|
const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files, bool rotate_on_open = false)
|
||||||
{
|
{
|
||||||
return Factory::template create<sinks::rotating_file_sink_st>(logger_name, filename, max_file_size, max_files);
|
return Factory::template create<sinks::rotating_file_sink_st>(logger_name, filename, max_file_size, max_files, rotate_on_open);
|
||||||
}
|
}
|
||||||
} // namespace spdlog
|
} // namespace spdlog
|
||||||
|
@ -60,7 +60,20 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]]")
|
|||||||
prepare_logdir();
|
prepare_logdir();
|
||||||
size_t max_size = 1024 * 10;
|
size_t max_size = 1024 * 10;
|
||||||
std::string basename = "logs/rotating_log";
|
std::string basename = "logs/rotating_log";
|
||||||
auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 1);
|
|
||||||
|
{
|
||||||
|
// make an initial logger to create the first output file
|
||||||
|
auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 2, true);
|
||||||
|
for (int i = 0; i < 10; ++i)
|
||||||
|
{
|
||||||
|
logger->info("Test message {}", i);
|
||||||
|
}
|
||||||
|
// drop causes the logger destructor to be called, which is required so the
|
||||||
|
// next logger can rename the first output file.
|
||||||
|
spdlog::drop(logger->name());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 2, true);
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
{
|
{
|
||||||
logger->info("Test message {}", i);
|
logger->info("Test message {}", i);
|
||||||
|
Loading…
Reference in New Issue
Block a user