{"id":12446,"date":"2017-05-15T14:47:29","date_gmt":"2017-05-15T12:47:29","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12446"},"modified":"2017-05-15T14:47:29","modified_gmt":"2017-05-15T12:47:29","slug":"slf4j-meccanismo-di-logging-per-java","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/slf4j-meccanismo-di-logging-per-java\/","title":{"rendered":"SLF4J: meccanismo di logging per Java"},"content":{"rendered":"<p><a href=\"http:\/\/www.slf4j.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Simple Logging Facade for Java (SLF4J)<\/a> \u00e8 uno strumento di logging che molto spesso viene richiesto come dipendenza da importanti framework. Non si tratta di una semplice libreria bens\u00ec di uno strato di astrazione che permette di sfruttare molti altri meccanismi di logging.<\/p>\n<p>Solo per chiarezza, ricordiamo che parliamo di <strong>logging<\/strong> riferendoci ad una funzionalit\u00e0 che permette, durante il funzionamento di una nostra applicazione, di inviare messaggi ad una determinata destinazione (tipicamente un file) che tenga traccia di quanto sta avvenendo. Nei messaggi, in genere, si inseriscono informazioni concernenti possibili errori verificatisi o\u00a0dati di carattere statistico o puramente informativo su quello che il nostro programma fa.<\/p>\n<p>Riportando un esempio presente sulla documentazione ufficiale, vediamo un tipico caso di utilizzo di SLF4J:<\/p>\n<pre class=\"lang:java decode:true \">import org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\n \r\n public class Wombat {\r\n  \r\n   final Logger logger = LoggerFactory.getLogger(Wombat.class);\r\n   Integer t;\r\n   Integer oldT;\r\n\r\n   public void setTemperature(Integer temperature) {\r\n    \r\n     oldT = t;        \r\n     t = temperature;\r\n\r\n     logger.debug(\"Temperature set to {}. Old temperature was {}.\", t, oldT);\r\n\r\n     if(temperature.intValue() &gt; 50) {\r\n       logger.info(\"Temperature has risen above 50 degrees.\");\r\n     }\r\n   }\r\n}<\/pre>\n<p>Una volta ottenuto un oggetto di classe <strong>Logger<\/strong> \u00e8 sufficiente passargli il messaggio da registrare nei log utilizzando uno dei vari metodi che caratterizza il livello di gravit\u00e0 della comunicazione (<em>debug<\/em> per test di funzionamento, <em>info<\/em> per normali informazioni, via via fino a quelli dedicati a situazioni\u00a0di errore).<\/p>\n<p>L&#8217;aspetto comunque di pi\u00f9 grande interesse in SLF4J resta la possibilit\u00e0 di attuare dei <strong>binding<\/strong>, usando questo strumento come un&#8217;interfaccia verso un motore di log offerto da un&#8217;altra libreria: questo \u00e8 proprio lo scopo del pattern <em>facade<\/em>.<\/p>\n<p>Sempre sulla documentazione del progetto troviamo un&#8217;immagine piuttosto eloquente che mostra come SLF4J possa lavorare in modalit\u00e0 \u00a0<em>unbound<\/em> o collegato ad un altro motore di logging, importando le necessarie librerie:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/java-slf4j-logging-log4j-logback.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12450\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/java-slf4j-logging-log4j-logback.png\" alt=\"java-slf4j-logging-log4j-logback\" width=\"1152\" height=\"636\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/java-slf4j-logging-log4j-logback.png 1152w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/java-slf4j-logging-log4j-logback-300x166.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/java-slf4j-logging-log4j-logback-768x424.png 768w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/java-slf4j-logging-log4j-logback-1024x565.png 1024w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/a><\/p>\n<p>SLF4J offre sicuramente un punto di approdo al problema del logging molto flessibile e professionale sfruttando uno dei perni della Programmazione Orientata agli\u00a0oggetti: l&#8217;utilizzo di interfacce per nascondere il reale meccanismo di funzionamento sottostante.<\/p>\n<p>Inoltre, la tematica che stiamo trattando \u00e8 centrale nello sviluppo di software: il logging per quanto possa\u00a0apparire un&#8217;operazione &#8220;elementare&#8221; resta comunque uno strumento imprescindibile per tenere \u00a0traccia del funzionamento delle nostre applicazioni sia\u00a0in fase di debug sia in produzione.<\/p>\n<p>Alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Simple Logging Facade for Java (SLF4J) \u00e8 uno strumento di logging che molto spesso viene richiesto come&#8230;<\/p>\n","protected":false},"author":561,"featured_media":13015,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[481],"tags":[1526,1776,1724,1777],"class_list":["post-12446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-risorse-utili","tag-java","tag-log4j","tag-logging","tag-slf4j"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12446"}],"version-history":[{"count":3,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12446\/revisions"}],"predecessor-version":[{"id":13016,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12446\/revisions\/13016"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13015"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}