#1.入门实例
1.新建一个java工程,导入log4j-1.2.14.jar包,最终工程目录以下
2.src下新建log4j.properties文件java
#指定日志级别为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
关于以上配置的详解请参看个人另外一篇文章
http://www.javashuo.com/article/p-qxayphht-mo.html
3.测试web
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信息"); } }
测试结果,控制台显示spring
[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文件内容apache
[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
基本语法tomcat
log4j.rootLogger=[level],appenderName1,appenderName2,......
用法以下app
#指定日志级别为DEBUG,所以级别高于debug的info < warn < error < fatal都会被输出来 #指定日志输出地名称:stdout、D和E log4j.rootLogger=DEBUG, stdout, D, E
2.2配置日志信息输出目的地appender
语法格式webapp
log4j.appender.appenderName = xxxx log4j.appender.appenderName.option1 = value1 ...... log4j.appender.appenderName.optionN = valueN
用法以下ide
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目录下就有两个文件