研究了好久……先在apache.org上下载一个log4j-1.2.15.jar,导入WEB-INF/lib目录下;
写一个log4j.properties,放入src目录,该内容如下:
log4j.
rootLogger=INFO,FILE
log4j. addivity. org. apache= true
# FILE
log4j. appender. FILE=org. apache. log4j. DailyRollingFileAppender
log4j. appender. FILE. Encoding=GBK
log4j. appender. FILE. Threshold=INFO,DEBUG
log4j. appender. FILE. File=WEB-INF//logs//log
log4j. appender. FILE. DatePattern= '_'yyyyMMdd '.log'
log4j. appender. FILE. layout=org. apache. log4j. PatternLayout
log4j. appender. FILE. layout. ConversionPattern=%d {yyyy-MM-dd HH/:mm/:ss,SSS } [%p ] %m [%c ]%n
log4j. addivity. org. apache= true
# FILE
log4j. appender. FILE=org. apache. log4j. DailyRollingFileAppender
log4j. appender. FILE. Encoding=GBK
log4j. appender. FILE. Threshold=INFO,DEBUG
log4j. appender. FILE. File=WEB-INF//logs//log
log4j. appender. FILE. DatePattern= '_'yyyyMMdd '.log'
log4j. appender. FILE. layout=org. apache. log4j. PatternLayout
log4j. appender. FILE. layout. ConversionPattern=%d {yyyy-MM-dd HH/:mm/:ss,SSS } [%p ] %m [%c ]%n
写一个servlet,加载log4j,并使这些文件保存到服务器目录下:
-
package bootcamp. common. servlet;
-
-
import java.io.FileInputStream;
-
import java.io.IOException;
-
import java.util.Properties;
-
-
import javax.servlet.ServletConfig;
-
import javax.servlet.ServletException;
-
import javax.servlet.http.HttpServlet;
-
-
import org.apache.log4j.Logger;
-
import org.apache.log4j.PropertyConfigurator;
-
-
public class Log4jInitServlet extends HttpServlet {
-
-
@Override
-
public void init (ServletConfig config ) throws ServletException {
-
String filePath = prefix + file;
-
try {
-
props. load (istream );
-
istream. close ( );
-
-
props. setProperty ( "log4j.appender.FILE.File",logFile );
-
-
PropertyConfigurator. configure (props ); //装入log4j配置信息
-
-
Logger logger = Logger. getLogger (Log4jInitServlet. class. getName ( ) );
-
-
logger. info ( "创建日志文件:" + props. getProperty ( "log4j.appender.FILE.File" ) );
-
-
toPrint ( "Could not read configuration file [" + filePath + "]." );
-
toPrint ( "Ignoring configuration file [" + filePath + "]." );
-
}
-
}
-
-
}
-
-
}
配置web.xml
<servlet>
<description>Log4j init Servlet </description>
<display-name>Log4j init Servlet </display-name>
<servlet-name>Log4jInitServlet </servlet-name>
<servlet-class>bootcamp.common.servlet.Log4jInitServlet </servlet-class>
<init-param>
<param-name>log4j </param-name>
<param-value>WEB-INF/classes/log4j.properties </param-value>
</init-param>
<load-on-startup>1 </load-on-startup>
</servlet>
<description>Log4j init Servlet </description>
<display-name>Log4j init Servlet </display-name>
<servlet-name>Log4jInitServlet </servlet-name>
<servlet-class>bootcamp.common.servlet.Log4jInitServlet </servlet-class>
<init-param>
<param-name>log4j </param-name>
<param-value>WEB-INF/classes/log4j.properties </param-value>
</init-param>
<load-on-startup>1 </load-on-startup>
</servlet>
接着,在需要记录日志的类,先创建一个记录器变量
static Logger logger = Logger.
getLogger
(类名.
class.
getName
(
)
);
如果不设成static,可以写作
Logger logger = Logger.
getLogger
(
this.
getClass
(
).
getName
(
)
);
在记录时直接调用以下各种方法需要记录的信息即可。
logger.
debug
(
"调试信息."
);
logger. info ( "一般信息." );
logger. warn ( "警告信息." );
logger. error ( "错误信息." );
logger. fatal ( "致命信息." );
logger. info ( "一般信息." );
logger. warn ( "警告信息." );
logger. error ( "错误信息." );
logger. fatal ( "致命信息." );
※ 不过这种每天生成日志的方法,要从第二天开始才会按照log_yyyyMMdd.log的格式保存。
附录,完整的log4j.properties(使用控制台、数据库、文件保存日志),配解释:
-
# level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
-
log4j. rootLogger=DEBUG,CONSOLE,DATABASE,A1
-
log4j. addivity. org. apache= true
-
-
# 应用于控制台
-
log4j. appender. CONSOLE=org. apache. log4j. ConsoleAppender
-
# 本处设置为 "INFO"以上级别在控制台输出 (默认情况使用rootLogger中的设置 )
-
log4j. appender. CONSOLE. Threshold=INFO
-
log4j. appender. CONSOLE. Encoding=GBK
-
log4j. appender. CONSOLE. layout=org. apache. log4j. PatternLayout
-
log4j. appender. CONSOLE. layout. ConversionPattern= [framework ] %d - %c -%-4r [%t ] %-5p %c %x - %m%n
-
-
# 用于数据库
-
log4j. appender. DATABASE=org. apache. log4j. jdbc. JDBCAppender
-
log4j. appender. DATABASE. driver=oracle. jdbc. driver. OracleDriver
-
log4j. appender. DATABASE. user=Nation
-
log4j. appender. DATABASE. password= 1
-
# 本处设置为 "WARN"以上级别在数据库存储 (默认情况使用rootLogger中的设置 )
-
log4j. appender. DATABASE. Threshold=WARN
-
log4j. appender. DATABASE. sql=INSERT INTO T_LOG4J (stamp,thread,infolevel, class,messages ) VALUES ( '%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m' )
-
# 写入数据库中的表LOG4J的Message字段中,内容%d(日期)%c: 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行
-
log4j. appender. DATABASE. layout=org. apache. log4j. PatternLayout
-
log4j. appender. DATABASE. layout. ConversionPattern= [framework ] %d - %c -%-4r [%t ] %-5p %c %x - %m%n
-
-
# 每天新建日志
-
log4j. appender. A1=org. apache. log4j. DailyRollingFileAppender
-
log4j. appender. A1. Encoding=GBK
-
log4j. appender. A1. Threshold=DEBUG
-
log4j. appender. A1. DatePattern= '.'yyyy-MM-dd
-
log4j. appender. A1. layout=org. apache. log4j. PatternLayout
-
log4j. appender. A1. layout. ConversionPattern=%d {ABSOLUTE } %5p %c { 1 }:%L : %m%n
log4j.rootLogger 的等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示