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.
<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>
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
@Data @NoArgsConstructor @AllArgsConstructor @TableName("course_1") public class Course { @TableField("cid") private Long cId; private String cName; private Integer userId; private String cStatus; }
public interface CourseMapper extends BaseMapper<Course> { }
@SpringBootApplication @MapperScan(basePackages = "cn.zysheep.mapper") public class ShardingjdbcdemoApplication { public static void main(String[] args) { SpringApplication.run(ShardingjdbcdemoApplication.class, args); } }
@SpringBootTest @Slf4j class ShardingjdbcdemoApplicationTests { @Autowired private CourseMapper courseMapper; @SneakyThrows @Test void findCourse() { courseMapper.selectList(null).forEach(System.out::println); } }
mybatis-plus
Anda 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.
resources
Tambahkan 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
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); } }
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
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!