当前位置: 首页 > 图灵资讯 > 技术篇> 在Spring Boot中使用不同的日志

在Spring Boot中使用不同的日志

来源:图灵教育
时间:2023-12-05 17:10:00

Java提供的日志有以下类型:

  • JDK Logging: JDK自带的日志框架也是Java官方推荐的日志框架,可以通过Java使用.util.使用loging包。
  • Log4j:Apache开源日志框架提供了丰富的配置选项和灵活的日志输出模式,可用于log4j包
  • Logback:Log4j的升级版也是Apache开源的日志框架,通过logback包可以使用,提供更好的性能和更丰富的功能。
  • SLF4J:Simple Logging Facade for Java,它是一个抽象层,可以在不同的日志框架之间切换,可以通过slf4j包使用。

接下来,我们将使用这些案例打印demo日志:

第一个引入相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version><scope>compile</scope></dependency>

配置相关依赖后,我们将配置相关配置文件:

#端口号server.port=9091#开启应用调试模式debug=true#debug显示包以下记录的日志级别为debugloging.level.com.miaow=debug# 而loging.logback.logback日志框架的滚动策略配置是loglingpolicy# clean-history-on-start表示,历史日志文件是否在应用程序启动时被清除,默认为false。logging.logback.rollingpolicy.clean-history-on-start=false# file-name-pattern表示,日志文件名的格式默认为%d{yyyy-MM-dd}/%i.log,其中%d{yyyy-MM-dd}日志文件按日期划分,%表示日志文件的序号。logging.logback.rollingpolicy.file-name-pattern=#max-history表示,保留的历史日志文件数量最多,默认为7。logging.logback.rollingpolicy.max-history=7# max-file-size表示单个日志文件的最大尺寸,默认为10MB。logging.logback.rollingpolicy.max-file-size=10MB# total-size-cap表示所有日志文件的总尺寸上限,默认为0B,表示没有上限。logging.logback.rollingpolicy.max-file-size=10MB# total-size-cap表示所有日志文件的总尺寸上限,默认为0B,表示没有上限。logging.logback.rollingpolicy.total-size-cap=0B

需要注意的是,logging.logback.rollingpolicy是logback的配置项,如果使用其他日志框架,可能需要使用不同的配置项。

也可以:

logging:  level:    root: info    com.example: debug  file:    name: myapp.log    path: /var/log/myapp/

上述配置表示将根日志级别设置为info,com.example包下的日志级设置为debug,并将日志输出到/var/log/myapp/myapp.log文件中。我们创建了四种表示上述四种日志方式的类别:

import java.util.logging.Logger;public class MyClass1 {    private static final Logger LOGGER = Logger.getLogger(MyClass1.class.getName());    public void myMethod() {        LOGGER.info("============>JDK Logging<============");        LOGGER.info("This is an info message");        LOGGER.warning("This is a warning message");        LOGGER.severe("This is a severe message");    }}
import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class MyClass3 {    private static final Logger LOGGER = LoggerFactory.getLogger(MyClass3.class);    public void myMethod() {        LOGGER.info("================>Logback<================");        LOGGER.info("This is an info message");        LOGGER.warn("This is a warning message");        LOGGER.error("This is an error message");    }}
import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class MyClass4 {    private static final Logger LOGGER = LoggerFactory.getLogger(MyClass4.class);    public void myMethod() {        LOGGER.info("===============>SLF4J<=================");        LOGGER.info("This is an info message");        LOGGER.warn("This is a warning message");        LOGGER.error("This is an error message");    }}
import org.apache.log4j.Logger;public class MyClass5 {    private static final Logger LOGGER = Logger.getLogger(MyClas5.class);    public void myMethod() {        LOGGER.info("==============>Log4j<==================");        LOGGER.info("This is an info message");        LOGGER.warn("This is a warning message");        LOGGER.error("This is an error message");    }}

然后我们在Spring Boot中启动类配置:

@Slf4j@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);        MyClass1 m1 = new MyClass1();        MyClass5 m2 = new MyClass5();        Myclass3 m3 = new Myclass3();        MyClass4 m4 = new MyClass4;        m1.myMethod();        m2.myMethod();        m3.myMethod();        m4.myMethod();    }}

如果你认为这一步已经结束了?您不妨启动项目,我们发现Myclass5似乎无效,控制台报错了:

log4j:WARN No appenders could be found for logger(org.apache.ibatis.logging.LogFactory).log4j:WARN Please initialize the log4j system properly. log4j:WARN Seehttps://www.tulingxueyuan.cn/d/file/p/20231205/je00wl3ixyr.html for more info.

我们发现问题是,我们需要在Resources目录下建立一个log4j.properties文件

# Global logging configuration 建议在开发过程中使用 debuglog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.consoleapenderlog4j.appender.stdout.layout=org.apache.log4j.Patternlayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

在启动时,放上上述代码,ok,我们发现日志如下。

2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass1         : ============>JDK Logging<============2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass1         : This is an info 2023-11-29 15:27:02.250  WARN 26848 --- [           main] com.miaow.demo.MyClass1         : This is a warning 2023-11-29 15:27:02.250 ERROR 26848 --- [           main] com.miaow.demo.MyClass1         : This is a severe message INFO [main] - ==============>Log4j<================== INFO [main] - This is an info message WARN [main] - This is a warning messageERROR [main] - This is an error 2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass3         : ================>Logback<================2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass3         : This is an info 2023-11-29 15:27:02.250  WARN 26848 --- [           main] com.miaow.demo.MyClass3         : This is a warning 2023-11-29 15:27:02.250 ERROR 26848 --- [           main] com.miaow.demo.MyClass3         : This is an error 2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass4         : ===============>SLF4J<=================2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass4         : This is an info 2023-11-29 15:27:02.250  WARN 26848 --- [           main] com.miaow.demo.MyClass4         : This is a warning 2023-11-29 15:27:02.251 ERROR 26848 --- [           main] com.miaow.demo.MyClass4         : This is an error message

Spring 在Boot中使用日志有以下优点:

  • 问题调查调试:日志是开发、运行和维护过程中非常重要的工具,可以帮助我们跟踪和定位应用程序中的问题。通过记录关键信息和异常堆栈跟踪,我们可以更快地定位和解决问题。

  • 操作监控:日志可以提供应用程序的操作监控信息,包括请求处理时间、数据库查询时间、方法执行时间等。这些信息可以帮助我们了解应用程序的性能,及时发现和优化潜在的性能问题。

  • 安全审计:日志可以记录应用程序的操作和事件,包括用户登录、权限验证、敏感数据访问等。这些日志可用于安全审计,帮助我们跟踪和分析系统的安全事件,及时发现异常行为和潜在的安全威胁。

  • 业务分析和统计:我们可以通过日志记录关键业务操作和事件进行业务分析和统计。例如,统计用户访问量、分析用户行为、跟踪业务流程等,可以帮助我们了解用户需求和行为,优化产品和服务。

  • 操作和维护管理:日志可以帮助操作和维护人员监控和管理应用程序的运行状态。通过日志,我们可以了解应用程序的运行、资源利用、错误和异常,及时发现和解决问题,确保应用程序的稳定运行。

简而言之,日志的使用可以提供丰富的运行信息和统计数据,帮助我们更好地理解和管理应用程序。日志的合理配置和使用可以提高开发效率、问题调查能力和系统稳定性。