我想在我的应用程序中记录状态,并且我想避免将 TextWriter 参数传递给方法,例如
public static void M1(TextWriter w)
一直到我调用的所有方法。无论如何要避免这样做?我想要类似下面的东西,但它出错了:当前上下文中不存在名称“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();
}
最佳答案
首先,您可能想看看 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();
}
}
}
然后,调用那个类。您可以在静态程序类中有一个(静态)全局变量,或者创建一个新实例并每次调用它。
静态的,在你的 Program 类中定义,在任何函数之外:
static Logger logger = new Logger();
实例,必要时现场定义即可:
var logger = new Logger()
关于c# - 在多种日志记录方法中使用 StreamWriter 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10225837/