ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java日志框架学习笔记

2021-12-17 15:59:29  阅读:132  来源: 互联网

标签:Java log 17 笔记 tangguanlin 日志 main log4j


                                 Java日志框架

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 zero
	at 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,log,17,笔记,tangguanlin,日志,main,log4j
来源: https://blog.csdn.net/tangguanlin2008/article/details/121998294

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有