在C#控制台应用程序中,有没有一种将控制台输出镜像到文本文件的聪明方法?

目前,我只是在日志(log)方法中将相同的字符串传递给Console.WriteLineInstanceOfStreamWriter.WriteLine.

推荐答案

这可能是更多的工作,但我会反过来做.

为控制台实例化TraceListener,为日志(log)文件实例化一个;然后在代码中使用Trace.Write条语句,而不是Console.Write条.之后,删除日志(log)或控制台输出或附加另一个日志(log)机制变得更加容易.

static void Main(string[] args)
{
    Trace.Listeners.Clear();

    TextWriterTraceListener twtl = new TextWriterTraceListener(Path.Combine(Path.GetTempPath(), AppDomain.CurrentDomain.FriendlyName));
    twtl.Name = "TextLogger";
    twtl.TraceOutputOptions = TraceOptions.ThreadId | TraceOptions.DateTime;

    ConsoleTraceListener ctl = new ConsoleTraceListener(false);
    ctl.TraceOutputOptions = TraceOptions.DateTime;

    Trace.Listeners.Add(twtl);
    Trace.Listeners.Add(ctl);
    Trace.AutoFlush = true;

    Trace.WriteLine("The first line to be in the logfile and on the console.");
}

据我所知,您可以在应用程序配置中定义侦听器,这样就可以在不接触构建的情况下激活或停用日志(log)记录.

.net相关问答推荐

安装特定主要版本的DotNet SDK最新版本

为什么.Net 8.0.100是预览版?

获取Ef-Core集合的DeleteBehavior

判断 Windows 路径中是否存在可执行文件

.NET 世界是否有 Maven 替代方案或端口?

XmlNode 值与内部文本

无法加载文件或程序集WebGrease,版本=1.5.1.25624,Culture=neutral,PublicKeyToken=31bf3856ad364e35或其依赖项之一

C# 编译为 32/64 位,或任何 cpu?

在 ToString() 之前判断 null

如何更改 double.ToString() 中小数点的符号?

创建多个线程并等待所有线程完成

在 .NET 中查找下一个 TCP 端口

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

析构函数、dispose 和 finalize 方法的区别

.NET 高级别的 .NET 4.0 和 .NET 4.5 的区别

如何将整个字符串与正则表达式匹配?

DataContractSerializer vs XmlSerializer:每个序列化器的优缺点

使用 C# 将时间跨度值转换为格式hh:mm Am/Pm

如何将 VB 项目转换为 C# 项目

使用 C# vs F# 或 F# vs C# 有什么好处?