前言
若我们使用的是Starters,则SpringBoot默认日志框架是logback,所以我们在SpringBoot中使用它还是比较简单的。
需求明确
- 需要一个总日志,记录系统、环境的信息
- 根据包名,分别在对应目录下输出日志
- 输出的日志要有必须的信息,方便调试
- 定时删除日志,日志限定大小
编写测试类
需求明确后,我这里编写两个测试类
Controller
@RestController
public class UserController {
private final static Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService mUserService;
@GetMapping("/log")
public String logController() {
logger.info("controller");
return mUserService.logService();
}
}
Service
@Service
public class UserService {
private final static Logger logger = LoggerFactory.getLogger(UserService.class);
public String logService() {
logger.info("service");
return "hello logback";
}
}
Application
@RestController
@SpringBootApplication
public class ZsdkApplication {
private final static Logger logger = LoggerFactory.getLogger(ZsdkApplication.class);
@RequestMapping("/")
public String showIndex() {
logger.info("hello world for log");
return "hello world for log";
}
public static void main(String[] args) {
SpringApplication.run(ZsdkApplication.class, args);
}
}
在resources文件夹下放置logback的配置文件
注意:配置文件最好以logback-spring.xml命名,这也是SpringBoot推荐的,不然有可能日志初始化有问题
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/logs" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%line:行号,%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%line ----------------> %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/system/SDKWeb-%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%line ----------------> %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> <!--分包输出日志,分包配置--> <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/service/SdkService-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%line ----------------> %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <appender name="controllerAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/controller/SdkController-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%line ----------------> %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!--分包输出日志,分包指向--> <logger name="com.zsdk.service" level="INFO" additivity="false"> <appender-ref ref="serviceAppender" /> </logger> <logger name="com.zsdk.controller" level="INFO" additivity="false"> <appender-ref ref="controllerAppender" /> </logger> </configuration>
测试
- 访问http://localhost:8080和http://localhost:8080/log
- 然后就会在对应目录生成文件夹和log