BufferedLog.java
/*-
* ========================LICENSE_START=================================
* flyway-core
* ========================================================================
* Copyright (C) 2010 - 2025 Red Gate Software Ltd
* ========================================================================
* 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.
* =========================LICENSE_END==================================
*/
package org.flywaydb.core.internal.logging.buffered;
import org.flywaydb.core.api.logging.Log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BufferedLog implements Log {
public final List<BufferedLogMessage> bufferedLogMessages = Collections.synchronizedList(new ArrayList<>());
@Override
public boolean isDebugEnabled() {
return true;
}
@Override
public void debug(String message) {
bufferedLogMessages.add(new BufferedLogMessage(message, Level.DEBUG));
}
@Override
public void info(String message) {
bufferedLogMessages.add(new BufferedLogMessage(message, Level.INFO));
}
@Override
public void warn(String message) {
bufferedLogMessages.add(new BufferedLogMessage(message, Level.WARN));
}
@Override
public void error(String message) {
bufferedLogMessages.add(new BufferedLogMessage(message, Level.ERROR));
}
@Override
public void error(String message, Exception e) {
bufferedLogMessages.add(new BufferedLogMessage(message, Level.ERROR, e));
}
@Override
public void notice(String message) {
bufferedLogMessages.add(new BufferedLogMessage(message, Level.NOTICE));
}
public void flush(Log target) {
synchronized (bufferedLogMessages) {
for (BufferedLog.BufferedLogMessage message : bufferedLogMessages) {
switch (message.level) {
case DEBUG:
target.debug(message.message);
break;
case INFO:
target.info(message.message);
break;
case WARN:
target.warn(message.message);
break;
case NOTICE:
target.notice(message.message);
break;
case ERROR:
if (message.e == null) {
target.error(message.message);
} else {
target.error(message.message, message.e);
}
break;
}
}
bufferedLogMessages.clear();
}
}
public static class BufferedLogMessage {
public final String message;
public final Level level;
public final Exception e;
public BufferedLogMessage(String message, Level level) {
this(message, level, null);
}
public BufferedLogMessage(String message, Level level, Exception e) {
this.message = message;
this.level = level;
this.e = e;
}
}
public enum Level {
DEBUG, INFO, WARN, ERROR, NOTICE
}
}