深入浅析Java Web Log4j配置
什么是Log4j?
Log4j 是一个基于Java的开源日志记录工具。它被设计为灵活且可扩展的,但也必须是高效的。为了实现这个目标,Log4j 架构被划分成三层 — API 层、内核层和附加组件。
Log4j的配置
在Java web项目中,我们可以通过配置文件来指定Log4j的应用。Log4j的配置文件是一个文本文件,通常为log4j.properties或log4j.xml。
配置文件语法
使用注释:使用#或!符号来添加注释。
定义Logger:Logger是日志记录器,每个Logger都有一个唯一的名字,用于区分不同的logger。定义方法如下:
log4j.logger.logger_name = level, appender_name1, appender_name2, ...
- logger_name 为Logger的名称
- level 表示Logger对应的日志记录级别
- appender_name1, appender_name2 ...表示Logger输出的目的地(即 appenders),可以指定多个
定义Appender:Appender是输出目的地,可以是控制台、文件等。定义方法如下:
log4j.appender.appender_name = class_name
- appender_name为该appender的名称
- class_name则为输出目的地的实现类的全限定名称(比如:org.apache.log4j.ConsoleAppender、org.apache.log4j.FileAppender)。
定义Layout:Layout 用于定义日志输出的格式。一个Layout 的实例一旦绑定到一个Appender 上,所有的输出信息都会以指定的格式输出。定义方法如下:
log4j.appender.appender_name.layout = class_name
- appender_name为该appender的名称
- class_name则为Layout 的实现类的全限定名称(比如:org.apache.log4j.PatternLayout)。
配置文件示例
以下示例展示了如何将级别为DEBUG或更高的日志输出到控制台,同时将级别为warn或者更高的日志输出到一个文件中。
# log4j.properties
log4j.rootLogger=DEBUG, console, file
# 控制台输出
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
# 文件输出
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=./logs/myapp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d] [%p] - %m%n
# 设置日志级别日志
log4j.logger.com.aliba.transjob=DEBUG
log4j.logger.com.alibaba.datax.plugins=DEBUG
在Web项目中配置Log4j
以下是在Web项目中配置Log4j的步骤:
步骤1:导入Log4j jar包
在项目中导入log4j的jar包,以Maven项目为例,可以在pom.xml中添加如下依赖:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
步骤2:添加log4j.properties或log4j.xml配置文件
在src/main/resources目录下创建log4j.properties或log4j.xml文件,并按照上述配置文件语法进行配置。
步骤3:添加Log4j初始化Servlet
在项目中添加一个Servlet用于Log4j的初始化。以下是一个示例:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
import java.io.File;
import java.net.URL;
public class Log4jInitServlet extends HttpServlet {
public void init() throws ServletException {
String log4jLocation = getInitParameter("log4j-properties-location");
String webAppPath = this.getClass().getResource("/").getPath();
String log4JFilePath = webAppPath + log4jLocation;
File logFile= new File(log4JFilePath);
if(logFile.exists()) {
System.setProperty("log4j.configuration",log4JFilePath);
PropertyConfigurator.configure(log4JFilePath);
System.out.println("Log4jHasInitialized,beforejsp");
}else{
System.out.println("CouldnotlocateLog4jfile");
}
}
}
步骤4:在web.xml文件中添加Servlet配置
在web.xml文件中添加以下Servlet配置:
<servlet>
<servlet-name>Log4jInitServlet</servlet-name>
<servlet-class>...Log4jInitServlet</servlet-class>
<init-param>
<param-name>log4j-properties-location</param-name>
<param-value>classpath:log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
其中,类名需根据实际情况进行修改,如com.example.Log4jInitServlet。
示例
以下是一个日志输出到文件中的示例:
import org.apache.log4j.Logger;
public class myClass {
private static final Logger logger = Logger.getLogger(myClass.class);
public void testMethod() {
logger.debug("This is a debug message");
logger.info("This is a info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");
}
}
在log4j.properties文件中的配置应该类似下面这样:
log4j.rootLogger = INFO, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/logs/myapp.log
log4j.appender.FILE.encoding=UTF-8
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
以上配置将INFO级别的信息输出到myapp.log文件中,并且以指定的格式记录。
当myClass类中调用了testMethod() 方法时,Log4j就会记录相关日志,并输出到文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入浅析java web log4j 配置及在web项目中配置Log4j的技巧 - Python技术站