我正在寻找一种方法来为每个Console.Write [Line]插入前缀(日期和时间)。我正在寻找一种推荐的方法,就像改变输出的推荐方法是使用Console.SetOut。
我很清楚我可以做String.Format(“{0} {1}”,DateTime.Now,msg),但我试图将其作为我的最后手段。
问题是输出在运行时是可更改的,默认值已经附加了当前时间。如果我将其附加到我的代码上,我将复制日期。
有这样的事吗?我正在使用Monotouch,因此我只能使用为其编译的库。
答案 0 :(得分:14)
您需要System.IO.TextWrite
inherit,提供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();
}
}
。
这是一个完整的代码示例:
{{1}}
答案 1 :(得分:9)
您只需将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;