目录
前言
(1) 先说说什么时候会用到记录日志吧,咱们平常开发是用不到的,因为咱们可以直接看到控制台,但是当咱们部署到了服务器上,然后项目出现了问题,咱们怎么排查问题呢,不能直接去服务器里面看吧。所以这时咱们就需要了日志文件,咱们把生成的日志文件放到服务器固定路径,然后拿到文件看到异常就可以解决问题了。
(2) 咱们经常要用实体类,需要进行封装,然后需要get、set方法,那么使用lombok就可以让你减少代码的编写。
下面我是基于 springboot项目进行配置的
一.下载 lombok 插件
注意: 有的版本的idea搜不到,因为他已经内置了 Lombok,那你就忽略这步。
idea左上角 File -> Settings -> Plugins
二.pom文件导入依赖
<!-- lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
三.简单记录日志
1.配置yml文件
# path 和 name 不会同时生效,区别在于 name可以自定义日志名字:一般工作中定义为${spring.application.name}.log,当然你也可以定义成别的。
logging:
file:
name: C:\LogFile\test.log # 会在LogFile目录下生成 test.log 日志文件,并且如果 LogFile目录不存在,会自动给你创建。
# path: C:\LogFile # 会在LogFile目录下生成默认 spring.txt 日志文件,并且如果 LogFile目录不存在,会自动给你创建。
2.实际使用(加@Slf4j)
@Slf4j
注解加上就ok了,当然他也会记录你控制台打印的信息。
@Component
@Slf4j //日志注解
//继承CommandLineRunner,可以使项目启动之后就执行
public class TestLog implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
//记录日志内容
log.info("++++++++ 记录日志 ++++++++");
}
}
四.日志记录更多配置(logback-spring.xml配置文件)
1.配置yml文件
logging:
config: classpath:logback-spring.xml #日志配置文件,会在当前项目下去找日志配置文件
2.logback-spring.xml配置文件位置
3.logback-spring.xml配置文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="2.5 seconds" debug="false">
<!--日志格式 -->
<property name="logPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n"/>
<!-- 日志文件路径 -->
<property name="logPath" value="/kunkun/log/"></property>
<!-- 日志文件名称 -->
<property name="logName" value="springboot_log"></property>
<!--日志记录控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--日志格式 -->
<pattern>${logPattern}</pattern>
<!--日志编码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志文件配置 对应级别记录到对应文件中-->
<appender name="LEVEL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--让对应日志级别,记录到对应得文件中 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>trace或debug或info或warn或error或fatal</level>
</filter>
<!-- 日志文件的路径和名称 -->
<file>${logPath}${logName}.log</file>
<encoder>
<!--日志格式 -->
<pattern>${logPattern}</pattern>
<!--日志编码 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 每天的日志都是一个文件-->
<!-- 归档日志的格式 -->
<fileNamePattern>${logPath}${logName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--单个日志最大大小 -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- 日志文件配置 所有级别日志都记录到一个文件里面-->
<appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件的路径和名称 -->
<file>${logPath}${logName}.log</file>
<encoder>
<!--日志格式 -->
<pattern>${logPattern}</pattern>
<!--日志编码 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 每天的日志都是一个文件-->
<!-- 归档日志的格式 -->
<fileNamePattern>${logPath}${logName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--单个日志最大大小 -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- 开发、测试环境,额外指定不同包下不同的日志等级 -->
<springProfile name="dev,test">
<!--日志是info的级别的 -->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LEVEL_FILE" />
<appender-ref ref="ALL_FILE" />
</root>
<!--指定org.springframework.web日志级别是ERROR -->
<logger name="org.springframework.web" level="ERROR"></logger>
<!--指定org.springboot.sample日志级别是ERROR -->
<logger name="org.springboot.sample" level="ERROR"></logger>
<!--指定com.ipage.work日志级别是INFO-->
<logger name="com.ipage.work" level="INFO"></logger>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<!--日志是info的级别的,生成环境尽量不要控制台日志 -->
<root level="info">
<appender-ref ref="LEVEL_FILE" />
<appender-ref ref="ALL_FILE" />
</root>
<!--优先级大于 <root/>标签 -->
<logger name="org.springframework.web" level="ERROR"> </logger>
<logger name="org.springboot.sample" level="ERROR"></logger>
<logger name="com.ipage.work" level="INFO"> </logger>
</springProfile>
</configuration>
4.使用
配置好之后,加上@Slf4j
注解,然后直接使用就行了。
5.拓展:如果你想把sql的执行记录打印在控制台上怎么办?
①记录sql需要debug级别的,所以把 <root level="info">
改成 <root level="debug">
。
②在yml文件中配置
logging:
level:
XXX.XXX.dao: debug #你执行dao包的位置
五.使用注解减少代码开发
1.@Data
通常我们要在实体类里面,定义属性,然后手动去生成get、set、toString方法,我们直接去使用@Data
注解就会自动生成get、set、toString方法。
@Data
public class Kunkun {
private int id;
private String chang;
private String tiao;
}
2.@Setter和@Getter
和@Data
注解作用一样
public class Kunkun {
@Getter@Setter
private int id;
private String chang;
private String tiao;
}
3.更多注解作用
(1) @Synchronized : 同步方法安全的转化。
(2) @ToString: 自动生成toString方法。
属性1:callSuper 是否输出父类的toString方法,默认为false。
属性2:includeFieldNames 是否包含字段名称,默认为true。
属性3:exclude 排除生成tostring的字段。
(3) @Cleanup: 用于确保已分配的资源被释放,如IO的连接关闭。
(4) @NonNull: 用在成员方法或者构造方法的参数前面,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常。
(5)@Value: 从配置文件读取值。