Logback ConsoleAppender通过System.out或System.err打印流追加到控制台上。在这个Logback教程中,学习默认配置的控制台日志和如何应用自定义配置。
1.1.依赖性
Logback在应用程序运行时需要三个模块,即logback-core、logback-classic和slf4j-api。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
logback-classic模块已经实现了SLF4J的API,所以在调用SLF4J的记录器来记录使用底层Logback库的消息时,没有额外的成本。
注意,logback-classic 会自动拉入logback-core 和slf4j-api ,所以添加 logback-classic 依赖关系即可。
2.零配置控制台日志
默认情况下,如果我们不提供任何配置并在项目中添加依赖项,Logback会自动配置控制台appender并在控制台输出日志。
默认的日志级别设置为DEBUG。这意味着所有的INFO、WARN、ERROR和DEBUG信息将被打印在控制台。
下面的配置是Logback所做的等效配置,以防在classpath中没有找到自定义的配置文件。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.howtodoinjava.demo.lombok.Article;
public class Main {
public static void main(final String[] args) {
Logger logger = LoggerFactory.getLogger(Main.class);
logger.debug("Debug Message Logged !!!");
logger.info("Info Message Logged !!!");
logger.error("Error Message Logged !!!", new NullPointerException("Something is NULL"));
Article a = Article.builder(1L).title("Test Article").tag("Data").build();
logger.info("Article fecthed for id : {} is : {}", 1, a);
}
}
15:23:27.810 [main] DEBUG com.howtodoinjava.demo.slf4j.Main - Debug Message Logged !!!
15:23:27.812 [main] INFO com.howtodoinjava.demo.slf4j.Main - Info Message Logged !!!
15:23:27.813 [main] ERROR com.howtodoinjava.demo.slf4j.Main - Error Message Logged !!!
java.lang.NullPointerException: Something is NULL
at com.howtodoinjava.demo.slf4j.Main.main(Main.java:14)
15:23:27.814 [main] INFO com.howtodoinjava.demo.slf4j.Main - Article fecthed for id : 1 is : Article(id=1, title=Test Article, tags=[Data])
3.自定义配置
3.1.日志级别和模式
- 我们可以在
encoder标签的帮助下自定义日志信息模式。 - 我们可以使用
target属性将默认目标从System.out改为System.err。 - 要改变日志级别,可以将
level属性改为任何其他的日志级别,如INFO、WARN或ERROR。
下面是更改后的配置样本。
<configuration>
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender" target="System.err">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDERR" />
</root>
</configuration>
3.2.彩色编码的日志
要启用彩色编码的日志,请将withJansi 属性设置为true。默认情况下,它被设置为false。
注意,基于Unix的操作系统,如Linux和Mac OSX,默认支持ANSI颜色代码。在Windows上,我们必须在运行时中添加jansi依赖性。
<dependency>
<groupId>org.fusesource.jansi</groupId>
<artifactId>jansi</artifactId>
<version>2.4.0</version>
</dependency>
Spring boot会自动检测并配置颜色编码的日志。我们可以使用属性
spring.output.ansi.enabled,通过设置ALWAYS、NEVER或DETECT(默认值)来进一步定制它。
如果我们不想在项目中添加依赖性,而是在IDE中进行修改,这样他们就纯粹是在开发环境中,我们可以使用Eclipse Console插件中的ANSI。
最后,使用一个启用了彩色编码的编码器模式。
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</pattern>
</encoder>
在控制台中看到彩色编码的日志。
4.总结
默认配置的控制台日志对于入门和POC目的来说已经足够好了。
要在控制台中使用广泛和更详细的日志记录,我们可以自定义日志级别、模式,甚至可以为信息添加颜色编码。
学习愉快!!
