Allow to disable stderr redirect when logging to file.

GitOrigin-RevId: 7b91d362695cd73a640a9ed2a5d107b804536a16
This commit is contained in:
levlam 2020-09-27 14:37:35 +03:00
parent 75aac4dd46
commit 2e50410dcc
6 changed files with 19 additions and 6 deletions

View File

@ -3377,8 +3377,11 @@ updates updates:vector<Update> = Updates;
//@description The log is written to stderr or an OS specific log //@description The log is written to stderr or an OS specific log
logStreamDefault = LogStream; logStreamDefault = LogStream;
//@description The log is written to a file @path Path to the file to where the internal TDLib log will be written @max_file_size The maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated //@description The log is written to a file
logStreamFile path:string max_file_size:int53 = LogStream; //@path Path to the file to where the internal TDLib log will be written
//@max_file_size The maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated
//@redirect_stderr Pass true to additionally redirect stderr to the log file. Ignored on Windows
logStreamFile path:string max_file_size:int53 redirect_stderr:Bool = LogStream;
//@description The log is written nowhere //@description The log is written nowhere
logStreamEmpty = LogStream; logStreamEmpty = LogStream;

Binary file not shown.

View File

@ -35,7 +35,8 @@ bool Log::set_file_path(string file_path) {
return Logging::set_current_stream(td_api::make_object<td_api::logStreamDefault>()).is_ok(); return Logging::set_current_stream(td_api::make_object<td_api::logStreamDefault>()).is_ok();
} }
if (Logging::set_current_stream(td_api::make_object<td_api::logStreamFile>(file_path, max_log_file_size)).is_ok()) { if (Logging::set_current_stream(td_api::make_object<td_api::logStreamFile>(file_path, max_log_file_size, true))
.is_ok()) {
log_file_path = std::move(file_path); log_file_path = std::move(file_path);
return true; return true;
} }
@ -46,7 +47,8 @@ bool Log::set_file_path(string file_path) {
void Log::set_max_file_size(int64 max_file_size) { void Log::set_max_file_size(int64 max_file_size) {
std::lock_guard<std::mutex> lock(log_mutex); std::lock_guard<std::mutex> lock(log_mutex);
max_log_file_size = max(max_file_size, static_cast<int64>(1)); max_log_file_size = max(max_file_size, static_cast<int64>(1));
Logging::set_current_stream(td_api::make_object<td_api::logStreamFile>(log_file_path, max_log_file_size)).ignore(); Logging::set_current_stream(td_api::make_object<td_api::logStreamFile>(log_file_path, max_log_file_size, true))
.ignore();
} }
void Log::set_verbosity_level(int new_verbosity_level) { void Log::set_verbosity_level(int new_verbosity_level) {

View File

@ -61,8 +61,9 @@ Status Logging::set_current_stream(td_api::object_ptr<td_api::LogStream> stream)
if (max_log_file_size <= 0) { if (max_log_file_size <= 0) {
return Status::Error("Max log file size must be positive"); return Status::Error("Max log file size must be positive");
} }
auto redirect_stderr = file_stream->redirect_stderr_;
TRY_STATUS(file_log.init(file_stream->path_, max_log_file_size)); TRY_STATUS(file_log.init(file_stream->path_, max_log_file_size, redirect_stderr));
std::atomic_thread_fence(std::memory_order_release); // better than nothing std::atomic_thread_fence(std::memory_order_release); // better than nothing
log_interface = &ts_log; log_interface = &ts_log;
return Status::OK(); return Status::OK();
@ -85,7 +86,8 @@ Result<td_api::object_ptr<td_api::LogStream>> Logging::get_current_stream() {
return td_api::make_object<td_api::logStreamEmpty>(); return td_api::make_object<td_api::logStreamEmpty>();
} }
if (log_interface == &ts_log) { if (log_interface == &ts_log) {
return td_api::make_object<td_api::logStreamFile>(file_log.get_path().str(), file_log.get_rotate_threshold()); return td_api::make_object<td_api::logStreamFile>(file_log.get_path().str(), file_log.get_rotate_threshold(),
file_log.get_redirect_stderr());
} }
return Status::Error("Log stream is unrecognized"); return Status::Error("Log stream is unrecognized");
} }

View File

@ -65,6 +65,10 @@ int64 FileLog::get_rotate_threshold() const {
return rotate_threshold_; return rotate_threshold_;
} }
bool FileLog::get_redirect_stderr() const {
return redirect_stderr_;
}
void FileLog::append(CSlice cslice, int log_level) { void FileLog::append(CSlice cslice, int log_level) {
Slice slice = cslice; Slice slice = cslice;
while (!slice.empty()) { while (!slice.empty()) {

View File

@ -32,6 +32,8 @@ class FileLog : public LogInterface {
int64 get_rotate_threshold() const; int64 get_rotate_threshold() const;
bool get_redirect_stderr() const;
void append(CSlice cslice, int log_level) override; void append(CSlice cslice, int log_level) override;
void rotate() override; void rotate() override;