赞
踩
为了进一步提高开发效率,springboot为我们提供了全局项目热部署,日后在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启使修改生效,在项目中开启了springboot全局热部署之后只需要再修改之后等待几秒即可修改生效。
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
import java.util.logging.Logger;
/**
* @author : zhouzhiqiang
* @date : 2024/6/24 15:00
* @description :崇尚官方开发组使用jul
*/
public class JULMain {
public static void main(String[] args) {
Logger log=Logger.getLogger(JULMain.class.getName());
log.info("崇尚官方开发组使用jul");
}
}
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
# 设置日志根
# 设置日志根 trance<debug<info<warn<error<fetal
log4j.rootLogger=trace,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] -%m%n
import org.apache.log4j.Logger;
/**
* @author : zhouzhiqiang
* @date : 2024/6/24 15:00
* @description :崇尚开源开发组使用log4j
*/
public class Log4jMain {
public static void main(String[] args) {
Logger logger=Logger.getLogger(Log4jMain.class);
logger.info("崇尚开源开发组使用log4j");
}
}
由以上两种可以看出如何直接使用日志就会出现两种日志在统一的时候不好管理的问题
为了解决这个问题,应该使用sl4j门面来做:
强制:应用中不可直接使用日志系统(log4j、logback)中的API,而应该依赖使用日志框架中的API。使用门面模式的日志框架,有利于维护各个类的日志处理方式的统一。
对于log4j,log4j.properties是必须的
<!--引入jcl门面依赖-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
org.apache.commons.logging.log=org.apache.commons.logging.impl.Jdk14Logger
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author : zhouzhiqiang
* @date : 2024/6/24 15:00
* @description :崇尚官方开发组使用jul
* jul(实现)+jcl(门面)
*/
public class JULMain {
public static void main(String[] args) {
Log log = LogFactory.getLog(JULMain.class);
log.info("崇尚官方开发组使用jul");
}
}
<!--log4j核心依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--slf4j门面的核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!--添加sl4j ->sl4j的桥接器-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.29</version>
</dependency>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author : zhouzhiqiang
* @date : 2024/6/24 15:00
* @description :崇尚开源开发组使用log4j
* log4js(实现)+sl4j(门面)
*/
public class Log4jMain {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Log4jMain.class);
logger.info("崇尚开源开发组使用log4j");
}
}
上述代码虽然使用了门面但是有两种日志门面,必须进行统一
只需要添加日志转换适配器依赖就可以了
下述是jcl到slf4j的统一
<!--为了日志统一实现,将jcl转换到slf4j 添加jcl到slf4j的适配器依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.30</version>
</dependency>
此时不需要改代码jcl就自动转到sLf4j,运行效果如下:
SpringBoot底层也是使用slf4j+logback的方式进行日志记录
logback桥接:logback-classic
SpringBoot也把其他日志都替换成了slf4j
log4j适配:log4j-over-sl4j
jul适配:jul-to-slf4j
这两个适配器都是为了适配Spring的默认日志:jcl
SpringBoot默认的日志级别是info级别(比info级别高的都可以输出)
//声明日志记录器
static Logger logger = LoggerFactory.getLogger(MyApplication.class);
@Slf4j 注解是依赖于lombok的
@SpringBootApplication
@Slf4j
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
log.trace("跟踪");
log.debug("调试");
log.info("信息");
log.warn("警告");
log.error("报错");
}
}
logging:
level:
root: trace
可以使用 pattern: console: 来修改默认的输出格式
logging:
level:
com.com.springboot: trace
pattern:
console:
默认情况下,Spring Boot仅仅记录到控制台,不写日志文件。如果除了控制台输出外还想写日志文件,则需要设置一个loggin.file.name或者logging.file.path属性
logging.file.name:可以设置文件的名称,如果没有设置路径会默认在项目的相对路径
logging:
level:
com.com.springboot: trace
pattern:
console:
file:
name: D:/logs/aa.log
不可以指定文件名称,必须要指定一个物理文件夹路径,文件名默认是spring
logging.logback.rollingpolicy.max-file-size:配置配置文件大小
logging.file.name=D:/logs/aa.log
logging.logback.rollingpolicy.max-file-size=5KB
logging.logback.rollingpolicy.max-history=5 #归档文件保留天数
通过自定义日志配置文件,可以发送日志邮件,或者将日志直接保存到数据库
例如:springboot默认的logback切换到log4j2
只需要加一个log4j2的场景启动器就可以了,但是要排除logback的日志桥接器(slf4j只能运行有一个日志桥接器),否则会报错
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!--log4j2的场景启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。