前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Log4j 入门教程

Log4j 入门教程

作者头像
Remember_Ray
发布于 2020-08-03 15:16:10
发布于 2020-08-03 15:16:10
54800
代码可运行
举报
文章被收录于专栏:Ray学习笔记Ray学习笔记
运行总次数:0
代码可运行

简介

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

为什么要使用日志

开发阶段发现程序的问题, 排除错误, 产品阶段, 可以记录系统运行的一些状态信息, 程序运行的状态;

System.out.println的局限性

  1. 不能在运行时打开或者关闭;
  2. 不能选择包或者类 , 在运行的时候打开或者关闭;
  3. 输出的信息没有分级;
  4. 只能输出文本信息;
  5. 不能改变输出位置;

组成

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

日志级别

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

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

级别

说明

OFF

为最高级别, 用于关闭所有日志信息的输出

FATAL

指出严重的错误, 这些错误将会导致系统终止运行

ERROR

指出发生的不影响系统继续运行的错误信息

WARN

输出潜在的有可能出错的情形, 也就是输出警告信息

INFO

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

DEBUG

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

TRACE

指定细粒度比DEBUG更低的信息事件

ALL

最低等级, 用于打开所有日志信息的输出

核心规则: Log4j 只会输出级别大于或者等于指定级别的信息 ;

Appender(输出端)

Appender 用来指定日志输出到哪个地方,可以同时指定日志的输出目的地。

类型

说明

ConsoleAppender

将日志输出到控制台

FileAppender

将日志输出到文件中

DailyRollingFileAppender

将日志输出到一个日志文件,并且每天输出到一个新的文件

RollingFileAppender

将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大 小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件

JDBCAppender

把日志信息保存到数据库中

Layout(日志格式化器)

Layout 负责格式化不同风格的日志信息 。

类型

说明

HTMLLayout

格式化日志输出为HTML表格形式

SimpleLayout

简单的日志输出格式化,打印的日志格式为(info - message)

PatternLayout

最强大的格式化期,可以根据自定义格式输出日志,如果没有指定转换格式,就是用默认的转换格式

TTCCLayout

日志产生的时间 , 线程 , 类别等等信息

properties文件配置

配置根Logger

配置根Logger,语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log4j.rootLogger = [ level ] , appenderName , appenderName ……

注意 :

  1. 日志级别虽然罗列了很多级别 , 但log4j推荐只使用四个级别 , 优先级从高到低分别是ERROR , WARN , INFO , DEBUG ;
  2. appenderName指的是日志输出的地址 , 可以同时指定n个 ;

配置日志输出的目的地Appender

配置日志输出的目的地Appender以及每个输出文件的各项属性,语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

注意 : log4j中提供的appender有以下几种 :

  1. org.apache.log4j.ConsoleAppender(控制台) ;
  2. org.apache.log4j.FileAppender(文件) ;
  3. org.apache.log4j.DailyRollingFileAppender(按照一定的频度滚动产生日志记录文件 , 默认每天产生一个文件) ;
  4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ;
  5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到指定的位置) ;

配置日志信息的格式或者布局layout

配置日志信息的格式或者布局layout以及布局的各项属性,语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log4j.appender.appenderName.layout = fully.qualified.name.of.appender.class
log4j.appender.appenderName.layout.option1 = value

注意: log4j中提供的layout有以下几种 :

  1. org.apache.log4j.HTMLLayout(以HTML表格形式布局) ;
  2. org.apache.log4j.PatternLayout(可以灵活的指定布局模式 , 需要配置layout.ConversionPattern属性) ;
  3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) ;
  4. org.apache.log4j.TTCCLayout(包含日志产生的时间 , 线程 , 类别等等信息) ;

控制台选项

  • log4j.appender.appenderName.Threshold = error 用法: rootLogger里配置debug,然后某个文件专门存储error以及更高级别的错误信息,那么就在这个配置这个文件的时候指定Threshold属性为error;
  • log4j.appender.appenderName.ImmediateFlush=true 用法: 默认值是true,意味着所有的消息都会被立即输出, false则是不输出;
  • log4j.appender.appenderName.target=System.out 用法: 默认值为System.out, 输出到控制台, 还可以取值System.err, 当做错误信息输出, 输出的信息全部为红色;
  • log4j.appender.appenderName.File=../../../../logs/log.appenderName.txt 用法: 指定日志输出到指定位置, 用的是相对于配置文件根目录的相对路径;
  • log4j.appender.appenderName.File.Append=true 用法: 默认值是true, 即将消息追加到指定文件中, 如果取值为false, 则会覆盖之前的日志内容;
  • log4j.appender.appenderName.MaxFileSize=20MB 用法: 后缀可以是KB, MB, GB, 当日志文件的大小到达指定大小后, 将会自动滚动, 即将原来的内容移到fileName.1文件中, 用记事本打开该文件即可看到原来的内容, 改属性只能在 appender=org.apache.log4j.RollingFileAppender 时使用;
  • log4j.appender.appenderName.MaxBackupIndex=10 用法: 指定可以产生滚动文件的最大数量, 与RollingFileAppender和MaxFileSize属性一起使用, 当MaxBackupIndex=n的时候, 最大日志存在数量为n+1, 即log.txt, log.txt.1, …, log.txt.n, 当在服务器上运行的时候, 如果对日志数量没有限制, 那么随之时间的推移, 日志文件会越来越多, 占用的内存也将越来越多, 直到占满整个盘;
  • log4j.appender.appenderName.DatePattern=’.’yyyy-MM-dd 用法: 该属性在 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender 时使用, DailyRollingFileAppender默认的频度是每天产生一个日志记录文件, 可以在DatePattern属性值中指定其他的频度, 常用的几个频度如下 :
  1. ‘.’yyyy-MM : 每月产生一个日志记录文件;
  2. ‘.’yyyy-ww : 每周产生一个日志记录文件;
  3. ‘.’yyyy-MM-dd : 每天产生一个日志记录文件;
  4. ‘.’yyyy-MM-dd-a : 每半天产生一个日志记录文件;
  5. ‘.’yyyy-MM-dd-HH : 每小时产生一个日志记录文件;
  6. ‘.’yyyy-MM-dd-HH-mm : 每分钟产生一个日志记录文件;

注意: 该属性指定值之后, 将会按照指定的频度来生成日志记录文件, 假设指定生成一个名为 log.txt 的文件, 频度指定为每分钟产生一个日志记录文件, 当达到指定频度后, 会将log.txt文件中记录的之前的日志记录, 重新写入一个名为 log.txt.yyyy-MM-dd-HH-mm的文件中, 而此时 log.txt 文件中存放的是新生成的日志信息, 该过程循环往复;

ConversionPattern参数

假设当前java文件名为Test , 所在包名为log4j :

%c

%c: 显示当前logger空间全称, 例如: log4j.Test; %c{层数}: 最内层的java文件为第一层, 例如: %c{1}, 显示为Test, 当层数大于实际存在的最大层数时, 显示最大实际存在层数;

%10c

%10c: 若名字空间长度小于10, 则在左边将欠缺的长度用空格补齐, 该种情况为默认的右对齐方式; %-10c: 若名字空间长度小于10, 则在右边将欠缺的长度用空格补齐, 该种情况为默认的左对齐方式;

%.3c

%.3c: 从空间名最右边开始显示指定的长度, 超出该长度的部分将被截取;

%10.15c

%10.15c: 若空间名长度小于10, 则左边将欠缺的长度用空格补齐, 若长度超过15, 则将多余部分截取; %-10.15c: 若空间名长度小于10, 则右边将欠缺的长度用空格补齐, 若长度超过15, 则将多余部分截取;

%d

%d: 显示日志记录时间, 默认时间格式为ISO8601定义的日期格式; %d{yyyy-MM-dd HH:mm:ss}: 按照指定的时间格式显示日期; %d{ABSOLUTE}: 22:15:30,076; %d{DATE}: 12 Oct 2018 22:15:30,076; %d{ISO8601}: 2018-07-20 22:23:30,076;

%F

%F: 显示调用logger的源文件名, 例如: Test.java;

%l

%l: 输出日志事件的发生位置, 包括类目名, 发生的线程, 以及在代码中的行数, 例如: log4j.log4jTest.main(log4jTest.java:40);

%m

%m: 显示输出消息;

%M

%M: 显示调用logger的方法名;

%n

%n: 换行符;

%p

%p: 显示该条目的优先级; 因为日志级别分别有error,warn,info,debug,fatal5种,有些是5个字母的,有些是4个字母的,如果直接写%p就会对不齐,%-5p的意思是日志级别输出左对齐,右边以空格填充,%5p的意思是日志级别输出右对齐,左边以空格填充

%r

%r: 显示从程序启动时到记录该条日志时已经经过的时间, 单位毫秒;

%t

%t: 显示产生该日志条目的线程名;

%x

%x: 按NDC(Nested Diagnostic Context, 线程堆栈): 顺序输出日志;

%X

%X: 按MDC(Mapped Diagnostic Context, 线程映射表)输出日志, 通常用于多个客户端连接同一个服务器, 方便服务器区分是哪个客户端访问留下来的日志;

%%

%%: 显示一个百分号;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <!-- ========================== 自定义输出格式说明================================ -->
    <!-- %p 输出优先级,即DEBUGINFOWARNERRORFATAL -->
    <!-- %r 输出自应用启动到输出该log信息耗费的毫秒数  -->
    <!-- %c 输出所属的类目,通常就是所在类的全名 -->
    <!-- %t 输出产生该日志事件的线程名 -->
    <!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
    <!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20021018221028921  -->
    <!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlo4.main(TestLog4.java:10)  -->
    <!-- ========================================================================== -->
 
    <!-- ========================== 输出方式说明================================ -->
    <!-- Log4j提供的appender有以下几种:  -->
    <!-- org.apache.log4j.ConsoleAppender(控制台),  -->
    <!-- org.apache.log4j.FileAppender(文件),  -->
    <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
    <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->
    <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->
<!-- ========================================================================== -->

LevelRangeFilter(分级过滤器)

如果想要实现不同级别的日志分别输出到不同的位置, 可以在properties配置文件中加入如下语句进行限制,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log4j.appender.appenderName.Threshold=debug
log4j.appender.appenderName.filter.filterName=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.appenderName.filter.filterName.LevelMin=debug
log4j.appender.appenderName.filter.filterName.LevelMax=debug

解释: 将最低输出级别LevelMin和最高输出级别LevelMax都设置为debug, 那么就只能输出debug级别的日志信息了;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-14|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【系统日志】log4j配置学习总结
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。 Logger Loggers组件被分为五个级别: DEBUG INFO WARN ERROR FATAL 各个级别的顺序是这样那个的: DEBUG < INFO < WARN < ERROR < FATAL 可以
冷冷
2018/02/08
5900
细说log4j
可能做过java项目的基本上都是用过log4j,它是用来做java日志的。比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使用log4j标记某某模块启动了。 努力的人绝对不会成为落后的标兵,加油!废话不多说,进入log4j。 一、log4j简介 1.1、log4j概述   log for java(java日志)   Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器
用户1195962
2018/01/18
1.8K0
细说log4j
log4j介绍以及使用教程
  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接 口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。    Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
阿豪聊干货
2018/08/09
5940
java之log4j的配置
log4j是用来记录日志的。 软件的运行过程离不开日志.日志主要用来记录系统运行过程中的一些重要的操作信息,便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到发生的原因. 日志根据记录内容的不同,主要分成以下3类: SQL日志:记录系统执行的SQL语句. 异常日志:记录系统运行中发生的异常事件. 业务日志:记录系统运行过程,如用户登录,操作记录. 要使用log4j,首先需要下载log4j 的JAR文件.log4j是Apache的一个开
似水的流年
2018/01/18
1.5K0
springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;
noteless
2018/09/11
9880
使用log4j配置不同文件输出不同内容
敲代码中很不注意写日志,虽然明白很重要。今天碰到记录日志,需要根据内容分别输出到不同的文件。 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/details/2173430/ 喜欢博客园的日志风格,第一篇参考文章就是它:http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html 写好的模板,直接修改就可以,虽然不满足我的需求:http://blog.csdn.net/rsun1/
Ryan-Miao
2018/03/13
3.1K0
使用log4j配置不同文件输出不同内容
Log4j有三个主要的组件及作用
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。
用户7718188
2021/10/07
5200
【转】最详细的Log4J使用教程一、入门实例二、Log4J基本使用方法三、Spring中使用Log4J四、实战经验总结
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。
阿杜
2018/08/06
4.7K0
【转】最详细的Log4J使用教程一、入门实例二、Log4J基本使用方法三、Spring中使用Log4J四、实战经验总结
Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 上一篇文章主要讲述了一下syso和Log间的一些区别与比较,重点是在项目的日志功能上,因此,承接前文《Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log》,本文是一个较为直观的日志功能案例,java的日志框架很多,如Log4j、Log4j2、logback、SLF4J,篇幅有限,所以本篇只介绍一
程序员十三
2018/03/15
6370
Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合
细说log4j之log4j 1.x
官网:http://logging.apache.org/log4j/1.2/manual.html
编程随笔
2019/09/11
7790
细说log4j之log4j 1.x
Log4j详细使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log
java达人
2018/01/31
1K0
Log4j详细使用教程
log4j2配置文件properties配置_log4j2 配置详解
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties(key=value)文件,其中properties格式的配置文件最为常用,其有一个固定的文件名log4j.properties,下面我们介绍使用properties文件做为配置文件的方法:
全栈程序员站长
2022/11/11
4.5K0
Java日志体系(log4j)
log4j 1.1 简介 Log4j是一个由Java编写可靠、灵活的日志框架,是Apache旗下的一个开源项目;现如今,Log4j已经被移植到了C、C++、Python等语言中,服务更多的Develo
贾博岩
2018/05/11
2.1K0
Java中Log4J的使用教程
log4j是Apache的一个开放源代码的项目,通过使用log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
浩Coding
2019/07/03
15.1K0
Log4j
日志是维护项目的有利工具,代替System.out.println()来定位BUG
晚上没宵夜
2020/03/10
4790
Log4j 日志详细用法
简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地、日志信息的输出格式
阳光岛主
2019/02/18
2.7K0
slf4j-api、slf4j-log4j12、log4j之间关系
slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade。Facade门面,更底层一点说就是接口。它允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统。
chenchenchen
2019/09/03
7.4K0
slf4j-api、slf4j-log4j12、log4j之间关系
Apache开源日志框架Log4j配置指南
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最方便的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。本篇指南主要介绍Log4j 1.x版本的配置与使用Log4j最新版下载地址:http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip
老九学堂-小师弟
2019/10/09
8840
Log4j自定义日志包(转载)
log4j.properties中如果输出日志是html格式,配置log4j.appender.R.layout=com.zg.log4j.layout.HtmlLayout 竟然没输出。
用户1499526
2019/07/15
1.5K0
log4j使用教程_log4js
Log4J 是 Apache 的一个开源项目(官网 http://jakarta.apache.org/log4j),通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。
全栈程序员站长
2022/10/04
8080
log4j使用教程_log4js
相关推荐
【系统日志】log4j配置学习总结
更多 >
LV.2
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档