`
SunnyYoona
  • 浏览: 386961 次
社区版块
存档分类
最新评论

[Java开发之路](16)学习log4j日志

 
阅读更多
1. 新建一个Java工程,导入Jar包(log4j-1.2.17.jar)
1.png


Jar包下载地址:点击打开链接

2. 配置文件:创建并设置log4j.properties
# 设置
log4j.rootLogger = debug,stdout,D,E
# 输出信息到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
# 输出格式
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss, SSS} method:%l%n%m%n
# 输出DEBUG 级别以上的日志到D://WorkSpace/logs/debug.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://WorkSpace/logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
# 打印DEBUG信息格式
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# 输出ERROR 级别以上的日志到=D://WorkSpace/logs/error.log
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://WorkSpace/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
# 打印ERROR信息格式
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

3. 使用日志
package com.qunar.sjf;
import org.apache.log4j.Logger;
public class ImportMost {
private static Logger logger = Logger.getLogger(ImportMost.class);
public static void main(String[] args) {
// debug级别的信息
logger.debug("This is a debug");
// info级别的信息
logger.info("This is a info");
// error级别的信息
logger.error("This is a error");
}
}

4. 输出信息

4.1 控制台输出信息


[DEBUG]2016-01-1320:55:05,622method:com.qunar.sjf.ImportMost.main(ImportMost.java:10)
Thisisadebug
[INFO]2016-01-1320:55:05,627method:com.qunar.sjf.ImportMost.main(ImportMost.java:12)
Thisisainfo
[ERROR]2016-01-1320:55:05,628method:com.qunar.sjf.ImportMost.main(ImportMost.java:14)
Thisisaerror

4.2 后台日志

error.log:

2016-01-13 20:55:05 [ main:6 ] - [ ERROR ] This is a error

debug.log:

2016-01-13 20:55:05 [ main:0 ] - [ DEBUG ] This is a debug
2016-01-13 20:55:05 [ main:5 ] - [ INFO ] This is a info
2016-01-13 20:55:05 [ main:6 ] - [ ERROR ] This is a error

5. Logger方法

Logger类提供了多种方法来处理日志活动。 Logger类不允许实例化一个新实例,但它可以通过两个静态方法获得一个 Logger 对象:
public static Logger getRootLogger();
public static Logger getLogger(String name);
public static Logger getLogger(Class clazz);
第一个方法返回根日志记录器,第二个方法根据给定额参数name检索日志记录器,第三个方法根据给定的Class对象返回日志记录器。

Logging 方法:
我们得到了一个日志记录器之后,可以使用日志记录器的几种方法来记录消息。 Logger类有专门用于打印日志信息方法。

方法 描述
public void debug(Object message) 打印使用 Level.DEBUG 消息级别
public void error(Object message) 打印使用 Level.ERROR 消息级别
public void fatal(Object message) 打印使用 Level.FATAL 消息级别
public void info(Object message) 打印使用 Level.INFO 消息级别
public void warn(Object message) 打印使用 Level.WARN 消息级别
public void trace(Object message) 打印使用Level.TRACE消息级别

所有的级别定义在org.apache.log4j.Level类中,并且任何上述方法都可以调用如下:

6. 日志级别

org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。
级别 描述
ALL 最低级别,打开所有日志级别
DEBUG 细粒度信息事件,对应用程序调试最有用
ERROR 错误事件,可能仍然允许应用程序继续运行
FATAL 非常严重的错误事件,这可能导致应用程序中止
INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
OFF 最高级别,关闭日志记录
TRACE 细粒度比DEBUG更低的信息事件
WARN 具有潜在危害的情况

对于标准级别关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。ALL是最低级别,OFF是最高级别。
如果设置日志级别为a,则在记录日志时日志级别b可以启用,必须满足b >= a这一条件。
下面的例子明确指出如何可以过滤所有的DEBUG和INFO消息。这个程序使用记录并执行setLevel(Level.X)方法来设置所需的日志记录级别:
package com.qunar.sjf;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class ImportMost {
private static Logger logger = Logger.getLogger(ImportMost.class);
public static void main(String[] args) {
// 设置日志记录器级别
logger.setLevel(Level.WARN);
// 日志信息
logger.trace("Trace Message!");
logger.debug("Debug Message!");
logger.info("Info Message!");
logger.warn("Warn Message!");
logger.error("Error Message!");
logger.fatal("Fatal Message!");
}
}

运行结果:

[WARN]2016-01-1321:36:37,967method:com.qunar.sjf.ImportMost.main(ImportMost.java:15)
WarnMessage!
[ERROR]2016-01-1321:36:37,967method:com.qunar.sjf.ImportMost.main(ImportMost.java:16)
ErrorMessage!
[FATAL]2016-01-1321:36:37,967method:com.qunar.sjf.ImportMost.main(ImportMost.java:17)
FatalMessage!

7. 日志格式化

Apache log4j提供了各种布局对象,每一个对象都可以根据各种布局格式记录数据。在层次结构中的顶级类是抽象类是org.apache.log4j.Layout,是所有其他布局类的基类。由于是抽象类,我们分不能直接使用Layout,而是使用Layout的子类。

(1)DateLayout
(2)HTMLLayout
(3)PatternLayout
(4)SimpleLayout
(5)XMLLayout

方法 描述
format() 将LoggingEvent类中的信息格式化成一行日志。
getContentType() 定义日志文件的内容类型,目前在Log4J中只是在SMTPAppender中用到,用于设置发送邮件的邮件内容类型。而Layout本身也只有HTMLLayout实现了它。
getHeader() 定义日志文件的头,目前在Log4J中只是在HTMLLayout中实现了它。
getFooter() 定义日志文件的尾,目前在Log4J中只是HTMLLayout中实现了它。
ignoresThrowable() 定义当前layout是否处理异常类型。在Log4J中,不支持处理异常类型的有:TTCLayout、PatternLayout、SimpleLayout。

7.1HTMLLayout

如果想生成一个HTML格式的日志文件,可以使用HTMLLayout 布局格式。HTMLLayout类扩展抽象org.apache.log4j.Layout类,并覆盖其基类的 format()方法来提供HTML样式格式。

这提供了以下信息显示:

  • 生成特定的日志事件之前,从应用程序的开始所经过的时间(Time)
  • 调用该记录请求的线程的名称(Thread)
  • 与此记录请求相关联的级别(Level)
  • 日志记录器(Logger)和记录消息的名称(Message)
  • 可选程序文件的位置信息,并从其中记录被调用的行号(Category 和 Line)

方法 描述
void setContentType(String) 设置 HTML 的内容类型,默认为 text/html
void setLocationInfo(String) 设置日志事件的位置信息(所在目录,所在行数等)。
voidsetTitle(String) 设置 HTML 文件的标题,默认为 Log4j Log Messages。

实例:
package com.qunar.log;
import org.apache.log4j.Logger;
public class HtmlLayoutDemo {
// 日志记录器
private static Logger logger = Logger.getLogger(HtmlLayoutDemo.class);
public static void main(String[] args) {
logger.debug("this is an debug message");
logger.info("this is an info message");
}
}
配置文件:
# Define the root logger with appender file
log = D://WorkSpace/logs/
log4j.rootLogger = debug, FILE
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}HtmlLayoutDemo.html
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.Title=HTML Layout Demo
log4j.appender.FILE.layout.LocationInfo=true

日志输出:



7.2PatternLayout

如果您希望基于某种模式生成特定格式的日志信息,可使用 org.apache.Log4j.PatternLayout 格式化您的日志信息。PatternLayout 继承自抽象类 org.apache.Log4j.Layout,覆盖了其 format() 方法,通过提供的模式,来格式化日志信息。

设置转换模式,默认为%r [%t] %p %c %x - %m%n

下面的表格解释了上面模式中用到的字符,以及所有定制模式时能用到的字符:
模式字符 含义
c 为输出的日志事件分类,比如对于分类 "a.b.c",模式 %c{2} 会输出 "b.c" 。
C 输出发起记录日志请求的类的全名。比如对于类 "org.apache.xyz.SomeClass",模式 %C{1} 会输出 "SomeClass"。
d 输出记录日志的日期,比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}。
F 输出文件名。
l 输出生成日志的调用者的位置信息。
L 输出发起日志请求的行号。
m 输出和日志事件关联的,由应用提供的信息。
M 输出发起日志请求的方法名。
n 输出平台相关的换行符。
p 输出日志事件的优先级。
r 输出从构建布局到生成日志事件所花费的时间,以毫秒为单位。
t 输出生成日志事件的线程名。
x 输出和生成日志事件线程相关的 NDC (嵌套诊断上下文)。
X 该字符后跟 MDC 键,比如 X{clientIP} 会输出保存在 MDC 中键 clientIP 对应的值。
% 百分号, %% 会输出一个 %。

缺省情况下,信息保持原样输出。但是借助格式修饰符的帮助,就可调整最小列宽、最大列宽以及对齐。

格式修饰符 左对齐 最小宽度 最大宽度 含义
%20c 20 如果列名少于 20 个字符,左边使用空格补齐(右对齐)
%-20c 20 如果列名少于 20 个字符,右边使用空格补齐(左对齐)。
%.30c 不适用 30 如果列名长于 30 个字符,从开头去除。
%20.30c 20 30 如果列名少于 20 个字符,左边使用空格补齐(右对齐);
如果列名长于 30 个字符,从开头去除。
%-20.30c 20 30 如果列名少于 20 个字符,右边使用空格补齐(左对齐);
如果列名长于 30 个字符,从开头去除。

实例:

package com.qunar.log;
import org.apache.log4j.Logger;
public class PatternLayoutDemo {
// 日志记录器
private static Logger logger = Logger.getLogger(PatternLayoutDemo.class);
public static void main(String[] args) {
logger.debug("this is an debug message");
logger.info("this is an info message");
}
}

配置文件:
log4j.rootLogger = DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
# 日志存储位置
log4j.appender.FILE.File=D:/WorkSpace/logs/log.out
# 追加方式写入文件
log4j.appender.FILE.Append=true
# 日志布局方式
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
# 日志格式
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd}-%t-%x-%-p-%-10c-%n%m%n

日志输出 log.out:
2016-01-16-main--DEBUG-com.qunar.log.PatternLayoutDemo-
this is an debug message
2016-01-16-main--INFO-com.qunar.log.PatternLayoutDemo-
this is an info message

8. 日志写到文件

8.1FileAppender

日志记录到文件中,主要用到FileAppender类。FileAppender继承自WriterAppender。

FileAppender配置:
属性 描述
ImmediateFlush 默认设置为true,表示所有消息都会被立即输出,设为false则不输出
Encoding 编码格式。它可以使用任何字符编码。默认情况下是特定于平台的编码方案
Threshold 写入文件的日志级别。
Filename 日志文件名称。
Append 默认设置为true,以追加的方式把日志写入文件。
BufferedIO 默认设置为false,表示是否需要写入缓存启用。
BufferSize 默认设置为8KB,如果 bufferedI/O 启用,表示缓冲区的大小,

实例:

package com.qunar.log;
import org.apache.log4j.Logger;
public class PatternLayoutDemo {
// 日志记录器
private static Logger logger = Logger.getLogger(PatternLayoutDemo.class);
public static void main(String[] args) {
logger.debug("this is an debug message");
logger.info("this is an info message");
}
}

配置文件:
log4j.rootLogger = DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
# 日志存储位置
log4j.appender.FILE.File=D:/WorkSpace/logs/log.out
# 表示所有消息都会被立即输出,设为false则不输出
log4j.appender.FILE.ImmediateFlush=true
# 写入的日志级别
log4j.appender.FILE.Threshold=info
# 追加方式写入文件
log4j.appender.FILE.Append=true
# 日志布局方式
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
# 日志格式
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd}-%t-%x-%-p-%-10c-%n%m%n

日志输出(注意:只有输出info信息 与配置文件设置有关):
2016-01-16-main--INFO-com.qunar.log.PatternLayoutDemo-
this is an info message

8.2RollingFileAppender

当想要写日志信息转化多个文件要求一样,例如,如果文件大小达到一定的阈值等。
写日志记录信息分成多个文件,必须扩展FileAppender类,并继承其所有属性org.apache.log4j.RollingFileAppender类。有以下除了已如上所述为 FileAppender 可配置参数:
属性 描述
maxFileSize 默认值是10MB,文件的回滚临界尺寸。
maxBackupIndex 默认值是1,创建的备份文件的数量。

实例:
package com.qunar.log;
import org.apache.log4j.Logger;
public class PatternLayoutDemo {
// 日志记录器
private static Logger logger = Logger.getLogger(PatternLayoutDemo.class);
public static void main(String[] args) {
for(int i = 0;i < 15;++i){
logger.debug("this is an debug message:" + i);
}//for
}
}

配置文件:
log4j.rootLogger = DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
# 日志存储位置
log4j.appender.FILE.File=D:/WorkSpace/logs/log.out
# 日志回滚最大值
log4j.appender.FILE.MaxFileSize=1KB
# 日志文件备份个数
log4j.appender.FILE.MaxBackupIndex=1
# 日志布局方式
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
# 日志格式
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd}-%t-%x-%-p-%-10c-%n%m%n

此示例配置说明每个日志文件的最大值为1KB。最开始创建日志文件log.out,当超过日志文件最大值时,log.out.1新的日志文件将被创建。同时,log.out中的日志转移到log.out.1中(备份文件设置为1)。log.out日志文件永远写入最新日志。

日志输出:









8.3DailyRollingFileAppender

如果想它能够按一定的时间频率滚动日志记录文件,以保持日志记录信息的良好记录,就必须它扩展FileAppender类,并继承其所有属性useorg.apache.log4j.DailyRollingFileAppender类。

在DailyRollingFileAppender中可以指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小时)和minutely(每分钟)六个频度,这是通过为 DatePattern选项赋予不同的值来完成的。DatePattern选项的有效值为:

DatePattern属性 描述
'.'yyyy-MM 对应monthly(每月)
'.'yyyy-ww 对应weekly(每周)
'.'yyyy-MM-dd 对应daily(每天)
'.'yyyy-MM-dd-a 对应half-daily(每半天)
'.'yyyy-MM-dd-HH 对应hourly(每小时)
'.'yyyy-MM-dd-HH-mm 对应minutely(每分钟)

DatePattern中不用处理的文字要放到单引号(')中,如上面的(.)。如果您对此有疑问可以查阅SimpleDateFormat的文档。DailyRollingFileAppender中使用这个类来处理DatePattern。

日志文件输出结果:


9. 日志输出到数据库中

log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库。
属性 含义
driver 设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcOdbcDriver
url 设置JDBC URL
layout 设置要使用的布局。默认布局org.apache.log4j.PatternLayout
user 数据库用户名
password 数据库密码
sql 指定SQL语句在每次记录事件发生的时间执行。这可能是INSERT,UPDATE或DELETE
bufferSize 设置缓冲区的大小。默认大小为1

数据库设置:
创建存储日志的表:
CREATE TABLE LOGS
(ID VARCHAR(20) NOT NULL,
TIME DATE NOT NULL,
LOGGER VARCHAR(50) NOT NULL,
LEVEL VARCHAR(10) NOT NULL,
MESSAGE VARCHAR(1000) NOT NULL
);
2.png

日志配置文件:
log4j.rootLogger = DEBUG, DB
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
# url链接
log4j.appender.DB.URL=jdbc:mysql://localhost/test
# 驱动
log4j.appender.DB.driver=com.mysql.jdbc.Driver
# 用户名
log4j.appender.DB.user=root
# 密码
log4j.appender.DB.password=root
# 日志插入数据库 %d 日期 %C 类名 %p 优先级 %m 日志信息
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%t','%d{yyyy-MM-dd}','%C','%p','%m')
# 日志布局方式
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

程序文件:
package com.qunar.log;
import org.apache.log4j.Logger;
public class JDBCAppenderDemo {
// 日志记录器
private static Logger logger = Logger.getLogger(JDBCAppenderDemo.class);
public static void main(String[] args) {
for(int i = 0;i < 5;++i){
logger.debug("this is an debug message:" + i);
}//for
}
}

必须添加mysql的驱动jar包:点击打开链接

运行结果:
QQ截图20160121151223.png





分享到:
评论

相关推荐

    log4j使用与java中log4j记录日志如何写入数据库

    在Java开发中,日志记录是一项非常重要的任务,它能够帮助开发者追踪程序运行时的状态,定位错误和异常,便于后期的调试和维护。Log4j是Apache组织提供的一款开源的日志记录工具,它功能强大、灵活易用。本文将详细...

    tomcat下的log4j日志配置

    在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发效率和系统的可维护性。本文将详细介绍两种常见的 Log4j 配置方式:Tomcat 级别的统一日志管理和每个 web 应用分别配置 Log4j,...

    log4j日志报错解决办法

    在Java开发过程中,如果遇到"log4j:WARN Please initialize the log4j system properly"这样的错误提示,通常意味着Log4j没有正确配置或者找不到配置文件。 首先,错误信息"log4j:WARN No appenders could be found...

    log4j自定义日志文件名及日志输出格式

    在Java开发中,日志记录是一项至关重要的任务,它帮助我们追踪程序运行状态,定位问题,以及进行性能分析。Log4j是Apache提供的一款广泛使用的日志框架,它提供了丰富的配置选项,允许开发者灵活地控制日志输出。当...

    log4j日志配置以及配置文件详解

    **日志系统在软件开发中扮演着至关重要的角色,它能帮助开发者跟踪程序运行...同时,不断学习和探索log4j的高级特性,如异步日志、MDC(Mapped Diagnostic Context)等,可以进一步提升日志系统的实用性和可维护性。

    kafka_Java_Log4j

    为了将Log4j日志发送到Kafka,我们需要在Log4j的配置文件(通常是log4j.properties或log4j.xml)中添加`KafkaAppender`。以下是一个基本的Log4j配置示例: ```properties # 在log4j.properties中配置KafkaAppender ...

    使用log4j2实现日志数据脱敏

    Log4j2是Apache软件基金会开发的日志框架Log4j的升级版,它具有更高的性能、灵活性和可配置性。Log4j2支持多种日志记录级别(如DEBUG、INFO、WARN、ERROR),并允许通过XML、JSON、YAML或纯Java配置文件进行灵活配置...

    log4j日志包日志包

    `log4j`是由Apache软件基金会开发的一个开源的日志组件,它为Java应用程序提供了一种灵活、高效和可配置的日志记录机制。`log4j`的设计理念是将日志输出与应用程序代码分离,使得日志级别和格式可以根据需要动态调整...

    Log4j日志配置说明,Log4j日志配置说明

    ### Log4j日志配置详解 #### 一、概述 Log4j 是一个基于 Java 的开源日志记录框架,由 Apache 软件基金会维护。它允许开发人员根据等级记录日志信息,使得用户能够控制日志信息的记录级别及去向。本文将通过一份...

    log4j日志jar包.rar

    Log4j,由Apache软件基金会开发,是Java编程语言中最广泛使用的日志记录工具之一。本资源包含的日志jar包是Log4j的核心组件,适用于Java应用程序的日志记录需求。 Log4j主要由三个核心组件构成:Logger(日志器)、...

    log4J日志.zip

    在“log4j日志.zip”压缩包中,包含的可能是Log4j的配置文件(如log4j.properties或log4j.xml)。这个文件定义了日志的级别、输出位置和格式。例如: ```properties # log4j.properties 示例 log4j.rootLogger=...

    log4j日志jar包

    总结来说,Log4j日志框架以其强大的功能和灵活性,在Java开发中扮演着举足轻重的角色。理解并熟练掌握Log4j的使用,对于提升开发效率和保障系统稳定性有着重要的意义。通过合理的配置和应用,我们可以更好地管理和...

    log4j 日志打印

    《深入理解Log4j日志打印》 在Java开发领域,日志打印是不可或缺的一环,它对于系统调试、性能监控、故障排查等都起着至关重要的作用。Log4j作为Java中最常用的日志框架之一,深受广大开发者喜爱。本文将深入探讨...

    log4j日志文件乱码解决方法

    本文将详细讨论如何解决Log4j日志文件出现的乱码问题。 首先,我们要理解Log4j的工作原理。Log4j允许开发者自定义日志输出的方式,包括输出到控制台、文件、数据库等。它使用了`QuietWriter`类来写入日志,`...

    最简洁的使用log4j日志的JAVA示例

    在Java开发中,日志记录是一项至关重要的任务,它帮助开发者追踪程序运行状态,调试错误,以及记录系统事件。Log4j是Apache提供的一款强大的日志框架,它为Java应用程序提供了灵活的日志记录功能。本示例将详细介绍...

    log4j2.xml记录日志到到数据库

    在Java开发中,日志记录是一项至关重要的任务,它帮助开发者追踪程序运行状态,定位问题,以及进行性能分析。Log4j2是一款广泛使用的日志框架,它提供了灵活且高效的日志记录功能。本示例将详细介绍如何配置并使用...

    log4j中配置日志文件相对路径方法(PDF)

    `Log4j`作为一款优秀的日志管理工具,被广泛应用于Java应用程序中。然而,在不同的开发环境下,日志文件的存储路径往往需要根据实际情况进行调整,这不仅增加了维护成本,还可能导致日志丢失或错误记录。因此,采用...

    java-日志-log4j.7z

    Java日志库Log4j是Java开发者非常熟悉的工具,它为应用程序提供了强大的日志记录功能。Log4j是由Apache软件基金会开发的一个开源项目,广泛应用于各种Java应用中,包括大型企业级系统、Web应用程序和小型服务。这个...

    简单java操作log4j+Mysql存储日志信息

    在这个场景中,我们使用了SLF4J(Simple Logging Facade for Java)作为日志抽象层,它为各种日志框架提供了统一的API,而SLF4J-log4j12-1.5.0.jar和slf4j-api-1.5.0.jar正是SLF4J与Log4j之间的桥梁,使得我们可以...

    log4j.jar_java开发包

    Log4j是一款广泛使用的开源日志框架,由Apache软件基金会开发,为Java应用程序提供灵活且高效的日志处理能力。本文将深入探讨Log4j的核心概念、配置以及使用方法。 ### 1. Log4j的组成部分 Log4j主要由以下三个...

Global site tag (gtag.js) - Google Analytics