Rufen Sie die Anruferklasse ab

8

Ich schreibe Logger und habe Probleme mit dem automatischen Hinzufügen des Klassennamens, von dem ich die Methode print_log aufgerufen habe. Zum Beispiel so etwas:

%Vor%

Als Ergebnis des Aufrufs von MyClass.new Methode möchte ich in der Ausgabe sehen:

  

14:41:23 | MyClass - namens .new () Methode

Ich bin sicher, dass es möglich ist, caller zu verwenden, aber nicht finden kann, wie

    
Hroft 30.10.2013, 10:39
quelle

3 Antworten

1

Nachdem du eine Weile mit caller fertig geworden bist, wird es das wahrscheinlich nicht für dich tun, und auch nicht caller_locations . Es ist möglich, die Klassen der letzten im aktuellen Thread instanziierten Objekte zu verfolgen, z. B.

%Vor%

Dies behält die Klassen der letzten 10 Objekte bei, aber dies entspricht nicht direkt einer Hierarchie, z. B.

%Vor%

X.new gibt Folgendes (in einer Konsolensitzung) aus

%Vor%     
struthersneil 30.10.2013, 12:48
quelle
4

Sie können ein solches Modul (Rails-Stil) verwenden:

%Vor%

und Ihr Code lautet:

%Vor%     
Vlad 25.04.2014 00:11
quelle
3

Ich bin mir nicht sicher, ob es möglich ist, den Klassennamen wie gewünscht zu bekommen. Ich würde dafür eine Logger-Instanz erstellen, in die Sie den Klassennamen beim Erstellen übergeben können.

%Vor%

Ausführlicher, als Sie vielleicht möchten, aber expliziter Code, der leicht zu verstehen ist.

Für jede ernste Arbeit empfehle ich den Standard-Bibliothekslogger . Möglicherweise müssen Sie es in Ihren eigenen Aufruf einbinden, um die Protokollmeldungen wie gewünscht zu erhalten, aber Sie erhalten eine rotierende Protokollierung und Dateihandhabung, wie es sein sollte.

    
froderik 30.10.2013 12:00
quelle

Tags und Links