2017-06-01 2 views
0

Ich möchte globale Protokolldatei verwenden. Ich erklärte es als:Wie Protokoll beim Start zu entfernen, wenn es als global deklariert ist?

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

Aber in main auf einig bedingten würde Ich mag es neu erstellen (alte entfernen und neue erstellen), aber das Problem, dass ich nicht nennen Funktion removeOldLog(); da aktuelles Protokoll von gesperrt laufende App

Das Entfernen von Protokoll in main wird durch denselben Prozess blockiert. Ich habe versucht, fLogger = new FileLogger(logName); in vor jeder Funktion, die log erzeugen, zu bewegen, aber als ich Laufzeitfehler während des Schreibens bekam. Es scheint also, dass FileLogger global initialisiert werden sollte.

Was ist der richtige Weg?

+1

Können Sie klären, was Sie mit "blockiert" meinen? Können Sie das aktuelle Protokoll nicht schließen? Wird es durch den gleichen Prozess blockiert, der es oder einen anderen Prozess entfernen möchte? – rcorre

+0

Sie scheinen eine Art Sperrmechanismus für Ihre Multi-Thread-Anwendung zu fehlen .. –

+0

Können Sie erklären, wie ich es beheben kann? –

Antwort

0

sollten Sie öffnen die Datei selbst und geben sie als Parameter:

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

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

aber daran erinnern, dass, wenn die Datei geschlossen wird, für die Protokollierung der Filelogger mit einem undefinierten Verhalten führen.

Verwandte Themen