Add optional terminal color support and make the task/thread prefix more concise.
This commit is contained in:
parent
1005f5c674
commit
6bf63c7331
|
@ -258,7 +258,13 @@ final class FileLogger : Logger {
|
||||||
}
|
}
|
||||||
|
|
||||||
Format format = Format.thread;
|
Format format = Format.thread;
|
||||||
Format infoFormat = Format.plain;
|
Format infoFormat = Format.thread;
|
||||||
|
|
||||||
|
/** Use escape sequences to color log output.
|
||||||
|
|
||||||
|
Note that the terminal must support 256-bit color codes.
|
||||||
|
*/
|
||||||
|
bool useColors = true;
|
||||||
|
|
||||||
this(File info_file, File diag_file)
|
this(File info_file, File diag_file)
|
||||||
{
|
{
|
||||||
|
@ -291,9 +297,34 @@ final class FileLogger : Logger {
|
||||||
|
|
||||||
auto fmt = (m_curFile is m_diagFile) ? this.format : this.infoFormat;
|
auto fmt = (m_curFile is m_diagFile) ? this.format : this.infoFormat;
|
||||||
|
|
||||||
|
auto dst = m_curFile.lockingTextWriter;
|
||||||
|
|
||||||
|
if (this.useColors) {
|
||||||
|
final switch (msg.level) {
|
||||||
|
case LogLevel.trace: dst.put("\x1b[49;38;5;243m"); break;
|
||||||
|
case LogLevel.debugV: dst.put("\x1b[49;38;5;245m"); break;
|
||||||
|
case LogLevel.debug_: dst.put("\x1b[49;38;5;248m"); break;
|
||||||
|
case LogLevel.diagnostic: dst.put("\x1b[49;38;5;253m"); break;
|
||||||
|
case LogLevel.info: dst.put("\x1b[49;38;5;15m"); break;
|
||||||
|
case LogLevel.warn: dst.put("\x1b[49;38;5;220m"); break;
|
||||||
|
case LogLevel.error: dst.put("\x1b[49;38;5;9m"); break;
|
||||||
|
case LogLevel.critical: dst.put("\x1b[41;38;5;15m"); break;
|
||||||
|
case LogLevel.fatal: dst.put("\x1b[48;5;9;30m"); break;
|
||||||
|
case LogLevel.none: assert(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final switch (fmt) {
|
final switch (fmt) {
|
||||||
case Format.plain: break;
|
case Format.plain: break;
|
||||||
case Format.thread: m_curFile.writef("[%08X:%08X %s] ", msg.threadID, msg.fiberID, pref); break;
|
case Format.thread:
|
||||||
|
dst.put('[');
|
||||||
|
if (msg.threadName.length) dst.put(msg.threadName);
|
||||||
|
else dst.formattedWrite("%08X", msg.threadID);
|
||||||
|
dst.put('(');
|
||||||
|
import vibe.core.task : Task;
|
||||||
|
Task.getThis().getDebugID(dst);
|
||||||
|
dst.formattedWrite(") %s] ", pref);
|
||||||
|
break;
|
||||||
case Format.threadTime:
|
case Format.threadTime:
|
||||||
auto tm = msg.time;
|
auto tm = msg.time;
|
||||||
static if (is(typeof(tm.fracSecs))) auto msecs = tm.fracSecs.total!"msecs"; // 2.069 has deprecated "fracSec"
|
static if (is(typeof(tm.fracSecs))) auto msecs = tm.fracSecs.total!"msecs"; // 2.069 has deprecated "fracSec"
|
||||||
|
@ -315,6 +346,7 @@ final class FileLogger : Logger {
|
||||||
|
|
||||||
override void endLine()
|
override void endLine()
|
||||||
{
|
{
|
||||||
|
if (useColors) m_curFile.write("\x1b[0m");
|
||||||
static if (__VERSION__ <= 2066)
|
static if (__VERSION__ <= 2066)
|
||||||
() @trusted { m_curFile.writeln(); } ();
|
() @trusted { m_curFile.writeln(); } ();
|
||||||
else m_curFile.writeln();
|
else m_curFile.writeln();
|
||||||
|
@ -817,6 +849,7 @@ private struct LogOutputRange {
|
||||||
this.info.level = level;
|
this.info.level = level;
|
||||||
this.info.thread = () @trusted { return Thread.getThis(); }(); // not @safe as of 2.065
|
this.info.thread = () @trusted { return Thread.getThis(); }(); // not @safe as of 2.065
|
||||||
this.info.threadID = makeid(this.info.thread);
|
this.info.threadID = makeid(this.info.thread);
|
||||||
|
this.info.threadName = () @trusted { return this.info.thread.name; } ();
|
||||||
this.info.fiber = () @trusted { return Fiber.getThis(); }(); // not @safe as of 2.065
|
this.info.fiber = () @trusted { return Fiber.getThis(); }(); // not @safe as of 2.065
|
||||||
this.info.fiberID = makeid(this.info.fiber);
|
this.info.fiberID = makeid(this.info.fiber);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
Loading…
Reference in a new issue