gpt4 book ai didi

c# - .NET 日志类不写

转载 作者:行者123 更新时间:2023-11-30 22:36:40 25 4
gpt4 key购买 nike

我刚刚根据我在 MSDN 和其他几个站点上找到的示例编写了一个简单的日志记录类,供各种线程使用。问题是,它创建了文件日志文件,但实际上从未向其中写入任何内容(尽管它正确地写入了控制台)。

public class Logger
{
private static Logger instance;
private Logger() { }
private static StreamWriter writer;

public static Logger GetInstance()
{
lock (typeof(Logger))
{
if (instance == null)
{
instance = new Logger();
}

return instance;
}
}

public void OpenFile(String file)
{
// Open log file for writing and append to it
writer = new StreamWriter(file, true);
}

public void LogMessage(String message)
{
string dt = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss :: ");

writer.WriteLine(dt + message);
Console.WriteLine(dt + message);
}

public void LogError(String error)
{
string dt = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss :: ");

writer.WriteLine(dt + "ERROR: " + error);
Console.WriteLine(dt + "ERROR: " + error);
}
}

我正在我的程序中执行以下操作。

static void Main(string[] args)
{
Logger log = Logger.GetInstance();
log.OpenFile("app.log");

log.LogMessage("Starting App...");

最佳答案

writer.WriteLine(dt + message);
writer.Flush();

或者当您声明 writer 集时 AutoFlush为真:

writer = new StreamWriter(file, true);
writer.AutoFlush = true;

编辑:此外,由于您的类将从多线程访问,因此您应该在写入流之前使用 lock,因为 StreamWriter 实例不是线程安全的,所以:

private readonly object _writerLocker = new object();

lock (_writerLocker)
{
writer.WriteLine(dt + "ERROR: " + error);
}

关于c# - .NET 日志类不写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com