如果它被声明为全局,如何在开始时删除日志?

时间:2017-06-01 10:22:06

标签: logging d

我想使用全局日志文件。我宣称它是:

string logName = "ProcessingLog.txt";
FileLogger fLogger;
static this()
{
    fLogger = new FileLogger(logName);
}
void main()
{
 if (someCondition)
     remove(logName);
}

但是在main中我想重新创建它(删除旧的并创建新的),但是由于当前日志被阻止,我无法调用函数removeOldLog();的问题通过运行应用程序。

删除main中的日志是由同一进程阻止的。我试图在每个产生日志的函数之前移动fLogger = new FileLogger(logName);,但是在它写入期间我遇到了运行时错误。所以FileLogger似乎应该是全局初始化的。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您应该自己打开文件并将其作为参数传递:

auto file = File("logFile.log", "w");
auto log = new FileLogger(file);

if (some condition)
{
    file.close;
    remove(file.name);
}

但请注意,如果文件被关闭,使用FileLogger进行日志记录将导致未定义的行为。