application.properties to application.yml

莫道桑榆晚,为霞尚满天。这篇文章主要讲述application.properties to application.yml相关的知识,希望能为你提供帮助。
loggin:
https://howtodoinjava.com/spring-boot/configure-logging-application-yml/
 
Spring Boot Logging with application.ymlBy  Lokesh Gupta  |  Filed Under:  Spring Boot
Learn  spring boot logging configuration  via  application.yml  file in simple and easy to follow instructions. In the default structure of a Spring Boot web application, you can locate the  application.yml  file under the  resources  folder.
Read More:  Spring Boot Logging with application.properties

Table of ContentsUnderstand default spring boot logging Set logging level Set logging pattern Set logging output to file Using active profiles to load environment specific logging configuration Color-coded logging output


Understand default spring boot loggingTo understand  default spring boot logging, lets put logs in  spring boot hello world  example. Just to mention, there is no logging related configuration in  application.yml  file. If you see any configuration in downloaded application, please remove it.
private  final  Logger LOGGER = LoggerFactory.getLogger(this.getClass());   @RequestMapping("/") public  String home(Map< String, Object> model) {           LOGGER.debug("This is a debug message");         LOGGER.info("This is an info message");         LOGGER.warn("This is a warn message");         LOGGER.error("This is an error message");           model.put("message""HowToDoInJava Reader !!");         return  "index"; }
Start the application. Access application at browser and verify log messages in console.
2017-03-02  23:33:51.318    INFO  3060  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : info log statement printed 2017-03-02  23:33:51.319    WARN  3060  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : warn log statement printed 2017-03-02  23:33:51.319  ERROR  3060  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : error log statement printed
Note down the observation that  Default logging level is INFO  – because debug log message is not present.
There is fixed default log message pattern which is configured in different  base configuration files.
%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}
The above pattern print these listed log message parts with respective color coding applied:
  • Date and Time  —   Millisecond precision.
  • Log Level  —   ERROR, WARN, INFO, DEBUG or TRACE.
  • Process ID.
  • A — separator to distinguish the start of actual log messages.
  • Thread name  —   Enclosed in square brackets (may be truncated for console output).
  • Logger name  —   This is usually the source class name (often abbreviated).
  • The log message

Set logging levelWhen a message is logged via a Logger it is logged with a certain log level. In the  application.yml  file, you can define log levels of Spring Boot loggers, application loggers, Hibernate loggers, Thymeleaf loggers, and more. To set the logging level for any logger, add keys starting with  logging.level.
Logging level can be one of one of  TRACEDEBUGINFOWARNERRORFATALOFF. The root logger can be configured using  logging.level.root.
logging:     level:         root: ERROR         org.springframework.web: ERROR         com.howtodoinjava: DEBUG         org.hibernate: ERROR
In above configuration, I upgraded log level for application classes to DEBUG (from default INFO). Now observe the logs:
2017-03-02  23:57:14.966  DEBUG  4092  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : debug log statement printed 2017-03-02  23:57:14.967    INFO  4092  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : info log statement printed 2017-03-02  23:57:14.967    WARN  4092  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : warn log statement printed 2017-03-02  23:57:14.967  ERROR  4092  --- [nio-8080-exec-1] c.h.app.controller.IndexController            : error log statement printed

Set logging patternTo change the loging patterns, use  logging.pattern.console  and  logging.pattern.file  keys.
logging:         pattern:                 console: %d{yyyy-MM-dd HH:mm:ss} - %msg%n                 file: %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
After changing console logging pattern in application, log statements are printed as below:
2017-03-03  12:59:13  - This is a debug message 2017-03-03  12:59:13  - This is an info message 2017-03-03  12:59:13  - This is a warn message 2017-03-03  12:59:13  - This is an error message

Set logging output to fileTo print the logs in file, use  logging.file  or  logging.path  key.
logging:         file: /logs/application-debug.log
Verify the logs in file.
2017-03-03  13:02:50.608  DEBUG  10424  --- [http-nio-8080-exec-1] c.h.app.controller.IndexController            : This is a debug message 2017-03-03  13:02:50.608    INFO  10424  --- [http-nio-8080-exec-1] c.h.app.controller.IndexController            : This is an info message 2017-03-03  13:02:50.608    WARN  10424  --- [http-nio-8080-exec-1] c.h.app.controller.IndexController            : This is a warn message 2017-03-03  13:02:50.609  ERROR  10424  --- [http-nio-8080-exec-1] c.h.app.controller.IndexController            : This is an error message

Using active profiles to load environment specific logging configurationIt is desirable to have multiple configurations for any application – where each configuration is specific to a particular runtime environment. In spring boot, you can achieve this by creating multiple  application-{profile}.yml  files in same location as  application.yml  file.
Profile specific keys always override the non-profile specific ones. If several profiles are specified, a last wins strategy applies.
If I have two environments for my application i.e.  prod  and  dev. Then I will create two profile specific yml files.
application-dev.yml
logging:     file: logs/application-debug.log     pattern:         console:  "%d %-5level %logger : %msg%n"         file:  "%d %-5level [%thread] %logger : %msg%n"     level:         org.springframework.web: ERROR         com.howtodoinjava: DEBUG         org.hibernate: ERROR
application-prod.yml
logging:     file: logs/application-debug.log     pattern:         console:  "%d %-5level %logger : %msg%n"         file:  "%d %-5level [%thread] %logger : %msg%n"     level:         org.springframework.web: ERROR         com.howtodoinjava: INFO         org.hibernate: ERROR
To supply profile information to application, key  spring.profiles.active  is passed to runtime.
$ java -jar -Dspring.profiles.active=prod spring-boot-demo.jar

Color-coded logging outputIf your terminal supports ANSI, color output will be used to aid readability. You can set  spring.output.ansi.enabled  value to either  ALWAYSNEVER  or  DETECT.
spring:         output:         ansi:                 enabled: DETECT
Color coding is configured using the  %clr  conversion word. In its simplest form the converter will color the output according to the log level.
【application.properties to application.yml】FATAL and ERROR –   Red
WARN –   Yellow
INFO, DEBUG and TRACE –   Green
Drop me your questions in comments section.
Happy Learning !!
References:
Spring Boot – How to logging
Spring boot features – Logging
 

    推荐阅读