Comment faire pour que liquibase se connecte avec slf4j?
4 réponses
il y en a, mais c'est un peu obscur. Citation fixation de l'enregistrement liquibase avec SLF4J et Log4J :
il y a la voie facile , en tombant dans une dépendance:
<!-- your own standard logging dependencies -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId><!-- or log4j2 or logback or whatever-->
<version>1.7.5</version>
</dependency>
<!-- special dependency to fix liquibase's logging fetish -->
<dependency>
<groupId>com.mattbertolini</groupId>
<artifactId>liquibase-slf4j</artifactId>
<version>1.2.1</version>
</dependency>
maintenant les deux premiers sont vos cadres de journalisation quotidiens (api slf4j et mise en œuvre de log4j). Ceux-ci s'ajoutent à votre dépendance log4j standard, car tout ce qu'ils font, c'est se diriger vers le cadre de journalisation physique. Sans log4j / logback / etc. lui-même, ils ne peuvent toujours pas la route quoi que ce soit.
la dernière est cependant intéressante, car elle fournit une classe unique dans un paquet spécifique que liquibase scannera pour les implémentations Logger
. C'est open source, par Matt Bertolini, donc vous pouvez le trouver sur GitHub .
Si vous voulez le faire vous-même, il y a aussi à La Dure :
package liquibase.ext.logging; // this is *very* important
import liquibase.changelog.ChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.logging.core.AbstractLogger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Liquibase finds this class by itself by doing a custom component scan (sl4fj wasn't generic enough).
*/
public class LiquibaseLogger extends AbstractLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(LiquibaseLogger.class);
private String name = "";
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void severe(String message) {
LOGGER.error("{} {}", name, message);
}
@Override
public void severe(String message, Throwable e) {
LOGGER.error("{} {}", name, message, e);
}
@Override
public void warning(String message) {
LOGGER.warn("{} {}", name, message);
}
@Override
public void warning(String message, Throwable e) {
LOGGER.warn("{} {}", name, message, e);
}
@Override
public void info(String message) {
LOGGER.info("{} {}", name, message);
}
@Override
public void info(String message, Throwable e) {
LOGGER.info("{} {}", name, message, e);
}
@Override
public void debug(String message) {
LOGGER.debug("{} {}", name, message);
}
@Override
public void debug(String message, Throwable e) {
LOGGER.debug("{} {}", message, e);
}
@Override
public void setLogLevel(String logLevel, String logFile) {
}
@Override
public void setChangeLog(DatabaseChangeLog databaseChangeLog) {
}
@Override
public void setChangeSet(ChangeSet changeSet) {
}
@Override
public int getPriority() {
return Integer.MAX_VALUE;
}
}
cette implémentation fonctionne, mais ne doit être utilisée qu'à titre d'exemple. Par exemple, je n'utilise pas les noms de Liquibase pour exiger une journalisation, mais utilise cette classe Logger
à la place. Les versions de Matt font quelques null - vérifications aussi, donc c'est probablement une implémentation plus mature à utiliser, plus c'est open source.
Je ne suis pas très sûr de votre exigence, mais ce que je comprends c'est que vous voulez enregistrer tous les journaux liquibase en utilisant L'API SLF4J. Si je suis à droite, puis-je suppose que vous pouvez en mesure de le faire.
ajoutez D'abord la dépendance suivante dans votre pom.fichier xml:
<dependency>
<groupId>com.mattbertolini</groupId>
<artifactId>liquibase-slf4j</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.7</version>
</dependency>
et dans votre logback.fichier xml, ajouter logger pour liquibase et définir le niveau selon votre exigence.
<logger name="liquibase" level="DEBUG" />
j'ai essayé la même chose dans ma demande et il semble que cela fonctionne bien. Je peux voir le log de liquibase dans mon fichier log.
2014-01-08 11:16:21,452 [main] DEBUG liquibase - Computed checksum for addColumn:[
columns=[
column:[
name="IS_NEW"
type="BIT"
]
]
tableName="TENANT"
] as e2eb1f5cb8dcfca7d064223044d06de9
2014-01-08 11:16:21,452 [main] DEBUG liquibase - Computed checksum for 3:e2eb1f5cb8dcfca7d064223044d06de9: as 549852ffb531de4929ae433ff0be2742
2014-01-08 11:16:21,455 [main] DEBUG liquibase - Release Database Lock
2014-01-08 11:16:21,456 [main] DEBUG liquibase - Executing UPDATE database command: UPDATE `DATABASECHANGELOGLOCK` SET `LOCKED` = 0, `LOCKEDBY` = NULL, `LOCKGRANTED` = NULL WHERE `ID` = 1
2014-01-08 11:16:21,518 [main] INFO liquibase - Successfully released change log lock
voici ma recette pour faire liquibase 3.5.3 ouvrir une session sous windows lorsque vous utilisez la ligne de commande. Il n'utilise pas exactement 'slf4j' mais résout le problème d'obtenir des fichiers journaux des mises à jour de db, en faisant liquibase utiliser java.util.journalisation.
1) Obtenir le liquibase-javalogger-3.0.jar à partir d'ici https://github.com/liquibase/liquibase-javalogger/releases /
2) Mettez-le à %LIQUIDASE_HOME % / lib directory
3) Créer logger.fichier de propriétés avec le contenu suivant:
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.pattern=liquibase.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.append=true
#2018-04-28 17:29:44 INFO Example logging record
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %5$s%6$s%n
4) Ajouter l'option java à liquibase (par exemple via set JAVA_OPTS=...):
-Djava.util.logging.config.file=logger.properties