4 changed files with 338 additions and 0 deletions
@ -0,0 +1,131 @@
@@ -0,0 +1,131 @@
|
||||
package org.springframework.boot.liquibase; |
||||
|
||||
import liquibase.configuration.LiquibaseConfiguration; |
||||
import liquibase.logging.LogLevel; |
||||
import liquibase.logging.Logger; |
||||
import liquibase.logging.core.AbstractLogger; |
||||
import liquibase.logging.core.DefaultLoggerConfiguration; |
||||
|
||||
import org.apache.commons.logging.Log; |
||||
import org.apache.commons.logging.LogFactory; |
||||
|
||||
/** |
||||
* Liqubase {@link Logger} that that delegates to an Apache Commons {@link Log}. |
||||
* |
||||
* @author Michael Cramer |
||||
* @author Phillip Webb |
||||
* @since 1.2.0 |
||||
*/ |
||||
public class CommonsLoggingLiquibaseLogger extends AbstractLogger { |
||||
|
||||
public static final int PRIORITY = 10; |
||||
|
||||
private Log logger; |
||||
|
||||
@Override |
||||
public void setName(String name) { |
||||
this.logger = createLogger(name); |
||||
} |
||||
|
||||
/** |
||||
* Factory method used to create the logger. |
||||
* @param name the name of the logger |
||||
* @return a {@link Log} instance |
||||
*/ |
||||
protected Log createLogger(String name) { |
||||
return LogFactory.getLog(name); |
||||
} |
||||
|
||||
@Override |
||||
public void setLogLevel(String logLevel, String logFile) { |
||||
super.setLogLevel(logLevel); |
||||
} |
||||
|
||||
@Override |
||||
public void severe(String message) { |
||||
if (isEnabled(LogLevel.SEVERE)) { |
||||
this.logger.error(buildMessage(message)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void severe(String message, Throwable e) { |
||||
if (isEnabled(LogLevel.SEVERE)) { |
||||
this.logger.error(buildMessage(message), e); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void warning(String message) { |
||||
if (isEnabled(LogLevel.WARNING)) { |
||||
this.logger.warn(buildMessage(message)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void warning(String message, Throwable e) { |
||||
if (isEnabled(LogLevel.WARNING)) { |
||||
this.logger.warn(buildMessage(message), e); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void info(String message) { |
||||
if (isEnabled(LogLevel.INFO)) { |
||||
this.logger.info(buildMessage(message)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void info(String message, Throwable e) { |
||||
if (isEnabled(LogLevel.INFO)) { |
||||
this.logger.info(buildMessage(message), e); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void debug(String message) { |
||||
if (isEnabled(LogLevel.DEBUG)) { |
||||
this.logger.debug(buildMessage(message)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void debug(String message, Throwable e) { |
||||
if (isEnabled(LogLevel.DEBUG)) { |
||||
this.logger.debug(buildMessage(message), e); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public int getPriority() { |
||||
return PRIORITY; |
||||
} |
||||
|
||||
private boolean isEnabled(LogLevel level) { |
||||
if (this.logger != null && getLogLevel().compareTo(level) <= 0) { |
||||
switch (level) { |
||||
case DEBUG: |
||||
return this.logger.isDebugEnabled(); |
||||
case INFO: |
||||
return this.logger.isInfoEnabled(); |
||||
case WARNING: |
||||
return this.logger.isWarnEnabled(); |
||||
case SEVERE: |
||||
return this.logger.isErrorEnabled(); |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public LogLevel getLogLevel() { |
||||
LogLevel logLevel = super.getLogLevel(); |
||||
if (logLevel == null) { |
||||
return toLogLevel(LiquibaseConfiguration.getInstance() |
||||
.getConfiguration(DefaultLoggerConfiguration.class).getLogLevel()); |
||||
} |
||||
return logLevel; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,186 @@
@@ -0,0 +1,186 @@
|
||||
/* |
||||
* Copyright 2012-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.liquibase; |
||||
|
||||
import liquibase.logging.LogLevel; |
||||
|
||||
import org.apache.commons.logging.Log; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
|
||||
import static org.mockito.BDDMockito.given; |
||||
import static org.mockito.Mockito.mock; |
||||
import static org.mockito.Mockito.never; |
||||
import static org.mockito.Mockito.verify; |
||||
|
||||
/** |
||||
* Tests for {@link CommonsLoggingLiquibaseLogger}. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
public class CommonsLoggingLiquibaseLoggerTests { |
||||
|
||||
private Log delegate = mock(Log.class); |
||||
|
||||
private CommonsLoggingLiquibaseLogger logger; |
||||
|
||||
private Throwable ex = new Exception(); |
||||
|
||||
@Before |
||||
public void setup() { |
||||
this.logger = new MockCommonsLoggingLiquibaseLogger(); |
||||
this.logger.setName("mylog"); |
||||
} |
||||
|
||||
@Test |
||||
public void debug() { |
||||
this.logger.setLogLevel(LogLevel.DEBUG); |
||||
given(this.delegate.isDebugEnabled()).willReturn(true); |
||||
this.logger.debug("debug"); |
||||
verify(this.delegate).debug("debug"); |
||||
} |
||||
|
||||
@Test |
||||
public void debugWithException() { |
||||
this.logger.setLogLevel(LogLevel.DEBUG); |
||||
given(this.delegate.isDebugEnabled()).willReturn(true); |
||||
this.logger.debug("debug", this.ex); |
||||
verify(this.delegate).debug("debug", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void debugWithLoggerOff() { |
||||
this.logger.setLogLevel(LogLevel.DEBUG); |
||||
given(this.delegate.isDebugEnabled()).willReturn(false); |
||||
this.logger.debug("debug"); |
||||
verify(this.delegate, never()).debug("debug"); |
||||
} |
||||
|
||||
@Test |
||||
public void debugBelowLevel() { |
||||
this.logger.setLogLevel(LogLevel.INFO); |
||||
given(this.delegate.isDebugEnabled()).willReturn(true); |
||||
this.logger.debug("debug", this.ex); |
||||
verify(this.delegate, never()).debug("debug", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void info() { |
||||
this.logger.setLogLevel(LogLevel.INFO); |
||||
given(this.delegate.isInfoEnabled()).willReturn(true); |
||||
this.logger.info("info"); |
||||
verify(this.delegate).info("info"); |
||||
} |
||||
|
||||
@Test |
||||
public void infoWithException() { |
||||
this.logger.setLogLevel(LogLevel.INFO); |
||||
given(this.delegate.isInfoEnabled()).willReturn(true); |
||||
this.logger.info("info", this.ex); |
||||
verify(this.delegate).info("info", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void infoWithLoggerOff() { |
||||
this.logger.setLogLevel(LogLevel.INFO); |
||||
given(this.delegate.isInfoEnabled()).willReturn(false); |
||||
this.logger.info("info"); |
||||
verify(this.delegate, never()).info("info"); |
||||
} |
||||
|
||||
@Test |
||||
public void infoBelowLevel() { |
||||
this.logger.setLogLevel(LogLevel.WARNING); |
||||
given(this.delegate.isInfoEnabled()).willReturn(true); |
||||
this.logger.info("info", this.ex); |
||||
verify(this.delegate, never()).info("info", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void warning() { |
||||
this.logger.setLogLevel(LogLevel.WARNING); |
||||
given(this.delegate.isWarnEnabled()).willReturn(true); |
||||
this.logger.warning("warning"); |
||||
verify(this.delegate).warn("warning"); |
||||
} |
||||
|
||||
@Test |
||||
public void warningWithException() { |
||||
this.logger.setLogLevel(LogLevel.WARNING); |
||||
given(this.delegate.isWarnEnabled()).willReturn(true); |
||||
this.logger.warning("warning", this.ex); |
||||
verify(this.delegate).warn("warning", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void warningWithLoggerOff() { |
||||
this.logger.setLogLevel(LogLevel.WARNING); |
||||
given(this.delegate.isWarnEnabled()).willReturn(false); |
||||
this.logger.warning("warning"); |
||||
verify(this.delegate, never()).warn("warning"); |
||||
} |
||||
|
||||
@Test |
||||
public void warningBelowLevel() { |
||||
this.logger.setLogLevel(LogLevel.SEVERE); |
||||
given(this.delegate.isWarnEnabled()).willReturn(true); |
||||
this.logger.warning("warning", this.ex); |
||||
verify(this.delegate, never()).warn("warning", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void severe() { |
||||
this.logger.setLogLevel(LogLevel.SEVERE); |
||||
given(this.delegate.isErrorEnabled()).willReturn(true); |
||||
this.logger.severe("severe"); |
||||
verify(this.delegate).error("severe"); |
||||
} |
||||
|
||||
@Test |
||||
public void severeWithException() { |
||||
this.logger.setLogLevel(LogLevel.SEVERE); |
||||
given(this.delegate.isErrorEnabled()).willReturn(true); |
||||
this.logger.severe("severe", this.ex); |
||||
verify(this.delegate).error("severe", this.ex); |
||||
} |
||||
|
||||
@Test |
||||
public void severeWithLoggerOff() { |
||||
this.logger.setLogLevel(LogLevel.SEVERE); |
||||
given(this.delegate.isErrorEnabled()).willReturn(false); |
||||
this.logger.severe("severe"); |
||||
verify(this.delegate, never()).error("severe"); |
||||
} |
||||
|
||||
@Test |
||||
public void severeBelowLevel() { |
||||
this.logger.setLogLevel(LogLevel.OFF); |
||||
given(this.delegate.isErrorEnabled()).willReturn(true); |
||||
this.logger.severe("severe", this.ex); |
||||
verify(this.delegate, never()).error("severe", this.ex); |
||||
} |
||||
|
||||
private class MockCommonsLoggingLiquibaseLogger extends CommonsLoggingLiquibaseLogger { |
||||
|
||||
@Override |
||||
protected Log createLogger(String name) { |
||||
return CommonsLoggingLiquibaseLoggerTests.this.delegate; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue