java Web应用配置log4j日志记录

第一步:首先建立一个WEB工程,去log4j官网下log4j的JAR包导入到工程的lib目录下

第二步:在src目录下建一个log4j.properties 文件,文件命名可以由自己,只是记加载时候和这里名字一致就行;

log4j.properties  里边的内容如下:

### set log levels ###

log4j.rootLogger = debug,stdout,E

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 =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.E= org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =${catalina.home}/logs/log_

log4j.appender.E.DatePattern=yyyy-MM-dd‘.log‘

log4j.appender.E.Threshold =DEBUG

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p]  %m%n

可以单指定日志输出到某个文件:

log4j.logger.pay-log=Info,pay-log

log4j.appender.pay-log=org.apache.log4j.DailyRollingFileAppender

log4j.appender.pay-log.File=D:/logs/pay-log.log

log4j.appender.pay-log.DatePattern=‘.‘yyyy-MM-dd

log4j.appender.pay-log.Threshold =DEBUG

log4j.appender.pay-log.layout=org.apache.log4j.PatternLayout

log4j.appender.pay-log.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p]  %m%n

解释下几个常用的,其它的在详细的,请自己去网上查找资料:

log4j.rootLogger = debug,stdout,E  意思是父类logger 会以比debug 级别高的日志输出到 stdout,E 两个地方,子类也一样

stdout是一个日志记录配置,它的意思是把日志输出到控制台上,也就是这个配置属性--->log4j.appender.stdout.Target = System.out ,到时候到了生产上可以注解掉就可以了。

E是一个日志记录配置,它是把日志文件记录到文件中去,log4j.appender.E.File =${catalina.home}/logs/log_  是放日志文件的路径,其中${catalina.home}是容器的路径

log4j.appender.E= org.apache.log4j.DailyRollingFileAppender  这个属性配置是一天产生一个新的日志文件(还有其它配置方式,这个是用的最多的)

log4j.appender.E.DatePattern=yyyy-MM-dd‘.log‘  这个属性是以时间为名字的文件日志,形式如下:

log_2011-06-26.log,log_2011-06-28.log,不过第一个生成的日志文件的名字是:log_

log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p]  %m%n  这个是输出日志内容格式,详细情况请自己查阅资料;

log4j.appender.E.Threshold =DEBUG  这个是输出日志级别(意思是只输出比DEBUG级别高的日志信息);

#appender名字定义

log4j.rootLogger=INFO,FILE,consoleAppender,RollingFile,MAIL,DailyRollingFile,DATABASE

log4j.addivity.org.apache=true

#配置日志信息输出目的地

#log4j.appender.appenderName = fully.qualified.name.of.appender.class

#(如:log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender)

# 1.org.apache.log4j.ConsoleAppender(控制台)

# 2.org.apache.log4j.FileAppender(文件)

# 3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

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

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

#配置日志信息的格式

#log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

#(如:log4j.appender.RollingFile.layout = org.apache.log4j.HTMLLayout)

# 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),

# 2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

# 3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

# 4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

#日记记录的优先级:priority,优先级由高到低分为

# OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。

# Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。

# ERROR 为严重错误 主要是程序的错误

# WARN 为一般警告,比如session丢失

# INFO 为一般要显示的信息,比如登录登出

# DEBUG 为程序的调试信息

#输出格式:layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):

# %c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)

# %d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}

# %l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数

# %n 换行符

# %m 输出代码指定信息,如info(“message”),输出message

# %p 输出优先级,即 FATAL ,ERROR 等

# %r 输出从启动到显示该log信息所耗费的毫秒数

# %t 输出产生该日志事件的线程名

#ConsoleAppender,控制台输出

#FileAppender,文件日志输出

#SMTPAppender,发邮件输出日志

#SocketAppender,Socket日志

#NTEventLogAppender,Window NT日志

#SyslogAppender,

#JMSAppender,

#AsyncAppender,

#NullAppender

第三步:配置容器起动时候加载log4j配置文件:

建立一个servlet内容如下:

package com.tchzt.logTest;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import org.apache.log4j.PropertyConfigurator;

public class Log4jInit extends HttpServlet {

private static final long serialVersionUID = 1L;

public void destroy() {

super.destroy();

}

public Log4jInit() {

super();

}

/**

* Initialization of the servlet. <br>

*

* @throws ServletException if an error occurs

*/

public void init() throws ServletException {

String file =this.getInitParameter("log4j");//从web.xml配置读取,名字一定要和web.xml配置一致

if(file != null){

PropertyConfigurator.configure(file);

}

}

}

web.xml配置:

<servlet>

<servlet-name>Log4jInit</servlet-name>

<servlet-class>com.tchzt.logTest.Log4jInit</servlet-class>

<init-param>

<param-name>log4j</param-name>//这个是名字是下边路径配置的标识(好像KEY一样)

<param-value>/WEB-INF/classes/log4j.properties</param-value>//这是容器初始化时候加载log4j配置文件的路径(这好像一个value);

</init-param>

</servlet>

好了基本上配置完了开始下测试了:

测试类:建立一个servlet内容如下:

package com.tchzt.logTest;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

public class Test extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* The doGet method of the servlet. <br>

*

* This method is called when a form has its tag value method equals to get.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//如果直接 className.class 日志输出到全局的 即rootLogger 指定的文件中

Logger logger = Logger.getLogger(Test.class.getName());

//如果指定logger名字,则是把日志,输出到pay-log 指定的日志文件中去

Logger logger = Logger.getLogger(“pay-log”);

MyLog4j.getSomething();

System.out.println("================97987==============");

logger.info("日志信息开始!");

logger.info("日志信息结束!");

try {

Integer.parseInt("a");

} catch (NumberFormatException e) {

logger.error("解析数字出现异常",e);

e.printStackTrace();

}

}

/**

* The doPost method of the servlet. <br>

*

* This method is called when a form has its tag value method equals to post.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

this.doGet(request, response);

}

}

这个servlet 的web.xml配置如下:

<servlet>

<servlet-name>Test</servlet-name>

<servlet-class>com.tchzt.logTest.Test</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Test</servlet-name>

<url-pattern>/servlet/Test</url-pattern>

</servlet-mapping>

启动容器:输出URL:http://localhost:8080/Log4jWebTest/servlet/Test

第二次关闭容器,修改系统时间;在启动容器,最后生成日志文件如下:

log_;log_2011-06-26.log;log_2011-06-28.log;log_2011-06-30.log

内容这里选一个文件里的内容:

2011-06-30 21:59:28[test.jsp] [http-8080-2:0] - [ERROR]  asdfasdf

2011-06-30 21:59:28[test.jsp] [http-8080-2:16] - [INFO]  Test Logging in JSP

2011-06-30 21:59:28[test.jsp] [http-8080-2:16] - [FATAL]  Test fatal logging in jsp page.

2011-06-30 21:59:28[test.jsp] [http-8080-2:16] - [ERROR]  解析数字出现异常

java.lang.NumberFormatException: For input string: "a"

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at org.apache.jsp.index_jsp._jspService(index_jsp.java:90)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Unknown Source)

2011-06-30 21:59:37[com.tchzt.logTest.MyLog4j] [http-8080-2:8641] - [ERROR]  java.io.FileNotFoundException: F:\tt.txt (系统找不到指定的文件。)

2011-06-30 21:59:37[com.tchzt.logTest.Test] [http-8080-2:8656] - [INFO]  日志信息开始!

2011-06-30 21:59:37[com.tchzt.logTest.Test] [http-8080-2:8656] - [INFO]  日志信息结束!

2011-06-30 21:59:37[com.tchzt.logTest.Test] [http-8080-2:8656] - [ERROR]  解析数字出现异常

java.lang.NumberFormatException: For input string: "a"

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at com.tchzt.logTest.Test.doGet(Test.java:33)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Unknown Source)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 14:23:23

java Web应用配置log4j日志记录的相关文章

ELK菜鸟手记 (一) 环境配置+log4j日志记录

1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一个关键字查询日志中某个关键信息相当困难. 这个时候,ELK诞生了. 什么是ELK? 简单来说:它是一套完整的日志记录和分析的解决方案平台. 2. 技术栈介绍 ELK = Elasticsearch + Logstash + Kibana 2-1) Elasticsearch: ( Elasticsearch is a distribu

Java Web动态配置log4j

导入log4j的jar包, 在web.xml中做如下配置 <!-- Log4j Configuration --> <context-param> <param-name>webAppRootKey</param-name> <param-value>myapplication.root</param-value> </context-param> <context-param> <param-name&

springboot配置Log4j日志

目录 Pom.xml添加依赖 在控制器记录日志 使用AOP统一处理Web请求日志 导入AOP依赖 写一个切面类 @(springboot配置Log4j日志) 首先要导入log4j属性文件 Log4j.properties 在resources文件夹下导入log4j.properties文件,复制下面的内容时,每行后面如果有空格的话一定要去掉,log4j.appender.File.File为log日志存放的路径. log4j.rootLogger=INFO,Console,File log4j.

基于JMX动态配置Log4J日志级别

先来看比较low的修改日志级别的方式,在写程序里面. http://blog.gssxgss.me/java%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E6%94%B9%E5%8F%98%E6%97%A5%E5%BF%97%E7%BA%A7%E5%88%AB/ 再来通过JMX的方法动态修改程序的日志级别. https://blog.csdn.net/z2007130205/article/details/23910431 package com.m

windows + myeclipse 调试 linux + tomcat 的java web服务 配置方式

一.linux tomcat配置和启动 1.catalina.sh第一行添加 declare -x CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000" 2.启动JPDA(这是tomcat下的启动方式,别的服务器可能会不一样,但道理是一样的) ./catalina.sh jpda start 3.启动web服务 ./start.sh 二.在windows端的myecli

log4j日志记录简析

log4j的日志系统包含两个主要概念:Logger与Appender,前者负责触发日志记录动作,后者决定日志输出至何处. 各个Logger实例之间可能存在父子关系,所有实例都有一个共同的root Logger实例,如下文的第一行的rootCategory就是root Logger实例. log4j示例文件如下: log4j.rootCategory=info,stdout # CONSOLE appender not used by default log4j.appender.stdout=o

在android中配置 slf4j + log4j 日志记录框架

需求: 在项目开发中,需要记录 操作日志 .起初自己写了个简单的日志记录文本写入到文本的方法,后来随着项目的膨胀,需要考虑更多的操作,开始考虑性能问题. 实现: 考虑使用 slf4j + log4j 框架来实现.slf4j 是日志记录的一个facade,支持多种日志框架.log4j是个很优秀的日志记录框架. 实现: 下载类库: 先到各主站点下载类库 slf4j 网址 :http://www.slf4j.org/download.html log4j网址: http://logging.apach

eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序

一.新建maven的java工程 1.eclipse里file-new-other,选择maven Project 2.选中 Use default Workspace location,然后 next 3.选择maven-archetype-quitstart,然后next 4.填入工程信息,然后finish 6.新建好的工程结构如图 7.将test下和java下自动生成的java类删除,右键build-path选择好jdk版本,整个工程就建好了. 二.配置log4j 1.将工程目录调整成下图

java代码中添加log4j日志

1.得到记录器 使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息.其语法为: public static Logger getLogger( String name), 通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器.Name一般取本类的名字,比如: static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ; 2.读取配置文件 当获得了日志记录器之后,第