java日志

java日志

细说Java主流日志工具库:https://www.cnblogs.com/jingmoxukong/p/5910309.html?hmsr=toutiao.io
日志框架
log4j,log4j2;log4j2优于log4j、logback
JUL(java.util.logging);sun公司日志
logback;优于log4j
日志门面
JCL(apache common logging);apache整合,提供Log接口;运行时动态绑定。
slf4j;部署时静态指定日志;提供Log接口,编译时确定实现类。
日志级别
ALL、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF

JCL

http://commons.apache.org/proper/commons-logging/
运行时动态查找日志实现类。
提供Log接口,整合log4j、jul实现。

2,Quick Start

导包:commons-logging
配置Log实现类

  1. classpath:commons-logging.properties,配置参数org.apache.commons.logging.Log(日志类)、priority(文件优先级)
  2. 系统属性配置:org.apache.commons.logging.Log
  3. 默认按序搜索:Log4J、JUL、SimpleLog

3,Developing with JCL

Obtaining a Log Object
private static final Log log = LogFactory.getLog(Class.class);
推荐声明为static类型;但当类会被多个类加载器加载时,声明为实例变量。
Logging a Message
log.trace()/debug()/info()/warn()/error()/fatal();记录日志
log.isXxxEnabled();是否启用
Serialization Issues
1.0.4前,Log实现类未实现Serializable;不可序列化,加transient、static修饰。

6,Best Practice(General)

Code Guards
Log#isXxxEnable();是否启用当前级别;多参数信息输出前使用,避免不必要的计算。
日志系统的级别计算是在参数解析后。
Message Priorities/Levels
fatal、error、warn;to a status console
info;to a console
dubug、trace;to log
默认日志级别不低于info

SLF4J

https://www.yiibai.com/slf4j/slf4j_overview.html
slf4j编译时确定日志实现类。通过jar包引入、排除的方式确定日志实现类。logback优先。
直接绑定log4j2、jul、logback;其他日志组件,需桥接。导入org.slf4j#xxx-over-slf4j;

使用

导包:org.slf4j#slf4j-api,日志实现类桥接器

优雅的使用slf4j

https://www.jianshu.com/p/7b5860be190f
日志桥接器
转换适配日志框架。如log4j-over-slf4j,即log4j -> slf4j的桥接器,这个库定义了与log4j一致的接口(包名、类名、方法签名均一致),但是接口的实现却是对slf4j日志接口的包装,即间接调用了slf4j日志接口,实现了对日志的转发。
log4j-over-slf4j;log4j转slf4j
slf4j-log4j;slf4j转log4j12。需导入log4j#log4j。
通过<scope>test</scope>在编译时排除引用,provided测试、编译有效
slf4j中定义了优先顺序,优先使用logback。
排除jul
启动类添加

static{
 SLF4JBridgeHandler.removeHandlersForRootLogger();
 //springboot日志模块已有该逻辑
 SLF4JBridgeHandler.install();
 }

指定slf4j日志
1,导入日志框架xxx、slf4j-xxx
2,排除xxx以外的日志框架、slf-xxx。jcl、jul、log4j、log4j2、logback
3,导入出xxx以外的xxx-over-slf4j。log4j2桥接器由log4j2提供,其他由slf4j提供。
maven依赖解析
路径最短优先原则;即直接引入最优先,传递依赖层级越浅,越优先。
优先声明原则;pom中声明靠前的优先。

Log4j

http://logging.apache.org/log4j/1.2/manual.html
导包:log4j#log4j

Logger、Appender、Layout

Logger捕获,Appender输出,Layout格式化
继承:logger默认继承level、appender(叠加)。
Logger Hierarchy
命名层级,日志a.b为日志a.b.c的父级。可通过名称获取日志。
rootLogger,根日志,默认debug;通过getRootLogger()获取。总是存在,不可通过名称获取。
Logger若未分配级别,则从父类继承;追溯到rootLogger。请求方法级别不低于日志级别时启用。
一般通过类获取logger,则logger命名为类全名;便于配置文件中配置level。
Appender and Layout
appender类型:console、file、GUI component、remote socket servers等。
一个logger可连接多个appender。
appender additivity,默认为true;logger继承父级的appender。设为false则不继承。
layout,信息格式化;类似C语言printf函数。
格式化
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
格式:%[modifier]conversion[specifier]

  • c;category,包名。%c{2},自底起两层目录;a.b.c–b.c
  • C;类全名。%C{1},同上,输出类名
  • d;日期时间;%d{yyyy MM dd HH:mm:ss,SSS},SimpleDateFormat语法。%d{ISO8601、DATE、ABSOLUTE},log4j专用格式化器。默认ISO8601
  • F;日志调用类文件名。慢,慎用。
  • l;日志调用位置,类全名+行号;慢
  • L;日志调用位置行号
  • m;日志信息内容,message
  • M;日志调用位置方法名;慢
  • n;换行
  • p;日志级别,level
  • r;layout构建耗时,ms。
  • t;线程名
  • x/X;输出NDC/MDC
  • %;%%输出%,转义

修饰符modifier,默认原样输出。修改宽度、对齐。

  • -;左对齐,默认右对齐
  • .;最大字符数,超过从开头删除。
  • d;数值,指定最小宽度,空格补齐

示例:%-20.30c;左对齐,最小20,最大30.
自定义对象记录,实现ObjectRender。

Configuration

默认配置:

 public class MyApp {

   // Define a static logger variable so that it references the
   // Logger instance named "MyApp".
   static Logger logger = Logger.getLogger(MyApp.class);

   public static void main(String[] args) {

     // Set up a simple configuration that logs on the console.
     BasicConfigurator.configure();

     logger.info("Entering application.");
     Bar bar = new Bar();
     bar.doIt();
     logger.info("Exiting application.");
   }
 }

自定义配置:

public class MyApp {

   static Logger logger = Logger.getLogger(MyApp.class.getName());

   public static void main(String[] args) {


     // BasicConfigurator replaced with PropertyConfigurator.
     PropertyConfigurator.configure(args[0]);

     logger.info("Entering application.");
     Bar bar = new Bar();
     bar.doIt();
     logger.info("Exiting application.");
   }
 }

rootLogger默认为debug级别。
log4j.rootLogger=debug, stdout, R;配置级别为debug,appender为stdout、R

Log4j2

http://logging.apache.org/log4j/2.x/manual/index.html
导包:spring-boot-starter-log4j2;或org.apache.logging.log4j#log4j-core/log4j-api
Architecture
Logger Hierachy
log4j2中层级关系由LoggerConfig维护,逻辑与log4j的Logger一致。
Logger rootLogger = LoggerManager.getRootLogger();

Logback

http://www.logback.cn/
logback继承自log4j。logback实现slf4j接口。
导包:slf4j-api、logback-core、logback-classic、logback-access

1 logback介绍

无配置时,logback为rootLogger增加ConsoleAppender。

Logger log = LoggerFactory.getLogger();//获取logger
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);//打印内部状态报告

2 架构

架构与log4j一致。
参数化日志:msg中通过{}作占位符。

3 logback配置

配置文件查找
1,logback-test.xml, logback.groovy,logback.xml
2,META-INFO/services/ch.qos.logback.classic.spi.Configurator
3,BasicConfigurator;构建一个ConsoleAppender
logback.xml配置:https://www.jianshu.com/p/477a63a953bf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值