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日志框架学习笔记相关推荐

  1. Java日志框架学习--JUL和Log4j--上

    Java日志框架学习--JUL和Log4j--上 引言 日志框架 市面流行的日志框架 日志门面和日志框架的区别 JUL JUL简介 JUL组件介绍 实际使用 Logger之间的父子关系 默认配置文件位 ...

  2. Java⽇志框架学习笔记

    目录 1.⽇志概述 1.1 ⽇志是⽤来做什么的? 1.2 为什么要⽤到⽇志框架? 1.3 现有的⽇志框架有哪些? 1.4 ⽇志⻔⾯技术 2.logback 2.1 logback介绍 2.1.1 lo ...

  3. log4j linux如果日志目录不存在,Java日志库学习笔记

    (未完成,待修改) 一.安装Log4j log4j的库文件可以在官方网站下载: 二.log4j.properties的目录搜索规则 在src/目录下创建一个log4j.properties文件,即LC ...

  4. java集合框架学习笔记

    思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对象本身 长度不固定 只能存放对象 二.collection接口 collection的使用 增 ...

  5. Zlog日志框架学习笔记

    一. 1.在验证程序时,往往需要使用printf输出现在的状态,以达到检测当前程序的作用 printf("app start\n"); 2.在printf使用较多时,会出现来回注释 ...

  6. 学习Java日志框架之——搞懂日志门面(JCL+SLF4J)

    文章目录 系列文章目录 一.什么是日志门面 1.门面模式(外观模式) 2.日志门面 二.了解JCL 1.JCL组件结构 2.JCL案例 (1)JCL默认实现 (2)导入log4j测试原有程序 三.SL ...

  7. 学习Java日志框架之——搞懂JUL(java.util.logging)

    文章目录 系列文章目录 一.JUL简介 二.JUL组件介绍 三.代码实例 1.入门案例 2.日志级别 (1)默认日志级别源码分析 3.自定义日志级别 4.将日志输出到文件中 5.Logger的父子关系 ...

  8. 最牛逼的 Java 日志框架,还不学习。。。

    最牛逼的 Java 日志框架,性能无敌,横扫所有对手- Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了.不过logback最近一个稳定版本还停留在 20 ...

  9. java前端nui_spring mvc 及普元nui前端框架学习笔记

    spring mvc 及普元nui前端框架学习笔记 页面传值 一.同一页面 直接通过$J.getbyName("id").setValue(id); Set值即可 二.跳转页面(b ...

最新文章

  1. springmvc 将大写转小写_Excel – 快速设置大小写中文数字顺序编号,拖动自动增序...
  2. 从CCF的改革看中国科技社团的改革
  3. python 装饰器 参数-如何将额外的参数传递给Python装饰器?
  4. .NET,你忘记了么?(二)——使用using清理非托管资源
  5. 无线服务器软件,关于无线802.1x结合各服务器软件的配置总结
  6. AOP 中必须明白的概念-切面(Aspect)
  7. .NET Core 中生成验证码
  8. [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]
  9. 2015电大c语言,2015电大本科C语言程序设计A试题汇总.doc
  10. 怎樣制作线段动画_OPPO又开发布会!这两个PPT动画太炫了,荣获网友清一色好评...
  11. php 获取key的位置,PHP获取当前所在目录位置的方法
  12. ajax异步提交 java_jquery ajax异步上传
  13. 假如我们等不到对的人,就趁孤单让自己优秀起来。单身是最好的升值期
  14. smarty php5.5,smarty如何完美兼容php5.5和preg_replace_callback如何替换preg_r
  15. pcie协议_如何通过PCIE协议实现FPGA 配置?详情请戳这里!
  16. 51.la申请免费统计代码
  17. 00003 不思议迷宫.0001:解密Lua脚本
  18. 白天建筑师,晚上CG艺术家,他将建筑的华丽发挥极致
  19. [工具]Snipaste 屏幕截图软件超级利器 - 花3年精心打造的极致截图贴图/编辑/标注工具
  20. springboot+Vue开发的 ktv预定管理系统

热门文章

  1. ssm毕设项目垃圾回收系统j16l0(java+VUE+Mybatis+Maven+Mysql+sprnig)
  2. 文献管理软件Mendeley的优缺点以及下载安装
  3. 因聚而变——“聚·变”
  4. 香港剑指全球虚拟资产桥头堡 多位资深专家重磅解读!
  5. 用Arduino ide读取ADXL355加速度计的XYZ轴数据
  6. Linux 符号命令及符号问题
  7. 大学生求职 一些靠谱的求职网站
  8. java表格控件布局_Swing布局之表格布局(GridLayout)
  9. 基于springboot+vue的便利店库存管理系统
  10. 麦包包也看到了个性化推荐:数据驱动销售——个性化推荐引擎