[JAVA] Verwenden Sie JUL, um das von MyBatis ausgegebene Ausführungsprotokoll von SQL aufzuzeichnen

Einführung

Ich habe an einer überraschend ungewöhnlichen Sache gearbeitet: "Verwenden Sie" java.util.logging "(im Folgenden als" JUL "bezeichnet), um das von MyBatis ausgegebene Ausführungsprotokoll von SQL aufzuzeichnen", also die damalige Prozedur Ich möchte es einfach behalten. Es ist ein ziemlich langer Artikel, aber das Festlegen von "logging.properties" sollte das Wichtigste sein.

Hinweis

Dieser Artikel wurde für den Betrieb in den folgenden Umgebungen überprüft, aber ich denke, dass er in Umgebungen mit verschiedenen Versionen und Middleware funktioniert.

Vorbereitung (Postgres)

Bereiten Sie die folgende Benutzertabelle vor. Die DB ist "dev" und der Benutzer ist "dev".

dev=# \d users
              Table "public.users"
 Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+---------
 id     | text |           | not null |
 name   | text |           | not null |
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)

Vorbereitung (Java-Projekt)

Bereiten Sie die folgenden vier Module vor.

  1. mybatis.logging.Main.java: Einstiegspunkt. Die Hauptmethode ist definiert.
  2. mybatis.logging.repository.UsersRepository.java: Mapper-Schnittstelle zur Tabelle 'users`.
  3. mybatis-config.xml: Verbindungsinformationen zur von MyBatis verwendeten Datenbank.
  4. logging.properties: JUL-Einstellungen.

java:mybatis.logging.Main.java


package mybatis.logging;

import java.io.IOException;
import java.io.UncheckedIOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import mybatis.logging.repository.UsersRepository;

public class Main {
    public static void main(String[] args) {
        var builder = new SqlSessionFactoryBuilder();
        try (var in = Resources.getResourceAsStream("mybatis-config.xml")) {
            var factory = builder.build(in);
            try (var session = factory.openSession(true)) {
                var usersRepository = session.getMapper(UsersRepository.class);
                usersRepository.truncate();
                usersRepository.insert("1", "Alice");
                usersRepository.insert("2", "Bob");
            }
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
}

java:mybatis.logging.repository.UsersRepository.java


package mybatis.logging.repository;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

public interface UsersRepository {
    
    @Insert("INSERT INTO users (id, name) VALUES (#{id}, #{name})")
    int insert(@Param("id") String id, @Param("name") String name);
    
    @Delete("DELETE FROM users")
    int truncate();
}

mybatis-config.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
  <environments default="dev">
    <environment id="dev">
      <transactionManager type="JDBC"></transactionManager>
      <dataSource type="POOLED">
        <property name="driver" value="org.postgresql.Driver"/>
        <property name="url" value="jdbc:postgresql://localhost:5432/dev"/>
        <property name="username" value="dev"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper class="mybatis.logging.repository.UsersRepository" />
  </mappers>
</configuration>

logging.properties


# ROOT LOGGER
handlers = java.util.logging.ConsoleHandler
.level = INFO

# ConsoleHandler Default Setting
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# MyBatis LOGGER
mybatis.logging.repository.level = FINE

Das Bild der Platzierungsinformationen wird unten angezeigt (Eclipse). image.png

Lauf

Führen Sie dann Java mit der Hauptklasse = mybatis.logging.Main aus. Geben Sie zu diesem Zeitpunkt die Eigenschaftendatei für JUL in der VM-Option "java.util.logging.config.file" ("logging.properties" im obigen Beispiel) an. Das Folgende ist ein Beispiel für das Festlegen von VM-Optionen in "Eclipse". Bitte ändern Sie dies entsprechend Ihrer Umgebung.

image.png

Ergebnis

Es ist erfolgreich, wenn das folgende Protokoll an die Standardausgabe ausgegeben wird. Wenn Sie das Protokoll in einer Datei usw. aufbewahren möchten, ändern Sie die Handler-Spezifikation entsprechend.

13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: ==>  Preparing: DELETE FROM users 
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: ==> Parameters: 
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: <==    Updates: 2
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: ==>  Preparing: INSERT INTO users (id, name) VALUES (?, ?) 
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: ==> Parameters: 1(String), Alice(String)
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: <==    Updates: 1
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: ==>  Preparing: INSERT INTO users (id, name) VALUES (?, ?) 
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: ==> Parameters: 2(String), Bob(String)
13. April, 2019 6:31:41 Uhr org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
gewöhnlich: <==    Updates: 1

Referenz

Recommended Posts

Verwenden Sie JUL, um das von MyBatis ausgegebene Ausführungsprotokoll von SQL aufzuzeichnen
[JAVA] [Spring] [MyBatis] Verwenden Sie GROUP BY in SQL Builder
So ändern Sie dynamisch den von MyBatis erfassten Spaltennamen
Verwendung der link_to-Methode
Verwendung der include? -Methode
Verwendung der Methode form_with
Verwendung der Wrapper-Klasse
Verwendung der MyBatis Mapper-Annotation