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中使用日志有以下优点:
问题调查调试:日志是开发、运行和维护过程中非常重要的工具,可以帮助我们跟踪和定位应用程序中的问题。通过记录关键信息和异常堆栈跟踪,我们可以更快地定位和解决问题。
操作监控:日志可以提供应用程序的操作监控信息,包括请求处理时间、数据库查询时间、方法执行时间等。这些信息可以帮助我们了解应用程序的性能,及时发现和优化潜在的性能问题。
安全审计:日志可以记录应用程序的操作和事件,包括用户登录、权限验证、敏感数据访问等。这些日志可用于安全审计,帮助我们跟踪和分析系统的安全事件,及时发现异常行为和潜在的安全威胁。
业务分析和统计:我们可以通过日志记录关键业务操作和事件进行业务分析和统计。例如,统计用户访问量、分析用户行为、跟踪业务流程等,可以帮助我们了解用户需求和行为,优化产品和服务。
操作和维护管理:日志可以帮助操作和维护人员监控和管理应用程序的运行状态。通过日志,我们可以了解应用程序的运行、资源利用、错误和异常,及时发现和解决问题,确保应用程序的稳定运行。
简而言之,日志的使用可以提供丰富的运行信息和统计数据,帮助我们更好地理解和管理应用程序。日志的合理配置和使用可以提高开发效率、问题调查能力和系统稳定性。