blob: 272e459a02d32f4d7ec6a426cdd2068fc8b322a8 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef IORAP_UTILS_PRINTER_H_
#define IORAP_UTILS_PRINTER_H_
#include <utils/Printer.h>
#include <string.h>
namespace iorap::common {
class StderrLogPrinter : public ::android::Printer {
public:
// Create a printer using the specified logcat and log priority
// - Unless ignoreBlankLines is false, print blank lines to logcat
// (Note that the default ALOG behavior is to ignore blank lines)
StderrLogPrinter(const char* logtag,
android_LogPriority priority = ANDROID_LOG_DEBUG,
const char* prefix = nullptr,
bool ignore_blank_lines = false)
: log_printer_{logtag, priority, prefix, ignore_blank_lines} {
logtag_ = logtag;
prefix_ = prefix;
ignore_blank_lines_ = ignore_blank_lines;
}
// Print the specified line to logcat. No \n at the end is necessary.
virtual void printLine(const char* string) override {
if (ignore_blank_lines_ && strlen(string) == 0) {
return;
}
std::cerr << logtag_ << ": ";
if (prefix_ != nullptr) {
std::cerr << prefix_;
}
std::cerr << string << std::endl;
log_printer_.printLine(string);
}
private:
::android::LogPrinter log_printer_;
const char* logtag_;
const char* prefix_;
bool ignore_blank_lines_;
};
} // namespace iorap::common
#endif // IORAP_UTILS_PRINTER_H_