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