博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java --log4j
阅读量:6990 次
发布时间:2019-06-27

本文共 9094 字,大约阅读时间需要 30 分钟。

hot3.png

#1.入门实例

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

#指定日志级别为DEBUG,因此级别高于debug的info < warn < error < fatal都会被输出来#指定日志输出地名称:stdout、D和Elog4j.rootLogger=DEBUG, stdout, D, E#如下是配置stdout输出地log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.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.DailyRollingFileAppenderlog4j.appender.D.File = F:\\Test\\logs\\debug.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.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.DailyRollingFileAppenderlog4j.appender.E.File = F:\\Test\\logs\\error.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = ERRORlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

关于以上配置的详解请参看我的另一篇文章

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和Elog4j.rootLogger=DEBUG, stdout, D, E

2.2配置日志信息输出目的地appender

语法格式

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

用法如下

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

2.3配置日志信息格式

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

用法如下

log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.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配置

Log4jWebTest
Log4jTestServlet
com.test.log4j.Log4jTestServlet
Log4jTestServlet
/*
Log4jInitServlet
com.test.log4j.Log4jInitServlet
log4j-properties-location
/WEB-INF/classes/log4j.properties
1

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如下

Log4jWebTest
Log4jTestServlet
com.test.log4j.Log4jTestServlet
Log4jTestServlet
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
webAppRootKey
webapp.root
log4jConfigLocation
/WEB-INF/classes/log4j.properties
log4jRefreshInterval
30000
org.springframework.web.util.Log4jConfigListener

3.applicationContext.xml

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.测试项目

在浏览器输入:
控制台会输出如下信息

[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.loglog4j.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目录下就有两个文件
输入图片说明

转载于:https://my.oschina.net/u/2312022/blog/752169

你可能感兴趣的文章
纯做技术是自娱自乐,抛开技术做技术才是出路
查看>>
mySQL练习题
查看>>
常用安装rpm包--必备命令
查看>>
表单验证 018
查看>>
Java字节码3-使用ByteBuddy实现一个Java-Agent
查看>>
程序有没有可能输出y=2而x!=1的情况?如果可能,x可能会是什么值?如果不可能,为什么?...
查看>>
[笔记] mysql-proxy 实现主从读写分离
查看>>
给GRUB中的菜单加入密码。
查看>>
保留原有插件,快速升级Eclipse发行版本
查看>>
7月第1周国内域名商TOP10:万网DNSPOD差距缩小
查看>>
debian配置sambd
查看>>
整理grep实战文本搜索过滤技巧
查看>>
Samba通过Openldap统一认证
查看>>
我的友情链接
查看>>
阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年
查看>>
运维工程师必备LVS_NAT && LVS_ DR配置
查看>>
Authentication token manipulation error
查看>>
解决了前些天安装ROR环境时候的一个遗留问题
查看>>
vim删除命令
查看>>
Openstack之网络操作篇
查看>>