Spring Boot日志功能
默认的spring boot已经支持logback日志功能了,只需要增加两块内容,就可以轻松使用logback日志了。
(1) 第一部分内容,就是在resources文件夹下创建logback-spring.xml或者是logbakc.xml的配置文件:
1 |
|
1.logback.xml中MaxHistory日志文件保留天数不生效 (日志保留天数的问题)
2.logback配置详解
3.logback基本入门
4.logback.xml文件配置(按时间、文件大小和log名称生成日志)
(2) 第二部分就是在需要写日志的类或函数中,添加 public static final Logger logger = LoggerFactory.getLogger(this.getClass()); 代码就可以使用 logger.error()、logger.info() 等方法了,至于配置文件中各项配置的意义和作用,以及logger的使用方法,可以详见参考文章。另外,为了方便统一管理,在logback-spring.xml中也可以使用spring boot的application.yml配置文件中的内容,比如,log存放的文件位置,我可以在application.yml中定义好,而不用在logback-spring.xml中写了。这里logback配置文件的名称就必须是logback-spring.xml,而不能是logbak.xml了 logback-spring.xml中定义
1 | <!-- 配置文件名必须为logback-spring.xml,否则applicationName在一开始会找不到,会生成一个applicationName_IS_UNDEFINED.log的空文件 --> |
然后就可以在logback-spring.xml中的其他地方使用 ${applicationName} 引用applicationName的值了。
注意
这里有一点需要注意的是,在application.propreties文件中,属性值不能加引号。比如:logfilepath=”D:\z\P\log”。(这是在windows下的路径写法,linux下用:/z/p/log)
在logback-spring.xml中应用logfilepath时:
1 | <springProperty scope="context" name="log.path" source="logfilepath" defaultValue="./log"/> |
就会报错:
这个时候application.propreties中,应该写成 logfilepath=D:\z\P\log ,去掉双引号。如果是在 application.yml 中,那么 logfilepath 就应该加引号,logfilepath: “D:\z\P\log”
(路径解析)
4.Windows/Linux路径不同时,统一war的最简办法
5.windows系统和Linux系统下文件路径”" 和 “/”
问题
(1) logger.error(),logger.info()无法打印对象,下面代码中,log.error本意是打印accessToken这个对象,但是实际上,无论怎么执行,都无法输出access_token。
1 | private Logger log = LoggerFactory.getLogger(LogJob.class); |
在调试的时候,明明是有值的,估计是因为logger.error无法输出对象,问题还待解决。
3.问题
(1) no applicable action for [maxFileSize], current ElementPath is [[configuration][appender][rollingPolicy][maxFileSize]]
1.[Logback file error : no applicable action for [rollingPolicy], current pattern is [[configuration][appender][rollingPolicy]]](https://stackoverflow.com/questions/29864049/logback-file-error-no-applicable-action-for-rollingpolicy-current-pattern-i) (这里其实是说了use a logger of type RollingFileAppender, not FileAppender)
(2) cleanHistoryOnStart不起作用
我设置了cleanHistoryOnStart为true,但是在应用程序启动后,还是没有删除已有的日志文件,而且配置了maxHistory也不起作用。
1 | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
注意
第一点:这里有一点需要解释的就是,假如你配置了${log.path}/logback.%d{yyyy-MM-dd}_%i.log这个模式,那么它只会自动删除类似于:logback.2021-01-18_0.log 这样的文件,而目录中的其他的文件是不会自动删除的,比如:logback.2020-11-23.log 文件。
第二点:maxHistroy是只保留最近的5天的日志,那么如果是 logback.2020-12-11.log 号的日志,它就不会自动删除。
1.logging - 重新登录-cleanHistoryOnStart不起作用
2.logback设置maxHistory 日志清除不起作用 (虽然这么设置了,但是还是不起作用)
3.【spring boot系列】Java 日志实现框架 Logback 配置详解 (这里有logback的详细说明)
4.logback简单使用及 MaxHistory 属性日志文件保留天数不生效问题
5.logback日志的删除策略 (这里讲了两个日志删除策略,就是超出maxHistory定义的时间的64天之前的日志是不会被清理的,这一点我有点没弄明白,根据我的实际测试这个天数应该是30天,比如当前时间是1月18号,定义maxHistroty为1,则只会删除12月16号到1月16号的日志,保留1月17号的日志,12月15号的日志文件及其之前的天数的文件都不会自动删除)
6.logback:RollingFileAppender (这里讲了各种滚动策略,比如:TimeBasedRollingPolicy 基于时间滚动,SizeAndTimeBasedRollingPolicy 基于时间+大小进行滚动,ixedWindowRollingPolicy 基于窗口滚动)
(3) Missing integer token, that is %i, in FileNamePattern
(4) 生成 IS_UNDEFINED
按上述方式,还是会产生一个 IS_UNDEFINED 文件,这个时候要在logback-spring.xml中,加一个property的resource,如果是yml应该是application.yml
1 | <property resource="application.properties" /> |
这样应该就不会出现IS_UNDEFINED文件了,真实性,有待验证(因为我debug的时候,没有出现这个文件,但是不知道什么时候就有了)
1 | logfilepath: "/cloud/dev/PhDevice/PhDeviceAdmin/log" |
~~ 根据最新的参考文章2、3、4,除了在yml中,要写成loggin.file.path(不能自定义,键入logging的时候会有提示),
1 | logging: |
而且在logback-spring.xml中,要使用
1 | <springProperty scope="context" name="log.path" source="${LOG_PATH}"/> |
~~
1.logback 生成日志时日志名称为XXX_IS_UNDEFINED
2.解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题
3.SpringBoot与LogBack创建LOG_PATH_IS_UNDEFINED文件夹
4.带有LogBack的SpringBoot创建LOG_PATH_IS_UNDEFINED文件夹
5.SpringBoot项目在logback.xml中读取配置中的日志路径问题 因为最先加载的是application.properties,logback.xml的加载晚于application.properties,所以logback.xml可以读到application.properties里面配置的值。logback.xml的加载要先于application.yml,所以直接通过${参数key}的形式获取是无法获取到application.yml对应参数值的。
6.【Springboot】使用logback莫名出现 IS_UNDEFINED 日志目录,其中记录的是 bootstrap.info.log 相关日志
7.SpringBoot与LogBack创建LOG_PATH_IS_UNDEFINED文件夹