Log4j实用手册

zz/2024/7/13 11:45:24

Log4j实用手册

===================================================================================================

简介

1.Log4J是Apache的一个开源项目,是用来操作程序日志信息的框架。

______________________________________________________________________________________

2.Log4J的功能通过配置log4j.properties属性文件实现。

______________________________________________________________________________________

3.log4j.properties文件中配置日志信息的记录器,并为记录器配置日志级别、输出地点、输出格式。

 

·首先定义记录器,管理不同的日志信息(可以配置一个或多个记录器);

·每一个记录器对应一个或多个存放器,用来设置日志信息的存放地点;

·每一个存放器对应一个布局格式,用来设置日志信息输出时的布局格式。

 

记录器用来整合日志信息,一个日志信息整合好之后,交给记录器的所有存放器,每一个存放器根据自己的格式进行输出记录改条日志信息。

 

所以:

存放器是属于记录器的,格式布局是属于存放器的。

记录器可配置多个存放器,存放器只能有一个输出方式。

______________________________________________________________________________________

4.输出地点

 

·控制台 - Console

·文件 - File

·GUI component - GUI组件

·Remote socket server - 套接口服务器

·NT Event Logger - NT的事件记录器

·Remote UNIX Syslog daemon - UNIX Syslog守护进程

______________________________________________________________________________________

5.输出格式

 

·HTML格式

·灵活格式

·包含日志信息的级别和信息字符串

·包含日志产生的时间、线程和类别等信息

______________________________________________________________________________________

6.程序中通过获得记录器,调用记录器的方法来产生日志信息。


记录器 – Logger

 

记录器:决定什么日志信息应该被输出、什么日志信息应该被忽略。

______________________________________________________________________________________

1.根记录器 : rootLogger

 

配置语法 :log4j.rootLogger = [日志级别],存放器名1,存放器名2, ... ,存放器名N

- 日志级别 :all、debug、info、warn、error、fatal、off、自定义级别 [低-高]

- 分级原因 :

______________________________________________________________________________________

2.自定义记录器

 

配置语法 :log4j.logger.自定义记录器名 = [日志级别] , [存放器1,存放器2, ... , 存放器N]

______________________________________________________________________________________

3.记录器的继承性

 

如果一个记录器后面又用"."跟出了另一个记录器,则点后面的记录器是点前面的记录器的子记录器。

log4j.logger.记录器1 = 日志级别,存放器1

log4j.logger.记录器1.记录器2 = 日志级别,存放器1

 

继承关系研究

- 日志级别继承 :子记录器黙认继承父记录器的日志级别

但如果子记录器新定义了日志级别,则不继承而是使用自己新定义的日志级别;

- 存放地点继承 :子记录器黙认继承父记录器的所有存放器

但如果把子记录器的additivity标志设为false,那么它就不会继承父记录器的存放器。

 

根记录器是所有其它记录器的基记录器

- 永远存在

- 不能通过名字检索或引用

- 通过Logger.getRootLogger()方法取得它。

______________________________________________________________________________________

4. Logger类 【程序中记录器由org.apache.log4j.Logger类实现操作】

 

Logger类方法列表:

//获得记录器的方法

public static Logger getRootLogger();

public static Logger getLogger(String 自定义记录器名称);

//固定级别记录

public void debug(Object 日志消息);

public void info (Object 日志消息);

public void warn (Object 日志消息);

public void error(Object 日志消息);

public void fatal(Object 日志消息);

//参数级别记录

public void log(Priority 日志级别, Object日志消息);

 

程序中首先获得记录器[根记录器或者自定义记录器],而后调用记录器的方法进行日志信息的记录。

- 调用固定级别记录方法时,只有当该方法的级别>=记录器配置级别时, 该方法才会被执行。

- 调用log()方法时,只有当参数级别>=WARN时,它才会被执行。

 

 

存放器 - Appender

 

存放器:存放日志信息 / 指定日志信息输出地。

____________________________________________________________________________

配置语法 :

 

log4j.appender.存放器名 = 存放类

log4j.appender.存放器名.option1 = value1

… …

log4j.appender.存放器名.optionN = valueN

 

____________________________________________________________________________

存放类

 

org.apache.log4j.ConsoleAppender - 控制台输出

 

org.apache.log4j.FileAppender - 文件

org.apache.log4j.DailyRollingFileAppender - 每天产生一个日志文件

org.apache.log4j.RollingFileAppender - 文件大小到达指定尺寸的时候产生一个新的文件

 

org.apache.log4j.WriterAppender - 将日志信息以流格式发送到任意指定的地方

 

备注:

如果一个存放器使用的是文件相关的存放类,则必须为该存放器再配置一个输出文件

 

log4j.appender.某存放器 = org.apache.log4j.FileAppender

log4j.appender.某存放器.File = log.txt

 

格式化 - Layout

 

存放器:指定日志信息的输出格式。

____________________________________________________________________________

配置语法 :

 

log4j.appender.存放器名.layout = 格式类

log4j.appender.存放器名.layout.option1 = value1

… …

log4j.appender.存放器名.layout.optionN = valueN

 

____________________________________________________________________________

格式类

 

org.apache.log4j.HTMLLayout - HTML表格形式布局

org.apache.log4j.PatternLayout - 灵活地指定布局模式

org.apache.log4j.SimpleLayout - 包含日志信息的级别和信息字符串

org.apache.log4j.TTCCLayout - 包含日志产生的时间、线程和类别等信息

 

备注:

如果是PatternLayout方式,则需要使用ConversionPattern预定义输出格式。

 

log4j.appender.存放器名.layout = org.apache.log4j.PatternLayout

log4j.appender.存放器名.layout.ConversionPattern = 预定义格式

 

预定义格式符号:

%r - 自程序开始后消耗的毫秒数

%t - 表示日志记录请求生成的线程

%p - 日志级别

%r - 与日志请求相关的类别名称

%c - 记录器所在类的全类名

%m%n - 日志信息

%d      -   日志时间 {yyyy-MM-dd HH:ss:mm}

 

[经测试:%m%n放在其他信息前面会导致其他信息换行输出]

 

 

log4j.properties

 

#根记录器

 

log4j.rootLogger = 级别,存放器00

 

log4j.appender.存放器00 = 存放类

log4j.appender.存放器00.layout = 格式类00

 

 

#记录器01

 

log4j.logger.记录器01 = 级别,存放器01,存放器11

 

log4j.appender.存放器01 = 存放类

log4j.appender.存放器01.layout = 格式类

 

log4j.appender.存放器11 = 存放类

log4j.appender.存放器11.layout = 格式类

 

 

#记录器02

 

log4j.logger.记录器02 = 级别,存放器02

 

log4j.appender.存放器02 = 存放类

log4j.appender.存放器02.layout = 格式类

 

开发实例

 

import org.apache.log4j.Logger

 

public class ClassName

{

          public void static main(String [] args)

          {

                   Logger theLogger = new Logger();

 

                   theLogger.warn(“ddddddd”);

           }

}

 

 

实际经验

 

1.获取不到记录器

 

代码中,如果获取一个记录器时,该记录器不存在,则会使用根记录器。

 

Logger logger = Logger.getLogger(“配置文件中不存在的记录器名”);

 

此时,获取到的记录器实际上是根记录器。

 

 


http://www.ngui.cc/zz/2762653.html

相关文章

修改linux用户密码(passwd)

对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: (1)修改root用户密码 如果是以root身份登录,修改root密码. 只要输入 passwd 就会出现: New password: Retype new password: 按提示输入密码确认即可. &#xf…

centos7 strace的安装

strace是一个功能强大的调试,分析诊断工具,主要用来监视系统调用。 1.下载strace-xxx.tar.xz 下载网址是:http://sourceforge.net/project/showfiles.php?group_id2861&package_id2819; 2.解压 $ xz -d ***.tar.xz $ tar -xvf *…

Android Fragment生命周期和用法解析

Fragment生命周期图: Fragment与Activity生命周期对比图: 2 生命周期分析 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach()onCreate()onCreateView()onActivityCreated() 2. 当这个fragment对用户可见的时候,它会…

Android UI控件之ImageSwitcher(图片切换)

从该名字就可以看出来,ImageSwitcher是一个图片切换控件,可以在一系列的图片中,逐张 的显示特定的图片,利用该控件可以实现图片浏览器中的上一张,下一张的功能。其使用方法也较 为简单,不过需要注意的是Ima…

Android 不能退出的解释(android.os.Process.killProcess(android.os.Process.myPid()))

为什么要写这篇文章? 因为网上有很多种退出方法,可是实际上很多方法都不通用(在某个版本下可用,到了另一个版本就不行),或者方法的实际效果根本就和其描述不符(也不知道那些发帖的人测没测试过…

在 rest 风格 url 资源中, GET/POST/PUT/DELETE 等方法各有什么作用与区别?

在spring mvc 中: spring mvc 支持REST风格的请求方法,GET、POST、PUT和DELETE四种请求方法分别代表了数据库CRUD中的select、insert、update、delete 如何这个地方不懂,可以看http://blog.csdn.net/u011630575/article/details/50550127 &a…

android:正在运行的某个android程序中进行编写内容,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法。 情景描述:正在一个界面进行编辑工作,突然来一条短信,点击通知读取短信,然后重新点击App,进入原…

Android Context上下文(几种的对比,应用场景)

1、Context概念 其实一直想写一篇关于Context的文章,但是又怕技术不如而误人子弟,于是参考了些资料,今天准备整理下写出来,如有不足,请指出,参考资料会在醒目地方标明。 Context,相信不管是第一…

mysql查询(同一个表中相邻的两条记录进行运算)

通过添加一条行记录的方法&#xff0c;重新生成一个表&#xff0c;然后在通过可以通过表的连接进行运算。 --通过一个初始值为0的变量rownum&#xff0c;依次递增1来实现行号 SELECTrownum:rownum1 AS rownum,name FROM temp,(SELECT rownum:0) temp WHERE rownum<4&#xf…

mysql 利用自增数据项的方法,对同一个表有某种关联的数据进行处理。(利用增加一项的方法)

问题背景&#xff1a; stage表有app_id,stage_id,submission_time等数据项。要求对该表的指定app_id的所有stage_id &#xff0c;按submission_time 从小到大排序&#xff0c;并且相邻的两项进行做差。 另一个描述如下&#xff1a; 对同一个app_id的所有stage_id&#xff0c;按…