spring boot logback写日志文件
解决昨天的问题
记得昨天的logback没能配置成功,今天尝试解决一下。
一、改写配置文件
logback.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <logger name="springboot.dao" level="DEBUG"></logger> <logger name="springboot.service" level="DEBUG"></logger> <!--定义日志文件的存储地址,最好不要使用相对路径? --> <property name="LOG_HOME" value="d:/logs" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 日志输出编码 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern> </layout> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名 --> <FileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern> </layout> <!--日志文件最大的大小 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration> |
这个就是完整的配置,要注意以下几点
1.真的不能使用相对路径吗?
网上一般都是这样认为的,logback和log4j中不一样,应该使用绝对路径的形式来指定日志文件生成的位置,如果使用相对路径,会导致配置无法生效。
1 |
<property name="LOG_HOME" value="d:/logs" /> |
当时我觉得有点奇怪,log4j支持相对路径,logback应该也可以才对。所以我改了一下生成配置文件的位置:
1 |
<property name="LOG_HOME" value="logs" /> |
在eclipse中启动,于是日志文件生成在了项目目录下的logs文件夹中
因此看来,在开发环境中,把日志是可以在相对路径下生成的。
尝试把spring boot部署在tomcat中,日志还会生成在项目下吗?我尝试部署了一次,发现目录下没有生成日志文件。
听说这个路径配置可以把日志文件生成到tomcat的目录下:
1 |
${catalina.base}/logs/ |
我又试了一次,还是没找到生成到了哪里…所以还是保持怀疑态度,下次再试一试。
我个人的结论如下:
如果使用绝对路径,无论是开发环境或者生产环境,都不太需要关心日志生成的位置问题了。如果使用相对路径,那么在使用服务器部署spring boot应用时要记得修改日志的位置。
因为同一服务器经常需要部署多个应用,日志通常需要统一管理,所以我个人还是倾向于使用绝对路径,把所有服务的日志放置在同一目录下,方便进行统一管理。
我个人的日志命名如下:服务名-日期-日志等级.log
2.配置中遇到的一个错误
1 2 3 4 |
java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.joran.spi.Interpreter@21:13 - no applicable action for [Encoding], current ElementPath is [[configuration][appender][Encoding]] |
按照报错提示,应该是配置中的这里出错了:[[configuration][appender][Encoding]]
一查才发现,[Encoding]是个过时标签,删之,就可以正常运行了。
这个错误还是算比较好解决的。
二、怎么屏蔽掉不想要的日志?
比如说spring boot自带的各种日志?
logback和log4j那一套有区别,我暂时还没有找到正确的解决方法…
三、总结
想不到这次又留下了一个问题…
希望明天能够解决。