有个任务停留在任务列表中很久了:使用Appenders 完成 loger4j 的日志推送,始终没有成功实现。追其原因,仍然是官方的文档没有认真看。在spring-boot的项目中看到log4j,就想当然的认为Spring-boot使用的是log4j,然后不假思索的去google。最终导致的就是:功能没有实现,而且还浪费了很多不必要的时间,最后:还是老老实实的回来阅读spring-boot的官方文档。本文主要对官方文档Logging部分进行解读。原文地址:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html.如果你使用的是不是最新版本,那么应该使用https://docs.spring.io/spring-boot/docs/版本号/reference/htmlsingle/#boot-features-logging 如:https://docs.spring.io/spring-boot/docs/1.5.3.RELEASE/reference/htmlsingle/#boot-features-logging76 日志在web开中,我们仅需要依赖于spring-boot-starter-web便自动启用了日志系统Logback。如果仅仅是想改变日志的等级,则可以直接使用logging.level前缀在application.properties中进行设置,比如:logging.level.org.springframework.web=DEBUGlogging.level.org.hibernate=ERROR除了控制日志的等级外,还可以使用logging.file来定义日志输入到的文件位置。如果我们还想配置更多选项,则可以在classpath(resourse)中定义logback.xml或logback-spring.xml。76.1 配置Logback找到logback.xml或logback-spring.xml,复制以下基本内容:<?xml version=“1.0” encoding=“UTF-8”?><configuration> <include resource=“org/springframework/boot/logging/logback/base.xml”/> <logger name=“org.springframework.web” level=“DEBUG”/></configuration>使用idea的ctrl+o来打开spring-boot jar中的base.xml,我们会看到配置信息包含一些特殊的字符,解读如下:${PID}当前的进程ID${LOG_FILE} 如果设置了logging.file,则使用logging.file做为日志输入文件。${LOG_PATH} 同上.指定日志输出路径。${LOG_EXCEPTION_CONVERSION_WORD} ..我们自己定义日志输入的方式和字符串时,当然也可以使用它们了。76.1.1 配置:将日志仅写入文件如果我们想禁用控制台的日志输出(生产环境中,我们的确是要这么做的),然后把日志写入某个日志文件的话。那么需要新建logback-spring.xml,并引入file-appender.xml,比如:<?xml version=“1.0” encoding=“UTF-8”?><configuration> <include resource=“org/springframework/boot/logging/logback/defaults.xml” /> <property name=“LOG_FILE” value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/> <include resource=“org/springframework/boot/logging/logback/file-appender.xml” /> <root level=“INFO”> <appender-ref ref=“FILE” /> </root></configuration>然后:在application.properties定义logging.file来指定日志文件位置.例:logging.file=myapplication.log再看看上面是怎么回事:打开org/springframework/boot/logging/logback/file-appender.xml内容如下:<?xml version=“1.0” encoding=“UTF-8”?><!–File appender logback configuration provided for import, equivalent to the programmaticinitialization performed by Boot–><included> <appender name=“FILE” class=“ch.qos.logback.core.rolling.RollingFileAppender”> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <file>${LOG_FILE}</file> <rollingPolicy class=“ch.qos.logback.core.rolling.FixedWindowRollingPolicy”> <fileNamePattern>${LOG_FILE}.%i</fileNamePattern> </rollingPolicy> <triggeringPolicy class=“ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy”> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender></included>注意:这里面有个<appender name=“FILE”,指定了appender名称为FILE,对应logback-spring.xml的以下语句: <root level=“INFO”> <!–日志等级–> <appender-ref ref=“FILE” /> <!–指定appender为FILE,则前面我们刚刚找到的name值–> </root>总结有了以上内容,我们知道了如下知识点:spring-boot默认使用的是Logback而非log4j。我们可以单独建立logback-spring.xml来细化Logback的配置。在Logback中,是可以指定使用不同的appender来定义日志的输出的。是否可以自定义appender来达到将日志输出到我们的日志服务器,从而达到系统监控的目的呢?