Was ist "logger" in Java?
Habe ich eine Klasse, in der ich folgende Dinge:
this.logger.severe("");
this.logger.warning("");
this.logger.info("");
Verstehe ich nicht mehrere Dinge:
- Wie können wir verwenden eine Methode, die nicht zuvor definiert? Ich meine, es gibt keine "logger" Methoden in der Klasse definiert. Ich dachte, dass diese Methoden definiert werden kann, weil die betrachteten Klasse ist eine Erweiterung von einer anderen Klasse, in der die "logger" definiert ist. Aber in der definition der Klasse gibt es kein "erweitert" - Anweisung (nur "implementiert").
- Kann ich verstehen, dass Dinge wie: "objectName.methodName". Aber was ist das "objectName.something1.something2"? "something1.something2" ist der name einer Methode? Kann Methodennamen enthalten dots?
- Was genau diese "logger.*" tun? Ich denke, Sie speichern Informationen über die Ausführung des Codes. Sie Art von Bericht schreiben über das, was passiert während der Ausführung. Aber wo finde ich diese Informationen?
HINZUGEFÜGT:
In den Anfang der Datei die ich habe: import java.util.logging.Logger;
Und dann in der Klasse die ich habe: private Logger logger = Logger.getLogger("a.b.c.d")
;
Also, logger ist ein Objekt der Klasse Logger (, aber ich verstehe nicht, warum Sie konnte nicht die Klasse instanziieren in gewohnter Weise mit "new Logger()). Ich verstehe auch nicht, was genau logger.schwere("") machen.
Zu Antwort 2. Methode Namen dürfen keine Punkte enthalten. Dot bedeutet immer "das Ding auf der linken Seite ist ein Objekt mit den Mitgliedern, und die Sache auf der rechten Seite ist das Mitglied möchte ich den Zugriff". Also, wenn dieser code kompiliert,
statische Felder sind nicht zugänglich
kaufen die Art und Weise, die ich nicht verstehe, warum Sie "diese". Ich meine, wenn ich nur Feld name, wird es nicht werden, standardmäßig wird das Feld von diesem Objekt? Ich gibt es einen Unterschied zwischen ".x" und "x"?
logger
ist eine Referenz auf ein Objekt mit Methoden genannt severe
usw.statische Felder sind nicht zugänglich
this
.kaufen die Art und Weise, die ich nicht verstehe, warum Sie "diese". Ich meine, wenn ich nur Feld name, wird es nicht werden, standardmäßig wird das Feld von diesem Objekt? Ich gibt es einen Unterschied zwischen ".x" und "x"?
InformationsquelleAutor Roman | 2010-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den logger nicht machen, nichts besonderes. Es ist alles nur Java-code.
Den
this.logger
nur Punkte auf die Instanz-variable namenslogger
von der aktuellen Instanz (this
). Diethis.
Präfix ist übrigens überflüssig wurde in diesem Beispiel. Man könnte auch einfach tunlogger.debug("foo")
hier.Wenn es nicht deklariert ist, in der
SomeClass
selbst, dann ist es wahrscheinlich erklärt wurden, in die Verlängerung. Klasse. Überprüfen Sie die Klasse deklariert ist, inextends
.Ihre
objectName.something1.something2
Zweifel, haben Sie schon geschaut, wieSystem.out.println()
funktioniert? DieSystem.out
gibt einePrintStream
- Objekt, das wiederum eineprintln()
Methode. Also, wennobjectName.something
gibt eine fullworthyObject
mit Methoden, dann können Sie einfach weiter chaining-Methode aufruft.Grundsätzlich
kann übersetzt werden als
Aber wenn Sie nicht brauchen
someObject
irgendwo anders im code, dann kann es nur gekürzt werden, wie in Ihrem Beispiel.Update: wie pro Ihre update:
Lesen Sie die javadoc für die Klasse in Frage, was das alles bedeutet. Warum kann Sie nicht instanziiert werden, es ist, weil der Fabrik-Muster.
Update 2: wie pro die anderen Verwirrung:
Diese Weise können Sie etwas präziser werden, über die Sie zugreifen möchten. Wenn die Methode enthält beispielsweise ein argument oder eine lokale variable mit dem Namen
logger
, dannthis.logger
würde immer noch auf die Instanz-variable.Es ist in der Tat so.
Eine gute Ausführliche Erklärung
InformationsquelleAutor BalusC
Edit: Verändert die log4j-link.
InformationsquelleAutor amit
'Logger' wird zu einem Objekt, nicht eine Methode. Diese logger-Klasse werden Methoden definiert wie
public void severe(String message)
'something1' wird ein Objekt enthalten, die von 'Objektname'. Zum Beispiel
Car.Engine.Cylinder.Fire()
gilt es als schlechte Praxis, eine Methode zu verwenden, um das Feuer auf ein Auto Zylinder wie dieser, und Sie sollten etwas tun, mehr wieCar.StartEngine()
(siehe das Gesetz von demeter für mehr info)Der logger wird eine Aufzeichnung von dem, was passiert in deinem Programm, wenn es also ein Absturz oder ein Fehler später auf, können Sie sehen, was passiert. Ob diese aufgezeichnet, in einer text-Datei oder eine Datenbank irgendwo, wird die Implementierung der logger.
InformationsquelleAutor Kirschstein
logger ist nicht eine Methode, sondern eine Klasse variable, die scheint zu sein, ein Objekt stellt die Methoden der "schwere", "warning" und "info".
Überprüfen Sie Ihre Klasse für so etwas wie "someClass logger = new someClass();"
InformationsquelleAutor Morfildur
Java.util.Logger-Klasse ist der Hauptzugang zu der Java-logging-API. Hier ist, wie Sie erstellen eine logger:
Den string als parameter übergeben, um die getLogger() die factory-Methode ist der name für den Logger zu erstellen. Hier können Sie einen Namen frei, aber der name deutet an, wo der Logger befindet sich in der Logger-Hierarchie. Jeder . (Punkt) der name wird interpretiert als ein Zweig der Hierarchie.
InformationsquelleAutor