Rumah  >  Artikel  >  Java  >  Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

WBOY
WBOYke hadapan
2023-05-15 12:10:061327semak imbas

Pengenalan kepada P6Spy

P6Spy ialah rangka kerja sumber terbuka yang boleh digunakan untuk memintas dan mengubah suai pernyataan manipulasi data dalam aplikasi.

Pernyataan SQL boleh dipintas melalui P6Spy, yang bersamaan dengan perakam pernyataan SQL, supaya kita boleh menggunakannya untuk analisis berkaitan, seperti analisis prestasi.

Senario aplikasi

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

musim bunga:
sumber data:
nama kelas pemandu: com.mysql.cj.jdbc.Pemandu
#nama-kelas-pemandu: com.p6spy.engine.spy.P6SpyDriver
taip: 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
nama pengguna: root
kata laluan: root

# Buka output log sql mybatis-plus
mybatis-plus:
konfigurasi:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

entiti

@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> {
}

Kelas permulaan

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

Kelas ujian

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

mybatis-plusAnda juga boleh mencetak sql output log, Tetapi ia bukan kesan yang kita mahu Bagaimana untuk mengawal output log sql yang diingini boleh menggunakan produk sumber terbuka P6Spy.

Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

Bermula dengan P6Spy

spy.properties

resourcesTambahkan fail konfigurasi pada direktori, serupa dengan log4j.xml, rekod maklumat konfigurasi

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# cetakan log sql
# 1. logMessageFormat= com.p6spy .engine.spy.appender.SingleLineFormat
# 2. logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
# customLogMessageFormat=%(currentTime) | |. maklumat sambungan : %(kategori)-%(connectionId) |. jalankan sql: %(sql)
# 3. Pencetakan log tersuai (nama kelas yang layak sepenuhnya)
logMessageFormat=cn.zysheep.config.P6SPYConfig
# Gunakan sistem log untuk merekod sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
## Konfigurasikan pengecualian Log pengelogan
excludecategories=info,debug,result,batc,resultset
# Sediakan dan gunakan pemacu p6spy sebagai proksi
deregisterdrivers=true
# Format tarikh
dateformat=yyyy-MM-dd HH:mm:ss
# Pemacu sebenar
driverlist=com. mysql.cj.jdbc .Driver
# Sama ada untuk mendayakan rakaman SQL perlahan
outagedetection=true
# Slow SQL recording standard saat
outagedetectioninterval=2

P6Spy mempunyai format output SQL terbina dalam, seperti fail konfigurasi di atas. Di sini kami menggunakan pencetakan log SQL tersuai

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:
sumber data:
# nama kelas pemandu : com.mysql.cj.jdbc.Driver
nama kelas pemandu: com.p6spy.engine.spy.P6SpyDriver
type: 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
nama pengguna: root
kata laluan: root

# Buka output log sql mybatis-plus
mybatis-plus:
konfigurasi:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Kelas ujian kekal tidak berubah

Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam