我正在寻找一种向每个 Console.Write[Line] 插入前缀(日期和时间)的方法。我正在寻找一种推荐的方法,就像改变输出的推荐方法是使用Console.SetOut一样。
我很清楚我可以执行 String.Format("{0} {1}", DateTime.Now, msg),但我试图将其作为最后的手段。
问题是输出在运行时是可变的,默认的已经附加了当前时间。如果我将它附加到我的代码上,我将复制日期。
有这样的事吗?我正在使用 Monotouch,所以我只能使用为其编译的库。
我正在寻找一种向每个 Console.Write[Line] 插入前缀(日期和时间)的方法。我正在寻找一种推荐的方法,就像改变输出的推荐方法是使用Console.SetOut一样。
我很清楚我可以执行 String.Format("{0} {1}", DateTime.Now, msg),但我试图将其作为最后的手段。
问题是输出在运行时是可变的,默认的已经附加了当前时间。如果我将它附加到我的代码上,我将复制日期。
有这样的事吗?我正在使用 Monotouch,所以我只能使用为其编译的库。
您需要继承自System.IO.TextWrite
、提供Encoding
和覆盖例如WriteLine
和Write
。Console.Out
使用更改之前存储原件Console.setOut(x)
。
这是一个完整的代码示例:
class PrefixedWriter : TextWriter
{
private TextWriter originalOut;
public PrefixedWriter()
{
originalOut = Console.Out;
}
public override Encoding Encoding
{
get { return new System.Text.ASCIIEncoding(); }
}
public override void WriteLine(string message)
{
originalOut.WriteLine(String.Format("{0} {1}", DateTime.Now, message));
}
public override void Write(string message)
{
originalOut.Write(String.Format("{0} {1}", DateTime.Now, message));
}
}
class Program
{
static void Main(string[] args)
{
Console.SetOut(new PrefixedWriter());
Console.WriteLine("test 1 2 3");
Console.ReadKey();
}
}
您可以将 Console 调用替换为您自己的类。
class MyConsole
{
public static void WriteLine(string msg)
{
Console.Write(String.Format("{0} {1}", DateTime.Now, msg));
}
}
然后,当然,所有调用Console.Write
成为MyConsole.Write
。
您还可以更进一步,Console
并MyConsole
在所有代码文件中使用别名...
using Console = MyNamespace.MyConsole;