fix console TILE_FATAL to stderr
Some checks failed
android / build (push) Failing after 10s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Debug) (push) Failing after 7s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Release) (push) Failing after 7s
linux-arm-gcc / linux-gcc-arm (Debug) (push) Failing after 6s
linux-arm-gcc / linux-gcc-arm (Release) (push) Failing after 7s
linux-arm-gcc / linux-gcc-armhf (Debug) (push) Failing after 6s
linux-arm-gcc / linux-gcc-armhf (Release) (push) Failing after 7s
linux-mips-gcc / linux-gcc-mipsel (Debug) (push) Failing after 7s
linux-mips-gcc / linux-gcc-mipsel (Release) (push) Failing after 7s
android / build (pull_request) Failing after 7s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (push) Failing after 7s
linux-mips64-gcc / linux-gcc-mips64el (Release) (push) Failing after 12s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Debug) (pull_request) Failing after 13s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Release) (pull_request) Failing after 6s
linux-riscv64-gcc / linux-gcc-riscv64 (Debug) (push) Failing after 6s
linux-riscv64-gcc / linux-gcc-riscv64 (Release) (push) Failing after 7s
linux-arm-gcc / linux-gcc-arm (Debug) (pull_request) Failing after 7s
linux-arm-gcc / linux-gcc-arm (Release) (pull_request) Failing after 7s
linux-arm-gcc / linux-gcc-armhf (Debug) (pull_request) Failing after 8s
linux-arm-gcc / linux-gcc-armhf (Release) (pull_request) Failing after 8s
linux-x64-clang / linux-clang (Debug) (push) Failing after 7s
linux-x64-clang / linux-clang (Release) (push) Failing after 7s
linux-x64-gcc / linux-gcc (Debug) (push) Failing after 6s
linux-x64-gcc / linux-gcc (Release) (push) Failing after 7s
linux-mips-gcc / linux-gcc-mipsel (Debug) (pull_request) Failing after 7s
linux-mips-gcc / linux-gcc-mipsel (Release) (pull_request) Failing after 7s
linux-x86-gcc / linux-gcc (Debug) (push) Failing after 8s
linux-x86-gcc / linux-gcc (Release) (push) Failing after 7s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (pull_request) Failing after 7s
linux-mips64-gcc / linux-gcc-mips64el (Release) (pull_request) Failing after 12s
linux-riscv64-gcc / linux-gcc-riscv64 (Debug) (pull_request) Failing after 7s
linux-riscv64-gcc / linux-gcc-riscv64 (Release) (pull_request) Failing after 7s
linux-x64-clang / linux-clang (Debug) (pull_request) Failing after 8s
linux-x64-clang / linux-clang (Release) (pull_request) Failing after 8s
linux-x64-gcc / linux-gcc (Debug) (pull_request) Failing after 7s
linux-x64-gcc / linux-gcc (Release) (pull_request) Failing after 8s
linux-x86-gcc / linux-gcc (Debug) (pull_request) Failing after 7s
linux-x86-gcc / linux-gcc (Release) (pull_request) Failing after 8s

This commit is contained in:
tqcq 2024-09-02 11:37:44 +08:00
parent cbb103fd02
commit 681a5e9a7d
9 changed files with 36 additions and 19 deletions

View File

@ -84,7 +84,7 @@ public:
} }
num_chars_to_log_ = stream_.pcount(); num_chars_to_log_ = stream_.pcount();
bool append_newline = message_text_[num_chars_to_log_ - 1] != '\n'; const bool append_newline = message_text_[num_chars_to_log_ - 1] != '\n';
char original_final_char = '\0'; char original_final_char = '\0';
if (append_newline) { if (append_newline) {
@ -143,16 +143,17 @@ private:
if (sink_) { if (sink_) {
sink_->Send(severity_, fullname(), basename(), line(), time(), sink_->Send(severity_, fullname(), basename(), line(), time(),
message_text_ + num_prefix_chars_, message_text_ + num_prefix_chars_,
num_chars_to_log_ - num_prefix_chars_ - 1); num_chars_to_log_ - num_prefix_chars_);
} }
} }
void SendToLog() { void SendToLog() {
if (g_sink_count.load(std::memory_order_relaxed) == 0) { if (g_sink_count.load(std::memory_order_relaxed) == 0) {
ColoredWriteToStdout(severity_, message_text_, num_chars_to_log_); ColoredWriteToStdout(severity_, message_text_ + num_prefix_chars_,
num_chars_to_log_ - num_chars_to_log_);
} }
LogToSinks(severity_, fullname(), basename(), line(), time(), LogToSinks(severity_, fullname(), basename(), line(), time(),
message_text_ + num_prefix_chars_, message_text_ + num_prefix_chars_,
num_chars_to_log_ - num_prefix_chars_ - 1); num_chars_to_log_ - num_prefix_chars_);
} }
void SendToSinkAndLog() { void SendToSinkAndLog() {
SendToSink(); SendToSink();

View File

@ -706,7 +706,8 @@ public:
const LogMessageTime &logmsgtime, const char *message, const LogMessageTime &logmsgtime, const char *message,
size_t message_len); size_t message_len);
virtual void Flush(); virtual void Flush();
std::string ToString(LogSeverity severity, const char *file, int line, std::string ToString(LogSeverity severity, const char *file,
const char *base_file, int line,
const LogMessageTime &logmsgtime, const char *message, const LogMessageTime &logmsgtime, const char *message,
size_t message_len); size_t message_len);
}; };

View File

@ -13,7 +13,7 @@ struct AwesomeLogSink : public tile::LogSink {
const char *base_filename, int line, const char *base_filename, int line,
const tile::LogMessageTime &logmsgtime, const char *message, const tile::LogMessageTime &logmsgtime, const char *message,
size_t message_len) override { size_t message_len) override {
msgs.emplace_back(message, message_len); msgs.emplace_back(std::string(message, message_len));
} }
std::vector<std::string> msgs; std::vector<std::string> msgs;
}; };

View File

@ -4,6 +4,7 @@
#pragma once #pragma once
#include "tile/base/internal/logging.h" #include "tile/base/internal/logging.h"
#include "tile/base/logging/basic_file_sink.h"
#include "tile/base/logging/splitter_sink.h" #include "tile/base/logging/splitter_sink.h"
// #define TILE_VLOG(n, ...) // #define TILE_VLOG(n, ...)

View File

@ -1,6 +1,11 @@
#include "tile/base/logging/basic_file_sink.h" #include "tile/base/logging/basic_file_sink.h"
namespace tile { namespace tile {
BasicFileSink::Ptr BasicFileSink::Create(const std::string &filepath) {
auto sink = std::shared_ptr<BasicFileSink>(new BasicFileSink());
sink->set_filepath(filepath);
return sink;
}
BasicFileSink::BasicFileSink() {} BasicFileSink::BasicFileSink() {}
BasicFileSink::~BasicFileSink() {} BasicFileSink::~BasicFileSink() {}
void BasicFileSink::Send(LogSeverity severity, const char *full_filename, void BasicFileSink::Send(LogSeverity severity, const char *full_filename,
@ -8,7 +13,7 @@ void BasicFileSink::Send(LogSeverity severity, const char *full_filename,
const LogMessageTime &logmsgtime, const char *message, const LogMessageTime &logmsgtime, const char *message,
size_t message_len) { size_t message_len) {
TILE_CHECK(!filepath_.empty(), "filepath is empty"); TILE_CHECK(!filepath_.empty(), "filepath is empty");
ofs_ << message << std::endl; ofs_ << std::string(message, message_len) << std::endl;
} }
std::string BasicFileSink::filepath() const { return filepath_; } std::string BasicFileSink::filepath() const { return filepath_; }
void BasicFileSink::set_filepath(const std::string &filepath) { void BasicFileSink::set_filepath(const std::string &filepath) {

View File

@ -10,7 +10,9 @@
namespace tile { namespace tile {
class BasicFileSink : public LogSink { class BasicFileSink : public LogSink {
public: public:
BasicFileSink(); using Ptr = std::shared_ptr<BasicFileSink>;
static Ptr Create(const std::string &filepath);
~BasicFileSink() override; ~BasicFileSink() override;
void Send(LogSeverity severity, const char *full_filename, void Send(LogSeverity severity, const char *full_filename,
const char *base_filename, int line, const char *base_filename, int line,
@ -21,6 +23,9 @@ public:
std::string filepath() const; std::string filepath() const;
void set_filepath(const std::string &filepath); void set_filepath(const std::string &filepath);
protected:
BasicFileSink();
private: private:
std::string filepath_; std::string filepath_;
std::ofstream ofs_; std::ofstream ofs_;

View File

@ -9,19 +9,23 @@ ConsoleSink::Ptr ConsoleSink::Create() {
ConsoleSink::~ConsoleSink() {} ConsoleSink::~ConsoleSink() {}
void ConsoleSink::send(LogSeverity severity, const char *full_filename, void ConsoleSink::Send(LogSeverity severity, const char *full_filename,
const char *base_filename, int line, const char *base_filename, int line,
const LogMessageTime &logmsgtime, const char *message, const LogMessageTime &logmsgtime, const char *message,
size_t message_len) { size_t message_len) {
auto msg = ToString(severity, full_filename, base_filename, line, logmsgtime, auto msg = ToString(severity, full_filename, base_filename, line, logmsgtime,
message, message_len); message, message_len);
while (!msg.empty() && msg.back() == '\n') { while (!msg.empty() && msg.back() == '\n') {
}
msg.pop_back(); msg.pop_back();
}
if (severity >= TILE_FATAL) {
fprintf(stderr, "%s\n", msg.c_str());
} else {
fprintf(stdout, "%s\n", msg.c_str()); fprintf(stdout, "%s\n", msg.c_str());
}
} }
void ConsoleSink::WaitTillSent() {} void ConsoleSink::Flush() {}
ConsoleSink::ConsoleSink() {} ConsoleSink::ConsoleSink() {}

View File

@ -11,11 +11,11 @@ public:
static Ptr Create(); static Ptr Create();
~ConsoleSink() override; ~ConsoleSink() override;
void send(LogSeverity severity, const char *full_filename, void Send(LogSeverity severity, const char *full_filename,
const char *base_filename, int line, const char *base_filename, int line,
const LogMessageTime &logmsgtime, const char *message, const LogMessageTime &logmsgtime, const char *message,
size_t message_len) override; size_t message_len) override;
void WaitTillSent() override; void Flush() override;
protected: protected:
ConsoleSink(); ConsoleSink();

View File

@ -6,20 +6,20 @@ class SimpleSink : public LogSink {
public: public:
using Ptr = std::shared_ptr<SimpleSink>; using Ptr = std::shared_ptr<SimpleSink>;
static Ptr Create() { return std::shared_ptr<SimpleSink>(new SimpleSink()); } static Ptr Create() { return std::shared_ptr<SimpleSink>(new SimpleSink()); }
void send(LogSeverity severity, const char *full_filename, void Send(LogSeverity severity, const char *full_filename,
const char *base_filename, int line, const char *base_filename, int line,
const LogMessageTime &logmsgtime, const char *message, const LogMessageTime &logmsgtime, const char *message,
size_t message_len) override { size_t message_len) override {
message_ = std::string(message, message_len); message_ = std::string(message, message_len);
} }
void WaitTillSent() override {} void Flush() override {}
std::string message_; std::string message_;
}; };
TEST(SplitterSink, One) { TEST(SplitterSink, One) {
auto sink = SimpleSink::Create(); auto sink = SimpleSink::Create();
auto splitter = SplitterSink::Create({sink}); auto splitter = SplitterSink::Create({sink});
splitter->send(LogSeverity::TILE_INFO, nullptr, nullptr, 0, LogMessageTime(), splitter->Send(LogSeverity::TILE_INFO, nullptr, nullptr, 0, LogMessageTime(),
"message", 7); "message", 7);
ASSERT_EQ(sink->message_, "message"); ASSERT_EQ(sink->message_, "message");
} }
@ -28,7 +28,7 @@ TEST(SplitterSink, Two) {
auto sink1 = SimpleSink::Create(); auto sink1 = SimpleSink::Create();
auto sink2 = SimpleSink::Create(); auto sink2 = SimpleSink::Create();
auto splitter = SplitterSink::Create({sink1, sink2}); auto splitter = SplitterSink::Create({sink1, sink2});
splitter->send(LogSeverity::TILE_INFO, nullptr, nullptr, 0, LogMessageTime(), splitter->Send(LogSeverity::TILE_INFO, nullptr, nullptr, 0, LogMessageTime(),
"message", 7); "message", 7);
ASSERT_EQ(sink1->message_, "message"); ASSERT_EQ(sink1->message_, "message");
ASSERT_EQ(sink2->message_, "message"); ASSERT_EQ(sink2->message_, "message");
@ -44,7 +44,7 @@ TEST(SplitterSink, Multi) {
std::stringstream ss; std::stringstream ss;
ss << "message" << i; ss << "message" << i;
auto msg = ss.str(); auto msg = ss.str();
splitter->send(LogSeverity::TILE_INFO, nullptr, nullptr, 0, splitter->Send(LogSeverity::TILE_INFO, nullptr, nullptr, 0,
LogMessageTime(), msg.data(), msg.size()); LogMessageTime(), msg.data(), msg.size());
for (auto &sink : splitter->sinks()) { for (auto &sink : splitter->sinks()) {