>  기사  >  Java  >  SpringBoot가 P6Spy를 통합하여 SQL 로깅을 구현하는 방법

SpringBoot가 P6Spy를 통합하여 SQL 로깅을 구현하는 방법

WBOY
WBOY앞으로
2023-05-15 12:10:061241검색

P6Spy 소개

P6Spy는 애플리케이션에서 데이터 조작 문을 가로채고 수정하는 데 사용할 수 있는 오픈 소스 프레임워크입니다.

SQL문의 기록장치에 해당하는 P6Spy를 통해 SQL문을 가로챌 수 있어 성능 분석 등 관련 분석에 활용할 수 있습니다.

애플리케이션 시나리오

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:
datasource:
드라이버 클래스 이름: com.mysql.cj.jdbc.Driver
#드라이버 클래스 이름: com.p6spy.engine .spy.P6SpyDriver
유형: 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
사용자 이름: root
비밀번호: root

# mybatis-plus
mybatis-plus:
구성:
log-impl: org.apache.ibatis.logging의 SQL 로그 출력을 엽니다. 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에서도 출력 SQL 로그를 출력할 수 있지만 우리가 원하는 효과는 아닙니다. , 어떻게 원하는 SQL 로그 출력을 제어하려면 P6Spy 오픈 소스 제품을 사용할 수 있습니다. mybatis-plus也可以打印输出的sql日志,但是不是我们想要的效果,如何来控制想要的sql日志输出,可以使用P6Spy开源产品。

SpringBoot가 P6Spy를 통합하여 SQL 로깅을 구현하는 방법

P6Spy入门使用

spy.properties

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

SpringBoot는 P6Spy를 통합하여 SQL 로그를 구현하는 방법

시작하기 P6Spy

spy.properties

구성 정보를 기록하려면 log4j.xml와 유사한 resources 디렉터리에 구성 파일을 추가하세요


module.log=com .p6spy.engine.logging.P6LogFactory , com.p6spy.engine.outage.P6OutageFactory
# SQL 로그 인쇄
# 1. logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
# 2. logMessageFormat=com.p6spy. engine.spy.appender.CustomLineFormat
# customLogMessageFormat=%(currentTime) | SQL 사용 시간: %(executionTime) ms | 연결 정보: %(category)-%(connectionId) | SQL 실행: %(sql)
# 3. 사용자 정의 로그 인쇄(정규화된 클래스 이름)
logMessageFormat=cn.zysheep.config.P6SPYConfig
# 로그 시스템을 사용하여 기록 sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
## 로깅 구성 로그 예외
excludecategories=info,debug,result, batc,resultset
# p6spy 드라이버를 프록시로 사용하도록 설정
deregisterdrivers=true
# 날짜 형식

dateformat=yyyy-MM-dd HH:mm:ss
# 실제 드라이버

driverlist=com. mysql.cj.jdbc.Driver

# 느린 SQL 기록 활성화 여부

outageDetection=true

# 느린 SQL 기록 표준 초

outageDetectioninterval=2

P6Spy에는 위 구성 파일에 표시된 대로 SQL 출력 형식이 내장되어 있습니다. . 여기서는 사용자 정의 SQL 로그 인쇄

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:

# 드라이버 클래스 이름: com.mysql.cj.jdbc.Driver

드라이버 클래스 이름: com을 사용합니다. p6spy.engine.spy.P6SpyDriver
유형: 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

사용자 이름: root
비밀번호: root

# mybatis-plus

mybatis-plus:SpringBoot가 P6Spy를 통합하여 SQL 로깅을 구현하는 방법 구성:

log-impl: org.apache의 SQL 로그 출력을 켜세요. ibatis .logging.stdout.StdOutImpl🎜🎜🎜테스트 클래스는 변경되지 않았습니다🎜🎜🎜🎜

위 내용은 SpringBoot가 P6Spy를 통합하여 SQL 로깅을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제