Ho poche classi che hanno usato System.out.println
(che dovrebbe essere evitato) e ora sto cercando di spostarle in un logger.
Abbiamo già utilizzato il logger in alcuni altri moduli. Ma il modulo che sto lavorando non l'ha usato da nessuna parte. Quindi, ho pensato di creare una nuova classe comune e amp; inserisci una nuova voce nel file logback.xml per quella nuova classe.
<logger name="MyLogHelper" level="INFO" additivity="false">
<!--appender-ref ref="STDOUT" /-->
<appender-ref ref="LOG-FILE"/>
</logger>
<logger name="MyLogHelper" level="DEBUG" additivity="false">
<!--appender-ref ref="STDOUT" /-->
<appender-ref ref="LOG-FILE"/>
</logger>
<logger name="MyLogHelper" level="WARN" additivity="false">
<!--appender-ref ref="STDOUT" /-->
<appender-ref ref="LOG-FILE"/>
</logger>
<logger name="MyLogHelper" level="ERROR" additivity="false">
<!--appender-ref ref="STDOUT" /-->
<appender-ref ref="ERROR-FILE"/>
</logger>
Manteniamo solo LOG-FILE
e ERROR-FILE
. Entrambi sono due appenders definiti per i file utilizzati nel nostro sistema.
public class MyLogHelper
{
private Logger logger = LoggerFactory.getLogger(MyLogHelper.class);
private static MyLogHelper instance = new MyLogHelper();
private MyLogHelper()
{
}
public static MyLogHelper getInstance(){
if(instance == null)
instance = new MyLogHelper();
return instance;
}
public void log(final String content, final LogLevel level)
{
switch (level)
{
case INFO:
logger.info(content);
break;
case DEBUG:
logger.debug(content);
break;
case WARN:
logger.warn(content);
break;
case ERROR:
logger.error(content);
break;
default:
logger.debug(content);
}
}
public enum LogLevel
{
INFO, DEBUG, WARN, ERROR
}
Ed è così che sostituisco il mio System.out.println con il mio nuovo modo,
/**Logger for logging within the class */
private static final MyLogHelper logger = MyLogHelper.getInstance();
...
logger.log(e.getMessage(), LogLevel.ERROR);
È un buon design? O possiamo migliorare questo con un design diverso?
EDIT: non posso semplicemente sostituire System.out.println con l'acquisizione di un logger e l'utilizzo. Perché per farlo devo aggiungere ogni classe come voci al file xml.
Ciò che cerco in realtà è che il mio attuale design è scalabile e il mio approccio di utilizzando un enum e un singolo pattern è la scelta migliore per questa situazione?