Java日志框架学习笔记
Java日志框架学习笔记
文章目录
- 0 主流Java日志框架
- 1 log4j
- 1.1 理论知识
- 1.1.1 Loggers日志记录器
- 1.1.2 Appenders输出端
- 1.1.3 Layout日志格式化器
- 1.2 代码实现
- 1.2.1 maven依赖
- 1.2.2 log4j.properties
- 1.2.3 Log4jTest.java
- 1.2.4 运行结果
- 2 slf4j
- 2.1 理论知识
- 2.2 slf4j日志门面绑定代码
- 2.2.1 maven依赖
- 2.2.2 Slf4jTest.java
- 2.2.3 运行结果
- 2.3 slf4j日志门面桥接代码
- 2.3.1 maven依赖
- 2.3.2 Log4jOverTest.java
- 2.3.3 去掉log4j依赖
- 2.3.4 加入门面框架依赖
- 2.3.5 Log4jOverTest.java
- 2.3.6 运行结果
- 2.4 SpringBoot中slf4j日志配置
- 2.5 SpringBoot中slf4j日志代码
- 3 logback
- 3.1 理论知识
- 3.2 logback-access 的使用
- 3.3 代码实现
- 3.3.1 maven依赖
- 3.3.2 logback.xml
- 3.3.3 LogbackTest.java
- 3.3.4 运行结果
- 4 log4j2
- 4.1 理论知识
- 4.2 实现代码
0 主流Java日志框架
主流的Java日志框架:
1.JUL —不能分天,分文件,被支持淘汰
2.log4j —老牌主流的日志框架
日志门面框架
3.JCL —仅支持JUL和log4j,被支持淘汰
4.slf4j —市场上比较主流的日志框架
5.logback —springboot默认的日志实现框架
6.log4j2 —logback出来后,log4j就很少人用了,于是apache就推出了log4j2,功能上和logback很像.
现在有log4j2的人比 较少。slf4j门面+log4j2实现 应该是未来的大势所趋。
日志框架出现的历史顺序:
log4j—>JUL---->JCL---->slf4j—>logback---->log4j2
apache (淘汰) (淘汰) log4j创始人 apache
(用的人比较很少)
1 log4j
1.1 理论知识
1.1.1 Loggers日志记录器
Loggers 日志记录器 -----控制日志的输出级别和日志是否输出
logger.fatal(“fatal”); //严重错误,一般会造成系统崩溃并终止运行
logger.error(“error”); //错误信息,不会影响系统运行
logger.warn(“warn”); //警告信息,可能会发生问题
logger.info(“info”); //程序运行信息
logger.debug(“debug”); //调试信息,一般在开发中使用,
记录程序变量参数传递信息
logger.trace(“trace”); //追踪信息,记录程序所有的流程信息
1.1.2 Appenders输出端
Appenders 输出端 ----指定日志的输出方式(输出到控制台,文件)
ConsoleAppender 将日志输出到控制台
FileAppender 将日志输出到文件(意义不大)
DailyRollingFileAppender 按日期拆分 将日志输出到一个日志文件,
并且每个输出到一个新的文件
RollingFileAppender 按大小拆分 将日志信息输出到一个日志文件,
并且制定文件的尺寸,当文件大小达到制定
尺寸时,会自动把文件改名,同时产生一个新的文件
JDBCAppender 把日志信息保存到数据库中
1.1.3 Layout日志格式化器
Layout 日志格式化器 —控制日志信息的输出格式
HTMLLayout html表格形式
SimpleLayout 简单的日志输出格式 info–message
PatternLayout 最强大的格式化器 一般使用这种
一般格式为:%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n
2021-25-12 15:25:23 [INFO ]34 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:20) info
%p 输出优先级及debug,info%r 输出自应用启动到输出该log信息耗费的毫秒数%d 输出服务器当前时间 默认为ISO08601 也可以指定格式,如:%d{yyyy年MM月dd日 HH:mm:ss}
%l 输出日志发生的位置 包括类名,线程,在代码中的行数 如:Test.main(Test.java:10)# %l = %c %t %F %L
%c 输出打印语句所属的类的全名
%t 输出产生该日志的线程全名
%F 输出日志消息产生时所在的文件名称
%L 输出代码中的行数
%% 输出一个"%"字符
%m 输出代码中指定的日志信息
%n 换行
%5 宽度为5 右对齐
%-5 宽度为5 左对齐
1.2 代码实现
1.2.1 maven依赖
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
1.2.2 log4j.properties
#指定RootLogger顶级父元素默认的配置信息
#指定日志级别为=trace 使用的appender为=console控制台
# trace级别 控制台 日期info级别 日期error级别 按大小
log4j.rootLogger = trace,console,dailyInfoFile,dailyErrorFile,rollingFile#指定控制台日志输出appender对象
log4j.appender.console=org.apache.log4j.ConsoleAppender
#日志输出消息格式:SimpleLayout info--message 其中 PatternLayout用得最多
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容 标准格式:%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n
log4j.appender.console.layout.conversionPattern =%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n#不拆分,永远一个日志文件
#指定文件日志输出appender对象
log4j.appender.file=org.apache.log4j.FileAppender
#日志输出消息格式:
log4j.appender.file.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.file.layout.conversionPattern =%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n
#指定日志文件保存路径
log4j.appender.file.file= /logs/log4j.log
#指定日志文件的字符集
log4j.appender.file.encoding = UTF-8#按日期_info_拆分
#指定文件日志输出appender对象
log4j.appender.dailyInfoFile=org.apache.log4j.DailyRollingFileAppender
#日志输出消息格式:
log4j.appender.dailyInfoFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.dailyInfoFile.layout.conversionPattern =%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n
#指定日志文件保存路径
log4j.appender.dailyInfoFile.file= /logs/daily_info.log
#指定日志文件的字符集
log4j.appender.dailyInfoFile.encoding = UTF-8
#按指定日期拆分规则: 1份/天 1份/时
log4j.appender.dailyInfoFile.datePattern = '.'yyyy-MM-dd HH-mm-ss
#输出info等级日志 到该文件
log4j.appender.dailyInfoFile.threshold = info#按日期_error_拆分
#指定文件日志输出appender对象
log4j.appender.dailyErrorFile=org.apache.log4j.DailyRollingFileAppender
#日志输出消息格式:
log4j.appender.dailyErrorFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.dailyErrorFile.layout.conversionPattern =%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n
#指定日志文件保存路径
log4j.appender.dailyErrorFile.file= /logs/daily_error.log
#指定日志文件的字符集
log4j.appender.dailyErrorFile.encoding = UTF-8
#按指定日期拆分规则: 1份/天 1份/时
log4j.appender.dailyErrorFile.datePattern = '.'yyyy-MM-dd HH-mm-ss
#输出error等级日志 到该文件
log4j.appender.dailyErrorFile.threshold = error#按大小拆分
#指定文件日志输出appender对象
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
#日志输出消息格式:
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.rollingFile.layout.conversionPattern =%d{yyyy-mm-dd HH:mm:ss} [%-5p]%r %l %m%n
#指定日志文件保存路径
log4j.appender.rollingFile.file= /logs/rollingFile.log
#指定日志文件的字符集
log4j.appender.rollingFile.encoding = UTF-8
#指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
#指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex =10
1.2.3 Log4jTest.java
package com.tangguanlin.log;
import org.apache.log4j.Logger;
/*** 说明:log4j的使用* 作者:汤观林* 日期:2021年06月06日 14时*/
public class Log4jTest {public static void main(String[] args) {//获取日志记录器对象Logger logger = Logger.getLogger(Log4jTest.class);//日志记录输出//日志级别logger.fatal("fatal"); //严重错误,一般会造成系统崩溃并终止运行logger.error("error"); //错误信息,不会影响系统运行logger.warn("warn"); //警告信息,可能会发生问题logger.info("info"); //程序运行信息logger.debug("debug"); //调试信息,一般在开发中使用,记录程序变量参数传递信息logger.trace("trace"); //追踪信息,记录程序所有的流程信息}
}
1.2.4 运行结果
2021-22-17 15:22:27 [FATAL]0 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:16) fatal
2021-22-17 15:22:27 [ERROR]5 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:18) error
2021-22-17 15:22:27 [WARN ]5 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:19) warn
2021-22-17 15:22:27 [INFO ]6 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:20) info
2021-22-17 15:22:27 [DEBUG]6 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:21) debug
2021-22-17 15:22:27 [TRACE]6 com.tangguanlin.log.Log4jTest.main(Log4jTest.java:23) trace
2 slf4j
2.1 理论知识
slf4j —Simple Logging Facade For Java
JUL—>没有分天,分文件---->log4j ----> 换不同的框架要改全部代码
---->JCL(仅支持JUL和log4j) 被市场淘汰
slf4j
日志门面和日志体系
JCL被淘汰了—仅仅支持JUL和log4j,如果使用新的日志方式,需要重现修改代码,已经被市场淘汰
slf4j – 主流的日志门面技术
主要是为了给Java日志访问提供一套标准,规范的API框架,其主要意义在于提供接口,具体的实现可以交给其他日志框架,例如log4j和logback等,当然slf4j自己也是提供了功能较为简单的实现,但是一般很少用到。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,
配上具体的实现框架(log4j,logback),中间使用桥接器完成桥接。
slf4j是目前市面上最流行的日志门面。现在的项目中,基本上都是使用slf4j作为我们的日志系统。
两大功能:
1.日志框架的绑定
2.日志框架的桥接
使用slf4j的日志绑定流程:
1.添加slf4j-api的依赖
2.使用slf4j的API在项目中进行统一的日志记录
3.绑定具体的日志实现框架
(1).绑定已经实现了slf4j的日志框架,直接添加对应依赖
(2).绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖
4.slf4j有且仅有一个日志实现框架的绑定
(如果出现多个默认使用第一个依赖日志实现)
slf4j的日志桥接:
slf4j-log4j12.jar适配器是使用log4j实现
log4j-over-slf4j.jar桥接器是不使用log4j实现,交给slf4j门面去实现
适配器和桥接器不能同时出现,否则会导致死循环。
2.2 slf4j日志门面绑定代码
slf4j接口门面 + log4j具体实现
slf4j接口门面 + logback具体实现
2.2.1 maven依赖
<!--slf4j-api依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.26</version>
</dependency><!--log4j适配器 slf4j使用log4j需要适配器-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version>
</dependency><!--log4j依赖-->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency><!--logback依赖-->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
2.2.2 Slf4jTest.java
package com.tangguanlin.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*** 说明:slf4j的使用 * slf4j门面 + log4j具体实现* slf4j门面 + logback具体实现* 作者:汤观林* 日期:2021年06月12日 16时*/
public class Slf4jTest {//生成日志对象public static final Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);public static void main(String[] args) {//日志输出LOGGER.error("error");LOGGER.warn("waring");LOGGER.info("info"); //默认级别LOGGER.debug("debug");LOGGER.trace("trace");//使用占位符输出日志信息String name ="zhangsan";int age = 14;LOGGER.info("用户:{},{}",name,age);try{int i = 1/0;}catch(Exception e){e.printStackTrace();LOGGER.warn("出现异常:"+e);}}
}
2.2.3 运行结果
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/01program_soft/01install_before/maven/localRepository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/01program_soft/01install_before/maven/localRepository/org/apache/activemq/activemq-all/5.15.8/activemq-all-5.15.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
[ERROR] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 18 [main] error
[WARN ] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 19 [main] waring
[INFO ] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 20 [main] info
[DEBUG] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 21 [main] debug
[TRACE] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 22 [main] trace
[INFO ] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 27 [main] 用户:zhangsan,14
java.lang.ArithmeticException: / by zeroat com.tangguanlin.log.Slf4jTest.main(Slf4jTest.java:30)
[WARN ] 2021-12-17 15:25:22 com.tangguanlin.log.Slf4jTest main 33 [main] 出现异常:java.lang.ArithmeticException: / by zero
2.3 slf4j日志门面桥接代码
老项目用log4j实现
2.3.1 maven依赖
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
2.3.2 Log4jOverTest.java
package com.tangguanlin.log;
import org.apache.log4j.Logger;
/*** 说明:log4j-over-slf4j.jar桥接器的使用* 作者:汤观林* 日期:2021年06月12日 17时*/
public class Log4jOverTest {public static final Logger LOGGER = Logger.getLogger(Log4jOverTest.class);public static void main(String[] args) {LOGGER.info("log4j info");System.out.println(11);}
}
2.3.3 去掉log4j依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.3.4 加入门面框架依赖
<!--slf4j-api-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.26</version>
</dependency><!--logback日志实现-->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency><!--log4j的桥接器 原来的老日志实现代码不用动-->
<dependency><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>1.7.25</version>
</dependency>
2.3.5 Log4jOverTest.java
package com.tangguanlin.log;
import org.apache.log4j.Logger;
/*** 说明:log4j-over-slf4j.jar桥接器的使用* 作者:汤观林* 日期:2021年06月12日 17时*/
public class Log4jOverTest {public static final Logger LOGGER = Logger.getLogger(Log4jOverTest.class);public static void main(String[] args) {LOGGER.info("log4j info");System.out.println(11);}
}
2.3.6 运行结果
2021-28-17 15:28:39 [INFO ]0 com.tangguanlin.log.Log4jOverTest.main(Log4jOverTest.java:14) log4j info
11
2.4 SpringBoot中slf4j日志配置
待补充
2.5 SpringBoot中slf4j日志代码
待补充
3 logback
3.1 理论知识
logback — 也是log4j的创始人设计出来的,性能比log4j要好。
Logback主要分为三个模块:
。logback-core:其他两个模块的基础模块
。logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API
。logback-access:访问模块与servlet容器集成提供通过Http来访问日志的功能
logback配置
。logback.grocvy
。logback-test.xml
。logback.xml
如果均不存在会采用默认配置
1.logback组件之间的关系
1.Logger:日志的记录器,把它关联到应用的对应context上后,用于存放日志对象,
也可以定义日志类型,级别
2.Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等
3.Layout:负责时间转换成字符串,格式化的日志信息的输出。
在logback中,Layout对象被封装在encoder中。
日志输出格式: [%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L [%thread] %m%n%-5level 日志级别%d{yyyy-MM-dd HH:mm:ss} 日期格式%c 为类的完整名称%M 为method%L 为行号%thread 为线程名称%m或者%msg 为信息%n 换行
3.2 logback-access 的使用
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。
我们可以使用logback-access模块来替换tomcat的访问日志。
1.将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下
2.修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加:
<Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
3.logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml
logback-access.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!-- always a good activate OnConsoleStatusListener --> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/> <property name="LOG_DIR" value="${catalina.base}/logs"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern> </rollingPolicy><encoder> <!-- 访问日志的格式 --> <pattern>combined</pattern> </encoder> </appender> <appender-ref ref="FILE"/>
</configuration>
4.官方配置: https://logback.qos.ch/access.html#configuration
3.3 代码实现
3.3.1 maven依赖
<!--slf4j日志门面-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.26</version>
</dependency><!--logback日志实现-->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
3.3.2 logback.xml
logback.xml 配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration><!--配置集中管理属性我们可以直接改属性的 value 值格式: ${name}--><property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L [%thread] %m%n"></property><!--定义日志文件保存路径属性--><property name="log_dir" value="/logs"></property><!--控制台日志输出的appender--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!--控制台输出流对象 默认system.out改为system.err--><target>System.err</target><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${pattern}</pattern></encoder></appender><!--日志文件输出的 appender--><appender name="file" class="ch.qos.logback.core.FileAppender"><!--日志文件保存路径--><file>${log_dir}/logbak.log</file><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${pattern}</pattern></encoder></appender><!--日志拆分和归档压缩的 appender 对象--><appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志文件保存路径--><file>${log_dir}/roll_logback.log</file><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${pattern}</pattern></encoder><!--指定拆分规则--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--按照时间和压缩格式声明拆分的文件名--><fileNamePattern>${log_dir}/roll_logback.%d{yyyy-MM-dd-HH-mm-ss}.log%i.gz</fileNamePattern><!--按照文件大小拆分--><maxFileSize>9012MB</maxFileSize></rollingPolicy><!--日志级别过滤器--><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--日志过滤规则--><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--异步日志--><appender name="async" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="rollFile"></appender-ref></appender><!--root logger配置--><root level="All"> <!--日志级别--><appender-ref ref="console"></appender-ref><appender-ref ref="file"></appender-ref><appender-ref ref="rollFile"></appender-ref></root>
</configuration>
3.3.3 LogbackTest.java
public static final Logger LOGGER = LoggerFactory.getLogger(LogbackTest.class);public static void main(String[] args) {for(int i=0;i<10;i++){LOGGER.error("erroe");LOGGER.warn("wring");LOGGER.info("info"); LOGGER.debug("debug");LOGGER.trace("trace");}}
}
3.3.4 运行结果
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/01program_soft/01install_before/maven/localRepository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/01program_soft/01install_before/maven/localRepository/org/apache/activemq/activemq-all/5.15.8/activemq-all-5.15.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder][ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace[ERROR] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 17 [main] erroe
[WARN ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 18 [main] wring
[INFO ] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 19 [main] info
[DEBUG] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 20 [main] debug
[TRACE] 2021-12-17 15:32:19 com.tangguanlin.log.LogbackTest main 21 [main] trace
4 log4j2
4.1 理论知识
待补充
4.2 实现代码
待补充
Java日志框架学习笔记相关推荐
- Java日志框架学习--JUL和Log4j--上
Java日志框架学习--JUL和Log4j--上 引言 日志框架 市面流行的日志框架 日志门面和日志框架的区别 JUL JUL简介 JUL组件介绍 实际使用 Logger之间的父子关系 默认配置文件位 ...
- Java⽇志框架学习笔记
目录 1.⽇志概述 1.1 ⽇志是⽤来做什么的? 1.2 为什么要⽤到⽇志框架? 1.3 现有的⽇志框架有哪些? 1.4 ⽇志⻔⾯技术 2.logback 2.1 logback介绍 2.1.1 lo ...
- log4j linux如果日志目录不存在,Java日志库学习笔记
(未完成,待修改) 一.安装Log4j log4j的库文件可以在官方网站下载: 二.log4j.properties的目录搜索规则 在src/目录下创建一个log4j.properties文件,即LC ...
- java集合框架学习笔记
思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对象本身 长度不固定 只能存放对象 二.collection接口 collection的使用 增 ...
- Zlog日志框架学习笔记
一. 1.在验证程序时,往往需要使用printf输出现在的状态,以达到检测当前程序的作用 printf("app start\n"); 2.在printf使用较多时,会出现来回注释 ...
- 学习Java日志框架之——搞懂日志门面(JCL+SLF4J)
文章目录 系列文章目录 一.什么是日志门面 1.门面模式(外观模式) 2.日志门面 二.了解JCL 1.JCL组件结构 2.JCL案例 (1)JCL默认实现 (2)导入log4j测试原有程序 三.SL ...
- 学习Java日志框架之——搞懂JUL(java.util.logging)
文章目录 系列文章目录 一.JUL简介 二.JUL组件介绍 三.代码实例 1.入门案例 2.日志级别 (1)默认日志级别源码分析 3.自定义日志级别 4.将日志输出到文件中 5.Logger的父子关系 ...
- 最牛逼的 Java 日志框架,还不学习。。。
最牛逼的 Java 日志框架,性能无敌,横扫所有对手- Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了.不过logback最近一个稳定版本还停留在 20 ...
- java前端nui_spring mvc 及普元nui前端框架学习笔记
spring mvc 及普元nui前端框架学习笔记 页面传值 一.同一页面 直接通过$J.getbyName("id").setValue(id); Set值即可 二.跳转页面(b ...
最新文章
- springmvc 将大写转小写_Excel – 快速设置大小写中文数字顺序编号,拖动自动增序...
- 从CCF的改革看中国科技社团的改革
- python 装饰器 参数-如何将额外的参数传递给Python装饰器?
- .NET,你忘记了么?(二)——使用using清理非托管资源
- 无线服务器软件,关于无线802.1x结合各服务器软件的配置总结
- AOP 中必须明白的概念-切面(Aspect)
- .NET Core 中生成验证码
- [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]
- 2015电大c语言,2015电大本科C语言程序设计A试题汇总.doc
- 怎樣制作线段动画_OPPO又开发布会!这两个PPT动画太炫了,荣获网友清一色好评...
- php 获取key的位置,PHP获取当前所在目录位置的方法
- ajax异步提交 java_jquery ajax异步上传
- 假如我们等不到对的人,就趁孤单让自己优秀起来。单身是最好的升值期
- smarty php5.5,smarty如何完美兼容php5.5和preg_replace_callback如何替换preg_r
- pcie协议_如何通过PCIE协议实现FPGA 配置?详情请戳这里!
- 51.la申请免费统计代码
- 00003 不思议迷宫.0001:解密Lua脚本
- 白天建筑师,晚上CG艺术家,他将建筑的华丽发挥极致
- [工具]Snipaste 屏幕截图软件超级利器 - 花3年精心打造的极致截图贴图/编辑/标注工具
- springboot+Vue开发的 ktv预定管理系统
热门文章
- ssm毕设项目垃圾回收系统j16l0(java+VUE+Mybatis+Maven+Mysql+sprnig)
- 文献管理软件Mendeley的优缺点以及下载安装
- 因聚而变——“聚·变”
- 香港剑指全球虚拟资产桥头堡 多位资深专家重磅解读!
- 用Arduino ide读取ADXL355加速度计的XYZ轴数据
- Linux 符号命令及符号问题
- 大学生求职 一些靠谱的求职网站
- java表格控件布局_Swing布局之表格布局(GridLayout)
- 基于springboot+vue的便利店库存管理系统
- 麦包包也看到了个性化推荐:数据驱动销售——个性化推荐引擎