c# - 在多种日志记录方法中使用 StreamWriter 的实例

标签 c# .net

我想在我的应用程序中记录状态,并且我想避免将 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/

相关文章:

c# - 防止未使用的属性从对象传递的最佳方法

.net - Paypal 返回 Auth 而没有其他内容作为订阅的返回数据

.net - 是否有 .NET 函数可以让我比较两个运算符的优先级?

c# - .NET 4 中的 "Hello, World!!"生成 3500 个页面错误

c# - 如何混淆由各种 DLL 组成的程序中的代码?

c# - 将 key 转换为 VirtualKeyCode

c# - 在 Linq 的循环中添加 OR 表达式

c# - Thread.Sleep(0) 在 .NET Core 3.1 上没有按预期工作

c# - 检查是否设置了某个位

c# - 带参数的 OdbcCommand 不返回任何内容