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
这种不如第一种灵活度大,但是这种更严谨,因为放在服务器级别,对所有的发布到这个服务器的系统都是可见的,不安全。
分享到:
相关推荐
通常,log4j包含多个组件和配置文件,如`log4j.properties`或`log4j.xml`用于设置日志行为,还有各种类文件如`Logger`、`Appender`等。 **相关知识点详解:** 1. **日志级别**:log4j支持多种日志级别,包括DEBUG...
2. **配置文件** - 使用 Log4j,开发者通常会创建一个配置文件(如 `log4j.properties` 或 `log4j.xml`),定义日志输出的位置、格式和级别等。配置文件的灵活性使得可以在不修改代码的情况下调整日志行为。 3. **...
- **log4j.properties**:定义系统日志文件、namenode 审计日志、tasktracker 子进程的任务日志的属性。 #### 四、Hadoop 2.0 的详细配置步骤 以下是一个简单的示例,展示如何配置 Hadoop 2.0 环境: **1. 下载...
Spring Boot 支持多种日志框架,包括 Java Util Logging、Log4j2、Logback 等。如果使用 Starters 启动器,Spring Boot 默认使用 Logback 作为日志框架。Spring Boot 支持将这些日志框架的日志输出到控制台或文件中...
SpringBoot支持多种日志框架,如Java Util Logging, Log4j2, 和Logback。默认情况下,如果使用Starters,它会选择Logback作为日志框架。无论选择哪种框架,都可以配置输出到控制台或文件。 SpringBoot不推荐使用JSP...
10. **日志系统**:SpringBoot默认使用Logback或Log4j2作为日志系统,可以通过配置文件调整日志级别和输出方式。 11. **测试支持**:`spring-boot-starter-test`模块包含了JUnit、Mockito、Hamcrest等测试工具,...
同时,通过日志框架如Log4j,可以帮助开发者调试和优化应用。 以上是关于“struts的练习”中可能涉及的关键概念和技术点。通过练习,你可以深入理解Struts框架的工作原理,提升开发企业级Web应用的能力。记得实践中...
6. **log4j.properties**: Apache Log4j 是一个流行的日志记录框架,这个文件定义了Combean的日志输出配置,包括日志级别、输出目的地等。 7. **README**: 项目简介文件,详细解释了Combean的用途、安装步骤、使用...
各个测试算法都被加入到TestBatch以后,batch.run()开始执行算法比较过程并输出结果Excel文件到C盘根目录(输出路径可在Testable接口中配置,除了生成Excel文件外,还可以通过修改log4j.properties在制定的位置产生...
14. **日志处理**:增加了log4j appender实现,使日志写入可以透明地转换为消息发送。另外,还计划接入Hadoop的hdfs writer,将meta消息写入HDFS,但具体配置和使用方法待进一步说明。 15. **代码重构**:针对...
13. **日志记录**:日志库如Log4j或java.util.logging用于记录程序运行情况,便于调试和问题排查。 以上就是基于"MountainTracker"这个项目标题和描述可能涉及的一些Java技术点。具体实现将取决于项目的源代码和...