This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:programare-avansata-java [2026/01/11 23:29] florian_luis.micu [[Nice to know] Folosirea lui var în teste] |
poo-ca-cd:laboratoare:programare-avansata-java [2026/01/11 23:38] (current) florian_luis.micu [[Nice to know] Folosirea lui var în teste] |
||
|---|---|---|---|
| Line 1133: | Line 1133: | ||
| </note> | </note> | ||
| + | =====[Nice to know] Logging în Java ===== | ||
| + | |||
| + | ==== Ce este logging-ul? ==== | ||
| + | |||
| + | Logging-ul reprezintă mecanismul prin care o aplicație înregistrează informații despre: | ||
| + | * execuția codului | ||
| + | * evenimente importante | ||
| + | * erori sau situații neașteptate | ||
| + | |||
| + | Spre deosebire de ''System.out.println'', logging-ul: | ||
| + | * poate fi configurat (nivel, format, destinație) | ||
| + | * poate fi dezactivat fără a modifica codul | ||
| + | * este standard în aplicații profesionale | ||
| + | |||
| + | ====De ce NU folosim System.out.println?==== | ||
| + | |||
| + | Instrucțiunea ''System.out.println'': | ||
| + | * nu are niveluri (info, warning, error) | ||
| + | * nu poate fi filtrat pe baza nivelelor | ||
| + | * nu este potrivit pentru producție | ||
| + | |||
| + | ====Logging standard în Java (java.util.logging)==== | ||
| + | |||
| + | Java oferă un mecanism de logging în JDK, fără biblioteci externe ''java.util.logging''. | ||
| + | |||
| + | Exemplu minimal: | ||
| + | <code java> | ||
| + | import java.util.logging.Logger; | ||
| + | |||
| + | public class Example { | ||
| + | private static final Logger logger = | ||
| + | Logger.getLogger(Example.class.getName()); | ||
| + | |||
| + | void run() { | ||
| + | logger.info("Application started"); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Niveluri de logging (cele mai uzuale) | ||
| + | |||
| + | * ''SEVERE'' / ''ERROR'' – erori critice | ||
| + | * ''WARNING'' – situații problematice | ||
| + | * ''INFO'' – informații generale | ||
| + | * ''FINE'' / ''DEBUG'' – detalii de execuție | ||
| + | |||
| + | <note important> Logging-ul NU trebuie să schimbe comportamentul aplicației, **doar să-l observe**. </note> | ||
| + | |||
| + | ====Logging folosind Log4j==== | ||
| + | |||
| + | Pe lângă mecanismul de logging din JDK (java.util.logging), în practică este foarte des întâlnită biblioteca Apache Log4j. | ||
| + | |||
| + | Log4j este: | ||
| + | * o bibliotecă externă de logging (nu face parte din JDK) | ||
| + | * mai flexibilă și mai configurabilă decât logging-ul standard din Java | ||
| + | * folosită frecvent în aplicații enterprise și framework-uri | ||
| + | |||
| + | Un exemplu de inițializare: | ||
| + | <code java> | ||
| + | import org.apache.logging.log4j.LogManager; | ||
| + | import org.apache.logging.log4j.Logger; | ||
| + | |||
| + | public class Example { | ||
| + | private static final Logger logger = | ||
| + | LogManager.getLogger(Example.class); | ||
| + | |||
| + | void run() { | ||
| + | logger.info("Application started"); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | <note warning> Log4j a fost implicat în vulnerabilitatea **Log4Shell (2021)**, una dintre cele mai grave din istoria Java. Acest lucru NU înseamnă că logging-ul este periculos, ci că: **bibliotecile trebuie actualizate** configurațiile trebuie tratate cu atenție </note> | ||
| + | |||
| + | <note tip> | ||
| + | * ''java.util.logging'' → suficient pentru laborator și aplicații simple | ||
| + | * Log4j → standard de facto în aplicații mari | ||
| + | * ''System.out.println'' → nu este logging | ||
| + | </note> | ||
| =====Exerciții===== | =====Exerciții===== | ||