NLog 控制台单行记录
NLog Console logging on single line
我希望能够显示日志消息,例如在单个控制台行中跟踪级别,而不是将它们一个接一个地堆叠。
一条跟踪日志消息应显示在控制台中,然后由同一行上的另一条跟踪日志消息替换。
当另一个日志消息进来时,例如警告,消息堆叠应该照常继续。
有没有办法为 NLog 中的控制台日志记录定义这种单行覆盖?
如果包装 NLog,这似乎有效
public class Logger : NLog.Logger
{
public void TraceStackConsole(string message)
{
this.Trace(message);
Console.SetCursorPosition(0, Console.CursorTop-1);
}
}
你也可以用 https://github.com/NLog/NLog/wiki/Replace-NewLines-Layout-Renderer 得到一些有趣的结果,虽然我还没有成功。将其替换为 "\r"
可能会起作用
How can I update the current line in a C# Windows Console App?
"If you print only "\r" 到控制台光标回到当前行的开头,然后你可以重写它。 "
非常感谢@alexbezek,这正是我想要的! :)
虽然我决定为记录器制作扩展方法更方便:
public static class LoggerExtension
{
public static void ConsoleStack(this Logger logger, string message)
{
logger.Trace(message);
Console.SetCursorPosition(0, Console.CursorTop-1);
}
}
所以我可以这样称呼它:Logger.ConsoleStack("Log message");
我希望能够显示日志消息,例如在单个控制台行中跟踪级别,而不是将它们一个接一个地堆叠。
一条跟踪日志消息应显示在控制台中,然后由同一行上的另一条跟踪日志消息替换。 当另一个日志消息进来时,例如警告,消息堆叠应该照常继续。
有没有办法为 NLog 中的控制台日志记录定义这种单行覆盖?
如果包装 NLog,这似乎有效
public class Logger : NLog.Logger
{
public void TraceStackConsole(string message)
{
this.Trace(message);
Console.SetCursorPosition(0, Console.CursorTop-1);
}
}
你也可以用 https://github.com/NLog/NLog/wiki/Replace-NewLines-Layout-Renderer 得到一些有趣的结果,虽然我还没有成功。将其替换为 "\r"
可能会起作用How can I update the current line in a C# Windows Console App? "If you print only "\r" 到控制台光标回到当前行的开头,然后你可以重写它。 "
非常感谢@alexbezek,这正是我想要的! :)
虽然我决定为记录器制作扩展方法更方便:
public static class LoggerExtension
{
public static void ConsoleStack(this Logger logger, string message)
{
logger.Trace(message);
Console.SetCursorPosition(0, Console.CursorTop-1);
}
}
所以我可以这样称呼它:Logger.ConsoleStack("Log message");