转载自 : https://www.jianshu.com/p/1ded57f6c4e3
作者:beanlam
获取LogFactory的基本信息
public static void main( String[] args )
{
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
ProjectInfo projectInfo = (ProjectInfo)context.getBean("projectInfo");
log.debug(projectInfo.getName());
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
TRACE < DEBUG < INFO < WARN < ERROR
在 logback 中,每个 logger 都是一个单例,调用 LoggerFactory.getLogger
方法时,如果传入的 logger name 相同,获取到的 logger 都是同一个实例。
在为 logger 命名时,用类的全限定类名作为 logger name 是最好的策略,这样能够追踪到每一条日志消息的来源。
经常能看到打印日志的时候,使用以下这种方式打印日志:
logger.debug("the message is " + msg + " from " + somebody);
这种打印日志的方式有个缺点,就是无论日志级别是什么,程序总要先执行 "the message is " + msg + " from " + somebody
这段字符串的拼接操作。当 logger 设置的日志级别为比 DEBUG 级别更高级别时,DEBUG 级别的信息不回被打印出来的,显然,字符串拼接的操作是不必要的,当要拼接的字符串很大时,这无疑会带来很大的性能白白损耗。
应该采用占位符的方式
logger.debug("the message {} is from {}", msg, somebody);
在 logback 中,将日志信息格式化,以及输出到目的地,是最损耗性能的操作
建议使用占位符的方式参数化记录日志
logback 提供的配置方式有以下几种:
编程式配置
logback 在启动时,根据以下步骤寻找配置文件:
Configuration
接口,使用它的实现来进行配置BasicConfigurator
来配置,并将日志输出到 consoletest.xml 放在 src/test/resources 目录下。maven 打包的时候也不会把这个文件打进 jar 包里。
logback 启动的时候解析配置文件大概需要 100 毫秒的时间,如果希望更快启动,可以采用 SPI 的方式。
默认配置:
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
在配置文件中,logger 的配置在
level 的取值可以是 TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF, INHERITED, NULL
, 其中 INHERITED
和 NULL
的作用是一样的,并不是不打印任何日志,而是强制这个 logger 必须从其父辈继承一个日志级别。
additivity 的取值是一个布尔值,true 或者 false。
TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF
。
PatternLayout
时,那么可以不用填写。
PatternLayoutEncoder
,那么 class 属性可以不填。
如果想要往一个 logger 上绑定 appender,则使用以下方式:
myAppName
%d %contextName [%t] %level %logger{36} - %msg%n
...
...
可以通过外部变量定义
%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %highlight(%-5level) %cyan([%thread] [%logger{50}%replace(.%X{method}:%X{line}){'\.:',''}]) %msg%n
debug
${logPath}/${component}-debug.log
${logPath}/${component}-debug.%i.log.zip
1
5
1MB
%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %-5level [%thread] [%logger{50}%replace(.%X{method}:%X{line}){'\.:',''}] %msg%n
UTF-8
ERROR
${logPath}/${component}-error.log
${logPath}/${component}-error.%i.log.zip
1
5
1MB
%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %-5level [%thread] [%logger{50}%replace(.%X{method}:%X{line}){'\.:',''}] %msg%n
UTF-8