我想在我的应用程序中记录状态,我想避免将TextWriter参数传递给方法,例如
public static void M1(TextWriter w)
Run Code Online (Sandbox Code Playgroud)
到我称之为的所有方法.无论如何要避免这样做?我想要类似下面的东西,但它有错误:当前上下文中不存在名称'w'
无论如何要使所有方法都能使用streamwriter的实例?或类似的东西?如果可能,你能提供一个例子.
public static void Main(string[] args)
{
using (StreamWriter w = File.CreateText(ConfigManager.logFile))
{
Log("start");
M1();
Log("end");
}
}
public static void M1()
{
Log("M1 start");
Log("M1 end");
}
public static void Log(string logMessage)
{
w.WriteLine("[{0}][{1}] {2} ", String.Format("{0:yyyyMMdd HH:mm:ss}", DateTime.Now),
"Info", logMessage);
w.Flush();
}
Run Code Online (Sandbox Code Playgroud)
首先,您可能需要查看log4net或NLog,2个日志框架,它们可以提供许多功能并防止许多与日志记录有关的问题.
这些框架并不难使用,您可以快速启动和运行.但是,如果您想要一个快速简单的解决方案,就像在您的请求中一样:
w在该范围内未知.有几种方法可以解决这个问题,但在你的情况下,我建议如下:
创建一个为您执行日志记录的类:
public class Logger
{
public void Log(string message)
{
using (StreamWriter w = File.CreateText(ConfigManager.logFile))
{
w.WriteLine("[{0}][{1}] {2} ", String.Format("{0:yyyyMMdd HH:mm:ss}", DateTime.Now), "Info", logMessage);
w.Flush();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,只需要调用该类.您可以在静态Program类中拥有一个(静态)全局变量,或者创建一个新实例并每次调用它.
静态,在您的Program类中定义,在任何函数之外:
static Logger logger = new Logger();
实例,只需在必要时在现场定义:
var logger = new Logger()