log4j2 使用

log4j2特点

  1. API 分离
  2. 性能提升尤其在多线性的时候

log4j logback性能比较参考
http://logging.apache.org/log4j/2.x/manual/async.html#Performance

  1. 支持多种API 如Log4j 1.2、SLF4J、java.util.logging (JUL) API等
  2. 避免封闭
  3. 自动重新加载配置
  4. 更高级的过滤
  5. 插件架构
  6. 支持属性
  7. 支持java8 Lambda表达式
  8. 自定义日志等级
  9. 不会产生垃圾,减轻垃圾收集器的压力从而提升性能
  10. 与应用服务器集成

版本需求

log4j2 java
>2.4 >7
2.0 - 2.3 6

log4j2 不兼容 log4j1 但是你可以通过adapter来使用log4j1的api

Log4j2 API

  1. hello world
    获取loger实例 打印log
@RestController
public class MainPracticeController {
    private static final Logger logger = LogManager.getLogger(MainPracticeController.class);
    @RequestMapping("/hello")
    String home(){
        logger.info("hello world");
        return "hello word";
    }
}

2.Logger的名称可以是

LogManager.getLogger(MainPracticeController.class)
LogManager.getLogger(MainPracticeController.class.getName());
LogManager.getLogger();

格式化输出结果


helloworld.png

3.参数替换

logger.info("Logging in user {} with birthday {}", "yao.cui", "1990-09-09");

内容输出如下


params.png
  1. 格式化参数
    你需要调用getFormatterLogger来获取Logger,格式化用法同java 的string Formatter.
@RestController
public class MainPracticeController {
    private static final Logger logger = LogManager.getFormatterLogger(MainPracticeController.class);
    @RequestMapping("/hello")
    String home(){
        logger.info("hello world");
        logger.info("Logging in user {} with birthday {}", "yao.cui", "1990-09-09");
        logger.info("Logging in user %s with birthday %s", "yao.cui", "1990-09-06");
        logger.info("Logging in user %1$s with birthday %2$tm %2$te,%2$tY", "yao.cui", new Date());
        logger.info("Integer.MAX_VALUE = %,d", Integer.MAX_VALUE);
        logger.info("Long.MAX_VALUE = %,d", Long.MAX_VALUE);
        return "hello word";
    }
}

格式化结果如下


image.png
  1. Loggers 和 Formatter Loggers混合
    Formatter Loggers 有一个缺点就是必须正确的匹配类型,比如你在格式化 %d 时给入的参数不是数值类型 那就会抛异常,如果你大部分情况下都是想使用{}类型的参数,只是某个地方想要格式化,那么就可以使用这种方式,同formater一样 数据类型不正确也会抛出异常
private static final Logger logger = LogManager.getLogger(MainPracticeController.class);
logger.debug("Opening connection to {}...", someDataSource);
logger.printf(Level.INFO, "Logging in user %1$s with birthday %2$tm %2$te,%2$tY", "yao.cui", new Date());

image.png

配置




    
        ????
        
        %clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx
        
        logs
        pratice
    
    
    
        
        
            
            
            
        
        
        
            
        
        
        
            
        
        
        
            
            
            
            
                
                
                
            
            
            
        
    
    
        
        
        
        
        
        
            
            
            
        
    

说明
日志级别:All < Trace < Debug < Info < Warn < Error < Fatal < OFF,如果一条日志信息的级别大于等于配置文件中声明的级别,则记录该日志信息。

你可能感兴趣的:(log4j2 使用)