文档章节

java --log4j

求是科技
 求是科技
发布于 2016/09/27 13:38
字数 1745
阅读 46
收藏 1

#1.入门实例
1.新建一个java工程,导入log4j-1.2.14.jar包,最终工程目录如下
输入图片说明
2.src下新建log4j.properties文件

#指定日志级别为DEBUG,因此级别高于debug的info < warn < error < fatal都会被输出来
#指定日志输出地名称:stdout、D和E
log4j.rootLogger=DEBUG, stdout, D, E

#如下是配置stdout输出地
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

#如下是配置D输出地
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F:\\Test\\logs\\debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

# 如下是配置E输出地
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = F:\\Test\\logs\\error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

关于以上配置的详解请参看我的另一篇文章
https://my.oschina.net/u/2312022/blog/525225
3.测试

package com.test.log4j;

import org.apache.log4j.Logger;

public class TestLog4j {
	private static Logger logger = Logger.getLogger(TestLog4j.class);
	public static void main(String[] args) {
		logger.debug("这是debug信息");
		logger.info("这是info信息");
		
		logger.error("这是error信息");
	}
}

测试结果,控制台显示

[DEBUG] 2016-09-27 13:34:20,600 method:com.test.log4j.TestLog4j.main(TestLog4j.java:8)
这是debug信息
[INFO ] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main(TestLog4j.java:9)
这是info信息
[ERROR] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main(TestLog4j.java:11)
这是error信息

文件输出地方显示
输入图片说明
debug.log文件内容

[DEBUG] 2016-09-27 13:34:20,600 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:8)
这是debug信息
[INFO ] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:9)
这是info信息
[ERROR] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:11)
这是error信息

error.log文件内容

[ERROR] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:11)
这是error信息

由如上可知,debug.log里面的信息包括debug、info、error。 #2.Log4j基本使用
Log4j由三部分组成:日志信息优先级、日志信息输出地、日志信息输出格式。
日志信息优先级:debug < info < warn < error < fatal
日志信息输出地:指定日志打印到控制台还是目的文件中
日志信息输出格式:指定日志信息内容显示格式
2.1配置根Logger
基本语法

log4j.rootLogger=[level],appenderName1,appenderName2,......

用法如下

#指定日志级别为DEBUG,因此级别高于debug的info < warn < error < fatal都会被输出来
#指定日志输出地名称:stdout、D和E
log4j.rootLogger=DEBUG, stdout, D, E

2.2配置日志信息输出目的地appender
语法格式

log4j.appender.appenderName = xxxx
log4j.appender.appenderName.option1 = value1
......
log4j.appender.appenderName.optionN = valueN

用法如下

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F:\\Test\\logs\\debug.log
log4j.appender.D.Append = true

2.3配置日志信息格式

log4j.appender.appenderName.layout = xxxx
log4j.appender.appenderName.layout.option1 = value1
......
log4j.appender.appenderName.layout.optionN = valueN

用法如下

log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

#3.在java工程中中使用log4j
3.1获取日志记录器

private static Logger logger = Logger.getLogger(Class clazz);  

通过指定类名来获取记录器,类名一般取本类的名字。
3.2读取配置文件

//使用缺省的log4j环境
BasicConfigurator.configure();
//读取使用java编写的配置文件
PropertyConfigurator.configure(String configFilename);
//读取xml形式的配置文件
DOMConfigurator.configure(String filename);

3.3插入日志信息
可以在工程的任何地方使用日志功能
语法如下

Logger.debug ( Object message ) ;  
Logger.info ( Object message ) ;  
Logger.warn ( Object message ) ;  
Logger.error ( Object message ) ;

#4.web项目中使用log4j
我们做j2ee应用时,需要使用到log4j,因此必须在启动服务时加载log4j的配置文件且进行初始化,这个过程可以在web.xml中进行。
4.1web应用配置log4j
web应用中,一般是:新建一个servlet,在这个servlet的init函数中读入配置文件。因此需要在web.xml中配置这个servlet,同时设定load-on-startup值为1。
4.2servlet读出配置文件
在web.xml中配置context-param参数值。配置文件一般分为两种:1>java的properties文件;2>xml文件。
4.3 新建动态web工程
输入图片说明
4.4 web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Log4jWebTest</display-name>
	
	<!-- 测试servlet -->
	<servlet>
		<servlet-name>Log4jTestServlet</servlet-name>
		<servlet-class>com.test.log4j.Log4jTestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Log4jTestServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	
	<!-- 启动log4j -->
	<servlet>
		<servlet-name>Log4jInitServlet</servlet-name>
		<servlet-class>com.test.log4j.Log4jInitServlet</servlet-class>
		<init-param>
			<param-name>log4j-properties-location</param-name>
			<param-value>/WEB-INF/classes/log4j.properties</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
</web-app>

4.5 log4j配置
log4j配置文件还是沿用上面java工程的log4j配置。
4.6 log4j初始化文件

package com.test.log4j;

import java.io.File;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;

@WebServlet("/Log4jInitServlet")
public class Log4jInitServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		
		System.out.println("log4j初始化");
		String log4jLocation = config.getInitParameter("log4j-properties-location");
		
		ServletContext sc = config.getServletContext();
		
		if (log4jLocation == null) {
			System.out.println("没有log4j-properties-location初始化文件,所以使用BasicConfigurator初始化");
			BasicConfigurator.configure();
		}else
		{
			String webAppPath = sc.getRealPath("\\");
			String log4jProp = webAppPath+log4jLocation;
			File file = new File(log4jProp);
			if (file.exists()) {
				System.out.println("使用:"+log4jProp+"初始化日志信息");
				PropertyConfigurator.configure(log4jProp);
			}else
			{
				System.out.println("----"+log4jProp+"文件没有找到,使用BasicConfigurator初始化");
				BasicConfigurator.configure();
			}
		}
		super.init(config);
	}
}

4.7Log4jTestServlet测试文件

package com.test.log4j;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

@WebServlet("/Log4JTestServlet")
public class Log4jTestServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(Log4jTestServlet.class);
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		logger.debug("debug信息");
		logger.info("info信息");
		logger.error("error信息");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		doGet(req, resp);
	}
}

4.8 测试
启动工程控制台就会输出如下信息

log4j初始化
使用:D:\softDown\apache-tomcat-8.0.36\webapps\Log4jWebTest/WEB-INF/classes/log4j.properties初始化日志信息

在浏览器请求

http://192.168.2.67:8080/Log4jWebTest

输出如下信息

[DEBUG] 2016-09-27 17:53:26,124 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:22)
debug信息
[INFO ] 2016-09-27 17:53:26,134 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:23)
info信息
[ERROR] 2016-09-27 17:53:26,134 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:24)
error信息

查看日志记录文件
输入图片说明
备注:乱码另做处理。
#5.spring中使用log4j
1.继续使用上述web工程,添加spring的jar包。如下
输入图片说明
2.web.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Log4jWebTest</display-name>
	
	<!-- 测试servlet -->
	<servlet>
		<servlet-name>Log4jTestServlet</servlet-name>
		<servlet-class>com.test.log4j.Log4jTestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Log4jTestServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	
	<!-- spring容器加载 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 设置spring参数  -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	
	<!-- 设置根目录 -->
	<context-param>
		<param-name>webAppRootKey</param-name>
		<param-value>webapp.root</param-value>
	</context-param>
	
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/classes/log4j.properties</param-value>
	</context-param>
	
	<!-- 30000表示开一条watchdog线程,每30s扫描下配置文件的变化 -->
	<context-param>
		<param-name>log4jRefreshInterval</param-name>
		<param-value>30000</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
	
</web-app>

3.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

</beans>

4.启动项目
启动正确信息如下

......
九月 28, 2016 11:20:47 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-nio-8080"]
九月 28, 2016 11:20:47 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-nio-8009"]
九月 28, 2016 11:20:47 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 2773 ms

5.测试项目
在浏览器输入:http://localhost:8080/Log4jWebTest/Log4JTestServlet
控制台会输出如下信息

[DEBUG] 2016-09-28 11:21:31,908 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:22)
debug信息
[INFO ] 2016-09-28 11:21:31,908 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:23)
info信息
[ERROR] 2016-09-28 11:21:31,908 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:24)
error信息

哦,忘了一点,log4j里面debug和error信息输出地修改成如下

log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/debug.log
log4j.appender.E.File = ${webapp.root}/WEB-INF/logs/error.log

这样,在tomcat的webapps里面工程下的web-inf可以找到输出的log信息。我的在
D:\softDown\apache-tomcat-8.0.36\webapps\Log4jWebTest\WEB-INF
输入图片说明
log目录下就有两个文件
输入图片说明

© 著作权归作者所有

共有 人打赏支持
求是科技

求是科技

粉丝 96
博文 448
码字总数 231187
作品 0
成都
后端工程师
私信 提问
JMX学习以及在log4j中的应用

前言 JMX即Java Managemen Extensions,是一个为应用程序植入管理功能的框架。一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。 常常在编程的过程中...

buglife
2015/01/06
0
15
Apache Log4j 2.10.0 正式发布,包含大量更新

Apache Log4j 2.10.0 正式发布了,此版本包含新功能引入、错误修正和次要的功能增强。其中一些新功能包括对 Java 9 模块系统的支持、对新的 SLF4j 1.8 绑定机制的支持,简化 Log4j 属性命名方...

局长
2017/11/24
3K
7
为什么阿里巴巴禁止工程师直接使用日志系统(Log4j、Logback)中的 API

作为Java程序员,我想很多人都知道日志对于一个程序的重要性,尤其是Web应用。很多时候,日志可能是我们了解应用程序如何执行的唯一方式。 所以,日志在Java Web应用中至关重要,但是,很多人...

Hollis
2018/11/26
0
0
Apache LOG4J 2.11.0 发布,Java 日志组件

Apache Log4j 是一个众所周知的用于记录应用程序行为的框架。 Log4j 2是对Log4j的升级,可提供重大改进,超越其前身Log4j 1.x,并提供许多其他现代功能 ,例如对标记的支持,使用查找的属性替...

周其
2018/03/18
988
3
pycharm Startup Error: Application cannot start in headless mode

t@localhost ~$ pycharm-professional OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=350m; support was removed in 8.0 log4j:WARN No appenders could be found for log......

天飞.h
01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux iptables之mangle表使用案例

mangle表的用途 mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。 mangel表使用示例 示例1-策略路由1 内网的客户机通...

月下狼
今天
3
0
OSChina 周日乱弹 —— 兼职我想去学学布偶戏

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy : 《火炎 - 女王蜂》 《火炎 - 女王蜂》 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁 :还在睡觉突然接到一个小哥哥电话“x...

小小编辑
今天
97
7
租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
4
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
6
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部