1.这个log4j的下载

下载

http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.15/apache-log4j-1.2.15.zip

2.将log4j-1.2.15.jar 导入近来

3.建立一个文件 “Log4j.properties” 将下面的代码复制到这个文件里!

### 输出到日志文件 ###
#log4j.properties

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

###结束

4.建立一个java 我的是logq.java

这是代码

import org.apache.log4j.Logger;
public class Logq {
private static Logger logger=Logger.getLogger(Logq.class);
public static void main(String[] args) {

logger.debug( " debug " );
logger.error( " error " );

}
}

这样你就知道如何使用了!

下来介绍一下相关的知识:
#log4j的配置文件
#配置根日志
#格式:log4j.rootLogger=级别,输出源1,输出源2......
#其中级别有:DEBUG<INFO<WARN<ERROR<FATAL
#特别注意:这里定义了高级别的日志则类中低级别的不会写入比此低的信息
#输出源是:自定义的名字
log4j.rootLogger=INFO,FILE1,FILE2,FILE3

#配置输出源所对应的辅助类
#格式:log4j.appender.输出源=类名<类名可以不同形式>
log4j.appender.FILE1=org.apache.log4j.FileAppender
#指定文件名
log4j.appender.FILE1.File=e:/1.log
#指定布局方式(消息翻个如文件之后怎么布局)
log4j.appender.FILE1.layout=org.apache.log4j.SimpleLayout

#高级日志配置1
log4j.appender.FILE2=org.apache.log4j.FileAppender
log4j.appender.FILE2.File=e:/2.html
log4j.appender.FILE2.layout=org.apache.log4j.HTMLLayout

#高级日志配置2 自定义布局
log4j.appender.FILE3=org.apache.log4j.FileAppender
log4j.appender.FILE3.File=e:/3.log
log4j.appender.FILE3.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE3.layout.conversionPattern=%t;%p;%c;%m;%d;%l;%n
====================================================================
#常见的几种自定义日志
#%t:线程名称
#%p:日志级别
#%c:日志消息所在类名 <常用>
#%m:消息内容
#%d:发生时间 <常用>
#%l:行数 <常用>
#%n:换行 <常用>
#注:如果要显示中文,则需要转码native2ascii
%表示output输入
p表示level
c表示调用的类
m表示log时的信息
n表示回车
M表示输出log时的信息的那个方法
F表示输出log时的信息的那个文件名
L表示输出log时的信息所在类的行数

LOG4J中PatternLayout的布局参数
ConversionPattern参数的格式含义
格式名 含义
%c 输出日志信息所属的类的全名,可以在其后指定继承的层数,比如{2}输出到其父类,{3}输出到父类的父类。
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%M 输出日志信息所属的函数的名称、参数类型、返回类型。
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推。可以用%5p或者%-5p来强制输出5个字符,不足的在前面或者后面补充空格。
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
%f 输出日志信息所属的类的类名。(测试的结果似乎应该是%F,而且输出的是那个类的文件名)
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
这个测试结果出入比较大。%L确实可以输出上面所说的行数。但是%l输出的却相当于%c.函数名(%F:%L)。

Log4J使用完全手册 -grule -logcode

Log4J是Apache的一个开放源代码项目(http://logging.apache.org/log4j/docs/),它是一个日志操作包。
通过使用Log4J,可以指定日志信息输出的目的地,控制每一条日志的输出格式,定义日志信息的级别。所
有这些功能通过一个配置文件灵活进行配置。

一、LOG4J组成

LOG4J主要由三大组件组成:
. Logger: 决定什么日志信息应该被输出、什么日志信息应该被忽略;
. Appender: 指定日志信息应该输出到什么地方, 这些地方可以是控制台、文件、网络设备;
. Layout: 指定日志信息的输出格式;

一个Logger可以有多个Appender,也就是说日志信息可以同时输出到多个设备上,每个Appender对应
一种Layout(示例见下图)。

↗ Appender1 → Layout
/ 
Logger
﹨ 
↘ Appender2 → Layout

二、Logger组件

1. Logger组件提供的方法:

Logger组件是LOG4J的核心组件,它代表了Log4J的日志记录器,它能够对日志信息进行分类筛选。它
由org.apache.log4j.Logger类实现,提供了如下方法:

package org.apache.log4j;

public class Logger {

// Creation & retrieval methods:
public static Logger getRootLogger();
public static Logger getLogger(String name);

// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);

// generic printing method:
public void log(Priority p, Object message);
}

2. 在配置文件中配置Logger组件

可在Log4J配置文件中配置自己的Logger组件,示例:

log4j.logger.myLogger=WARN

以上代码定义了一个Logger组件,名称为myLogger,日志级别为WARN。

3. 日志级别种类:

一共有五种,级别由高到低依次是:fatal、error、warn、info、debug。获得Logger实例后,我们可
调用以下方法之一输出日志信息:

public void debug(Object message); //输出debug级别的日志信息;
public void info(Object message); //输出info级别的日志信息;
public void warn(Object message); //输出warn级别的日志信息;
public void error(Object message); //输出error级别的日志信息;
public void fatal(Object message); //输出fatal级别的日志信息;
public void log(Priority p, Object message);//输出参数Priority指定级别的日志信息;

以上方法只有当它的级别大于或等于Logger组件配置的日志级别时才调用。以前面我们配置的myLogger
为例,它的日志级别为WARN, 那么在程序中,它的warn()、error()、fatal()方法会被执行。对于log()
方法,只有当它的参数Priority指定的日志级别大于或等于WARN时,它才会被执行。

4. 为什么需要对日志进行分级?

在写程序的时候,为了调试程序,我们会在很多出错的地方输出大量的日志信息。当程序调试完,不需要
这些信息时,将程序中这些输出日志信息代码删除吗?这样费时费力,对于大型程序几乎不可行。通过对
日志分级,假如不想输出WARN级别的日志信息,则Logger组件的级别调高即可,省时省心。

5. Logger组件的继承性

Log4J提供了一个root Logger,它是所有Logger组件的“祖先”,它永远存在,且不能通过名字检索或引
用,通过Logger.getRootLogger()方法取得它。配置root Logger代码:

log4j.rootLogger=INFO,console

可在配置文件中方便地配置存在继承关系的Logger组件,凡是在符号“.”后面的组件都会成为在符号“.”
前面的Logger组件的子类。例如:

log4j.apache.myLogger=WARN
log4j.apache.myLogger.mySonLogger=,file

以上代码中, mySonLogger是myLogger的子类Logger组件。Logger组件的继承关系:
. 如果子类Logger组件没有定义日志级别,则将继承父类的日志级别;
. 如果子类Logger组件定义了日志级别,就不会继承父类的日志级别;
. 黙认情况下,子类Logger组件会继承父类所有的Appender,把它们加入到自己的Appener;
. 如果把子类Logger组件的additivity标志设为false,那么它就不会继承父类Appender。additivity标志
默认值为false;

以上配置的三个Logger继承关系示例如图:

root Logger: 日志级别=INFO appender清单=console

myLogger: 日志级别=WARN appender清单=null

mySonLogger: 日志级别=null appender清单=file

这三个Logger组件实际日志级别和Appender如下表:

Logger组件 日志级别 Appender清单
root Logger INFO console
myLogger WARN console(继承)
mySonLogger WARN(继承) file,console(继承)

三、Appender组件

Appender组件决定将日志信息输出到什么地方。支持以下目的地:
. 控制台(Console);
. 文件(File);
. GUI组件(GUI component);
. 套接口服务器(Remote socket server);
. NT的事件记录器(NT Event Logger);
. UNIX Syslog守护进程(Remote UNIX Syslog daemon);

一个Logger可同时对应多个Appender,示例:myLogger配置二个Appender: 一个file, 一个是console:

log4j.logger.myAppender=WARN,file,console

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.txt

log4j.apender.console=org.apache.log4j.ConsoleAppender

四、Layout组件

Layout组件决定日志输出格式,有以下几种类型:
. org.apache.log4j.HTMLLayout(以HTML表格形式布局);
. org.apache.log4j.PatternLayout(可以灵活地指定布局模式);
. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串);
. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);

为名称为console的Appender配置SimpleLayout,代码如下:

log4j.appender.console.layout=org.apache.log4j.SimpleLayout

输出日志格式如下:

WARN - This is a log message from the myLogger

为名称为file的Appender配置PatternLayout,代码如下:

log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%t %p - %m%n

输出日志格式如下:

THREAD-1 WARN - This is a log message from the myLogger

PatternLayout让开发者依照ConversionPattern定义输出格式。ConversionPattern中一些指定日志
内容和格式的预定义符号说明如下:

符号 描述
%r 自程序开始后消耗的毫秒数
%t 表示日志记录请求生成的线程
%p 表示日专语句的优先级
%r 与日志请求相关的类别名称
%c 日志信息所在的类名
%m%n 表示日志信息的内容

五、Log4J的基本用法

1. 定义配置文件
Log4J支持二种配置文件格式:XML和Java属性文件(采用“键=值”形式)。以下为Java属性文件
格式配置文件:

. 配置Logger组件

配置root Logger语法为:log4j.rootLogger=[priority],appenderName,appenderName,...
配置自定义Logger组件语法为:log4j.logger.loggerName=[priority],appenderName,appenderName,...

其中:priority为日志级别,可选值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL;
appenderName指定Appender组件,可指定多个;

. 配置Appender组件

配置日志信息输出目的地Appender, 语法为:
log4j.appender.appenderName=fully.ualified.name.of.appender.class
log4j.appender.appenderName.option1=value1
...
log4j.appender.appenderName.optionN=valueN

Log4J提供的Appender有以下几种:

a. org.apache.log4j.ConsoleAppender(控制台);
b. org.apache.log4j.FileAppender(文件);
c. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件);
d. org.apache.log4j.RollingFileAppender(文件大小到指定尺寸产生一个新的文件);
e. org.apache.log4j.WriteAppender(将日志信息以流格式发送到任意指定地方);

. 配置Layout组件

配置Layout组件语法为:
log4j.appender.appenderName.layout=fully.ualified.name.of.appender.class
log4j.appender.appenderName.layout.option1=value1
...
log4j.appender.appenderName.layout.optionN=valueN

下面为一配置文件示例,文件名为log4j.properties:

## LOGGERS ##

#configure root logger
log4j.rootLogger=INFO,console
#define a logger named myLogger
log4j.logger.myLogger=WARN
#define a second logger that is a child to myLogger
log4j.logger.myLogger.mySonLogger=,file

## APPENDERS ##

#define an appender named console, which is set to be a ConsoleAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender

# define an appender named file, which is set to be a RollingFileAppender
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=log.txt

## LAYOUTS ##
# assian a SimpleLayout to console appender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout

# assian a PatternLayout to file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%t%p-%m%n

2. 程序中使用Log4j

. 获得日志记录器:

获得rootLogger:Logger rootLogger=Logger.getRootLogger();
获得自定义Logger:Logger myLogger = Logger.getLogger("log4j.logger.myLogger");

. 读取日志记录器,配置Log4J环境;

a. BasicConfigurator.configure(): 自动快速地使用默认Log4J环境;
b. Property.configurator.configure(String configFilename): 读取使用Java属性格式的配置文件并配置Log4J环境;
c. DOMConfigurator.configure(String filename): 读取XML形式的配置文件并配置LOG4J环境;

. 输出日志信息;

在程序代码中需要生成日志的地方,调用Logger的各种输出日志方法输出不同级别的日志,例如:

myLogger.debug("Thie is a log message from the " + myLogger.getName());

下面为一使用Log4J的程序,程序名为Test.java:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Test {

public static void main(String[] args) {
//Get an instance of the myLogger
Logger myLogger = Logger.getLogger("myLogger");

//Get an instance of the childLogger
Logger mySonLogger = Logger.getLogger("myLogger.mySonLogger");
//Load the proerties using the PropertyConfigurator
PropertyConfigurator.configure("log4j.properties");

//Log Messages using the Parent Logger
myLogger.debug("Thie is a log message from the " + myLogger.getName());
myLogger.info("Thie is a log message from the " + myLogger.getName());
myLogger.warn("Thie is a log message from the " + myLogger.getName());
myLogger.error("Thie is a log message from the " + myLogger.getName());
myLogger.fatal("Thie is a log message from the " + myLogger.getName());

mySonLogger.debug("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.info("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.warn("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.error("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.fatal("Thie is a log message from the " + mySonLogger.getName());
}
}

程序运行结果为:

WARN - Thie is a log message from the myLogger
ERROR - Thie is a log message from the myLogger
FATAL - Thie is a log message from the myLogger
WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

另在Test.class所在的目录下看到一个log.txt文件,内容如下:

WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

如将配置文件log4j.properties中语句

log4j.logger.myLogger.mySonLogger=,file

改为

log4j.logger.myLogger.mySonLogger=,file,console

再次运行程序,结果如下:

WARN - Thie is a log message from the myLogger
ERROR - Thie is a log message from the myLogger
FATAL - Thie is a log message from the myLogger
WARN - Thie is a log message from the myLogger.mySonLogger
WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger 
FATAL - Thie is a log message from the myLogger.mySonLogger

mySonLogger的日志在控制台上输出了二次,这是因为mySonLogger继承了父类console Appender,
本身又定义了一个console Appender, 因而有二个console Appender。

六、在web应用中使用Log4J

创建一个Servlet,在它初始化方法中读取Log4J配置文件并配置Log4J环境,这个Servlet在Web应用启
动时候被加载和初始化,然后就可在其它Web组件中获取Logger对象并输出日志。

1. 创建用于配置Log4J环境的Servlet

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

import org.apache.log4j.PropertyConfigurator;

public class Log4JServlet extends HttpServlet {
public void init() throws ServletException {
String path = getServletContext().getRealPath("/");
//getInitParameter("propfile")方法从web.xml文件中读取Log4J配置文件的名字"profile"。
String propfile = path + getInitParameter("propfile");
PropertyConfigurator.configure(propfile);
}
}

该Servlet在web.xml中的配置如下:
<servlet>
<servlet-name>log4jServlet</servlet-name>
<servlet-class>Log4JServlet</servlet-class>
<init-param>
<param-name>propfile</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

2. 在login.jsp中输出日志
<%@page import="org.apache.log4j.Logger"%>
<html>
<head>
<title>login</title>
</head>
<body>
<%
Logger myLogger = Logger.getLogger("myLogger");
Logger mySonLogger = Logger.getLogger("myLogger.mySonLogger");
myLogger.debug("Thie is a log message from the " + myLogger.getName());
myLogger.info("Thie is a log message from the " + myLogger.getName());
myLogger.warn("Thie is a log message from the " + myLogger.getName());
myLogger.error("Thie is a log message from the " + myLogger.getName());
myLogger.fatal("Thie is a log message from the " + myLogger.getName());

mySonLogger.debug("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.info("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.warn("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.error("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.fatal("Thie is a log message from the " + mySonLogger.getName());
%>
<br>
<form name="loginForm" method="post" action="dispatcher">
username: <input type="text" name="username">
<br>
password: <input type="text" name="password">
<br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

3. 发布运行使用Log4J的web应用
1) 将Log4J的JAR文件拷贝至目录:<WEB应用所在目录>/WEB-INF/lib
2) 创建Log4J的配置文件log4j.properties, 存放目录为:<WEB应用所在目录>/WEB-INF。内容同前面配置文件示例。
3) 编译Log4JServlet, 存放至目录: <WEB应用所在目录>/WEB-INF/classes
4) 修改web.xml文件,加入以下内容:
<servlet>
<servlet-name>log4jServlet</servlet-name>
<servlet-class>Log4JServlet</servlet-class>
<init-param>
<param-name>profile</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
5) 启动服务器,访问login.jsp页面,在服务器控制台上看到如下日志:
WARN - Thie is a log message from the myLogger
ERROR - Thie is a log message from the myLogger
FATAL - Thie is a log message from the myLogger
WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

另在<WEB应用所在目录>/WEB-INF目录下看到一个log.txt文件,内容如下:

WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

1.导入包

2.在WEB-INF目录下添加一个配置文件log4j.properties

log4j.rootLogger=DEBUG,A1,A2

# 输出到控制台

log4j.appender.A1=org.apache.log4j.ConsoleAppender

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

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [/u4fe1/u606f] %m%n

# 输出到日志文件

log4j.appender.A2=org.apache.log4j.FileAppender

log4j.appender.A2.File=${catalina.home}/webapps/test_log4j/logging.log

log4j.appender.A2.Append=true

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

log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [/u4fe1/u606f] %m%n

3.在JSP中应用Log4j

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<%@ page import="org.apache.log4j.*" %>

<html>

<head>

<title>Test Log4j</title>

</head>

<body>

Test Log4j <br>

<hr>

<%

//载入配置文件

PropertyConfigurator.configure(request.getRealPath("WEB-INF/log4j.properties"));

//取得日志记录器

Logger logger = Logger.getLogger(this.getClass());

logger.fatal("这是一条从index.jsp产生的fatal信息!");

logger.error("这是一条从index.jsp产生的error信息!");

logger.warn("这是一条从index.jsp产生的warn信息!");

logger.debug("这是一条从index.jsp产生的debug信息!");

logger.info("这是一条从index.jsp产生的info信息!");

%>

</body>

</html>

-----------------------

Log4j在Servlet中的应用

package com.yzk.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.*;

public class TestLog4j extends HttpServlet {

Logger logger = null;

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

response.setCharacterEncoding("GB18030");

logger.fatal("这是一条从 TestLog4j 产生的fatal信息!");

logger.error("这是一条从 TestLog4j 产生的error信息!");

logger.warn("这是一条从 TestLog4j 产生的warn信息!");

logger.debug("这是一条从 TestLog4j 产生的debug信息!");

logger.info("这是一条从 TestLog4j 产生的info信息!");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doGet(request, response);

}

public void init() throws ServletException {

PropertyConfigurator.configure(this.getServletContext().getRealPath("WEB-INF/log4j.properties"));

logger = Logger.getLogger(this.getClass());

}

}

WEB.XML中的配置

<servlet>

<servlet-name>TestLog4j</servlet-name>

<servlet-class>com.yzk.servlet.TestLog4j</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>TestLog4j</servlet-name>

<url-pattern>/servlet/TestLog4j</url-pattern>

</servlet-mapping>

---------------------------------------

修改成在Tomcat启动时自启动日志

新建一个Servlet来专门做初始化的工作

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.*;

public class InitLog4j extends HttpServlet {

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

}

public void init() throws ServletException {

String basePath = getServletContext().getRealPath("/");

String confFile = getInitParameter("log4j");

if (confFile!=null){

PropertyConfigurator.configure(basePath+confFile);

}else{

System.out.println("指定的Log4j配置文件不存在,将影响应用中的日志记录输出!");

}

}

}

在web.xml中的修改配置

<servlet>

<servlet-name>TestServlet</servlet-name>

<servlet-class>TestServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>InitLog4j</servlet-name>

<servlet-class>InitLog4j</servlet-class>

<init-param>

<param-name>log4j</param-name>

<param-value>WEB-INF/log4j.properties</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>TestServlet</servlet-name>

<url-pattern>/TestServlet</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>InitLog4j</servlet-name>

<url-pattern>/InitLog4j</url-pattern>

</servlet-mapping>

package com.yzk.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.*;

public class TestLog4j extends HttpServlet {

Logger logger = null;

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

response.setCharacterEncoding("GB18030");

logger.fatal("这是一条从 TestLog4j 产生的fatal信息!");

logger.error("这是一条从 TestLog4j 产生的error信息!");

logger.warn("这是一条从 TestLog4j 产生的warn信息!");

logger.debug("这是一条从 TestLog4j 产生的debug信息!");

logger.info("这是一条从 TestLog4j 产生的info信息!");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doGet(request, response);

}

public void init() throws ServletException {

//PropertyConfigurator.configure(this.getServletContext().getRealPath("WEB-INF/log4j.properties"));

logger = Logger.getLogger(this.getClass());

}

}
http://blog.donews.com/dyh/archive/2005/05/11/374589.aspx 本文
http://www.cjsdn.net/post/view?bid=51&id=125515&sty=1 log4j使用大全
http://hi.baidu.com/my3495/blog/item/625e5390d7ac898ba877a472.html
http://hi.baidu.com/hxzon/blog/item/901fcfea1f57b1d5d439c92e.html
http://hi.baidu.com/yzksoso/blog/item/9cdc82449e84514b500ffe17.html

(转摘自:http://blog.csdn.net/pingfanhuan/archive/2008/12/30/3634560.aspx)

apache log4j-1.2.15的使用相关推荐

  1. Apache Log4j 学习笔记

    Apache Logging Project Homepage: http://logging.apache.org Log4j的类图 Logger - 日志写出器,供程序员输出日志信息 Append ...

  2. Apache Log4j任意代码执行漏洞安全风险通告第三次更新

    奇安信CERT 致力于第一时间为企业级用户提供安全风险通告和有效解决方案. 风险通告 近日,奇安信CERT监测到Apache Log4j存在任意代码执行漏洞.经过分析,该组件存在Java JNDI注入 ...

  3. Apache Log4j 远程代码注入漏洞

    漏洞说明 2021年12月9日,Apache Log4j2 Java 日志模块存在远程命令执行漏洞可直接控制目标服务器问题,攻击者攻击难度极低.由于 Apache Log4j2 某些功能存在递归解析功 ...

  4. 网安大事件丨Fortinet对Apache Log4j漏洞利用的全面复盘与防御

    起底Apache Log4j漏洞: 如何出现.如何被利用与如何防御 受影响平台: 任何使用Log4j2漏洞版本的应用程序和服务 受影响用户: 任何使用Log4j的具备该漏洞版本的组织 影响: 远程攻击 ...

  5. Flink等多组件受影响,Apache Log4j曝史诗级漏洞

    全球知名开源日志组件Apache Log4j被曝存在严重高危险级别远程代码执行漏洞,攻击者可以利用该漏洞远程执行恶意代码.据阿里云通报,由Apache Log4j2某些功能存在递归解析功能,攻击者可直 ...

  6. Apache Log4j 远程代码执行漏洞直接让安全圈过年~

    在此声明:本文章的目的是让大家参考此漏洞的修复方法切记不要批量刷SRC,否则后果自负与本人无关, 安全圈直接过年了 苹果 百度 shiro从2014年-2022年坚持到了现在,log4j是下一个能养活 ...

  7. Apache Log4j 漏洞持续爆雷,还能安心玩论坛吗?

    这一周,各家互联网公司的程序员朋友们,都快被一个叫 Apache Log4j的史诗级漏洞给搞疯了! 这个漏洞源于一个叫 Log4J2 的 Java 开源日志框架,它在用 Java 敲代码的码农群体里可 ...

  8. log4j:WARN No such property [datePattern] in org.apache.log4j.RollingFileAppender.

    log4j:WARN No such property [datePattern] in org.apache.log4j.RollingFileAppender. log4j:ERROR setFi ...

  9. org.apache.log4j.Logger详解

    1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开 ...

  10. IDEA里运行代码时出现Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger的解决办法(图文详解)...

    问题详情 运行出现log4j的问题 "C:\Program Files\Java\jdk1.8.0_66\bin\java" -Didea.launcher.port=7533 & ...

最新文章

  1. oracle 取日期 加天,oracle日期,获取年月日等函数、日期函数、时区
  2. linux虚拟主机管理系统wdcp系列教程之三
  3. windows下磁盘IO性能数据评测
  4. Ubuntu-Server 20.04 安装详细过程(图文)
  5. 牛客假日团队赛6 D 迷路的牛 (思维)
  6. 天池竞赛-津南数字制造算法挑战赛【赛场二】解决方案分享
  7. 11.python并发入门(part5 event对象)
  8. MFC改变对话框背景颜色
  9. python模块下载失败_ubuntu16.04安装python的requests模块失败,怎么解决?
  10. mysql索引讲解最好
  11. 计算机考场桌子大小,自己打卧室电脑书桌最小宽度尺寸多少合适
  12. Java字符串排序(根据字节及字符长度进行排序)
  13. 计算机模拟超光速,超光速十代笔记本电脑怎么样-电脑测评
  14. Java实现微信退付款
  15. spring boot控制AD域 报错解决
  16. ip route常用语法
  17. 安卓集成云闪付,以及So库冲突多moudle项目解决办法
  18. python中文(汉字)转拼音
  19. php 批量压缩上传图片,Linux环境下,使用Shell脚本自动批量压缩图片
  20. 【spring注解】spring注解入门

热门文章

  1. 车辆密度估计--Understanding Traffic Density from Large-Scale Web Camera Data
  2. 大数据学习笔记二:Ubuntu/Debian 下安装大数据框架Hadoop
  3. LeetCode 804 Unique Morse Code Words--python,java解法
  4. mysql 主从复制 position_mysql 主从复制原理及步骤。
  5. centos7 pam mysql.so,Centos7下搭建FTP服务器(博主亲测不坑)
  6. android 获取 第三方应用,​android PackageManager的使用如何获取第三方应用程序(包)的信息,求大神指点...
  7. OpenFeign 全方位讲解
  8. 今天清华学长手把手带你做UI自动化测试
  9. tp5 异步处理_tp5.1 swoole 实现异步处理
  10. 一点通路由器模拟软件最新版_2019年高压电工作业考试最新版题库及答案(全部判断题)...