Java实际项目开发中Log4j日志记录中的logger使用方式

tech2022-08-13  113

Log4j背景介绍

Log4j是Apache的一个开源项目,使用Log4j,控制日志信息每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

Log4j的三大组件

Log4j的三个组件 : 日志记录器(Logger),输出端(Appenders),日志格式化(Layout)

Logger : 控制启动/禁用哪些日志记录语句,也可以对日志信息进行级别限制Appenders : 指定日志将打印到控制台还是文件Layout : 控制日志信息的显示格式

Log4j使用logger的步骤

Log4j使用logger的三个步骤如下 : 1.引入logger类和logger工厂类 2.声明logger 3.记录日志

//步骤1: 引入slf4j接口的logger和LoggerFactory import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DemoService{ //步骤2: 声明一个Logger实现类,以static的方式 //Logger对象是否声明为静止业界有一些争议 //1. static的优势在于 static Logger 更符合语义,节省CPU,但是不支持注入 //2. 不使用static的优势在于 支持注入,对于JVM中运行的多个引用同一个类库应用程序,可以在不同的程序对同个类Logger进行不同的配置 private final static Logger logger=LoggerFactory.getLogger(DemoService.class); public boolean verfiyDemoInfo(String userName,String password){ //步骤3:log it 输出log信息 logger.info("试试看输出什么信息 [{}]”,userName); return false; } }

具体如何实现方式

见识一下日志文件 再访问一次 但是Log4j的logger不止info这个级别 Log4j有五个级别 track debug info warn error

用户级别 : error warn info 这三个级别属于生产环境,是运维人员需要看得懂的 开发级别 : debug

error

影响程序运行,当前请求正常运行的异常情况

打开配置文件失败第三方网络连接异常sqlException等不应该出现的情况某个serviceimpl的方法返回的list集合应该有元素却获取到一个空集合list 字符转换的时候报错显示无GBK字符集

warn

不应该出现但是不影响程序,当前请求正常运行的异常情况,例如:

有容错机制的时候出现错误情况找不到配置文件,但是系统能自动创建配置文件即将接近临界值的时候,例如: 缓存池占用达到警告线

info

系统运行信息serviceimpl方法的出入口主要逻辑分步骤外部接口部分客户端请求参数和返回给客户端的结果调用第三方的调用参数和调用结果

debug

用于记录程序变量多次迭代中的变量方法/运算结果替代代码中的注释

trace

主要用于系统运行中的完整信息,完整的http request和http response

总结

在实际开发中我们经常用到的是info和debug 我具体描述一下info级别的用法

void info(java.lang.String s); 输出 [main] INFO c.j.training.logging.service.UserService - 开始初始化配置文件读取模块 void info(java.lang.String s, java.lang.Object o); 输出 [main] INFO c.j.training.logging.service.UserService - 开始导入配置文件[/somePath/config.properties] void info(java.lang.String s, java.lang.Object o, java.lang.Object o1); 输出 [main] INFO c.j.training.logging.service.UserService - 开始从配置文件[/somePath/config.properties]中读取配置项[maxSize]的值 void info(java.lang.String s, java.lang.Object... objects); 输出 [main] INFO c.j.training.logging.service.UserService - 在配置文件[/somePath/config.properties]中读取到配置项[maxSize]的值为[5]

v

oid info(java.lang.String s, java.lang.Throwable throwable); 输出 [main] INFO c.j.training.logging.service.UserService - 读取配置文件时出现异常 java.io.FileNotFoundException: File not exists at cn.justfly.training.logging.service.UserServiceTest.testLogResult(UserServiceTest.java:31) ~[test-classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_45] at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_45]

输出时可以得到总结,logger信息的{}会被后面的参数按照顺序替换,带来的好处是运行时不需要打印盖log,不会产生重复的String对象

最新回复(0)