环境:springboot
日志:logback
可以实现不同业务的日志在不同文件里存放
依赖
<!-- 日志模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
自定义配置
- 在resources目录下建立logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- logback 自定义配置
适用于复杂场景下的日志生成
参考:https://blog.csdn.net/Inke88/article/details/75007649
-->
<configuration debug="false">
<!-- 通过${}来调用变量 -->
<property name="logback.logdir" value="/Users/spz/etc/log/shiroStudyDemo"/>
<!-- 系统日志 - 输出到文件 -->
<appender name="systemLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志名称 -->
<File>${logback.logdir}/system.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logdir}/system.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] [%-5level] [%file-%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- 用户操作日志 - 输出到文件 -->
<appender name="userLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志名称 -->
<File>${logback.logdir}/user.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logdir}/user.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] [%-5level] [%logger{36}] [%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- 控制台日志 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<!--展示格式 layout-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [%thread] [%-5level] [%file-%line] - %msg%n</pattern>
</layout>
</appender>
<!-- 不同日志输出到不同文件夹
使用时,先创建:private final static Logger log = LoggerFactory.getLogger("SYSTEM_LOG");
-->
<logger name="SYSTEM_LOG" additivity="false" level="INFO">
<appender-ref ref="systemLog"/>
</logger>
<logger name="USER_LOG" additivity="false" level="INFO">
<appender-ref ref="userLog"/>
</logger>
<logger name="CONSOLE_LOG" additivity="false" level="INFO">
<appender-ref ref="consoleLog"/>
</logger>
<root level="info">
<appender-ref ref="systemLog" />
<appender-ref ref="consoleLog" />
<appender-ref ref="userLog" />
</root>
</configuration>
使用
使用前需要创建实例
private final static Logger log = LoggerFactory.getLogger("SYSTEM_LOG");
然后直接使用
log.info("xxxx");
log.error("xxxx");
开发时和发布时配置
开发时,可以将logback-spring.xml里的
<logger name="SYSTEM_LOG" additivity="false" level="INFO">
<appender-ref ref="systemLog"/>
</logger>
<logger name="USER_LOG" additivity="false" level="INFO">
<appender-ref ref="userLog"/>
</logger>
<logger name="CONSOLE_LOG" additivity="false" level="INFO">
<appender-ref ref="consoleLog"/>
</logger>
配置为
<logger name="SYSTEM_LOG" additivity="false" level="INFO">
<appender-ref ref="consoleLog"/>
</logger>
<logger name="USER_LOG" additivity="false" level="INFO">
<appender-ref ref="consoleLog"/>
</logger>
<logger name="CONSOLE_LOG" additivity="false" level="INFO">
<appender-ref ref="consoleLog"/>
</logger>
这样不需要改动代码,所有日志都会输出到控制台,便于开发。
而在发布时,只需要改回来即可,日志将输出到文件,非常方便。
结合lombok使用
lombok安装办法百度有,lombok有个注解@Slf4j(topic = "loggerName"),在类上加上这个注解,相当于这行代码:
private final static Logger log = LoggerFactory.getLogger("loggerName");
也很方便