千家信息网

Log4j怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Log4j怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介Log4J 是 Apache 的一个开
千家信息网最后更新 2026年11月03日Log4j怎么用

小编给大家分享一下Log4j怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

简介

Log4J 是 Apache 的一个开源项目(官网 http://jakarta.apache.org/log4j),通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。

组成

Log4J 主要由 Loggers (日志记录器)、Appenders(输出端)和 Layout(日志格式化器)组成。其中 Loggers 控制日志的输出级别与日志是否输出;Appenders 指定日志的输出方式(输出到控制台、文件等);Layout 控制日志信息的输出格式。

日志级别

Log4J 在 org.apache.log4j.Level 类中定义了OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL七种日志级别:

  • OFF 最高日志级别,关闭左右日志

  • FATAL 将会导致应用程序退出的错误

  • ERROR 发生错误事件,但仍不影响系统的继续运行

  • WARN 警告,即潜在的错误情形

  • INFO 一般和在粗粒度级别上,强调应用程序的运行全程

  • DEBUG 一般用于细粒度级别上,对调试应用程序非常有帮助

  • ALL 最低等级,打开所有日志记录

注:一般只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG

Appender(输出端)

Appender 用来指定日志输出到哪个地方,可以同时指定日志的输出目的地。Log4j 常用的输出目的地有以下几种:

Layout(日志格式化器)


快速入门

首先在 maven 中引入 log4j 的依赖:

 log4j log4j 1.2.17

创建 Log4jTest 类,测试 Log4j 的使用:

public class Log4JTest {   public static void main(String[] args) {          //获取Logger对象的实例             Logger logger = Logger.getLogger(Log4JTest.class);    //使用默认的配置信息,不需要写log4j.properties    BasicConfigurator.configure();    //设置日志输出级别为WARN,这将覆盖配置文件中设置的级别,只有日志级别高于WARN的日志才输出    logger.setLevel(Level.WARN);    logger.debug("这是debug");    logger.info("这是info");    logger.warn("这是warn");    logger.error("这是error");    logger.fatal("这是fatal");  } }

这里首先通过 Logger.getLogger(Log4Test.class) 创建 Logger 实例,然后调用 BasicConfigurator.configure() 方法指定该 Logger 使用默认的配置信息,接着调用 looger.setLevel(Level.WARN) 设置 Logger 的日志输出级别为 WARN 。运行 main 函数,控制台将会输出 warn 以上的错误信息。控制台输出如下:

0 [main] WARN com.huang.log4j.Log4JTest - 这是warn
0 [main] WARN com.huang.log4j.Log4JTest - 这是error
0 [main] WARN com.huang.log4j.Log4JTest - 这是fatal

注:如果没有调用 BasicConfigurator.configure() 方法,则运行 main 函数的时候则会报错,因为 Log4j 框架在运行的时候会加载项目路径下的 log4j.properties 配置文件(关于配置文件的使用,会在后面讲解)。而我们此时的项目中是没有该文件的。如果配置文件的名称不是 log4j.properties,则可以通过 PropertyConfigurator.configure(String configFilename) 指定配置文件的名称。

格式化器的使用

修改 Log4JTest 中的代码:

public class Log4JTest {   public static void main(String[] args) {    Logger logger = Logger.getLogger(Log4JTest.class);    BasicConfigurator.configure();    HTMLLayout layout = new HTMLLayout();    // SimpleLayout layout = new SimpleLayout();    try {      FileAppender appender = new FileAppender(layout, "D:\\out.html", false);      logger.addAppender(appender);      //设置日志输出级别为info,这将覆盖配置文件中设置的级别,只有日志级别高于WARN的日志才输出      logger.setLevel(Level.WARN);      logger.debug("这是debug");      logger.info("这是info");      logger.warn("这是warn");      logger.error("这是error");      logger.fatal("这是fatal");    } catch (IOException e) {      e.printStackTrace();    }  }}

首先创建一个HTML格式的格式化器(HTMLLayout),然后创建文件输出端(FileAppender)指定输出端的格式为 HTML 格式,这里我指定输出路径为 D 盘下的 out.html 文件。然后通过 logger.addAppender(appender) 将文件输出端加载到 Logger 中。运行 main 函数,在 D 盘下会生成一个 out.html 文件,打开文件,里面的信息就是代码中输出的日志信息:

log4j.properties配置文件的使用

上面使用代码的方式设置 Logger 的输出格式,这样在我们每个要输出日志的类上都得设置一遍配置未免也太麻烦了吧。有一种更加方便的方法,我们只需要在项目路径下新建 log4j.properties 配置文件,并配置日志的输出格式等信息,Log4J 框架会自动的加载配置文件,并将配置信息设置到 Logger 中。最简单的配置文件如下:

# 控制台输出配置log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n # 文件输出配置log4j.appender.A = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A.File = D:/log.txt #指定日志的输出路径log4j.appender.A.Append = truelog4j.appender.A.Threshold = DEBUGlog4j.appender.A.layout = org.apache.log4j.PatternLayout #使用自定义日志格式化器log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #指定日志的输出格式log4j.appender.A.encoding=UTF-8 #指定日志的文件编码 #指定日志的输出级别与输出端log4j.rootLogger=DEBUG,Console,A

在 log4j.properties 配置文件中,我们定义了日志输出级别与输出端,在输出端中分别配置日志的输出格式。

log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:

%m 输出代码中指定的日志信息

%p 输出优先级,及 DEBUG、INFO 等

%n 换行符(Windows平台的换行符为 "\n",Unix 平台为 "\n")

%r 输出自应用启动到输出该 log 信息耗费的毫秒数

%c 输出打印语句所属的类的全名

%t 输出产生该日志的线程全名

%d 输出服务器当前时间,默认格式为 ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日 HH:mm:ss}

%l 输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)

%F 输出日志消息产生时所在的文件名称

%L 输出代码中的行号

%x 输出和当前线程相关的 NDC(嵌套诊断环境)

%% 输出一个 "%" 字符

可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:

%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
%-5c 输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉

然后编写测试类 Log4JTest.java :

public class Log4JTest {   public static void main(String[] args) {      //获取Logger对象的实例         Logger logger = Logger.getLogger(Log4JTest.class);    logger.debug("这是debug");    logger.info("这是info");    logger.warn("这是warn");    logger.error("这是error");    logger.fatal("这是fatal");  }}

程序运行后控制台输出文本:

2018-07-12 14:36:36,114 [main] WARN [com.huang.log4j.Log4JTest] - 这是warn
2018-07-12 14:36:36,114 [main] ERROR [com.huang.log4j.Log4JTest] - 这是error
2018-07-12 14:36:36,114 [main] FATAL [com.huang.log4j.Log4JTest] - 这是fatal

并会在 D 盘生成一份 log.txt 文件。文本内容如下:


以上是"Log4j怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

输出 日志 文件 这是 配置 格式 级别 信息 控制 名称 运行 代码 控制台 项目 字符 宽度 函数 程序 路径 错误 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 互联网科技公司起名 互联网科技行业发展 科技与互联网 互联网未来科技 科技创新互联网企业 顺玮阁互联网科技 镁科技互联网资讯平台 银川新华互联网科技职业技术培训学校图片 茂名市互联网科技产业园 崇明区互联网教育科技售后服务 互联网媒体平台算高科技产业 国大互联网教育科技有限公司工作 威龙国际互联网科技公司 四川慕妮娅互联网科技有限公司 济南有互联网科技公司吗 云南互联网科技学费 恒生科技指数 中概互联网 互联网科技创业有什么好项目 互联网 科技节活动 微视频大赛 咖啡 中国最先进互联网科技公司 中国互联网有什么科技含量 世界互联网领先科技成果获奖 张召忠谈中国互联网科技 易企秀互联网科技是做什么的 新氧科技和美国互联网有关系吗 互联网科技接地气 中国科技和美国互联网 保山浩联互联网科技有限公司
0