SpringBootxml配置(超全面)版权声明
原创更新日志:
20170810 更新通过 application.yml过程参数 logback 中。
[toc]
简明书籍不支持目录,一张截图。

image.png
默认日志 Logback :
默认情况下,Spring Boot会用Logback要记录和使用INFO将输出电平发送到控制台。在运行应用程序和其他示例时,您应该已经看到了很多。INFO日志级别。

从上图可以看出,日志输出内容元素如下:
- 时间和日期:精确到毫秒。
- 日志级别:ERROR, WARN, INFO, DEBUG or TRACE
- 进程ID
- 分隔符:--- 标识实际日志的开始
- 线程名:用方括号括起来(控制台输出可能会被截断)
- Logger名称:通常使用源代码的类名。
- 日志内容
添加日志依赖项
假如maven将添加依赖项。 spring-boot-starter-logging :
org.springframework.boot
spring-boot-starter-logging
但是,我们不需要在实际开发中直接添加此依赖项。
你会发现 spring-boot-starter 其中包含 spring-boot-starter-logging ,依赖的内容是 Spring Boot 默认日志框架 logback 。在工程上有用 Thymeleaf ,而 Thymeleaf 依赖项包含 spring-boot-starter 最后,我只需要介绍一下 Thymeleaf 即可。
org.springframework.boot
spring-boot-starter-thymeleaf
控制台输出
日志级别从低到高为:
TRACE<DEBUG<INFO<WARN<ERROR<FATAL。
如果已设置 WARN ,则低于 WARN 不会输出该信息。
Spring Boot 中的默认配置 ERROR 、 WARN 和 INFO 向控制台输出日志的级别。
您还可以启动应用程序。 --debug 启用“DEBUG”模式的标志(建议用于开发),可以采用以下两种方式:
- 在运行命令后添加
--debug标记如下:$ java -jar springTest.jar --debug - 在
application.properties中配置debug=true,则设置此属性true当核心Logger(包括嵌入式容器,hibernate、spring)将输出更多内容,但您 不输出自己申请的日志DEBUG级别 。

如果每次都编写这行代码非常麻烦,您可以使用注释,但您需要使用它们。 lombok :
-
添加依赖项:
//注解 compile org.projectlombok:lombok:1.16.18 -
安装
lombok的插件:- Go to File > Settings > Plugins
- Click on Browse repositories...
- Search for Lombok Plugin
- Click on Install plugin
- Restart Android Studio
- 允许批注处理,Settings -> Compiler -> Annotation Processors

可以使用 {} 占位符用于缝合字符串,而不使用 ““+”” 来连接琴弦。
文件输出
默认情况下,Spring Boot将日志输出到控制台,而不写入日志文件。
使用 Spring Boot 喜欢在 application.properties 或 application.yml 配置,以便只能配置简单的场景、保存路径、日志格式等、复杂的场景(区分 info 和 error 日志、每天生成一个日志文件等)不能满足要求,只能定制,如下所示。



默认情况下,它将被设置。 path 生成一个 spring.log 文件。


如果您想写入除控制台输出之外的日志文件,则需要 application.properties 中设置 logging.file 或 logging.path 属性。
logging.file,set file,可以是绝对路径也可以是相对路径。例如:logging.file=my.loglogging.path,设置将在其下创建它的目录。spring.log文件并写入日志内容,如:logging.path=/var/log
如果只是配置logging.file,将在项目的当前路径下生成一个。xxx.log日志文件。
如果只是配置logging.path,在/var/log该文件夹将生成一个日志文件。spring.log
注:两者不能同时使用。如果同时使用它们,则仅
logging.file生效
默认情况下,日志文件的大小为10MB它将被拆分一次以生成新的日志文件。默认级别为:ERROR、WARN、INFO
级别控制
所有受支持的日志记录系统均可用 Spring 在环境中设置记录级别(例如 application.properties 中)
格式为: logging.level.* = LEVEL
logging.level :日志级别控制前缀,*为包名或Logger名
LEVEL :选项 TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
举例:
logging.level.com.dudu=DEBUG:com.dudu包下所有class以DEBUG级别输出
logging.level.root=WARN:root日志以WARN级别输出

自定义日志配置
根据不同的日志系统,您可以按照以下规则组织配置文件名,然后才能正确加载:
- 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
Spring Boot 官方推荐的优先使用 -spring 文件名用作您的日志配置(例如 logback-spring.xml ,而不是 logback.xml ),命名 logback-spring.xml 日志配置文件, spring boot 你可以再加一些。 spring boot 唯一配置项(如下所述)。
默认命名规则,并放置在。 src/main/resources 下面即可
如果您想要完全控制日志配置,但不想使用它。 logback.xml 作为 Logback 配置的名称, application.yml 可以通过 logging.config 属性指定一个自定义名称:
logging.config=classpath:logging-config.xml
尽管通常不需要更改配置文件的名称,但如果您想要面向不同的运行时 Profile 此功能对于不同的日志配置非常有用。
此属性通常不是必需的,而是直接在 logback-spring.xml 中使用 springProfile 配置,否 logging.config 为不同的环境指定不同的配置文件。 springProfile 配置如下所述。
根节点包含的属性
- scan:设置此属性时
true如果配置文件更改,将使用缺省值重新加载true。 - scanPeriod:设置监控配置文件是否被修改的时间间隔。如果未指定时间单位,则默认单位为毫秒。什么时候
scan为true此属性生效。默认时间间隔为1分钟。 - debug:设置此属性时
true什么时候,就会打印出来。logback内部日志信息,实时查看。logback运行状态。缺省值为false。
根节点 <configuration> 有5子节点,其将在下面详细描述。
子节点一 <root>
root节点是指定最基本的日志输出级别所需的节点,只有一个level属性。
level:用于设置打印级别,不区分大小写:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,无法设置INHERITED或同义词NULL。
默认是DEBUG。
可以包含零个或多个元素来标识此appender将添加到此loger。
子节点2: <contextName> 设置上下文名称
每个logger都关联到logger上下文中,默认的上下文名称为“default“。但是,您可以使用设置为其他名称的记录来区分不同的应用程序。一旦设置,就不能修改,可以通过 %contextName 要打印日志上下文名称,通常不使用该属性,它是可选的。
logback

子节点3: <property> 设置变量
用于定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value变量定义的值。通过定义将值插入到logger上下文。在定义变量之后,您可以使“${}“使用变量。
这里经过后可以看到 application.yml 传递参数。
子节点四: <appender>
appender用于格式化日志输出节点,有两个属性name和class,class用于指定输出策略,通常使用的是控制台输出策略和文件输出策略。
控制台输出 ConsoleAppender :
-
示例一:
logback-demo %d -1 %msg%n %d -2 %msg%n 
可以看到
layout和encoder,您可以将事件转换为格式化日志记录,但控制台输出使用。layout,则使用文件输出。encoder,具体原因可见一斑。 http://blog.csdn.net/cw_hello1/article/details/51969554 -
示例二:
logback-demo %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n 输出日志:
18:15:22.148 logback-demo [http-nio-9010-exec-1] INFO c.e.demo.controller.UserContorller - 日志输出 info 18:15:22.148 logback-demo [http-nio-9010-exec-1] WARN c.e.demo.controller.UserContorller - 日志输出 warn 18:15:22.148 logback-demo [http-nio-9010-exec-1] ERROR c.e.demo.controller.UserContorller - 日志输出 error 18:15:22.148 logback-demo [http-nio-9010-exec-1] INFO c.e.demo.controller.UserContorller - name:inke , age:33 18:15:22.149 logback-demo [http-nio-9010-exec-1] INFO c.e.demo.controller.UserContorller - name:inke , age:33<encoder>表示日志已编码:- %d{HH: mm:ss.SSS}--记录输出时间
- %thread--输出日志的进程名称,位于中。Web它在应用程序和异步任务处理中很有用。
- %-5level--日志级别,并使用。5字符左对齐
- %logger{36}--日志输出名称。
- %msg--记录消息
- %n--站台换行。
ThresholdFilter为系统定义的拦截器,例如,我们使用。ThresholdFilter来过滤掉ERROR该级别以下的日志不会输出到文件。如果你不必记得把它注释掉,否则你的主机会发现没有日志。~
-
- *
输出到文件 RollingFileAppender
另一种常见的日志输出到文件,随着应用程序运行的时间越来越长,日志会越来越多,将它们输出到同一个文件并不是一个好的方式。 RollingFileAppender 对于切片文件日志:
ERROR
DENY
ACCEPT
${logback.logdir}/info.${logback.appname}.log
${logback.logdir}/info.${logback.appname}.%d{yyyy-MM-dd}.log
90
UTF-8
%d [%thread] %-5level %logger{36} %line - %msg%n
Error
${logback.logdir}/error.${logback.appname}.log
${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log
90
UTF-8
%d [%thread] %-5level %logger{36} %line - %msg%n
如果同时有 <File> 和 <FileNamePattern> 根据日期拆分日志,代码注释写得很清楚。

如果你想区分 Info 和 Error 日志级别,则需要使用规则过滤策略,代码注释写得非常清楚。
子节点五 <loger>
<loger> 用于设置包或特定类的日志打印级别,并指定 <appender> 。 <loger> 仅有一个 name 属性,则为可选 level 和一个可选的 addtivity 属性。
name:用于指定主题。loger约束包或特定类。level:用于设置打印级别,不区分大小写:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊的价值。INHERITED或同义词NULL,代表执法上级的水平。如果未设置此属性,则当前loger上级的水平将被继承。addtivity:是否给上级loger传递打印信息。缺省值为true。
loger在实际使用中有两种情况。
让我们来看看如何在代码中使用它。
package com.dudu.controller;
@Controller
public class LearnController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public Map login(HttpServletRequest request, HttpServletResponse response){
//日志级别从低到高TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果已设置WARN,则低于WARN不会输出该信息。
logger.trace("日志输出 trace");
logger.debug("日志输出 debug");
logger.info("日志输出 info");
logger.warn("日志输出 warn");
logger.error("日志输出 error");
Map map =new HashMap();
String userName=request.getParameter("userName");
String password=request.getParameter("password");
if(!userName.equals("") && password!=""){
User user =new User(userName,password);
request.getSession().setAttribute("user",user);
map.put("result","1");
}else{
map.put("result","0");
}
return map;
}
}
这是一种登录判断方法,我们引入日志,并打印不同级别的日志,然后根据。logback-spring.xml中的配置,以查看打印的级别日志。
第一点: loger 配置,未指定级别,无 appender
logback-spring.xml 增加 loger 配置如下:
<logger name="com.dudu.controller" /> 将控制 controller 打印了该包下所有类的日志,但没有设置打印级别,所以他继承了上级的日志级别。 “info” ;
没有设置 addtivity ,默认为true,将此 loger 将打印信息发送给上级;
没有设置 appender ,此 loger 其本身不打印任何信息。
<root level="info"> 将 root 设置了打印级别 “info” ,使用名称指定 “console” 的 appender 。
当执行 com.dudu.controller.LearnController 类的 login 方法时, LearnController 在包com.dudu.controller,所以先执行。 <logger name="com.dudu.controller"/> ,级别为 “info” 及大于 “info” 将日志信息传递到 root ,本身不打印;
root 收到下级发送的信息后,移交给已配置的名为“console”的 appender 处理, “console” appender 将信息打印到控制台;
打印结果如下:
16:00:17.407 logback [http-nio-8080-exec-8] INFO com.dudu.controller.LearnController - 日志输出 info
16:00:17.408 logback [http-nio-8080-exec-8] WARN com.dudu.controller.LearnController - 日志输出 warn
16:00:17.408 logback [http-nio-8080-exec-8] ERROR com.dudu.controller.LearnController -
第二:拥有多个 loger 配置,指定级别,指定。 appender
logback-spring.xml 增加 loger 配置如下:
...
控制 com.dudu.controller.LearnController 类的日志打印,打印级别为“ WARN ”;
additivity 属性为 false ,表示此 loger 打印信息不再传达给上级。;
用名称“指定” console ”的 appender ;
现在是执行的时候了 com.dudu.controller.LearnController 类的login方法,则首先执行。 <logger name="com.dudu.controller.LearnController" level="WARN" additivity="false"> ,级别将为“ WARN “并且大于”WARN“日志信息被提供给这个 loger 指定的名称“ console ”的 appender 在控制台处理、录入日志,不再交给上级。 root 传递打印信息。
打印结果如下:
16:00:17.408 logback [http-nio-8080-exec-8] WARN com.dudu.controller.LearnController - 日志输出 warn
16:00:17.408 logback [http-nio-8080-exec-8] ERROR com.dudu.controller.LearnController - 日志输出 error
当然,如果你把 additivity="false" 改成 additivity="true" 如果是,则打印两次,因为打印信息是传输给上级的,logger它本身只打印一次,root收到后,重新打印。
注意:
...
如果范围重叠,则范围很小且有效。
多环境日志输出
...
application.yml 增加环境选择的配置。 active: dev
server:
port: 9010
spring:
profiles:
active: dev
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
username: root
password: root
mybatis:
type-aliases-package: org.larry.springboot.entity
mapper-locations: classpath:mapper/**/*.xml
check-config-location: true
active: 【test、dev、prod】 ,根据 active 环境,自动使用上述配置。 springProfile 的 logger 日志
自定义日志路径(application.yml)
application.yml 添加与日志相关的自定义配置
logback:
logdir: /Users/inke/dev/log/tomcat/sell
appname: sell
在 logback-spring.xml
${appname}
%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
。。。
。。。 版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123



