ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Logback入门教程

Logback入门教程 Logback是用于记录日志。可以与SSM等框架结合使用。使用Logback不影响业务代码性能。结合SSM的AOP编程可以灵活扩展和修改日志特性。日志规范Jakarta Commons LoggingJCL旧的日志规范。Simple Logging Facade for Javaslf4j目前主流的日志规范。不同的阶段有不同的实现。日志框架JULjava.util.logging、Log4j、Logback、Log4j2。JUL是JDK自带的日志框架。Log4j、Logback是同一个作者Log4j2是apache基金会对Log4j的升级框架参考了Logback。目前主流使用的是Logback官网https://logback.qos.ch/。基本使用Logback包含三个模块logback-core为其他两个模块提供基础代码。logback-classic实现了sfl4j API。logback-access与Tomcat、Jetty等Servlet容器集成提供http访问日志功能。1、通过Maven导入相关jar包pom文件配置!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -- dependency groupIdch.qos.logback/groupId artifactIdlogback-core/artifactId version1.5.38/version /dependency !-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -- dependency groupIdch.qos.logback/groupId artifactIdlogback-classic/artifactId version1.5.38/version scopecompile/scope /dependency如果使用的是SpringBoot直接场景包即可包含logback。parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.5.16/version /parent dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId scopecompile/scope /dependency /dependencies2、编写logback.xml或者logback-spring.xml配置文件文件名不可自定义必须是这两个文件名。logback.xml原生加载不支持Spring特有标签。logback-spring.xmlSpringBoot容器加载支持Spring特有标签。configuration scantrue scanPeriod60 seconds !-- 定义变量 -- property nameLOG_PATH value./logs/ property nameLOG_NAME value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/ !-- 控制台输出使用 PatternLayout 格式化日志 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender layout classch.qos.logback.classic.PatternLayout pattern{LOG_NAME}/pattern /layout /appender !-- 日志文件输出按天滚动归档保留90天历史 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_PATH}/${LOG_NAME}.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern${LOG_PATH}/${LOG_PATH}-%d{yyyy-MM-dd}.%i.log.gz/fileNamePattern maxHistory90/maxHistory /rollingPolicy encoder pattern{LOG_NAME}/pattern /encoder /appender !-- 设置根日志级别和输出目标 -- root levelinfo appender-ref refCONSOLE/ appender-ref refFILE/ /root /configuration3、在代码中获取日志对象。import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class XXXLog { private static final Logger LOGGER LoggerFactory.getLogger(XXXLog.class); public static void main(String[] args) { } }4、根据日志级别记录日志信息。日志级别Logback日志有六个级别TRACE DEBUG INFO WARN ERROR FATALALL打开全部日志。OFF关闭全部日志。开发调试一般使用DEBUG级别商用环境一般使用INFO级别即高于INFO级别的日志都会打印。!-- 设置根日志级别和输出目标 -- root levelINFO appender-ref refCONSOLE/ appender-ref refFILE/ /root配置文件%d日期格式。%-5level日志级别字符打印5个字符。%c在哪个类里面打印的日志。%thread当前线程的名字。%msg代码中的字符串。%n换行。%logger{}指定显示的字符数限制。Logback与Spring AOP编程在实际项目中Logback可以结合Spring AOP使用实现非侵入式日志记录、性能监控和全链路追踪在微服务场景中可以界定问题归属避免模块团队间推诿。经典写法Aspect Component Slf4j public class XXXServiceLog { Around(execution(* com.xxx.service..*(..))) public Object logMethodExecution(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature (MethodSignature) joinPoint.getSignature(); String className signature.getDeclaringTypeName(); String methodName signature.getName(); // 1. 记录开始时间和参数 long startTime System.currentTimeMillis(); Object[] args joinPoint.getArgs(); log.info( 开始执行: {}.{}(), 参数: {}, className, methodName, Arrays.toString(args)); Object result; try { // 2. 执行目标方法 result joinPoint.proceed(); // 3. 记录返回结果和耗时 long duration System.currentTimeMillis() - startTime; log.info( 执行成功: {}.{}(), 耗时: {}ms, 结果: {}, className, methodName, duration, result); return result; } catch (Throwable e) { // 4. 记录异常信息 long duration System.currentTimeMillis() - startTime; log.error(!!! 执行异常: {}.{}(), 耗时: {}ms, 异常信息: {}, className, methodName, duration, e.getMessage(), e); throw e; //必须抛出否则事务可能无法回滚 } } }Logback结合Spring的AOP编程特性可以先专注完成业务代码然后再补充日志。使用Around、Before、After、AfterReturning、AfterThrowing分别在环绕通知、方法执行前、方法执行后、方法正常返回、方法抛出异常时记录日志。
返回列表