CLV Logging lib
Proč?
- chceme aby aplikační logy obsahovaly data pro rekonstrukci flow
- nechceme aby každá druhá metoda v kódu vypadala takto
...
public String doSmtg(String input) {
log.info("method a trying to do b with params c..");
var result = doIt();
log.info("method a will return b..");
return result;
}
...
Proč?
- chceme aby aplikační logy obsahovaly data pro rekonstrukci flow
- nechceme aby každá druhá metoda v kódu vypadala takto
...
public String doSmtg(String input) {
var start = Timer.now();
log.info("method a trying to do b with params c..");
var result = doIt();
var end = Timer.end()
log.info("method a will return b.. in: " + end-start + "ms");
return result;
}
...
Proč?
- chceme aby aplikační logy obsahovaly data pro rekonstrukci flow
- nechceme aby každá druhá metoda v kódu vypadala takto
...
public String doSmtg(String input) {
var start = Timer.now();
var parametersDescription = describe(input)
log.info("method a trying to do b with params "
+ parametersDescription + "..");
var result = doIt();
var resultDescription = describe(result)
var end = Timer.end()
log.info("method a will return "+ resultDescription + ".. in: "
+ end-start + "ms");
return result;
}
...
Proč?
- chceme aby aplikační logy obsahovaly data pro rekonstrukci flow
- nechceme aby každá druhá metoda v kódu vypadala takto
...
public String doSmtg(String input) {
var start = Timer.now();
var parametersDescription = describe(input)
log.info("method a trying to do b with params "
+ parametersDescription + "..");
var result = doIt();
var resultDescription = describe(result)
var end = Timer.end()
log.info("method a will return "+ resultDescription + ".. in: "
+ end-start + "ms");
return result;
}
...
Na co?
- snadné odlogování business flow
- konsistentní logování
Na co ne!!
- není určeno k nahrazení ERROR, WARN logů
- nemá sloužit ani jako DEBUG logy
Jak?
@Log
Jak?
- @Log
- nad class - aplikuje se na všechny metody*
- nad metodou - aplikuje se na metodu*
- loguje na začátku metody
metoda X spuštěna s parametry Y.
-
loguje na konci metody
metoda X skončila s návratem Y v čase Z.
- loguje pomocí slf4j, implementace se použije dle zvolené implementaci v aplikace kde se knihovna použije
AOP
- Aspekty - umožňují "pověsit" kus kódu na definované místo
public class TestService {
public String method(String input) {
return "result";
}
}
public class Aspect {
public String doIt(Origin originExecution) {
log.info("log me");
return originExecution.execute();
}
}
AOP
- Aspekty - umožňují "pověsit" kus kódu na definované místo
public class TestService {
@Log
public String method(String input) {
return "result";
}
}
public class Aspect {
@"Pověs toto nad metodu která má na sobě @Log"
public String doIt(Origin originExecution) {
log.info("log me");
return originExecution.execute();
}
}
AOP
- Aspekty - umožňují "pověsit" kus kódu na definované místo
public class TestService {
@Log
public String method(String input) {
log.info("log me");
return "result";
}
}
AOP
- Jak se tam ten kód dostane?
JWM
CLASS
COMPILED
CLASS
OBJ. INSTANCE
- runtime
- (post)compile time
- load time
AOP
JWM
CLASS
COMPILED
CLASS
OBJ. INSTANCE
PROXY
- Jak se tam ten kód dostane?
- runtime
- compile time
- load time
AOP
JWM
CLASS
COMPILED
CLASS
OBJ. INSTANCE
INJECT CODE WHILE CLASS LOADING
- Jak se tam ten kód dostane?
- runtime
- compile time
- load time
AOP
JWM
CLASS
COMPILED
CLASS
OBJ. INSTANCE
- Jak se tam ten kód dostane?
- runtime
- compile time
- load time
INJECT CODE WHILE OR AFTER CLASS COMPILATION
AOP
- Omezení ?
- runtime - proxy -> veškerá omezení která z toho plynou:
- jen public metody
- ignoruje inner volání
- load time - použije "agenta" pro úpravu kódu
- agent se musí přidat na classPath při runnu
- compile time - kód je upraven hned při kompilaci
- někdy je třeba zvolit post-compileTime (hlavně když je více úprav..např. lombok)
- java compiler "-parameters" - zapne debug symboly a umožní tak použít real jména parametrů
Spring Boot
- je to spring boot componenta s auto konfigurací
- po přidání závislosti se při povolení auto konfigurace @EnableAutoConfiguration automaticky aspect vytvoří a je k dispozici
Knihovna
- @Log
- Aspect - LoggingAspect
- Logger - holder pro aplikační logger
- Descriptory - definice formátů message pro různé datové typy
- jak fungují
- jak se vyhodnocují
- jak se definují
Pozor descriptory pracují s předanými daty a pokud imlementujete vlastní MUSÍTE hlídat že data která chcete nejsou null atd..
CLV logging lib
By Jiří Čížek
CLV logging lib
- 121