目录
同时使用application.yml 和 logback.xml 配置
今天总结一下项目中使用logback的具体场景,比如按照业务模块生成独立的日志文件,每天生成一个日志文件,每个文件大小为300M等功能。 关于logback的基础知识请看我的第一篇博客 :logback教程logback快速入门超实用详细教程收藏这一篇就够了(万字长文)
基础环境搭建
Springboot2.3.3.RELEASE 、JDK8。
pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.2.5</version>
</dependency>
</dependencies>
新建UserService类和OrderService类,并添加一个打印日志的方法:
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void testLogger() throws InterruptedException {
for (int i = 0; i < 10; i++) {
logger.info("user logger!" + i);
}
}
}
@Service
public class OrderService {
private static final Logger logger = LoggerFactory.getLogger(OrderService.class);
public void testLogger() throws InterruptedException {
for (int i = 0; i < 10; i++) {
Thread.sleep(2);
logger.info("order logger!" + i);
}
}
}
在测试类中调用UserService中的测试方法:
@SpringBootTest
@RunWith(SpringRunner.class)
class LogbackApplicationTests {
@Autowired
private UserService userService;
@Test
public void testLogger() {
userService.testLogger();
}
}
springboot默认配置都为我们做了些啥
我使用的是开发工具是idea,可以从External Libraries-springboot-logging-logback文件包中看到springboot为我们做的事,先看下 base.xml 文件:
如上:它为我们引入了三个配置文件,defaults.xml,console-appender.xml和file-appender.xml文件,从字面意思 就可知道这三个文件的作用,defaults.xml文件引入了默认配置,console-appender.xml文件是日志打印到控制台的appender配置,file-appender.xml文件是日志记录到文件的appender配置,再看下 defaults.xml 都配置了些啥玩意:
其中定义了两个变量CONSOLE_LOG_PATTERN和FILE_LOG_PATTERN,分别定义了日志打印到控制台和记录到文件中的默认格式,这个量变量会在console-appender.xml和file-appender.xml文件中引用,再看下
file-appender.xml:
如上:看下这个默认配置帮我们定义了一个使用RollingFileAppender将日志写入文件类,我们知道RollingFileAppender具有日志轮转功能,当达到一定条件后,会对日志文件进行一定的处理,如:新增一个文件或者删除指定的文件等操作,具体的控制是由<rollingPolicy>标签控制的,SizeAndTimeBasedRollingPolicy可以按照时间和大小对日志进行处理。 顺便再看下 console-appender.xml,这个文件的含义就不说了,如下:
其实springboot2.X之后(我用的是Springboot2.3.3.RELEASE),对于logback的默认配置几乎满足了我们平时的需求,甚至没有特别需求直接使用默认配置都可以,或者有个别配置不满足我们的要求,可以在yml文件中直接配置,对默认配置进行覆盖,如我们对默认日志文件大小为10M不满意,感觉太小,可以直接在boot的配置文件中进行覆盖配置,如下我们修改为100M:
level:
file:
max-size: 100MB
再或者你习惯单独使用一个配置文件对日志文件进行配置也是可以的,你可以按照spring推荐的命名规范定义一个文件,对logback进行配置,如定义一个文件名为logback.xml的文件,在文件里进行配置都是可以的。
使用application.yml配置
配置文件中添加如下配置:
logging:
file:
path: D:/logs #配置日志保存路径
我们执行测试类中的testLogger()方法,可以看到D盘下logs目录下会有一个spring.log的文件。
spring.log为默认的文件名,当然我们可以自己定义一个文件名,如下:
logging:
file:
name: D:/logs/my.log # 指定log保存路径及文件名
再次执行测试类中的testLogger()方法,可以看到D盘下logs目录下会生成一个my.log的文件。
这里有个坑,形如下面的配置这样:
logging:
file:
path: D:/logs
name: my11.log # 指定log保存路径及文件名
我本以为会在D:/logs目录下生成一个my11.log文件,但实际并不是这样,并没有在D:/logs路径下生成,而是在项目目录下生成了my11.log文件,