Heim  >  Artikel  >  Java  >  Wie SpringBoot P6Spy integriert, um die SQL-Protokollierung zu implementieren

Wie SpringBoot P6Spy integriert, um die SQL-Protokollierung zu implementieren

WBOY
WBOYnach vorne
2023-05-15 12:10:061326Durchsuche

Einführung in P6Spy

P6Spy ist ein Open-Source-Framework, das zum Abfangen und Ändern von Datenmanipulationsanweisungen in Anwendungen verwendet werden kann.

SQL-Anweisungen können über P6Spy abgefangen werden, was einem Rekorder für SQL-Anweisungen entspricht, sodass wir es für entsprechende Analysen, beispielsweise Leistungsanalysen, verwenden können.

Anwendungsszenario

pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
    </dependencies>

application.yml

spring:
Datenquelle:
Treiberklassenname: com.mysql.cj.jdbc.Driver
#Treiberklassenname: com.p6spy.engine .spy.P6SpyDriver
Typ: com.alibaba.druid.pool.DruidDataSource
URL: jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
# URL: jdbc:p6spy:mysql://localhost: 3306/course_db?serverTimezone=GMT%2B8
Benutzername: root
Passwort: root

# Öffnen Sie die SQL-Protokollausgabe von mybatis-plus
mybatis-plus:
Configuration:
log-impl: org.apache.ibatis.logging. stdout .StdOutImpl

entity

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("course_1")
public class Course {
    @TableField("cid")
    private Long cId;
    private String cName;
    private Integer userId;
    private String cStatus;
}

Mapper

public interface CourseMapper extends BaseMapper<Course> {
}

Startup class

@SpringBootApplication
@MapperScan(basePackages = "cn.zysheep.mapper")
public class ShardingjdbcdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShardingjdbcdemoApplication.class, args);
    }
}

Test class

@SpringBootTest
@Slf4j
class ShardingjdbcdemoApplicationTests {
    @Autowired
    private CourseMapper courseMapper;
    @SneakyThrows
    @Test
    void findCourse() {
        courseMapper.selectList(null).forEach(System.out::println);
    }
}

mybatis-plus kann auch das Ausgabe-SQL-Protokoll drucken, aber das ist nicht der gewünschte Effekt , wie? Um die gewünschte SQL-Protokollausgabe zu steuern, können Sie das Open-Source-Produkt P6Spy verwenden. mybatis-plus也可以打印输出的sql日志,但是不是我们想要的效果,如何来控制想要的sql日志输出,可以使用P6Spy开源产品。

Wie SpringBoot P6Spy integriert, um die SQL-Protokollierung zu implementieren

P6Spy入门使用

spy.properties

resources目录添加配置文件,类似log4j.xml

Wie integriert SpringBoot P6Spy, um SQL-Protokolle zu implementieren

Erste Schritte mit P6Spy

spy.properties

Fügen Sie eine Konfigurationsdatei zum Verzeichnis resources hinzu, ähnlich wie log4j.xml, um Konfigurationsinformationen aufzuzeichnen


module.log=com .p6spy.engine.logging.P6LogFactory , com.p6spy.engine.outage.P6OutageFactory
# SQL-Protokollausdruck
# 1. logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
# 2. logMessageFormat=com.p6spy. engine.spy.appender.CustomLineFormat
# customLogMessageFormat=%(currentTime) |. SQL-Nutzungszeit: %(executionTime) ms |. sql ausführen: %(sql)
# 3. Benutzerdefinierter Protokolldruck (vollständig qualifizierter Klassenname)
logMessageFormat=cn.zysheep.config.P6SPYConfig
# Verwenden Sie das Protokollsystem zum Aufzeichnen von sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
## Konfigurieren Sie die Protokollierung von Protokollausnahmen
excludecategories=info,debug,result, batc,resultset
#Eingestellt, um den p6spy-Treiber als Proxy zu verwenden
deregisterdrivers=true
#Datumsformat

dateformat=yyyy-MM-dd HH:mm:ss
# Tatsächlicher Treiber

driverlist=com. mysql.cj.jdbc.Driver

# Ob die langsame SQL-Aufzeichnung aktiviert werden soll

outagedetection=true

# Langsame SQL-Aufzeichnung in Standardsekunden

outagedetectioninterval=2

P6Spy verfügt über ein integriertes SQL-Ausgabeformat, wie in der Konfigurationsdatei oben gezeigt . Hier verwenden wir den benutzerdefinierten SQL-Protokolldruck

P6SPYConfig

public class P6SPYConfig  implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        Map<String, Object> message = new LinkedHashMap<>(8);
        String newPrepared = prepared.replace("   ", "").replace("\n", " ");
        message.put("prepared", newPrepared);
        String newSql = sql.replace("   ", "").replace("\n", " ");
        message.put("sql", newSql);
        return JSONObject.toJSONString(message, true);
    }
}

application.yml


spring:
datasource:

# Driver-Class-Name: com.mysql.cj.jdbc.Driver

Driver-Class-Name: com . p6spy.engine.spy.P6SpyDriver
Typ: com.alibaba.druid.pool.DruidDataSource
# URL: jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
URL: jdbc:p6spy:mysql: / /localhost:3306/course_db?serverTimezone=GMT%2B8

Benutzername: root
Passwort: root

# Aktivieren Sie die SQL-Protokollausgabe von mybatis-plus

mybatis-plus:Wie SpringBoot P6Spy integriert, um die SQL-Protokollierung zu implementieren Configuration:

log-impl: org.apache. ibatis .logging.stdout.StdOutImpl🎜🎜🎜Testklasse unverändert🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonWie SpringBoot P6Spy integriert, um die SQL-Protokollierung zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen