我正在尝试清除未调试时控制台中写入的内容,例如在发行版中运行时将不会显示。因此,为此,我将这种方法用于不应显示的日志记录
public static void DebugWriteConsole(string s)
{
Debug.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
if (Log.logger != null)
{
Log.Info(s);
}
}
在这一点上,它的工作原理是:在发行版中运行时不会显示,但我的问题是我使用-c
运行应用程序,因此它在控制台窗口中运行,但在调试时运行Debug.WritLine
仅打印到vs输出窗口中,而没有显示在控制台窗口中。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
Microsoft文档中的TraceListeners集合主题对此进行了解释
您可以使用TextWriterTraceListener并将System.Console.Out指定为要写入的流(或任何其他合适的流实例)
TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(myWriter);
或仅使用ConsoleTraceListener。
ConsoleTraceListener trc = new ConsoleTraceListener();
Debug.Listeners.Add(trc);
另一种选择是使用编译指示来克服NET Core问题
public static void DebugWriteConsole(string s)
{
#if DEBUG
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
#endif
Debug.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
if (Log.logger != null)
{
Log.Info(s);
}
}
答案 1 :(得分:0)
史蒂夫方式可能适用于大多数情况,但是如果您使用.Net Core
并遇到此问题,我发现了这样的解决方案,因为.Net Core没有Debug.Listeners
的一种解决方法是像这样写方法
[Conditional("DEBUG")]
public static void DebugWriteConsole(string s)
{
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss | ") + s);
if (Log.logger != null)
{
Log.Info(s);
}
}
仍然使用Console.WriteLine
,但将Conditional
属性放在方法上