JAVAlogback日志管理详解
作者:软件老王
1、问题描述
关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。
2、解决方案
这次其实是碰到了一个问题,一般的情况是,会单独在linux上创建个用户,线上和开发环境一样,这样脚本中假如有相对目录的话,也能保持一致,但是这次因为线上环境创建其他用户有问题,只能用root用户操作,导致logback定义的目录,开发和线上不一致,线上是root/***,开发环境没有权限访问该目录(开发环境使用的普通用户),所以logback的目录,需要配置化,但是无法从application中获取,换了个方式解决的,记录下。
2.1 配置
<?xml version="1.0" encoding="UTF-8"?> <configuration> <springProperty scope="context" name="LOG_HOME" source="path.log"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${LOG_HOME}/laowangtest.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <MaxHistory>30</MaxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>1kb</MaxFileSize> <!-- <MaxFileSize>5MB</MaxFileSize>- --> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
简要说明
1、目录配置化
<springProperty scope="context" name="LOG_HOME" source="path.log"/>
其中application.yml中配置是这样的:
path:
log: e:/laowang/test
实际项目中还有另外的配置文件:application-dev.yml、application-test.yml、application-prod.yml,path.log是配置在每个文件中,每个里面的值不一样,而不是配置在公共配置application.yml中,这样根据打包规则就能获取不同的日志目录了。
另外至于为什么无法通过 方 式 获 取 值 , 网 上 或 者 官 方 给 的 答 案 是 , 在 容 器 中 , l o g b a c k 先 与 a p p l i c a t i o n . y m l 加 载 了 , 所 以 通 过 {}方式获取值,网上或者官方给的答案是,在容器中,logback先与application.yml加载了,所以通过 方式获取值,网上或者官方给的答案是,在容器中,logback先与application.yml加载了,所以通过{}方式就拿不到值了;同时保险起见,将logback.xml文件名称更改为logback-***.xml,例如:logback-spring.xml。
2、简单介绍下目前的配置
配置了两个Appender,一个打印到控制台,一个是到文件,以前把文件按照info、warn、errro,根据日志级别区分了打印文件,现在感觉没必要,就打印一个里面去,还按照以前方式滚动,首先按天,其次按大小滚动日志
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${LOG_HOME}/laowangtest.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <MaxHistory>30</MaxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>1kb</MaxFileSize> <!-- <MaxFileSize>5MB</MaxFileSize>- --> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy>
其中几个参数:
(1)FileNamePattern,文件目录;
(2)MaxHistory:日志保留天数;
(3)MaxFileSize:多大开始滚动(新增)日志,记得是5MB,后面还有B不要漏掉了。
2.2 效果
为了展示效果,把大小给成1kb滚动,弄个测试方法进行验证
(1)测试方法
@Api(value = "test") @RestController public class TestController { Logger logger = LoggerFactory.getLogger(TestController. class); @RequestMapping(value ="/logTest") @ResponseBody public String logTest() { logger.info("老王是帅哥老王是帅哥老王是帅哥"); return "老王是帅哥!"; } }
(2)执行效果
浏览器:
生成文件:
文件内容:
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!