您的位置:首页 > 其它

使用log4j的输出自己想要的文件

2010-09-26 16:53 295 查看
使用log4j的输出自己想要的文件

包为log4j-1.2.15.jar

具体的类如下
package com.land.common.utils.log;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;

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

/**
* 提供日志输出功能类(使用Log4j)
*==================================================================
* @author 顾邹阳
* @Date 2009-7-2上午08:51:38
* @comments:
*==================================================================
*/
public final class LogUtil {
//定义重庆网通输出日志文件的名称
public static final String FILE_LAND_LOG = "land_log.log";//要输出的一般日志名
//定义iBaties输出日志文件的名称
public static final String FILE_IBATIES_LOG = "ibaties3.log";//要输出的ibaties文件名

// 定义SQL输出日志文件的名称
public static final String FILE_SQL_LOG = "land_sql.log";//要输出的sql文件名
//定义struts2输出日志文件的名称
public static final String FILE_STRUTS_LOG = "struts2.log";//要输出的struts2日志名

//定义输出日志文件的目录
public static final String FOLDER_LOG = "logs" + File.separatorChar;

private LogUtil() {
//构造器为私有,不允许客户创建此对象(通过getLog方法获取)
}//end of constructor

//初始化类( 初始Log4j )
static {
//查找log4j配置文件
URL url = Loader.getResource( "land_log4j.properties" ); //这是是配制文件的名称,//放在SRC下或CLASSES下
try {
if( url != null ) {
//实现地址重新编码(防止中文字符变成乱码'%xx')
String systemEncoding = ( new OutputStreamWriter( new ByteArrayOutputStream() ) ).getEncoding();
String urlpath = "";
if( systemEncoding == null || systemEncoding.trim().length() < 1 ) {
urlpath = URLDecoder.decode( url.getPath(), "UTF-8" );
} else {
urlpath = URLDecoder.decode( url.getPath(), systemEncoding );
}
//获取配置文件在系统中实际路径
String fileRFSPath = new File( urlpath ).getAbsolutePath();
//获取LOG日志所在路径(因为配置文件放于class目录下,所以取得的地址为"WEB-INF/logs/land_cms.log",如有变动需改动代码)如果是windows那么可以用//如果是liux或AIX那么就用File.separator
/*String tempLogFileUri = fileRFSPath.substring( 0, fileRFSPath.lastIndexOf( "//" ) );
String landLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( "//" ) )
+ File.separatorChar + FOLDER_LOG + FILE_LAND_LOG;
String iBatiesLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( "//" ) )
+ File.separatorChar + FOLDER_LOG + FILE_IBATIES_LOG;
String strutsLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( "//" ) )
+ File.separatorChar + FOLDER_LOG + FILE_STRUTS_LOG; */
String tempLogFileUri = fileRFSPath.substring( 0, fileRFSPath.lastIndexOf( File.separator ) );
String landLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( File.separator ) )
+ File.separatorChar + FOLDER_LOG + FILE_LAND_LOG;
String iBatiesLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( File.separator ) )
+ File.separatorChar + FOLDER_LOG + FILE_IBATIES_LOG;
String sqlLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( File.separator ) )
+ File.separatorChar + FOLDER_LOG + FILE_SQL_LOG;
String strutsLogFileUri = fileRFSPath.substring( 0, tempLogFileUri.lastIndexOf( File.separator ) )
+ File.separatorChar + FOLDER_LOG + FILE_STRUTS_LOG;
//设置系统环境变量(配置文件中用于读取LOG日志存放位置)
System.setProperty( "land_log.logfile", landLogFileUri );
System.setProperty( "land_iBatis.logfile", iBatiesLogFileUri );
System.setProperty( "land_struts.logfile", strutsLogFileUri );
System.setProperty( "land_SQL.logfile", sqlLogFileUri );
//用配置文件配置LOG4J
PropertyConfigurator.configure( fileRFSPath );
} else {
//无法找到Log4j配置文件,但忽略错误
}
} catch (UnsupportedEncodingException e) {
//不支持UTF-8编码方式,忽略错误
}//end of catch
}//end of static

/**
* 根据配置获得log4j的Logger对象,用于日志输出之类.(如果参数为String,
* 则该String作为日志输出栏目名称,否则则以类名作为日志输出栏目名称)
* @param obj
* @return Logger
*/
public static Logger getLog( Object obj ) {
if( obj instanceof String ) {
return Logger.getLogger( (String)obj );
} else if ( obj instanceof Class ) {
return Logger.getLogger( (Class)obj );
} else {
return Logger.getLogger( obj.getClass() );
}//end of else
}//end of method getLog()

}//end of class

具体的配制文件如下:
# Set root logger level to DEBUG and its only appender to A1.
#具体的log根
log4j.rootLogger = INFO, Land
#log4j.category.org.apache.struts2 = DEBUG, Struts2//这个就不要了
#
# Land.log让普通的log输出到Land级别为INFO如果在log根里有了Land那么就不要加下面这句了(要不然会重复输出)
#log4j.logger.com.land = INFO,Land
#
log4j.appender.Land = org.apache.log4j.RollingFileAppender//将Land输出到一个文件并可指定文件的大小//DailyRollingFileAppender每天输出一个文件//FileAppender输出到一个文件//ConsoleAppender输出#到控制台//WriterAppender以流的形式输出到任意指定的地方
log4j.appender.Land.File = ${land_log.logfile}//具体的文件名
log4j.appender.Land.MaxFileSize = 10mb//每10M换一个文件
log4j.appender.Land.MaxBackupIndex = 5//备份最多为5个
log4j.appender.Land.layout = org.apache.log4j.PatternLayout//控制输出
log4j.appender.Land.layout.ConversionPattern = %d{ISO8601} %5p [%30.40c:%4L] %m%n //具体的输出方式

#下面是采用ibatis3的输出
# iBaties3.log
log4j.additivity.org.apache.ibatis = false//输出到新的里面
# SqlMap logging configuration...
log4j.logger.org.apache.ibatis=DEBUG,iBaties3 //让ibatis以DEBUG输出到 iBaties3这个相应的参数文件里
log4j.logger.org.apache.ibatis.common.jdbc.SimpleDataSource=ERROR
log4j.logger.org.apache.ibatis.common.jdbc.ScriptRunner=ERROR
log4j.logger.org.apache.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=ERROR

#
log4j.appender.iBaties3 = org.apache.log4j.RollingFileAppender
#log4j.appender.iBaties3.Threshold=DEBUG
log4j.appender.iBaties3.File = ${land_iBatis.logfile}
#log4j.appender.iBaties3.Append=true
log4j.appender.iBaties3.MaxFileSize = 2mb
log4j.appender.iBaties3.MaxBackupIndex = 2
log4j.appender.iBaties3.layout = org.apache.log4j.PatternLayout
log4j.appender.iBaties3.layout.conversionPattern = %d [%t] %-5p %c - %m%n

#
#sql语句
log4j.additivity.java.sql = false
log4j.logger.java.sql=DEBUG,SQLq //让sql以DEBUG形式输出到以SQLq为参数的相应文件里
log4j.logger.java.sql.Connection=DEBUG//具体的接连
log4j.logger.java.sql.Statement=EEEOR
log4j.logger.java.sql.PreparedStatement=DEBUG//具体的sql
log4j.logger.java.sql.ResultSet=DEBUG//具体的返回结果
#
log4j.appender.SQLq = org.apache.log4j.RollingFileAppender
#log4j.appender.SQLq.Threshold=DEBUG
log4j.appender.SQLq.File = ${land_SQL.logfile}
#log4j.appender.SQLq.Append=true
log4j.appender.SQLq.MaxFileSize = 2mb
log4j.appender.SQLq.MaxBackupIndex = 2
log4j.appender.SQLq.layout = org.apache.log4j.PatternLayout
log4j.appender.SQLq.layout.conversionPattern = %d [%t] %-5p %c - %m%n
#
# struts2.log struts2的日志
log4j.additivity.org.apache.struts2 = false
log4j.logger.org.apache.struts2 = DEBUG,Struts2
#
log4j.appender.Struts2 = org.apache.log4j.RollingFileAppender
log4j.appender.Struts2.file = ${land_struts.logfile}
log4j.appender.Struts2.MaxFileSize = 2mb
log4j.appender.Struts2.MaxBackupIndex = 2
log4j.appender.Struts2.layout = org.apache.log4j.PatternLayout
log4j.appender.Struts2.layout.conversionPattern = %d [%t] %-5p %c - %m%n
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: