“JCL 入门介绍”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“https://www.bilibili.com/video/BV1iJ411H74S?p=18”的新页面)
 
 
(未显示同一用户的10个中间版本)
第1行: 第1行:
 
https://www.bilibili.com/video/BV1iJ411H74S?p=18
 
https://www.bilibili.com/video/BV1iJ411H74S?p=18
 +
 +
'''Apache Commons Logging''' (previously known as '''Jakarta Commons Logging''' or '''JCL''') is a Java-based logging utility and a programming model for logging and for other toolkits.
 +
 +
全称为 Jakarta Commons Logging(现在叫 The Apache Commons Logging),是 Apache 提供的一个通用日志 API
 +
 +
它是为“所有的 Java 日志实现”提供一个统一的接口,它自身也提供一个日志实现,但是功能非常弱(SimpleLog)。
 +
 +
所以一般不会单独使用它。它允许开发人员使用不同的具体日志实现工具:Log4j,JDK 自带的日志(JUL)
 +
 +
JCL 有两个基本的抽象类:Log(基本记录器)和 LogFactory(负责创建 Log 实例)。
 +
[[文件:JCL 日志系统图示2.png|无|缩略图|568x568像素]]
 +
 +
=== 入门示例 使用 JUL 日志实现 ===
 +
 +
==== pom.xml ====
 +
<syntaxhighlight lang="xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<project xmlns="http://maven.apache.org/POM/4.0.0"
 +
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +
    <modelVersion>4.0.0</modelVersion>
 +
 +
    <groupId>io.github.jihch</groupId>
 +
    <artifactId>jcl-demo</artifactId>
 +
    <version>1.0-SNAPSHOT</version>
 +
 +
    <properties>
 +
        <maven.compiler.source>8</maven.compiler.source>
 +
        <maven.compiler.target>8</maven.compiler.target>
 +
    </properties>
 +
 +
    <dependencies>
 +
        <dependency>
 +
            <groupId>commons-logging</groupId>
 +
            <artifactId>commons-logging</artifactId>
 +
            <version>1.2</version>
 +
        </dependency>
 +
        <dependency>
 +
            <groupId>junit</groupId>
 +
            <artifactId>junit</artifactId>
 +
            <version>4.12</version>
 +
        </dependency>
 +
    </dependencies>
 +
 +
</project>
 +
</syntaxhighlight>
 +
 +
==== JCLTest.java ====
 +
<syntaxhighlight lang="java">
 +
import org.apache.commons.logging.Log;
 +
import org.apache.commons.logging.LogFactory;
 +
import org.junit.Test;
 +
 +
public class JCLTest {
 +
 +
    @Test
 +
    public void testQuick() {
 +
        // 创建日志对象
 +
        Log log = LogFactory.getLog(JCLTest.class);
 +
 +
        //日志记录输出
 +
        log.info("hello JCL");
 +
    }
 +
 +
}
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
二月 26, 2023 11:18:44 上午 io.github.jihch.JCLTest testQuick
 +
信息: hello JCL
 +
</syntaxhighlight>JCL 默认使用 JUL 的日志实现
 +
 +
 +
 +
 +
=== 入门示例 使用 log4j日志实现 ===
 +
 +
==== pom.xml ====
 +
<syntaxhighlight lang="xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<project xmlns="http://maven.apache.org/POM/4.0.0"
 +
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +
    <modelVersion>4.0.0</modelVersion>
 +
 +
    <groupId>io.github.jihch</groupId>
 +
    <artifactId>jcl-demo</artifactId>
 +
    <version>1.0-SNAPSHOT</version>
 +
 +
    <properties>
 +
        <maven.compiler.source>8</maven.compiler.source>
 +
        <maven.compiler.target>8</maven.compiler.target>
 +
    </properties>
 +
 +
    <dependencies>
 +
        <dependency>
 +
            <groupId>commons-logging</groupId>
 +
            <artifactId>commons-logging</artifactId>
 +
            <version>1.2</version>
 +
        </dependency>
 +
        <dependency>
 +
            <groupId>log4j</groupId>
 +
            <artifactId>log4j</artifactId>
 +
            <version>1.2.17</version>
 +
        </dependency>
 +
        <dependency>
 +
            <groupId>junit</groupId>
 +
            <artifactId>junit</artifactId>
 +
            <version>4.12</version>
 +
        </dependency>
 +
    </dependencies>
 +
 +
</project>
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
log4j:WARN No appenders could be found for logger (io.github.jihch.JCLTest).
 +
log4j:WARN Please initialize the log4j system properly.
 +
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
 +
</syntaxhighlight>
 +
 +
==== 说明 ====
 +
JCL 使用日志实现只需要再引入 log4j 的依赖<syntaxhighlight lang="xml">
 +
        <dependency>
 +
            <groupId>log4j</groupId>
 +
            <artifactId>log4j</artifactId>
 +
            <version>1.2.17</version>
 +
        </dependency>
 +
</syntaxhighlight>代码不用变
 +
 +
==== 添加 log4j.properties 再测试 ====
 +
<syntaxhighlight lang="properties">
 +
# 指定 RootLogger 顶级父元素默认配置信息
 +
# 指定日志级别=trace,使用的 appender 为 console
 +
log4j.rootLogger = trace,console
 +
 +
# 指定控制台日志输出的 appender
 +
log4j.appender.console = org.apache.log4j.ConsoleAppender
 +
# 指定消息格式 layout
 +
log4j.appender.console.layout = org.apache.log4j.PatternLayout
 +
# 指定消息格式的内容
 +
log4j.appender.console.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
[INFO      ]0 io.github.jihch.JCLTest.testQuick(JCLTest.java:15) 2023-02-26 11:34:28.189 hello JCL
 +
</syntaxhighlight>
 +
 +
 +
 +
 +
 +
=== 为什么要使用日志门面? ===
 +
 +
# 面向接口开发,不再依赖具体的实现类。减少代码的耦合
 +
# 项目通过导入不同的日志实现类,可以灵活地切换日志框架
 +
# 统一 API,方便开发者学习和使用
 +
# 统一配置便于项目日志的管理

2023年2月26日 (日) 04:50的最新版本

https://www.bilibili.com/video/BV1iJ411H74S?p=18

Apache Commons Logging (previously known as Jakarta Commons Logging or JCL) is a Java-based logging utility and a programming model for logging and for other toolkits.

全称为 Jakarta Commons Logging(现在叫 The Apache Commons Logging),是 Apache 提供的一个通用日志 API

它是为“所有的 Java 日志实现”提供一个统一的接口,它自身也提供一个日志实现,但是功能非常弱(SimpleLog)。

所以一般不会单独使用它。它允许开发人员使用不同的具体日志实现工具:Log4j,JDK 自带的日志(JUL)

JCL 有两个基本的抽象类:Log(基本记录器)和 LogFactory(负责创建 Log 实例)。

JCL 日志系统图示2.png

入门示例 使用 JUL 日志实现

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.jihch</groupId>
    <artifactId>jcl-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>

JCLTest.java

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;

public class JCLTest {

    @Test
    public void testQuick() {
        // 创建日志对象
        Log log = LogFactory.getLog(JCLTest.class);

        //日志记录输出
        log.info("hello JCL");
    }

}
二月 26, 2023 11:18:44 上午 io.github.jihch.JCLTest testQuick
信息: hello JCL

JCL 默认使用 JUL 的日志实现



入门示例 使用 log4j日志实现

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.jihch</groupId>
    <artifactId>jcl-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>
log4j:WARN No appenders could be found for logger (io.github.jihch.JCLTest).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

说明

JCL 使用日志实现只需要再引入 log4j 的依赖

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

代码不用变

添加 log4j.properties 再测试

# 指定 RootLogger 顶级父元素默认配置信息
# 指定日志级别=trace,使用的 appender 为 console
log4j.rootLogger = trace,console

# 指定控制台日志输出的 appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 指定消息格式 layout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.console.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
[INFO      ]0 io.github.jihch.JCLTest.testQuick(JCLTest.java:15) 2023-02-26 11:34:28.189 hello JCL



为什么要使用日志门面?

  1. 面向接口开发,不再依赖具体的实现类。减少代码的耦合
  2. 项目通过导入不同的日志实现类,可以灵活地切换日志框架
  3. 统一 API,方便开发者学习和使用
  4. 统一配置便于项目日志的管理