深入浅析java web log4j 配置及在web项目中配置Log4j的技巧

深入浅析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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java拦截器和过滤器的区别分析

    下面我就来详细讲解“Java拦截器和过滤器的区别分析”的完整攻略。 首先,我们需要了解Java中拦截器和过滤器的基本概念以及其作用。拦截器和过滤器都是用于对请求进行拦截和处理的组件。 一、拦截器和过滤器的基本概念 1.1 拦截器 拦截器是在Java中用于拦截请求,其主要作用是拦截请求并对其进行处理,然后将请求转发给下一个处理器。拦截器可以用来做很多事情,比如…

    Java 2023年6月15日
    00
  • Java计算代码段执行时间的详细过程

    计算代码段执行时间在Java中非常常见,我们可以通过多种方式来实现。下面我将向您详细介绍如何使用Java代码计算代码段执行时间的完整攻略: 步骤一:编写需要计算时间的代码段 首先,我们需要编写需要计算时间的代码段。作为例子,我们假设我们需要计算一个数组排序的时间。这是我们的代码段示例: import java.util.Arrays; public clas…

    Java 2023年5月20日
    00
  • 详解使用IntelliJ IDEA新建Java Web后端resfulAPI模板

    下面我会为您详细讲解如何使用IntelliJ IDEA新建Java Web后端restful API模板。 步骤一:新建Maven项目 以IntelliJ IDEA 2021.1版本为例,首先我们需要新建一个Maven项目。 打开IntelliJ IDEA,点击“Create New Project”。 选择Maven并点击“Next”。 输入GroupId…

    Java 2023年5月19日
    00
  • Spring Boot实战之数据库操作的示例代码

    下面我为大家详细讲解一下“Spring Boot实战之数据库操作的示例代码”的完整攻略。 1. 环境准备 在开始实战前,先确保电脑中已经安装好了Java和Spring Boot。另外,如果需要连接数据库,还需要安装相应的数据库驱动程序,例如MySQL的驱动程序。 2. 创建Maven项目 使用Maven创建一个Spring Boot项目,添加依赖项,以便在代…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“InvalidChainException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidChainException”错误。这个错误通常由以下原因之一起: 链无效:如果链无效,则可能会出现此错误。在这种情况下,需要检查链以解决此问题。 链配置错误:如果链配置错误,则可能会出现此错误。在这种情况下,需要检查链配置以解决此问题。 以下是两个实例: 例 1 如果链无效,则可以尝试检查链以解…

    Java 2023年5月5日
    00
  • IDEA解决Java:程序包xxxx不存在的问题

    当我们在使用IntelliJ IDEA编写Java程序时,经常会遇到程序包不存在的问题,出现这种问题的原因是因为程序没有引用依赖库或依赖库的路径配置不正确。在这里,我们提供一些方法来解决这个问题。 方法一:在项目中添加依赖库 要在项目中添加依赖库,请使用以下步骤: 打开IntelliJ IDEA并打开你的项目。 在左侧的Project面板中,右键单击“Dep…

    Java 2023年5月19日
    00
  • Json在Struts中的转换与传递方法

    下面是详细讲解“Json在Struts中的转换与传递方法”的完整攻略。 什么是Json Json(JavaScript Object Notation)是一种轻量级的数据交换语言,具备易读性、易于编写和解析的特点。在Web开发中,Json经常作为数据交换格式来传输数据,比如当调用Ajax请求时,可以通过Json的方式将数据以数据格式的形式传输到前台。 Jso…

    Java 2023年5月20日
    00
  • Java打印九九乘法表代码详情

    下面是Java打印九九乘法表的完整攻略: 1. 算法思路 九九乘法表的每一行都有规律,可以利用双重嵌套循环,外层循环控制每一行,内层循环控制每一列,通过打印表格中的乘积结果实现。 2. 代码示例 以下是一段Java代码,可以打印九九乘法表: public class MultiplicationTable { public static void main(…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部