默认日志logback:
默认情况下(什么都不需要配置),springboot使用Logback来记录日志,INFO级别输出到控制台。在运行应用程序或者测试示例时,就可以看到这些日志。
从图中可以看到日志内容如下:
- 时间:精确到毫秒
- 日志级别:FATAL>ERROR>WARN>INFO>DEBUF,等于设定级别的日志将不显示
- 进程id:紫色数字
- 分隔符:----标识实际日志的开始
- 线程名:方括号里面(可能会截断控制台输出)
- Logger名:通常使用源代码的类名
- 日志内容
程序中自定义输出日志
@CompileStatic
@TypeChecked
@RestController
@RequestMapping('/account')
@Transactional
class AccountController
{
private static final Logger logger= LoggerFactory.getLogger(AccountController.class)
@RequestMapping(value = '/findJudicialAuction',method = RequestMethod.POST)
String findJudicialAuction(@RequestBody() Map<String, String> message){
logger.info(message.toString())
def format = new SimpleDateFormat("yyyy-MM-dd")
Date startTime,endTime
if(message.get("startTime")!=null){
startTime = format.parse(message.get("startTime"))
}
if(message.get("endTime")!=null){
endTime = format.parse(message.get("endTime"))
}
def json = judicialAuctionDataService.query(message.get("province"), message.get("city"), message.get("district"), message.get("houseType"), message.get("communityId"), message.get("communityName"),
message.get("address"), message.get("area") as Double, message.get("longitude") as Double, message.get("latitude") as Double, message.get("maxCount") as Integer, startTime,endTime, message.get("userName"), message.get("houseTypePm"))
logger.info(json.toString())
return json
}
}
注解日志
@Slf4j
@CompileStatic
@TypeChecked
@RestController
@RequestMapping('/auction')
@Transactional
class JudicialAuctionDataProvider{
@Autowired
JudicialAuctionDataService judicialAuctionDataService
@AES
@RequestMapping(value = '/findJudicialAuction',method = RequestMethod.POST)
String findJudicialAuction(@RequestBody() Map<String, String> message){
LocalDate startTime,endTime
if(message.get("startTime")!=null){
startTime = LocalDate.parse(message.get("startTime"), DateTimeFormatter.ISO_DATE)
}
if(message.get("endTime")!=null){
endTime = LocalDate.parse(message.get("endTime"), DateTimeFormatter.ISO_DATE)
}
def json = judicialAuctionDataService.query(message.get("province"), message.get("city"), message.get("district"), message.get("houseType"), message.get("communityId"), message.get("communityName"),
message.get("address"), message.get("area") as Double, message.get("longitude") as Double, message.get("latitude") as Double, message.get("maxCount") as Integer, startTime,endTime, message.get("userName"), message.get("houseTypePm"))
log.info(json.toString())
return json
}
}
在类名前加上@Slf4j,听过log.info()就可以直接输出日志了
日志位置及名称
在application.properties添加如下命令
# 日志
logging.file.name=logs/auctionApi.log
在项目的根目录下创建logs文件夹,在logs生成auctionApi.log日志文件
日志文件设置
由于日志服务一般都在applocationContext创建前就初始化了,它并不是必须通过spring的配置文件控制。因此通过系统属性和传统的spring boot外部配置文件依然可以很好的支持日志控制和管理。
根据不同的日志系统,可以按照下面的规则配置文件名,就能被正确的加载(不需要指定日志配置文件位置)
- Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
- Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
- Log4j2:log4j2-spring.xml, log4j2.xml
- JDK (Java Util Logging):logging.properties
这里使用的slf4j,所以命名为log4j.xml,其他的看情况而定
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<springProperty scope="context" name="logging.path" source="logging.path"/>
<contextName>api</contextName>
<!--控制台日志, 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
</encoder>
</appender>
<!--文件日志, 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/auctionApi.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>logs/auctionApi.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>90</maxHistory>
</rollingPolicy>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n</pattern>
<charset>utf8</charset>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>500MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
</configuration>