-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Adding minute_file_sink_mt #2727 #2729
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: v1.x
Are you sure you want to change the base?
Changes from 1 commit
5306b1f
a406f27
9d8efbd
464013d
526f938
16a9463
9c14149
715414b
74a4eba
86daaf2
b1c1e4d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
Fixes as per suggestions
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -35,8 +35,8 @@ struct minute_filename_calculator | |||||
{ | ||||||
filename_t basename, ext; | ||||||
std::tie(basename, ext) = details::file_helper::split_by_extension(filename); | ||||||
return fmt_lib::format(SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}-{:02d}_{:02d}{}"), basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, | ||||||
now_tm.tm_mday, now_tm.tm_hour,now_tm.tm_min,ext);//colock details define in os-inl.h | ||||||
return fmt_lib::format(SPDLOG_FMT_STRING(SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}-{:02d}_{:02d}{}")), basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, | ||||||
now_tm.tm_mday, now_tm.tm_hour,now_tm.tm_min,ext); | ||||||
} | ||||||
}; | ||||||
|
||||||
|
@@ -49,15 +49,23 @@ template<typename Mutex, typename FileNameCalc = minute_filename_calculator> | |||||
class minute_file_sink final : public base_sink<Mutex> | ||||||
{ | ||||||
public: | ||||||
// create hourly file sink which rotates on given time | ||||||
// create every minute file sink which rotates on given time | ||||||
minute_file_sink( | ||||||
filename_t base_filename, bool truncate = false, uint16_t max_files = 0, const file_event_handlers &event_handlers = {}) | ||||||
filename_t base_filename, bool truncate = false, uint16_t max_files = 0, | ||||||
int rotation_minute = 0, const file_event_handlers &event_handlers = {}) | ||||||
: base_filename_(std::move(base_filename)) | ||||||
, file_helper_{event_handlers} | ||||||
, truncate_(truncate) | ||||||
, max_files_(max_files) | ||||||
,rotation_m_(rotation_minute) | ||||||
, filenames_q_() | ||||||
{ | ||||||
|
||||||
if (rotation_minute < 0 || rotation_minute > 59) | ||||||
{ | ||||||
throw_spdlog_ex("daily_file_sink: Invalid rotation time in ctor"); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the feedback and got your point, remove the validation considering the concern. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mmanoj Note: In the current rotation implementation, There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @tt4g |
||||||
} | ||||||
|
||||||
auto now = log_clock::now(); | ||||||
auto filename = FileNameCalc::calc_filename(base_filename_, now_tm(now)); | ||||||
file_helper_.open(filename, truncate_); | ||||||
|
@@ -125,7 +133,7 @@ class minute_file_sink final : public base_sink<Mutex> | |||||
break; | ||||||
} | ||||||
filenames.emplace_back(filename); | ||||||
now -= std::chrono::minutes(1); | ||||||
now -= std::chrono::minutes(rotation_m_); | ||||||
} | ||||||
for (auto iter = filenames.rbegin(); iter != filenames.rend(); ++iter) | ||||||
{ | ||||||
|
@@ -143,14 +151,14 @@ class minute_file_sink final : public base_sink<Mutex> | |||||
{ | ||||||
auto now = log_clock::now(); | ||||||
tm date = now_tm(now); | ||||||
date.tm_min = 0; | ||||||
|
||||||
date.tm_sec = 0; | ||||||
auto rotation_time = log_clock::from_time_t(std::mktime(&date)); | ||||||
if (rotation_time > now) | ||||||
{ | ||||||
return rotation_time; | ||||||
} | ||||||
return {rotation_time + std::chrono::minutes(1)}; | ||||||
return {rotation_time + std::chrono::minutes(rotation_m_)}; | ||||||
} | ||||||
|
||||||
// Delete the file N rotations ago. | ||||||
|
@@ -180,6 +188,7 @@ class minute_file_sink final : public base_sink<Mutex> | |||||
details::file_helper file_helper_; | ||||||
bool truncate_; | ||||||
uint16_t max_files_; | ||||||
int rotation_m_; | ||||||
details::circular_q<filename_t> filenames_q_; | ||||||
bool remove_init_file_; | ||||||
}; | ||||||
|
@@ -194,15 +203,15 @@ using minute_file_sink_st = minute_file_sink<details::null_mutex>; | |||||
// | ||||||
template<typename Factory = spdlog::synchronous_factory> | ||||||
inline std::shared_ptr<logger> minute_logger_mt(const std::string &logger_name, const filename_t &filename, bool truncate = false, | ||||||
uint16_t max_files = 0, const file_event_handlers &event_handlers = {}) | ||||||
uint16_t max_files = 0, int minute = 0, const file_event_handlers &event_handlers = {}) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
{ | ||||||
return Factory::template create<sinks::minute_file_sink_mt>(logger_name, filename, truncate, max_files, event_handlers); | ||||||
return Factory::template create<sinks::minute_file_sink_mt>(logger_name, filename, truncate, max_files, minute ,event_handlers); | ||||||
} | ||||||
|
||||||
template<typename Factory = spdlog::synchronous_factory> | ||||||
inline std::shared_ptr<logger> minute_logger_st(const std::string &logger_name, const filename_t &filename, bool truncate = false, | ||||||
uint16_t max_files = 0, const file_event_handlers &event_handlers = {}) | ||||||
uint16_t max_files = 0,int minute = 0, const file_event_handlers &event_handlers = {}) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
{ | ||||||
return Factory::template create<sinks::minute_file_sink_st>(logger_name, filename, truncate, max_files, event_handlers); | ||||||
return Factory::template create<sinks::minute_file_sink_st>(logger_name, filename, truncate, max_files, minute, event_handlers); | ||||||
} | ||||||
} // namespace spdlog |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
daily_sink and hourly_sink can change the rotation time, but
minute_file_sink
seems to have a fixed rotation time. I suggest renaming it toevery_minute_file_sink
to avoid confusion.