一、默认形式
① 日志级别有6个,从小到大为(一般使用中间4种):TRACE < DEBUG < INFO < WARN < ERROR < FATAL。 ② springBoot 默认的日志级别为 INFO(即INFO、WARN、ERROR),并且在 spring-boot-starter 中已经包含了 spring-boot-starter-logging 日志框架(默认为 Logback)。 ③ 默认使用方式为:private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); logger.info("test log");④ 默认输出到控制台。
⑤ 默认使用 src/main/resources 路径下的日志配置文件,且要求命名规范:推荐优先使用带有 -spring 的文件名作为你的日志配置,如使用logback-spring.xml
二、自定义化
① 可以指定日志的配置文件和日志的输出路径 #Logging Config #日志文件的配置 logging.config=classpath:logconfig.xml #日志文件的存放路径 logging.path=/root/crmLogs ② 如果使用了 lombok,则使用方式为:类上增加注解:@Log4j(或者@Slf4j等),注意要引用 import lombok.extern.log4j.Log4j;
然后直接打印日志,可以使用占位符:log.info("test info,name:{}", name);
三、配置文件说明
① 根节点<configuration>下面有5个子节点:
<root>、<contextName>、<property>、<appender>、<loger>② 根节点<configuration>属性:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。③ root 节点:
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。 默认是DEBUG。 可以包含零个或多个元素,标识哪个appender将会添加到这个loger。<root level="INFO"> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> </root>
④ contextName 节点(此节点一般不使用):
设置上下文名称,默认上下文名称为“default”。如:<contextName>logback</contextName> 需要使用的地方如此使用:%contextName
⑤ property 节点:
设置自定义变量,通过“${}”来使用变量。 <property name="logback.appname" value="app"/>⑥ appender 节点:
很重要的节点,appender 用来格式化日志输出节点,有俩个属性 name 和 class,class 用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。 详细说明见后面的 Demo,注释比较详细。备注: 一般控制台输出使用layout,文件输出使用encoder %d{HH: mm:ss.SSS}——日志输出时间 %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用 %-5level——日志级别,并且使用5个字符靠左对齐 %logger{36}——日志输出者的名字 %msg——日志消息 %n——平台的换行符
⑦ loger节点:
<loger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。 name:用来指定受此loger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。 addtivity:是否向上级loger传递打印信息。默认是true。 如下两 Demo:<logger name="com.jet.controller"/> <logger name="com.jet.controller.TestController" level="WARN" additivity="false"> <appender-ref ref="console"/> </logger>
⑧ 另,多环境配置:
<configuration> ... <!-- 测试环境+开发环境. 多个使用逗号隔开. --> <springProfile name="test,dev"> <logger name="com.jet.controller" level="DEBUG" additivity="false"> <appender-ref ref="consoleLog"/> </logger> </springProfile> <!-- 生产环境. --> <springProfile name="prod"> <logger name="com.jet.controller" level="INFO" additivity="false"> <appender-ref ref="consoleLog"/> </logger> </springProfile> </configuration>
application 中配置:spring.profiles.active=test
四、配置文件 Demo
<configuration scan="true" scanPeriod="10 seconds"> <include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 使用下面的策略,可以避免输出 Error 的日志 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--过滤 Error--> <level>ERROR</level> <!--匹配到就禁止--> <onMatch>DENY</onMatch> <!--没有匹配到就允许--> <onMismatch>ACCEPT</onMismatch> </filter> <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则 如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天 的日志改名为今天的日期。即,<File> 的日志都是当天的。 --> <File>${LOG_PATH}/service_info.log</File> <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--> <fileNamePattern>${LOG_PATH}/service_info-%d{yyyy-MM-dd}.log.%i</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--只保留最近180天的日志--> <maxHistory>180</maxHistory> </rollingPolicy> <!--日志输出编码格式化--> <!--<encoder> <charset>UTF-8</charset> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern> </encoder>--> <!--展示格式 layout--> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n </Pattern> </layout> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <File>${LOG_PATH}/service_error.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/service_error-%d{yyyy-MM-dd}.log.%i</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>180</maxHistory> </rollingPolicy> <!--<encoder>--> <!--<charset>UTF-8</charset>--> <!--<pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>--> <!--</encoder>--> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n </Pattern> </layout> </appender> <!--指定最基础的日志输出级别--> <root level="INFO"> <!--appender将会添加到这个loger--> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </configuration>
文章评论