前面看了网上的一些记录片段记录都不太完整也不友好,板砖过来简单修改注释和移除一些不必要的东西(如:彩色字体,有毛用!)
springboot2.x 已经给我们包含了logging包内继承了需要的log包,都是最合适的版本,不需要自己maven导入。
开始:
resources目录创建
logback-spring.xml
必须是这个 不然spring 不认.
你也可以自定义,修改入口配置logging.config=你的xml
logback-spring.xml
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 项目名称 -->
<property name="PROJECT_NAME" value="springBootDemoFull"/>
<!--定义日志文件的存储地址后面拦截器用到,禁止使用相对路径-->
<property name="LOG_HOME" value="/logs"/>
<!-- 控制台输出 -->
<!--appender的name属性随意命名-->
<appender name="CONSOLE" 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] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统信息日志文件 appender -->
<appender name="SYSTEM_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--过滤器,拦截INFO级别日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<!--记录信息后退出,防止其他appender的filter继续拦截日志记录-->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.info.%d{yyyyMMdd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统错误日志文件 appender-->
<appender name="SYSTEM_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--过滤器,拦截ERROR级别日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<!--记录信息后退出,防止其他appender的filter继续拦截日志记录-->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名,如果按小时分割加入HH就行-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.error.%d{yyyyMMdd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 自定义日志 -->
<appender name="OTHER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只打印INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.other.%d{yyyyMMdd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--自定义日志加入一个别名other 引用的 appender 为 OTHER我们上面的appender的name属性的value值 也就是说 在项目中 直接 getLogger("other") 即可-->
<logger name="other" additivity="true">
<appender-ref ref="OTHER"/>
</logger>
<!-- 来发环境下的appender注册 -->
<!--springProfile属性为 application.properties中spring.profiles.active属性的值 : dev 或 prod -->
<springProfile name="dev">
<!--将appender'加入的springboot中 必须使用root节点注册 appender 如果appender没有指定日志级别将使用root的默认level属性级别-->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="SYSTEM_INFO"/>
<appender-ref ref="SYSTEM_ERROR"/>
</root>
</springProfile>
<!-- 生产环境下的appender注册 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="SYSTEM_INFO"/>
<appender-ref ref="SYSTEM_ERROR"/>
</root>
</springProfile>
</configuration>
入口配置文件
application.properties
配置
这里提醒一下引入其他配置文件必须使用spring.profiles.include
统一规范,为什么请看配置注释:
spring.application.name=springboot-demo-full
# 多个配置文件中有同一个值,以下情况获取值的效果:
# 1.启动命令不带--spring.profiles.active参数以application.properties首先启动
# 按顺序所有文件第一个配置的spring.profiles.active属性中指定的最后一个文件中含有该属性的值为准
# 如果所有文件都没有spring.profiles.active,
# 那么以pring.profiles.include配置的最后一个属性文件中的值为准
# 2.启动命令带--spring.profiles.active参数以参数指定的属性文件首先启动
# 此情况,以命令指定的配置文件中的值为准,其他文件中再配置spring.profiles.active也不会生效,如果不存在值,那么会以pring.profiles.include指定的最后一个文件中的值为准
##简要说
# 启动命令 java -jar name.jar --spring.profiles.active指定文件中的值优先级高于
# 文件中spring.profiles.active指定的文件列表中最后一次出现的值 > 文件中spring.profiles.include指定的文件列表中最后一次出现的值
# 总结说明:建议所有引入配置的时候避免用相同的配置属性 或 都使用 spring.profiles.include 覆盖前面的值,如果出现问题,查找问题也有规律可循。
spring.profiles.include=druid,mybatis
# 生产环境修改为prod
spring.profiles.active=dev
代码中使用的时候切记别导错了包,包为:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
1.走INFO 和ERROR的拦截器
Logger logger = LoggerFactory.getLogger(xxxx.class);
logger.info(msg);
logger.error(msg);
2.走自定义拦截器的
Logger logger = LoggerFactory.getLogger("other");
logger.info(msg);
网友评论