logback详解
这边注意一下,在LogBack里面配置的 LOG_HOME value=/home/ma/yuzheng/app/logs 不仅可以在linux环境生效,window下也生效,要注意的是这个/代表的根路径就变成了当前项目所在系统盘的路径(项目放在d盘,这个/根路径就代表着d:/)
现象描述:(接口部分代码)
System.out.println("----");
e.printStackTrace();
log.info("日志info级别");
log.error("日志error级别");
-
控制台输出:
-
[2023-05-12 10:33:27,226 INFO http-nio-10012-exec-2] Initializing Servlet 'dispatcherServlet' [2023-05-12 10:33:27,227 INFO http-nio-10012-exec-2] Completed initialization in 1 ms ---- [2023-05-12 10:33:27,409 INFO http-nio-10012-exec-2] 日志info级别 [2023-05-12 10:33:27,409 ERROR http-nio-10012-exec-2] 日志error级别 //下面都是红字打印的e.prinkStack(); java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit at java.util.Base64$Decoder.decode0(Base64.java:704) at java.util.Base64$Decoder.decode(Base64.java:526) at crypto.impl.AesAlgorithm.decrypt(AesAlgorithm.java:43) at crypto.impl.DefaultCrypto.decrypt(DefaultCrypto.java:43) at comdeepzero.isend.utils.EncryptionUtils.decrypt(EncryptionUtils.java:21) at comdeepzero.isend.service.impl.CouponServiceImpl.couponSendReqBuild(CouponServiceImpl.java:203) at comdeepzero.isend.service.impl.CouponServiceImpl.sendV2(CouponServiceImpl.java:113) at comdeepzero.isend.controller.CouponController.sendV2(CouponController.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)
-
sout输出的显示
-
log.info和log.error也都显示
-
e.prinkstack();也显示
-
-
日志输出:
-
[2023-05-12 10:33:27,226 INFO http-nio-10012-exec-2 o.s.w.s.DispatcherServlet] Initializing Servlet 'dispatcherServlet' [2023-05-12 10:33:27,227 INFO http-nio-10012-exec-2 o.s.w.s.DispatcherServlet] Completed initialization in 1 ms [2023-05-12 10:33:27,409 INFO http-nio-10012-exec-2 c.i.s.i.CouponServiceImpl] 日志info级别 [2023-05-12 10:33:27,409 ERROR http-nio-10012-exec-2 c.i.s.i.CouponServiceImpl] 日志error级别 [2023-05-12 10:33:27,916 INFO http-nio-10012-exec-2 c.z.h.HikariDataSource] HikariPool-1 - Starting... [2023-05-12 10:33:28,387 INFO http-nio-10012-exec-2 c.z.h.HikariDataSource] HikariPool-1 - Start completed.
-
最上面两行是springmvc调用接口的dispatcherServlet的消息
-
然后sout输出不显示
-
log.info和log.error的显示
-
现象总结:
- 日志输出的都会在控制台打印,这个是默认的
- 日志输出的可以选择进行在控制台打印,这个就是我们在yaml里面的配置的日志等级或者在logback里面配置的consoleAppender日志等级
- 待处理:这边的e.pringstack()为什么会在最后出现?(可能不管e.printStack写在哪里,都只会在最后输出)
ConsoleAppender
控制输入到控制台的格式
-
[%d %-5level %t] %msg%n
-
[2023-05-12 09:54:59,199 INFO main] No active profile set, falling back to 1 default profile: "default" [2023-05-12 09:55:00,115 INFO main] BeanFactory id=e8a86d2c-e386-34fbc-30ed8fd41d94
-
-
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
09:57:51.354 [main] INFO comdeepzero.isend.ISendApplication - No active profile set, falling back to 1 default profile: "default"(for example: not eligible for auto-proxying) 09:57:52.451 [main] INFO o.s.cloud.context.scope.GenericScope - BeanFactory id=e8a86d2c-e386-34fb-a94c-30ed8fd41d94(for example: not eligible for auto-proxying)
-
RollingFileAppender
RollingFileAppender是logback中的一个Appender,它可以将日志输出到指定文件中,并且可以控制日志文件的大小和数量,达到日志自动轮转的效果
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/path/to/myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/path/to/myapp-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE" />
</root>
</configuration>
- 在上面的例子中,RollingFileAppender被命名为FILE,
- 指定了输出的文件路径为/path/to/myapp.log。
- rollingPolicy指定了日志文件的滚动方式为按日期滚动,
- fileNamePattern指定了日志文件名的格式,
- maxHistory指定了保留的历史日志文件的数量。
- encoder指定了日志格式。
- 这个例子中,按日期滚动意味着每天会生成一个新的日志文件,例如myapp-2023-05-12.log。如果保留30天历史日志文件,那么将会有30个历史日志文件。如果日志文件大小超过了指定大小,也会触发日志滚动。