`
酷的飞上天空
  • 浏览: 521744 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

log4j配置根据日志级别记录记录日志,以及动态设置日志文件位置

阅读更多

 日志根据级别,分别建立各自级别的文件,低级日志文件包含高级别的日志信息。

设置日志文件位置为项目的/WEB-INF/logs目录下

把log4j.properties文件放到class目录下

内容如下

 
log4j.rootLogger=debug, stdout, info,debug,warn,error
  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %F:%L - %m%n
log4j.appender.stdout.encoding=GBK

log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}]  [ Class = %C | Method = %M | Line = %L ] | %m |%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold=INFO
log4j.appender.info.append=true
log4j.appender.info.Encoding=UTF-8
log4j.appender.info.File=info.log

log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}]  [ Class = %C | Method = %M | Line = %L ] | %m |%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.Encoding=UTF-8
log4j.appender.debug.File=debug.log

log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}]  [ Class = %C | Method = %M | Line = %L ] | %m |%n
log4j.appender.warn.datePattern='.'yyyy-MM-dd
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.append=true
log4j.appender.warn.Encoding=UTF-8
log4j.appender.warn.File=warn.log

log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}]  [ Class = %C | Method = %M | Line = %L ] | %m |%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold=ERROR
log4j.appender.error.append=true
log4j.appender.error.Encoding=UTF-8
log4j.appender.error.File=error.log 

 

建立一个filter来进行项目启动阶段对log4j进行初始化

内容如下

package com.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import com.database.JdbcTemplateUtil;
import com.setting.WebSetting;
import com.util.LogUtil;

public class ServerInitFilter implements Filter {

	private String charset = WebSetting.CHARSET;
	private String defaulteLog4jPropertiesPath = "/WEB-INF/classes/log4j.properties";
	private String defaultLogFilePath = "/WEB-INF/logs";
	@Override
	public void destroy() {
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		/**
		 * 根据请求头字段ContentType,自动调整编码
		 * 如果没有ContentType字段,或者字段不包含编码,则使用项目设定的编码
		 */
		String reqContentType = req.getContentType();
		if(reqContentType == null){
			req.setCharacterEncoding(charset);
		}else{
			String[] contentType = reqContentType.split(";");
			if(contentType.length != 2){
				req.setCharacterEncoding(charset);
			}else{
				String reqCharset = contentType[1].split("=")[1];
				if(reqCharset.toLowerCase().equals("gbk")  //for fileupload
						|| reqCharset.toLowerCase().equals("gb2312")
						|| reqCharset.toLowerCase().equals("utf-8")
						|| reqCharset.toLowerCase().equals("utf8")
						|| reqCharset.toLowerCase().equals("gb18030")){
					req.setCharacterEncoding(reqCharset);
				}else{
					req.setCharacterEncoding(charset);
				}
				
			}
		}
		chain.doFilter(req, resp);
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		//LogUtil.log4jInit(config.getServletContext().getRealPath("/WEB-INF/classes/log4j.properties"), config.getServletContext().getRealPath("/WEB-INF/logs"));
		initLog4j(config);
		setCharacterEncoding(config);
		LogUtil.info("系统配置加载完成!");		
	}
	
	private void setCharacterEncoding(FilterConfig config){
		String initCharset = config.getInitParameter("charSet");
		if(initCharset == null || initCharset.trim().length() == 0)
			return;
		this.charset = initCharset;
		LogUtil.info("已设置字符集为:"+initCharset);
	}
	
	private void initLog4j(FilterConfig config){
		String log4jPropertiesPath = config.getInitParameter("log4jPropertiesPath");
		String logFilePath = config.getInitParameter("logFilePath");
		if(log4jPropertiesPath == null || log4jPropertiesPath.trim().length() == 0){
			log4jPropertiesPath = this.defaulteLog4jPropertiesPath;
		}
		
		if(logFilePath == null || logFilePath.trim().length() == 0){
			logFilePath = this.defaultLogFilePath;
		}		
		
		LogUtil.log4jInit(config.getServletContext().getRealPath(log4jPropertiesPath), config.getServletContext().getRealPath(logFilePath));
	}
}

 

 

其中LogUtil类的log4jInit方法内容如下

	public static void log4jInit(String configPath, String logDirectory) {
		File file = new File(configPath);
		if (!file.exists())
			return;
		try {
			InputStream in = new FileInputStream(file);
			Properties p = new Properties();
			p.load(in);
			
			String basePath = logDirectory+File.separator;
			
			if(p.getProperty("log4j.appender.info.File") != null){
				p.setProperty("log4j.appender.info.File", basePath + p.getProperty("log4j.appender.info.File"));
			}
			
			if(p.getProperty("log4j.appender.debug.File") != null){
				p.setProperty("log4j.appender.debug.File", basePath + p.getProperty("log4j.appender.debug.File"));
			}
			
			if(p.getProperty("log4j.appender.warn.File") != null){
				p.setProperty("log4j.appender.warn.File", basePath + p.getProperty("log4j.appender.warn.File"));
			}
			
			if(p.getProperty("log4j.appender.error.File") != null){
				p.setProperty("log4j.appender.error.File", basePath + p.getProperty("log4j.appender.error.File"));
			}
			
			
			PropertyConfigurator.configure(p);
			in.close();
			LogUtil.info("日志文件位置为:"+basePath);
		} catch (Exception e) {
			System.out.println("加载log4j配置文件失败!");
		}

	}
 

web.xml文件配置如下

	<filter>
		<filter-name>initFilter</filter-name>
		<filter-class>com.igou.web.filter.ServerInitFilter</filter-class>
		<init-param>
			<param-name>charSet</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>log4jPropertiesPath</param-name>
			<param-value>/WEB-INF/classes/log4j.properties</param-value>
		</init-param>
		<init-param>
			<param-name>logFilePath</param-name>
			<param-value>/WEB-INF/logs</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>initFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

我的配置文件路径都是根据项目的相对路径来获取绝对路径,如果想直接设置绝对路径,则可以修改ServerInitFilter类中的处理文件路径的那部分代码。具体修改内容根据情况而定。

 

具体log4j的配置参数详解可以参考 http://eryk.iteye.com/blog/692181

 

分享到:
评论

相关推荐

    动态设置log4j的日志级别

    总结来说,动态设置Log4j的日志级别是提高应用灵活性的重要手段,可以根据运行时的需求调整日志输出的详细程度,同时避免不必要的重启操作。通过配置文件、API、JMX以及Web界面等多种方式,开发者可以方便地实现这一...

    log4j日志配置以及配置文件详解

    接下来,`log4j配置说明.txt`文件通常会提供更详细的解释和示例,包括如何配置不同的appender(如FileAppender、RollingFileAppender等),如何定义不同logger的级别,以及如何使用自定义的error handler和filter。...

    log4j(二):动态配置日志输出路径

    总结来说,Log4j的动态配置日志输出路径主要涉及对配置文件的解析和重新加载,以及在运行时使用API直接调整日志设置。理解并熟练运用这些方法,可以帮助我们在开发过程中更灵活地管理和监控日志,提高开发效率和问题...

    SSM整合中的Log4j日志的配置详情

    Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助...

    log4j中配置日志文件相对路径方法(PDF)

    ### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...

    log4j按功能保存日志

    在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入不同的文件,以便于后期分析、排查问题和监控系统状态。 1. **Log4j基本概念** - **Logger**: 日志记录器,是Log4...

    log4j2配置多个日志级别

    log4j2配置多个日志级别,拿到即可用, 。

    tomcat下的log4j日志配置

    2. **配置全局 Log4j 属性文件**:在任意位置创建 `log4j.properties` 文件,并设置全局的日志级别、输出格式及存储路径等。通常会将该文件放置在 Tomcat 的 `conf` 目录下。 ```properties log4j.rootLogger=...

    log4j2.xml记录日志到到数据库

    1. **配置文件**:如`log4j2.xml`,这是Log4j2的配置中心,定义了日志记录的策略、级别、输出目标等。 2. **日志记录器(Logger)**:负责收集和处理日志事件。 3. **日志级别(Level)**:如`TRACE`, `DEBUG`, `...

    log4j 配置日志文件,把日志信息输出到项目的某个文件夹下

    -- 指定log4j配置文件的位置 --&gt; &lt;listener-class&gt;org.springframework.web.util.Log4jConfigListener ``` 完成这些步骤后,当你的应用程序运行时,log4j会根据配置将日志信息输出到指定的文件夹中。这不仅...

    mybatis,log4j打印日志到后台和文件

    总结,通过以上步骤,你已成功配置了 MyBatis 使用 Log4j 来记录日志,同时将日志输出到后台控制台和文件,这有助于在开发和调试过程中追踪问题,提高代码的可维护性。记得根据实际需求调整日志级别和输出格式,以...

    log4j 写多个日志文件,按照日期每天都记

    它是`log4j`的配置中心,通过这个文件我们可以定制日志输出的级别、格式、目标位置等。在这个场景下,我们关注的重点是如何设置多个日志文件并按日期切换。 1. **配置多个Appender**:`log4j`允许定义多个Appender...

    log4j配置 输出日志 案例

    通过配置log4j,我们可以控制日志的输出位置、级别以及格式。 ### 二、Log4j配置 Log4j的配置主要通过一个XML或.properties文件进行,通常命名为log4j.properties或log4j.xml。以下是一个基本的log4j.properties...

    log4j记录Debug日志

    在使用Log4j记录Debug日志时,确保项目中引入了相应的Log4j库,并正确配置了`log4j.properties`或`log4j.xml`文件,设置DEBUG级别,然后在代码中使用Logger对象进行日志记录。例如: ```java import org.apache.log4...

    log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志等

    log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志,指纹日志命名规则,日志输出等级等功能

    log4j(三):配置文件属性解释、级别、布局、参数设置等

    本文将深入解析Log4j的配置文件属性、日志级别、布局方式以及参数设置等核心知识点,帮助你更好地理解和利用这个强大的工具。 一、配置文件属性解释 Log4j的核心配置文件通常是`log4j.properties`或`log4j.xml`,它...

    tomcat8更换log4j记录日志

    在IT行业中,日志管理是系统运维和故障排查的关键环节,尤其对于服务器应用程序如Tomcat而言,正确配置日志记录...记得根据实际需求调整`log4j.properties`配置,以及正确部署相关库文件,以实现最佳的日志记录效果。

    log4j 配置文档(记录日志)

    此外,它还支持自定义日志信息的格式,以及根据日志级别动态调整输出,所有这些配置都可以通过外部配置文件轻松完成,无需修改代码。 ### 主要组件 #### 1. 根类别 根类别(root logger)是类别层次结构的顶层,...

    配置好log4j的eclipse简单工程,每天输出到一个日志文件中,该文件名为:“XXX_年月日时分.log”的形式

    本工程基于Eclipse IDE,配置了一个简单的Log4j设置,实现了每天自动将日志输出到一个特定命名格式的文件中,即“XXX_年月日时分.log”。下面我们将详细解析这个配置及其工作原理。 1. **Log4j介绍**: Log4j是一...

    log4j-控制指定类,包的日志级别:log4j-demo.zip

    在Log4j中,控制日志级别主要通过配置文件`log4j.properties`或`log4j.xml`来实现。在提供的压缩包`log4j-demo`中,我们可以找到这样的配置文件。例如,如果我们想要控制特定类`com.example.MyClass`的日志级别为...

Global site tag (gtag.js) - Google Analytics