Spring Boot日志系统默认使用的是logback,灵活性不高,很多时候我们需要使用log4j,只需要一些少量的配置就可以实现。
首先,去除springboot默认的日志框架;
然后,加入spring-boot对log4j的支持。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- spring boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- Spring Boot log4j依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>1.3.8.RELEASE</version> </dependency>
接下来在/src/main/resources下加入log4j.properties:
### set log levels ### log4j.rootLogger = info,stdout,infolog,errorlog ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n ### 输出到日志文件 ### log4j.logger.infolog = info,infolog log4j.appender.infolog.Append = true log4j.appender.infolog = org.apache.log4j.DailyRollingFileAppender log4j.appender.infolog.File = /data/logs/test/test.log log4j.appender.infolog.layout = org.apache.log4j.PatternLayout log4j.appender.infolog.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n ### 保存异常信息到单独文件 ### log4j.logger.errorlog = error,errorlog log4j.appender.errorlog.Append = true log4j.appender.errorlog.Threshold = error log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender log4j.appender.errorlog.File = /data/logs/test/test_error.log log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout log4j.appender.errorlog.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n
最后在代码中:
import javax.servlet.http.HttpServletRequest; import nc.edu.nuc.Test.entity.Test; import nc.edu.nuc.Test.service.TestService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class TestController { private static final Logger logger = LoggerFactory.getLogger(TestController.class); @Autowired private TestService testService; @RequestMapping("test") @ResponseBody public String home(HttpServletRequest request) { String name = request.getParameter("name"); Test findByName = testService.findByName(name); logger.info("test....{}",name); return findByName.toString(); } }