Google Guice AOP + Logging

Status
Nicht offen für weitere Antworten.

DamienX

Aktives Mitglied
Hallo zusammen,

ich setz mich grad mit Google Guice auseinander und fand die Vorstellung recht
nett das Logging einen Guice MehtodInterceptor zu überlassen.

Das Problem dass sich mir stellt ist die Tatsache dass ich Logging nur über
den klassischen statischen Logger kenne.

JPseudocode:
Code:
public class SomeClazz{
     private static final Logger logger = Logger.getLogger(SomeClazz.class);
    

     public void aMethod(){
          logger.trace(..."call");
          
          try{
               oject.callSomething();
          }catch (WtfIsHappeningExepction ex) {
              logger.warning(... ex-infos);   
          }

           logger.trace(..."called");
     }
     ....
}

Die nummer mit nem Interceptor zu lösen erscheint mir mehr als angebracht.

Ich habe mir also einen geschrieben und der sieht voerst folgendermaßen aus...

Code:
import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.log4j.Logger;

@Override
	public Object invoke(MethodInvocation invocation) throws Throwable {
		Object o = null;
		
		//get invoking method
		Method invokingMethod = invocation.getMethod();
		
		//get declaring class of the method
		Class<?> clazz = invocation.getMethod().getDeclaringClass();
		
		//get a logger for this class
		Logger logger = Logger.getLogger(clazz);
		
		// for tracing level
		logger.trace(" call... " + invokingMethod.getName());
		
		try{
			o = invocation.proceed();
		} catch (Exception e){
			logger.warn(e.toString());
			throw e;
		}
		
		logger.trace(invokingMethod.getName() +" ...called.");
		
		return o;
	}

Dieser wird an eine Annotation gebunden...

Sollten nun in einer Methode nur Exceptions geloggt werden reicht dieser Interceptor
vollkommen aus. Bei loggings von anderen Geschichten (erfolgreiche Transaktionen etc. ) welche
dieser Interceptor nicht abdecken kann, könnte man dann ja wieder auf den guten alten
statischen logger zurückgreifen.

Aber ne Menge schreibarbeit wäre schon mal gespart.
Nun zu den eigentlichen Fragen:

1. Kann ich beim holen des Loggers via Logger logger = Logger.getLogger(clazz);
probleme kriegen?
2. Die Performanceeinbuse scheint verkraftbar zu sein (Abweichung ca. 5% bei abertausenden
aufrufen) wenn man bedenkt dass nicht jede Methode mitgeloggt werden muss...
oder hat hier jmd andere Erfahrungen?
3. Jmd einen anderen (besseren) Vorschlag wie das zu lösen ist?

Anforderungen:
- Automatisches mitloggen aller geworfenen Exceptions (sprich Annotierte Exceptionschleudern müssen
diese nur noch behandeln.
- Tracing funktion auf dem Trace Level
- Das klassische oben genannte Logging muss in manchen Fällen trotzdem durchführbar sein... (INFO Level)
- Die performance natürlich so wenig wie möglich belasten!

Alle ratschläge sind herzlich willkommen...

Mfg Alex
 

ralfgc

Mitglied
Hallo,

diese Methode, wenn sie funktioniert, für Trace-Zwecke zu verwenden
ist im Prinzip an der Stelle irgendwo sinnvoll, aber ich versteh nicht ganz was du damit bezwecken
willst. Wenn eine Exception geworfen wird, dann wird sie sowieso bis
zu einer gewissen Schicht deiner Applikation weitergereicht und wahrscheinlich
auch geloggt. (catch Exception). Weiß ja nicht ob deine App in einem Application-Server
läuft, wenn ja dort auf jedenfall.

1: Also ein (catch Exception) an oberer Ebene des Funktionsaufrufs würde des Logging
dieser einschließen. Ein Logging "aller" Exceptions wäre dadurch gegeben.

2. 5% Leistungseinbuße für ein Tracing, wo der Sinn durchaus fragwürdig ist.
Das würde ich nicht eingehen. (Der Aufruf von Funktionen innerhalb kann durch
Tests abgedeckt werden.)

3. Das klassische Logging ist natürlich möglich.

4. Performance hängt eben von 2. ab. Das ist eig. der einzige Knackpunkt.

Gruß
 
Zuletzt bearbeitet:

DamienX

Aktives Mitglied
Hi danke für den Kommentar.

Also ich glaube du hast recht (ich bin heute aber nicht mehr im Stande
das zu ende zu denken)

Hier mein genauer Gedankengang...
Angenommen eine Verbindung bricht ab und löst eine checked Exception aus.
RemoteException zum Beispiel...

In der überliegenden Methode muss ich dies nun abfangen und behandeln.
In der ursprünglichen Methode allerdings (welche ja aufgerufen wurde und die exception auslöst) logge ich
die Exception samt Call Stack schon einmal weg.

Somit kann ich auf den codeteil in den Exception Blocks welcher für das letztendliche
loggen verantwortlich wäre verzichten.

Wie gesagt ich bin mir grad nicht ganz sich ob ich nicht genau in die falsche Richtung denke... *grmml*.
Call und Exception Stack laufen ja genau in die entgegengesetzte Richtung!? Oo

Ich werd morgen ein Beispiel dazu posten und die Sache durchtesten.
Heute is Schicht im Schacht.

Aber schon einmal danke für den Anstoß!!!

mfg Alex
 

ralfgc

Mitglied
Hallo,

die Exception kann wirklich in oberster Ebene gefangen werden, ohne einen
Verlust des Verursachsers zu erleiden.

bsp.

Java:
try {
  schritt1();
  schritt2(); // hier kommt vieleicht eine RemoteException, aber die wird geloggt
  ...
} catch (Exception ex) {
   // logge exception
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Compiler-Fehler Google Guice Module zur Laufzeit zusammenstellen und binden Allgemeine Java-Themen 4
L Google Guice Field Injection returns null Allgemeine Java-Themen 2
M Google Guice (Assisted Injects) - Buggy oder mach ich's falsch? Allgemeine Java-Themen 5
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
T Google Links in einer Liste Allgemeine Java-Themen 4
G Google-Suche ist nicht auslesbar?! Allgemeine Java-Themen 18
I Java google Sandbox benutzen Allgemeine Java-Themen 1
X Lotto - google caliper Benchmark Allgemeine Java-Themen 4
T Google Distance Matrix API Hello World/ Client Secret Allgemeine Java-Themen 3
T Google Maps API nächste Person Allgemeine Java-Themen 5
T Google OAuth 2.0 aber wie Allgemeine Java-Themen 16
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
M Google App Engine macht Probleme Allgemeine Java-Themen 4
yvesdaeschle Google Spreadsheet Allgemeine Java-Themen 6
M google plus java api - Anfänger sucht Hilfe Allgemeine Java-Themen 7
M GWT Project nur in Google Chrome sichtbar Allgemeine Java-Themen 7
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
S Frage: Google Maps "Map" in Java Allgemeine Java-Themen 3
M Google API Allgemeine Java-Themen 6
algorismi Google maps in Java Swing Allgemeine Java-Themen 2
P Google Abfrage auslesen Allgemeine Java-Themen 2
FoolMoon API für Google Suchergebnisse? Allgemeine Java-Themen 23
Pfirsich Java + Begriff = Pos + Domain (Google API) !!! Allgemeine Java-Themen 14
M Google Maps mit Java Allgemeine Java-Themen 5
B Regex -> Bspw. _NUR_ GOOGLE.de Allgemeine Java-Themen 7
R Google Keyword Position Allgemeine Java-Themen 11
R Wie Google & Co mit Java nutzen? Allgemeine Java-Themen 16
J Bitte um Kurzinfo bez. JMF (ja, war bei Forumssuche/google) Allgemeine Java-Themen 2
Y Google Map + JSP Tag Libary Allgemeine Java-Themen 2
N google maps api mit javaserver faces Allgemeine Java-Themen 5
C Server-Zahl von google.com Allgemeine Java-Themen 11
L Guice Dependency Injection Allgemeine Java-Themen 0
I WebSockets mit Jersey und Guice Allgemeine Java-Themen 0
T GUICE- Dependency Injection- WANN nutze ich Providers? Allgemeine Java-Themen 2
N Guice - Ohne injector.getInstance Allgemeine Java-Themen 2
F rekursiver Aufruf (Sudoku und Guice) Allgemeine Java-Themen 19
Landei Guice - Injection von "zwischendurch" erzeugten Objekten Allgemeine Java-Themen 4
F DI @SesionScoped Guice Allgemeine Java-Themen 4
Jay_030 Guice + Hibernate = Probleme? Allgemeine Java-Themen 2
Jay_030 Guice: Injector übergeben? Allgemeine Java-Themen 3
Jay_030 Guice: Frage im Umgang mit Unit-Tests Allgemeine Java-Themen 4
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
T Logging mit org.apache.logging.log4j Allgemeine Java-Themen 1
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
S Input/Output Jave.utill.logging ohne Default-Locale also in Englisch Allgemeine Java-Themen 3
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M JVM: Client Software Logging und Profiling aktivieren Allgemeine Java-Themen 1
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
P Logging levels Allgemeine Java-Themen 2
X Logging Messages - mehr Details? Allgemeine Java-Themen 4
F Error Logging - best practices? Allgemeine Java-Themen 3
L util.logging Log Rotation Allgemeine Java-Themen 3
W Java Logging Problem Allgemeine Java-Themen 3
H java.util.logging Formatter Optionen setzen Allgemeine Java-Themen 2
D Logging XMLFormatter Allgemeine Java-Themen 3
B OOP java.util.logging.Logger: Wie kann ich mehre Klassen in ein Logfile schreiben lassen? Allgemeine Java-Themen 12
D Technologiefragen, logging, JMX Allgemeine Java-Themen 3
S Tomcat java.util.logging - keine Logs Allgemeine Java-Themen 12
J Logging mehrerer Methoden Allgemeine Java-Themen 21
S log4j - doppeltes Logging Allgemeine Java-Themen 4
B Logging von Exceptions Allgemeine Java-Themen 7
S log4j Logging über mehrere Klassen Allgemeine Java-Themen 13
P SLF4J Logging Level einstellen Allgemeine Java-Themen 2
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
A java logging api scheint nicht thread save zu sein Allgemeine Java-Themen 22
T Java Logging API in Multi Threaded API Allgemeine Java-Themen 2
P fehlende Mehrfachvererbung logging.Handler impl. Observable Allgemeine Java-Themen 5
M Verbieten Applets die Nutzung von Commons Logging? Allgemeine Java-Themen 7
F Java logging Allgemeine Java-Themen 4
F Java logging Leerzeile als Standardeinstellung Allgemeine Java-Themen 4
S Java logging konfigurieren? Allgemeine Java-Themen 5
DEvent log4j, commons logging, log4j.properties and co Allgemeine Java-Themen 12
J Logging Allgemeine Java-Themen 10
J Log4j / commons-logging Allgemeine Java-Themen 3
K Logging mit Log4j Allgemeine Java-Themen 2
G Logging Allgemeine Java-Themen 4
S Logging mit log4j Allgemeine Java-Themen 17
S Logging Allgemeine Java-Themen 9
M Rat gesucht: Logging (log4J oder java.util.logging oder .) Allgemeine Java-Themen 5
T Logging Allgemeine Java-Themen 12
T Transaction Logging Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben