package liquibase.ext.logging; import liquibase.changelog.ChangeSet; import liquibase.changelog.DatabaseChangeLog; import liquibase.logging.core.AbstractLogger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jLogger extends AbstractLogger{ private static final int PRIORITY = 5; private Logger logger; private String changeLogName = null; private String changeSetName = null; @Override public void setName( String name ){ this.logger = LoggerFactory.getLogger( name ); } @Override public void setLogLevel( String logLevel, String logFile ){ // Do nothing } @Override public void setChangeLog( DatabaseChangeLog databaseChangeLog ){ changeLogName = (databaseChangeLog == null) ? null : databaseChangeLog.getFilePath(); } @Override public void setChangeSet( ChangeSet changeSet ){ changeSetName = (changeSet == null) ? null : changeSet.toString( false ); } @Override public void severe( String message ){ if( this.logger.isErrorEnabled() ){ this.logger.error( buildMessage( message ) ); } } @Override public void severe( String message, Throwable throwable ){ if( this.logger.isErrorEnabled() ){ this.logger.error( buildMessage( message ), throwable ); } } @Override public void warning( String message ){ if( this.logger.isWarnEnabled() ){ this.logger.warn( buildMessage( message ) ); } } @Override public void warning( String message, Throwable throwable ){ if( this.logger.isWarnEnabled() ){ this.logger.warn( buildMessage( message ), throwable ); } } @Override public void info( String message ){ if( this.logger.isInfoEnabled() ){ this.logger.info( buildMessage( message ) ); } } @Override public void info( String message, Throwable throwable ){ if( this.logger.isInfoEnabled() ){ this.logger.info( buildMessage( message ), throwable ); } } @Override public void debug( String message ){ if( this.logger.isDebugEnabled() ){ this.logger.debug( buildMessage( message ) ); } } @Override public void debug( String message, Throwable throwable ){ if( this.logger.isDebugEnabled() ){ this.logger.debug( buildMessage( message ), throwable ); } } /** * Gets the logger priority for this logger. The priority is used by Liquibase to determine which logger to use. * The logger with the highest priority will be used. This implementation's priority is set to 5. Remove loggers * with higher priority numbers if needed. * * @return An integer (5) */ @Override public int getPriority(){ return PRIORITY; } /** * Build a log message with optional data if it exists. */ private String buildMessage( String rawMessage ){ StringBuilder msg = new StringBuilder(); if( changeLogName != null ){ msg.append( changeLogName ).append( ": " ); } if( changeSetName != null ){ msg.append( changeSetName.replace( changeLogName + "::", "" ) ).append( ": " ); } msg.append( rawMessage ); return msg.toString(); } }