Skip to content

Commit a973396

Browse files
authored
add option to colorize stderr logs (#21467)
1 parent 23ba7c2 commit a973396

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

ydb/library/actors/core/log.cpp

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,56 @@ namespace {
2727
return TLogRecord(Priority, Buf.Data(), Buf.Filled());
2828
}
2929
};
30+
31+
struct TRecordWithColorsAndNewline {
32+
ELogPriority Priority;
33+
TTempBuf Buf;
34+
35+
TRecordWithColorsAndNewline(const TLogRecord& rec)
36+
: Priority(rec.Priority)
37+
, Buf(rec.Len + 16)
38+
{
39+
switch (rec.Priority) {
40+
case ELogPriority::TLOG_EMERG:
41+
Buf.Append("\x1b[31m", 5); // Red color for emergencies
42+
break;
43+
case ELogPriority::TLOG_ALERT:
44+
Buf.Append("\x1b[31;1m", 7); // Bright red
45+
break;
46+
case ELogPriority::TLOG_CRIT:
47+
Buf.Append("\x1b[35m", 5); // Magenta color for critical logs
48+
break;
49+
case ELogPriority::TLOG_ERR:
50+
Buf.Append("\x1b[31;1m", 7); // Bright red
51+
break;
52+
case ELogPriority::TLOG_WARNING:
53+
Buf.Append("\x1b[33m", 5); // Yellow color for warnings
54+
break;
55+
case ELogPriority::TLOG_NOTICE:
56+
Buf.Append("\x1b[36m", 5); // Cyan color for notices
57+
break;
58+
case ELogPriority::TLOG_INFO:
59+
Buf.Append("\x1b[37m", 5); // White color for info
60+
break;
61+
case ELogPriority::TLOG_DEBUG:
62+
Buf.Append("\x1b[38;5;248m", 11); // White-grey color for debug
63+
break;
64+
case ELogPriority::TLOG_RESOURCES:
65+
Buf.Append("\x1b[38;5;242m", 11); // Gray color for trace
66+
break;
67+
default:
68+
Buf.Append("\x1b[0m", 4); // Reset color for unknown
69+
break;
70+
}
71+
Buf.Append(rec.Data, rec.Len);
72+
Buf.Append("\x1b[0m", 4); // Reset color
73+
*Buf.Proceed(1) = '\n';
74+
}
75+
76+
operator TLogRecord() const {
77+
return TLogRecord(Priority, Buf.Data(), Buf.Filled());
78+
}
79+
};
3080
}
3181

3282
namespace NActors {
@@ -597,6 +647,7 @@ namespace NActors {
597647
return new TSysLogBackend(ident.data(), TSysLogBackend::TSYSLOG_LOCAL1, flags);
598648
}
599649

650+
template<typename TNewLineProcessor>
600651
class TStderrBackend: public TLogBackend {
601652
public:
602653
TStderrBackend() {
@@ -614,7 +665,7 @@ namespace NActors {
614665
bool isOk = false;
615666
do {
616667
try {
617-
TRecordWithNewline r(rec);
668+
TNewLineProcessor r(rec);
618669
Cerr.Write(r.Buf.Data(), r.Buf.Filled());
619670
isOk = true;
620671
} catch (TSystemError err) {
@@ -661,8 +712,12 @@ namespace NActors {
661712
TVector<TAutoPtr<TLogBackend>> UnderlyingBackends;
662713
};
663714

664-
TAutoPtr<TLogBackend> CreateStderrBackend() {
665-
return new TStderrBackend();
715+
TAutoPtr<TLogBackend> CreateStderrBackend(bool useColors) {
716+
if (useColors) {
717+
return new TStderrBackend<TRecordWithColorsAndNewline>();
718+
} else {
719+
return new TStderrBackend<TRecordWithNewline>();
720+
}
666721
}
667722

668723
TAutoPtr<TLogBackend> CreateFileBackend(const TString& fileName) {

ydb/library/actors/core/log.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ namespace NActors {
317317
////////////////////////////////////////////////////////////////////////////////
318318
TAutoPtr<TLogBackend> CreateSysLogBackend(const TString& ident,
319319
bool logPError, bool logCons);
320-
TAutoPtr<TLogBackend> CreateStderrBackend();
320+
TAutoPtr<TLogBackend> CreateStderrBackend(bool useColors = false);
321321
TAutoPtr<TLogBackend> CreateFileBackend(const TString& fileName);
322322
TAutoPtr<TLogBackend> CreateNullBackend();
323323
TAutoPtr<TLogBackend> CreateCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends);

0 commit comments

Comments
 (0)