当前位置: 首页 > 工具软件 > Apache Log4j > 使用案例 >

apache的log4j

程俊誉
2023-12-01
Log4j的Jar包下载地址:http://logging.apache.org/,具体步骤在Log4jDemo注释。

     * Log4j技术
     * 在程序中的日志实现步骤
     * 项目:log4j
     * 若要在自己的程序中写入日志语句,则可按照以下步骤进行:
     * (1)导入Jar包
     * 在项目中导入log4j需要的jar包。将Log4j框架的zip文件进行解压,在其根目录下就有其jar包。
     * 本次演示为:log4j-1.2.17.jar
     * (2)放入日志输出控制文件
     * 将属性文件log4j.properties直接放到项目的src下
     * (3)代码中实现日志记录
     * 在输出日志的类中创建日志对象Logger,并通过Logger的方法在代码中加入日志输出语句。在Java代码中进行日志输出,需要用到Logger类的静态方法getLogger()。
     * 注意,Logger为org.apache.log4j包中的类。

代码实现:

import org.apache.log4j.Logger;

public class Log4jDemo {
	/*
	 * 一个完成的软件,日志是不可少的。程序从开发、测试、维护、运行等环节,都需要想控制台或文件等位置输出大量信息。这些信息的输出,在很多时候是使用System.out.println()无法完成的。
	 * 日志信息根据用途与记录内容的不同,分为调试日志、运行日志、异常日志等。
	 * 用于日志记录的技术很多,如jdk的logger技术,apache的log4j、log4j2技术等。
	 * Log4j的全称Log for java,即专门用于java语言的日志记录工具。

	 * Log4j下载地址:http://logging.apache.org/
	 * 具体下载步骤如下
	 *  步骤1:进入“http://logging.apache.org/”
	 *  步骤2:点页面“Apache Log4j”下的“Project site »”按钮
	 *  步骤3:点页面左侧窗口的“Download”,进入的是最新版本的下载页,本次测试使用的是log4j-1.2.17版本,
	 *      (1)bin代表二进制class文件(由java文件编译而成),src代表源码(java源码),源码source比binary大一些,一般正常使用下载bin类型即可,如果要学习源码下载src类型。
	 *      (2).tar.gz是linux的压缩包,.zip是windows的压缩包
	 *          因此:bin.tar.gz是适用于linux、MacOsX系统的二进制文件
	 *               bin.zip是适用于windows的二进制文件
	 *               src.tar.gz是linux下的源码
	 *               src.zip是windows的源码
	 *  步骤4:本次测试使用的是log4j-1.2.17版本,点All previous releases of Apache log4j can be found in the archive repository.中的“archive repository”按钮查询所有旧版本
	 *  步骤5:点开1.2.17/    2018-11-10 21:02 的旧版本,选择log4j-1.2.17.zip 2013-01-31 17:53 4.5M进行下载,解压后的log4j-1.2.17.jar

	 * 日志级别
	 * 为了方便对于日志信息的输出显示,对日志内容进行了分级管理。日志级别由高到低,共分多个级别:fatal(致命的)、error、warn、info、debug、trace(堆栈)。
	 * 无论是将对日志输出到控制台,还是文件,其输出都会降低程序的运行效率。但由于调试、运行维护的需求,客户的要求等原因,需要进行必须的日志输出。这时就必须要在代码中既然日志输出语句。
	 * 这些输出语句若在程序运行时全部执行,则势必会降低运行效率。例如,使用System.out.println()将信息输出到控制台,则所有的该输出语句均将执行。会大大降低程序的执行效率。而要使其不输出,唯一的办法就是将这些输出语句逐个全部删除。这是个费时费力的过程。
	 * 将日志信息进行分级管理,便可方便的控制信息输出内容及输出位置:哪些信息需要输出,哪些信息不需要输出,只需要在一个日志输出控制文件中稍加修改即可。而代码中的输出语句不用做任何修改。
	 * 从这个角度来说,代码中的日志编写,其实就是写大量的输出语句。只不过,这些输出语句比较特殊,它们具有级别,在程序运行期间不一定被执行。它们的执行是由另一个控制文件控制。

	 * 日志输出控制文件
	 * Log4j的日志输出控制文件,主要由三个部分构成:
	 * (1)日志信息的输出位置:控制日志信息将要输出的位置,是控制台还是文件等。
	 * (2)日志信息的输出格式:控制日志信息的显示格式,即以怎样的字符串形式显示。
	 * (3)日志信息的输出级别:控制日志信息的显示内容,即显示哪些级别的日志信息。
	 * 有了日志输出控制文件,代码中只要设置好日志信息内容及其级别即可,通过控制文件便可控制这些日志信息的输出。

	 * Log4j技术
	 * 在程序中的日志实现步骤
	 * 项目:log4j
	 * 若要在自己的程序中写入日志语句,则可按照以下步骤进行:
	 * (1)导入Jar包
	 * 在项目中导入log4j需要的jar包。将Log4j框架的zip文件进行解压,在其根目录下就有其jar包。
	 * 本次演示为:log4j-1.2.17.jar
	 * (2)放入日志输出控制文件
	 * 将属性文件log4j.properties直接放到项目的src下
	 * (3)代码中实现日志记录
	 * 在输出日志的类中创建日志对象Logger,并通过Logger的方法在代码中加入日志输出语句。在Java代码中进行日志输出,需要用到Logger类的静态方法getLogger()。
	 * 注意,Logger为org.apache.log4j包中的类。
 
	 * 代码中事项
	 * ① 若项目src穆下没有log4j.properties会报异常如下:
	 *   Please initialize the log4j system properly.
	 * ② 日志输出会根据log4j.properties文件中日志级别的设置进行输出,会输出到指定位置。
	 *   输出指定级别及其更高级别的信息。如指定info级别,则会输出fatal、error、warn、info级别的信息
	 * ③ 日志输出控制文件分析
	 *      (1)日志属性文件log4j.properties是专门用于控制日志输出的。其主要进行三方面控制:
	 *         输出位置:控制日志将要输出的位置,是控制台还是文件等
	 *         输出布局:控制日志信息的显示形式
	 *         输出级别:控制要输出的日志级别
	 *      (2)日志属性文件由两个对象组成:日志附加器+根日志
	 *         根日志:即为Java代码中的日志记录器,其主要由两个属性构成:日志输出级别与日志附加器
	 *         日志附加器:是由日志输出位置定义,由其它很多属性进行修饰,如输出布局、文件位置、文件大小等。
	 *         log4j.properties
	 *           /   /    \   \
	 *          /   /      \   \
	 *   日志输出级别  日志附加器1 ... 日志附加器N
	 *             / /  \ \
	 *            / /    \ \
	 *      输出布局 文件位置 ... 文件大小
	 *      (3)定义日志附加器appender
	 *         所谓日志附加器,就是为日志记录器附加上很多其它设置信息。附加器的本质是一个接口,其定义语法为:log4j.appender.appenderName=输出位置
	 *         appenderName为自定义名称
	 *         输出位置为log4j指定的类型,是定义好的一些appender接口的实现类。查看log4j框架解压目录下的站点目录site的index.jsp中的JavaDoc,可看到log4j的API。
	 *         常用的附加器实现类(Interface Appender)如下:
	 *            org.apache.log4j.ConsoleAppender:日志输出到控制台
	 *            org.apache.log4j.FileAppender:日志输出到文件
	 *            org.apache.log4j.RollingFileAppender:当日志文件大小到达指定尺寸的时候将产生一个新的日志文件
	 *            org.apache.log4j.DailyRollingFileAppender:每天产生一个日志文件
	 *         例:定义一个名称为console的控制台附加器:
	 *             ##define an appender named console
	 *             log4j.appender.console=org.apache.log4j.ConsoleAppender
	 *      (4)修饰日志附加器
	 *         所谓修饰日志附加器,就是为定义好的附加器添加一些属性,已控制到指定位置的输出。不同的附加器,其修饰属性不同。
	 *            控制台附加器:
	 *               Target:控制输出到控制台的使用目标。其值为System.out或System.err。它们的区别是,System.out是以黑色字体显示到控制台,而System.err则是以红色字体显示
	 *               例:##define an appender named console
	 *                  log4j.appender.console=org.apache.log4j.ConsoleAppender
	 *                  #The Target value is System.out or System.err
	 *                  log4j.appender.console.Target=System.out
	 *                  
	 *            文件附加器:
	 *               File日志要输出的文件位置及文件名称
	 *               例:##define an appender named file
	 *                  log4j.appender.file=org.apache.log4j.FileAppender
	 *                  #define the file path and name
	 *                  log4j.appender.file.File=d:/logfile.txt
	 *                  
	 *            滚动文件附加器:
	 *               MaxFileSize:用于指定日志文件的最大值,若文件超过指定值,将自动产生另一个日志文件
	 *               例:##define an appender named rollfile
	 *                  log4j.appender.rollfile=org.apache.log4j.RollingFileAppender
	 *                  #define the file path and name
	 *                  log4j.appender.rollfile.File=d:/logrollfile.txt
	 *                  #set the log's size
	 *                  log4j.appender.rollfile.MaxFileSize=10KB
	 *                  #set the layout type of the apperder
	 *                  log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
	 *                  #set the layout format pattern
	 *                  log4j.appender.rollfile.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n
	 *            
	 *            log4j常用日志信息的格式(布局)类型:
	 *               org.apache.log4j.HTMLLayout(网页布局,以HTML表格形式布局),    
	 *               org.apache.log4j.SimpleLayout(简单布局,包含日志信息的级别和信息字符串),  
	 *               org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息),
	 *               org.apache.log4j.PatternLayout(匹配器布局,可以灵活地指定布局模式。其主要是通过设置PatternLayout的ConversionPattern属性值来控制具体输出格式的。)
	 *                  ConversionPattern的值中有很多控制字符,这些字符的意义如下表所示:
	 *                  格式名 含义
	 *                     %c 输出日志信息所属的类的全名
	 *                     %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
	 *                     %f 输出日志信息所属的类的类名
	 *                     %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
	 *                     %m 输出代码中指定的信息,如log(message)中的message
	 *                     %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
	 *                     %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
	 *                     %r 输出自应用启动到输出该日志信息所耗费的毫秒数
	 *                     %t 输出产生该日志事件的线程名
	 *      (5)配置根Logger
	 *         配置rootLogger,以便于代码加载来控制日志的输出。其语法为:log4j.rootLogger=[level],appenderName,...
	 *         其中,level是日志记录的优先级,分为OFF/FATAL/ERROR/WARN/INFO/DEBUG/ALL。Log4j建议只使用四个优先级,优先级从高到低分别是ERROR/WARN/INFO/DEBUG。OFF为关闭日志功能。
	 *         低级别的可以显示高级别的,但是高级别的不能显示低级别的。所以级别越高显示的日志信息越少。
	 */
	public static void main(String[] args) {
		// 创建日志记录对象Logger
		Logger logger = Logger.getLogger(Log4jDemo.class);

		logger.debug("this is dubug message");
		logger.info("this is info message");
		logger.warn("this is warn message");
		logger.error("this is error message");
		
	}
}

log4j.properties文件的演示:

##define an appender named console
log4j.appender.console=org.apache.log4j.ConsoleAppender
#The Target value is System.out or System.err
log4j.appender.console.Target=System.out
#set the layout type of the apperder
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.console.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n


##define an appender named file
log4j.appender.file=org.apache.log4j.FileAppender
#define the file path and name
log4j.appender.file.File=d:/logsfile.txt
#set the layout type of the apperder
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n


##define an appender named rollfile
log4j.appender.rollfile=org.apache.log4j.RollingFileAppender
#define the file path and name
log4j.appender.rollfile.File=d:/logrollfile.txt
#set the log's size
log4j.appender.rollfile.MaxFileSize=10KB
#set the layout type of the apperder
log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.rollfile.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n


##define a logger
#log4j.logger.\u5168\u9650\u5B9A\u6027\u7C7B\u540D\u6216\u63A5\u53E3\u540D=INFO,console,file,rollfile
log4j.rootLogger=INFO,console,file,rollfile

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

 类似资料: