`
DangDang0701
  • 浏览: 76940 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

关于log4j.properties的文件使用-----两点改进

阅读更多
log4j.properties是定义日志信息的优先级,日志信息的输出目的地,日志信息的输出格式的文件。

现在项目上有两个问题:
1.因为每个系统都是使用默认的log4j.properties这个名字来定义日志文件。当多个系统发布到同一台服务器上的时候,就会出现每次只能放一个系统的log4j.properties文件,几个系统同时运行的时候,LOG就出力的混淆在一起。

为了避免这个问题,需要把log4j.properties的名字改一改。让每个系统都拥有自己的log4j.properties文件。

下面以系统xiaoyao为例来说明。
properties文件的名字变更为:xiaoyaolog4j.properties
xiaoyaolog4j.properties的内容:

#####################
# File Appender
#####################
log4j.category.xiaoyao=INFO, xiaoyao
log4j.appender.xiaoyao=org.apache.log4j.DailyRollingFileAppender
log4j.appender.xiaoyao.Encoding=UTF-8
log4j.appender.xiaoyao.File=${user.install.root}/logs/cas.log
log4j.appender.xiaoyao.DatePattern='.'yyyyMM
log4j.appender.xiaoyao.Append=true
log4j.appender.xiaoyao.layout=org.apache.log4j.PatternLayout
log4j.appender.xiaoyao.layout.ConversionPattern=%n%d{yyyy/MM/dd HH:mm:ss.SSS} %p %t %c %m%n


2.系统的xiaoyaolog4j.properties不能独立于系统之外,必须打在EAR之内。
这次作了改进,xiaoyaolog4j.properties可以不用在EAR之内,只需要放在文件系统路径下就可以了。
例如在我的机器上可以放在以下路径:
C:\Program Files\IBM\SDP70\runtimes\base_v61\profiles\AppSrv01\properties
或者
C:\Program Files\IBM\SDP70\runtimes\base_v61\properties


改进之处就是在LOG管理的Class里加入了以下代码:
	static{		
		try {
			String doubleentryLogFile = AxaProperties.getInstance().getProperty( ConstantUtil.LOG_PROPERTY_FILE );
			PropertyConfigurator.configure( ClassLoader.getSystemResource(doubleentryLogFile) );
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


改进后的整个Class代码如下:
/*
 * XiaoyaoLog.java
 * ======================
 *
 * Logの管理を行うクラス
 *
 * @author Hengzhang.Xu (Accenture), 2008/04/24
 *
 * @version 1.0
 * 
 */

import java.sql.CallableStatement;
import java.util.ListIterator;

import jp.co.axa.life.ajax.db.SqlParamList;

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

public final class XiaoyaoLog {
	static{		
		try {
			String doubleentryLogFile = AxaProperties.getInstance().getProperty( ConstantUtil.LOG_PROPERTY_FILE );
			PropertyConfigurator.configure( ClassLoader.getSystemResource(doubleentryLogFile) );
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * LogError
	 * 
	 * ======================
	 * 
	 * Error情報をログファイルに出力する。
	 * 
	 * @param userID
	 *            ユーザーID
	 * @param exception
	 *            エクセプション。
	 */
	public static void LogError(String userID, Exception exception) {
		// classの名前を取得
		StackTraceElement stackTrace = (new Throwable()).getStackTrace()[1];
		String className = stackTrace.getClassName();

		// Loggerを定義する。
		Logger logger = Logger.getLogger(className);

		// Logを出す。
		logger.error(userID, exception);
	}

	/**
	 * LogInfo
	 * 
	 * ======================
	 * 
	 * Execute情報をログファイルに出力する。
	 * 
	 * @param userID
	 *            ユーザ名
	 * 
	 */
	public static void LogInfo(String userID) {
		// classの名前とmethodの名前を取得
		StackTraceElement stackTrace = (new Throwable()).getStackTrace()[1];
		String className = stackTrace.getClassName();
		String methodName = stackTrace.getMethodName();

		// Loggerを定義する。
		Logger logger = Logger.getLogger(className);

		// ログに出力のメセッジの形式を定義する。
		String message = userID + ConstantUtil.SPACE_HANKAKU
				+ ConstantUtil.EXECUTE + methodName;

		// Logを出す。
		logger.info(message);
	}

	/**
	 * LogSQLAndParam
	 * 
	 * ======================
	 * 
	 * SQL文とSQLのParameterリストに内容ファイルに出力する。
	 * 
	 * @param userID
	 *            ユーザーID
	 * @param sql
	 *            SQL文。
	 * @param state
	 *            SQLのCallableStatement(ない場合、nullにする)。
	 */
	public static void LogSQLAndParam(String userID, String sql,
			CallableStatement state) throws Exception {
		// classの名前を取得
		StackTraceElement stackTrace = (new Throwable()).getStackTrace()[1];
		String className = stackTrace.getClassName();

		// Loggerを定義する。
		Logger logger = Logger.getLogger(className);

		// ログに出力のSQL文を定義する。
		String messageSQL = userID + ConstantUtil.SPACE_HANKAKU
				+ ConstantUtil.LOG_ENTER + ConstantUtil.LOG_SQL + sql;

		// Logを出す。
		logger.info(messageSQL);
	}

	/**
	 * LogSQLAndParam
	 * 
	 * ======================
	 * 
	 * SQL文とSQLのParameterリストに内容ファイルに出力する。
	 * 
	 * @param userID
	 *            ユーザーID
	 * @param sql
	 *            SQL文。
	 * @param plist
	 *            SQLのParameterリスト(ない場合、nullにする)。
	 */
	public static void LogSQLAndParam(String userID, String sql,
			SqlParamList plist) {
		// classの名前を取得
		StackTraceElement stackTrace = (new Throwable()).getStackTrace()[1];
		String className = stackTrace.getClassName();

		// Loggerを定義する。
		Logger logger = Logger.getLogger(className);

		// ログに出力のSQL文を定義する。
		String messageSQL = userID + ConstantUtil.SPACE_HANKAKU
				+ ConstantUtil.LOG_ENTER + ConstantUtil.LOG_SQL + sql;

		String message = ConstantUtil.STRING_NULL;

		// SQLのParameterリストがある場合
		if (null != plist) {

			// plistにの内容をString形式で表示する。
			ListIterator listIterator = plist.listIterator();
			StringBuffer paramString = new StringBuffer();
			while (listIterator.hasNext()) {
				paramString.append(" ");
				paramString.append(String.valueOf(listIterator.next()));
				paramString.append(" ");
				paramString.append(",");
			}

			// 最後の","を除く。
			String format = ConstantUtil.STRING_NULL;
			if (paramString.length() != 0) {
				int index = paramString.length() - 1;
				format = ConstantUtil.LOG_SQUARE_BRACKET_LEFT
						+ paramString.toString().substring(0, index)
						+ ConstantUtil.LOG_SQUARE_BRACKET_RIGHT;
			}

			// ログに出力のParameterリストの内容を定義する。
			message = ConstantUtil.LOG_ENTER + ConstantUtil.LOG_SQL_PARAMLIST
					+ format;
		}

		// Logを出す。
		logger.info(messageSQL + message);
	}
	
	/**
	 * LogInfo
	 * 
	 * ======================
	 * 
	 * Execute情報をログファイルに出力する。
	 * 
	 * @param userID:ユーザ名
	 * @param msg:メッセージ
	 */
	public static void LogInfo( String userID, String msg ) {
		// classの名前とmethodの名前を取得
		StackTraceElement stackTrace = (new Throwable()).getStackTrace()[1];
		String className = stackTrace.getClassName();
		
		// Loggerを定義する。
		Logger logger = Logger.getLogger(className);
		
		// ログに出力のメセッジの形式を定義する。
		String message = userID + ConstantUtil.SPACE_HANKAKU + msg;
		
		//  Logを出す。
		logger.info( message );
	}
	
}


还可以采取以下这种方式:
	static{		
			try {
				PropertyConfigurator.configure(System.getProperty("user.install.root")+AxaProperties.getInstance().getProperty("XIAOYAO_LOG_PROPERTIES"));
			} catch (Exception e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			}
	}


这种方式xiaoyaolog4j.properties只能放在服务器的profiles下,在我的机器上如下:
C:\Program Files\IBM\SDP70\runtimes\base_v61\profiles\AppSrv01


这种不如第一种灵活度大,但是这种更严谨,因为放在服务器级别,对所有的发布到这个服务器的系统都是可见的,不安全。
0
1
分享到:
评论

相关推荐

    简单的log4G源码

    通常,log4j包含多个组件和配置文件,如`log4j.properties`或`log4j.xml`用于设置日志行为,还有各种类文件如`Logger`、`Appender`等。 **相关知识点详解:** 1. **日志级别**:log4j支持多种日志级别,包括DEBUG...

    Log4j

    2. **配置文件** - 使用 Log4j,开发者通常会创建一个配置文件(如 `log4j.properties` 或 `log4j.xml`),定义日志输出的位置、格式和级别等。配置文件的灵活性使得可以在不修改代码的情况下调整日志行为。 3. **...

    Hadoop 2 配置.docx

    - **log4j.properties**:定义系统日志文件、namenode 审计日志、tasktracker 子进程的任务日志的属性。 #### 四、Hadoop 2.0 的详细配置步骤 以下是一个简单的示例,展示如何配置 Hadoop 2.0 环境: **1. 下载...

    springboot常见面试问题及答案 .pdf

    Spring Boot 支持多种日志框架,包括 Java Util Logging、Log4j2、Logback 等。如果使用 Starters 启动器,Spring Boot 默认使用 Logback 作为日志框架。Spring Boot 支持将这些日志框架的日志输出到控制台或文件中...

    SpringBoot 44道面试题和答案.docx

    SpringBoot支持多种日志框架,如Java Util Logging, Log4j2, 和Logback。默认情况下,如果使用Starters,它会选择Logback作为日志框架。无论选择哪种框架,都可以配置输出到控制台或文件。 SpringBoot不推荐使用JSP...

    springboot2.4从实战到源码分析Demo源码工程.zip

    10. **日志系统**:SpringBoot默认使用Logback或Log4j2作为日志系统,可以通过配置文件调整日志级别和输出方式。 11. **测试支持**:`spring-boot-starter-test`模块包含了JUnit、Mockito、Hamcrest等测试工具,...

    struts的练习

    同时,通过日志框架如Log4j,可以帮助开发者调试和优化应用。 以上是关于“struts的练习”中可能涉及的关键概念和技术点。通过练习,你可以深入理解Struts框架的工作原理,提升开发企业级Web应用的能力。记得实践中...

    Combean-开源

    6. **log4j.properties**: Apache Log4j 是一个流行的日志记录框架,这个文件定义了Combean的日志输出配置,包括日志级别、输出目的地等。 7. **README**: 项目简介文件,详细解释了Combean的用途、安装步骤、使用...

    遗传算法与粒子群算法的实现

    各个测试算法都被加入到TestBatch以后,batch.run()开始执行算法比较过程并输出结果Excel文件到C盘根目录(输出路径可在Testable接口中配置,除了生成Excel文件外,还可以通过修改log4j.properties在制定的位置产生...

    发行日志1

    14. **日志处理**:增加了log4j appender实现,使日志写入可以透明地转换为消息发送。另外,还计划接入Hadoop的hdfs writer,将meta消息写入HDFS,但具体配置和使用方法待进一步说明。 15. **代码重构**:针对...

    MountainTracker

    13. **日志记录**:日志库如Log4j或java.util.logging用于记录程序运行情况,便于调试和问题排查。 以上就是基于"MountainTracker"这个项目标题和描述可能涉及的一些Java技术点。具体实现将取决于项目的源代码和...

Global site tag (gtag.js) - Google Analytics