Lors de la configuration de Logback pour capturer les journaux SQL générés par MyBatis, il est possible de rencontrer des problèmes où ces journaux ne sont pas écrits dans le fichier attendu. Voici comment résoudre ce problème.
Dans la configuration suivante de Logback, nous avons défini un appender nommé sql pour stocker les journaux SQL dans des fichiers rotatifs basés sur le temps.
<appender name="sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logbase}sql.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] [%X{traceId}] %5level %logger{36}:%line] %msg%n</pattern>
</encoder>
</appender>
<logger name="com.xcorp.dao" level="DEBUG" additivity="false">
<appender-ref ref="sql" />
</logger>
<logger name="org.mybatis" level="DEBUG" additivity="false">
<appender-ref ref="sql" />
</logger>
<root level="DEBUG">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
Malgré cette configuration, les journaux SQL étaient écrits dans le fichier géré par l’appender file au lieu de celui configuré pour sql.
En examinant les journaux produits par l’appender file, il a été constaté que les messages provenant des mappers MyBatis étaient précédés par dao.. Cela signifie que les journaux étaient associés au logger nommé dao plutôt que org.mybatis.
Pour corriger cette situation, il était nécessaire d’ajuster la configuration des loggers dans Logback comme suit:
<logger name="dao" level="DEBUG" additivity="false">
<appender-ref ref="sql" />
</logger>
<logger name="org.mybatis" level="DEBUG" additivity="false">
<appender-ref ref="sql" />
</logger>
<root level="DEBUG">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
Cette modification permet de capturer correctement les journaux SQL dans le fichier désigné par l’appender sql.
L’origine de ce comportement réside dans la configuration de MyBatis. Dans le fichier mybatis-config.xml, il existe une directive qui préfixe les noms des loggers utilisés par MyBatis avec dao.:
<configuration>
<settings>
<setting name="logPrefix" value="dao."/>
</settings>
</configuration>
Cette configuration modifie le nom des loggers pour les mappers MyBatis, ce qui explique pourquoi ils ne correspondaient pas à la règle définie pour org.mybatis dans la configuration de Logback.