Logging Hiding
-
Hi,
gibts eigentlich schon irgendwas cooles um die Logausgabe im Code zu verbergen? Ich suche speziell fuer Java, aber Beispiele in anderen Sprachen sind willkommen.
Also z.Z. sieht das so aus:private static final LOG = Logger.getLogger("package.name.Class"); // ... if (LOG.isLoggable(Level.FINE) LOG.fine("Meine Log Message"); // ... if (LOG.isLoggable(Level.DEBUG) LOG.debug("Some nice debug message");
Ich haette gern irgendwie sowas:
// ... FINE(LOG_1); // ... DEBUG(LOG_2);
Mit einem Prepressor in C/C++ geht das, aber gibt es nicht irgendwelche coole Sprachkonstruktion extra fuers loggen?
-
Insofern sichs un die Logging-API aus dem JDK handelt: die "isLoggable" abfragen kannst du dir sparen, das macht das Logging intern selbst. Und recht angenehmer als
logger.fine("this is a fine log level"); logger.warning("there's something wrong"); logger.setLevel(Level.ERROR); // ab jetzt werden Logger.fine, Logger.warning ... nicht mehr ausgegeben
gehts doch nicht?
Oder hab ich deine Frage falsch verstanden?
-
Wenn in den Log-Funktionen geprüft wird hat man halt immer unnötige Funktionsaufrufe und ggf. unnötiges Formatieren von Log-Ausgaben.
Da ist ein Präprozessor der den Code in ein if(logLevel <= N) log("blablubb"); umformt schon von Vorteil. Übrigens gibt es auch für Java Präprozessoren bzw. kannst du auch einfach den Präprozessor von C/C++ nehmen, der befindet sich unter Linux meist in /usr/bin und heißt cpp.
-
Mein Problem mit der normalen Methode ist, dass man mitten im Code irgendwas hat, was nichts mit dem Code zu tun hat. Z.B. man hat einen Code das irgendwas berechnet und dazwischen sind die Log-Methoden, sammt ihrem String.
Aber Aspect Oriented Programming scheint dafuer ein wenig ein overkill zu sein. Ausserdem habe ich nicht verstanden wie man mit AOP ein Log-Eintrag mitten im Code machen kann. Anscheinend kann man nur Hooks einbauen, die am Anfang/Ende einer Methode ausgefuehrt werden.
Am liebsten wuerde ich den Log-Code ueberhaupt nicht sehen, in einer anderen Datei haben oder was auch immer. Man koennte z.B. eine Datei haben, in der alle Log-Meldung gelistet sind und in dem Code dann sowas schreiben:
// code... #log_1 // code...
Gibt es in dieser Richtung (ausser dem Preprozessor) ein neues Konzept, dass das elegant loest?