xref: /aosp_15_r20/external/webrtc/rtc_base/log_sinks.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2015 The WebRTC Project Authors. All rights reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/log_sinks.h"
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #include <string.h>
14*d9f75844SAndroid Build Coastguard Worker 
15*d9f75844SAndroid Build Coastguard Worker #include <cstdio>
16*d9f75844SAndroid Build Coastguard Worker #include <string>
17*d9f75844SAndroid Build Coastguard Worker 
18*d9f75844SAndroid Build Coastguard Worker #include "absl/strings/string_view.h"
19*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/checks.h"
20*d9f75844SAndroid Build Coastguard Worker 
21*d9f75844SAndroid Build Coastguard Worker namespace rtc {
22*d9f75844SAndroid Build Coastguard Worker 
FileRotatingLogSink(absl::string_view log_dir_path,absl::string_view log_prefix,size_t max_log_size,size_t num_log_files)23*d9f75844SAndroid Build Coastguard Worker FileRotatingLogSink::FileRotatingLogSink(absl::string_view log_dir_path,
24*d9f75844SAndroid Build Coastguard Worker                                          absl::string_view log_prefix,
25*d9f75844SAndroid Build Coastguard Worker                                          size_t max_log_size,
26*d9f75844SAndroid Build Coastguard Worker                                          size_t num_log_files)
27*d9f75844SAndroid Build Coastguard Worker     : FileRotatingLogSink(new FileRotatingStream(log_dir_path,
28*d9f75844SAndroid Build Coastguard Worker                                                  log_prefix,
29*d9f75844SAndroid Build Coastguard Worker                                                  max_log_size,
30*d9f75844SAndroid Build Coastguard Worker                                                  num_log_files)) {}
31*d9f75844SAndroid Build Coastguard Worker 
FileRotatingLogSink(FileRotatingStream * stream)32*d9f75844SAndroid Build Coastguard Worker FileRotatingLogSink::FileRotatingLogSink(FileRotatingStream* stream)
33*d9f75844SAndroid Build Coastguard Worker     : stream_(stream) {
34*d9f75844SAndroid Build Coastguard Worker   RTC_DCHECK(stream);
35*d9f75844SAndroid Build Coastguard Worker }
36*d9f75844SAndroid Build Coastguard Worker 
~FileRotatingLogSink()37*d9f75844SAndroid Build Coastguard Worker FileRotatingLogSink::~FileRotatingLogSink() {}
38*d9f75844SAndroid Build Coastguard Worker 
OnLogMessage(const std::string & message)39*d9f75844SAndroid Build Coastguard Worker void FileRotatingLogSink::OnLogMessage(const std::string& message) {
40*d9f75844SAndroid Build Coastguard Worker   OnLogMessage(absl::string_view(message));
41*d9f75844SAndroid Build Coastguard Worker }
42*d9f75844SAndroid Build Coastguard Worker 
OnLogMessage(absl::string_view message)43*d9f75844SAndroid Build Coastguard Worker void FileRotatingLogSink::OnLogMessage(absl::string_view message) {
44*d9f75844SAndroid Build Coastguard Worker   if (!stream_->IsOpen()) {
45*d9f75844SAndroid Build Coastguard Worker     std::fprintf(stderr, "Init() must be called before adding this sink.\n");
46*d9f75844SAndroid Build Coastguard Worker     return;
47*d9f75844SAndroid Build Coastguard Worker   }
48*d9f75844SAndroid Build Coastguard Worker   stream_->Write(message.data(), message.size());
49*d9f75844SAndroid Build Coastguard Worker }
50*d9f75844SAndroid Build Coastguard Worker 
OnLogMessage(const std::string & message,LoggingSeverity sev,const char * tag)51*d9f75844SAndroid Build Coastguard Worker void FileRotatingLogSink::OnLogMessage(const std::string& message,
52*d9f75844SAndroid Build Coastguard Worker                                        LoggingSeverity sev,
53*d9f75844SAndroid Build Coastguard Worker                                        const char* tag) {
54*d9f75844SAndroid Build Coastguard Worker   OnLogMessage(absl::string_view(message), sev, tag);
55*d9f75844SAndroid Build Coastguard Worker }
56*d9f75844SAndroid Build Coastguard Worker 
OnLogMessage(absl::string_view message,LoggingSeverity sev,const char * tag)57*d9f75844SAndroid Build Coastguard Worker void FileRotatingLogSink::OnLogMessage(absl::string_view message,
58*d9f75844SAndroid Build Coastguard Worker                                        LoggingSeverity sev,
59*d9f75844SAndroid Build Coastguard Worker                                        const char* tag) {
60*d9f75844SAndroid Build Coastguard Worker   if (!stream_->IsOpen()) {
61*d9f75844SAndroid Build Coastguard Worker     std::fprintf(stderr, "Init() must be called before adding this sink.\n");
62*d9f75844SAndroid Build Coastguard Worker     return;
63*d9f75844SAndroid Build Coastguard Worker   }
64*d9f75844SAndroid Build Coastguard Worker   stream_->Write(tag, strlen(tag));
65*d9f75844SAndroid Build Coastguard Worker   stream_->Write(": ", 2);
66*d9f75844SAndroid Build Coastguard Worker   stream_->Write(message.data(), message.size());
67*d9f75844SAndroid Build Coastguard Worker }
68*d9f75844SAndroid Build Coastguard Worker 
Init()69*d9f75844SAndroid Build Coastguard Worker bool FileRotatingLogSink::Init() {
70*d9f75844SAndroid Build Coastguard Worker   return stream_->Open();
71*d9f75844SAndroid Build Coastguard Worker }
72*d9f75844SAndroid Build Coastguard Worker 
DisableBuffering()73*d9f75844SAndroid Build Coastguard Worker bool FileRotatingLogSink::DisableBuffering() {
74*d9f75844SAndroid Build Coastguard Worker   return stream_->DisableBuffering();
75*d9f75844SAndroid Build Coastguard Worker }
76*d9f75844SAndroid Build Coastguard Worker 
CallSessionFileRotatingLogSink(absl::string_view log_dir_path,size_t max_total_log_size)77*d9f75844SAndroid Build Coastguard Worker CallSessionFileRotatingLogSink::CallSessionFileRotatingLogSink(
78*d9f75844SAndroid Build Coastguard Worker     absl::string_view log_dir_path,
79*d9f75844SAndroid Build Coastguard Worker     size_t max_total_log_size)
80*d9f75844SAndroid Build Coastguard Worker     : FileRotatingLogSink(
81*d9f75844SAndroid Build Coastguard Worker           new CallSessionFileRotatingStream(log_dir_path, max_total_log_size)) {
82*d9f75844SAndroid Build Coastguard Worker }
83*d9f75844SAndroid Build Coastguard Worker 
~CallSessionFileRotatingLogSink()84*d9f75844SAndroid Build Coastguard Worker CallSessionFileRotatingLogSink::~CallSessionFileRotatingLogSink() {}
85*d9f75844SAndroid Build Coastguard Worker 
86*d9f75844SAndroid Build Coastguard Worker }  // namespace rtc
87