Support redirect_stderr in AsyncFileLog.
This commit is contained in:
parent
bfd8c8dcf3
commit
5217a86e0d
@ -8,15 +8,19 @@
|
||||
|
||||
#include "td/utils/port/FileFd.h"
|
||||
#include "td/utils/port/path.h"
|
||||
#include "td/utils/port/StdStreams.h"
|
||||
#include "td/utils/SliceBuilder.h"
|
||||
|
||||
namespace td {
|
||||
|
||||
Status AsyncFileLog::init(string path, int64 rotate_threshold) {
|
||||
Status AsyncFileLog::init(string path, int64 rotate_threshold, bool redirect_stderr) {
|
||||
CHECK(path_.empty());
|
||||
CHECK(!path.empty());
|
||||
|
||||
TRY_RESULT(fd, FileFd::open(path, FileFd::Create | FileFd::Write | FileFd::Append));
|
||||
if (!Stderr().empty() && redirect_stderr) {
|
||||
fd.get_native_fd().duplicate(Stderr().get_native_fd()).ignore();
|
||||
}
|
||||
|
||||
auto r_path = realpath(path, true);
|
||||
if (r_path.is_error()) {
|
||||
@ -29,8 +33,8 @@ Status AsyncFileLog::init(string path, int64 rotate_threshold) {
|
||||
queue_ = td::make_unique<MpscPollableQueue<Query>>();
|
||||
queue_->init();
|
||||
|
||||
logging_thread_ =
|
||||
td::thread([queue = queue_.get(), fd = std::move(fd), path = path_, size, rotate_threshold]() mutable {
|
||||
logging_thread_ = td::thread(
|
||||
[queue = queue_.get(), fd = std::move(fd), path = path_, size, rotate_threshold, redirect_stderr]() mutable {
|
||||
auto after_rotation = [&] {
|
||||
ScopedDisableLog disable_log; // to ensure that nothing will be printed to the closed log
|
||||
fd.close();
|
||||
@ -39,6 +43,9 @@ Status AsyncFileLog::init(string path, int64 rotate_threshold) {
|
||||
process_fatal_error(PSLICE() << r_fd.error() << " in " << __FILE__ << " at " << __LINE__ << '\n');
|
||||
}
|
||||
fd = r_fd.move_as_ok();
|
||||
if (!Stderr().empty() && redirect_stderr) {
|
||||
fd.get_native_fd().duplicate(Stderr().get_native_fd()).ignore();
|
||||
}
|
||||
size = 0;
|
||||
};
|
||||
auto append = [&](CSlice slice) {
|
||||
|
@ -24,7 +24,7 @@ class AsyncFileLog final : public LogInterface {
|
||||
AsyncFileLog &operator=(AsyncFileLog &&) = delete;
|
||||
~AsyncFileLog();
|
||||
|
||||
Status init(string path, int64 rotate_threshold);
|
||||
Status init(string path, int64 rotate_threshold, bool redirect_stderr = true);
|
||||
|
||||
private:
|
||||
struct Query {
|
||||
|
Loading…
Reference in New Issue
Block a user