mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
56 lines
1.5 KiB
C#
56 lines
1.5 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace Semmle.Util.Logging
|
|
{
|
|
/// <summary>
|
|
/// A logger that outputs to stdout/stderr.
|
|
/// </summary>
|
|
public sealed class ConsoleLogger : ILogger
|
|
{
|
|
private readonly Verbosity verbosity;
|
|
private readonly bool logThreadId;
|
|
|
|
public ConsoleLogger(Verbosity verbosity, bool logThreadId)
|
|
{
|
|
this.verbosity = verbosity;
|
|
this.logThreadId = logThreadId;
|
|
}
|
|
|
|
public void Dispose() { }
|
|
|
|
private static TextWriter GetConsole(Severity s)
|
|
{
|
|
return s == Severity.Error ? Console.Error : Console.Out;
|
|
}
|
|
|
|
private static string GetSeverityPrefix(Severity s)
|
|
{
|
|
switch (s)
|
|
{
|
|
case Severity.Trace:
|
|
case Severity.Debug:
|
|
case Severity.Info:
|
|
return "";
|
|
case Severity.Warning:
|
|
return "Warning: ";
|
|
case Severity.Error:
|
|
return "Error: ";
|
|
default:
|
|
throw new ArgumentOutOfRangeException(nameof(s));
|
|
}
|
|
}
|
|
|
|
public void Log(Severity s, string text, int? threadId = null)
|
|
{
|
|
if (verbosity.Includes(s))
|
|
{
|
|
threadId ??= Environment.CurrentManagedThreadId;
|
|
|
|
var prefix = this.logThreadId ? $"[{threadId:D3}] " : "";
|
|
GetConsole(s).WriteLine(prefix + GetSeverityPrefix(s) + text);
|
|
}
|
|
}
|
|
}
|
|
}
|