展开全部
写一个log4jInit吧,,32313133353236313431303231363533e59b9ee7ad9431333361326334在你的log4j里面设置几个变量,例如${some_day_path},然后使用apache有个项目叫configuration来替换你的变量。
/**
* @Synopsis 读取多个log4j配置文件合并成一个。main-log4j.xml为主配置文件。只有主配置文件中的root与root appender
* 才生效。
*/
public class LoggingInit{
private static final String CONFIG_FILE_NAME_PATTERN = "^(?!log4j)[a-zA-Z0-9]+.xml";
private static final String LOG4J_FILE_NAME = "log4j.xml";
private static File config_file = null;
/**
* @Synopsis configure
* @Param File _file
* @Return
*/
public static void init(){
LoggingInit init = new LoggingInit();
File file = init.combined();
config_file = init.modulate( file );
DOMConfigurator.configure( config_file.getPath() );
}
/**
* @Synopsis getConfigFile
* @Return
*/
public static File getConfigFile(){
return config_file;
}
/**
* @Synopsis replace path variables
*/
class RealPath extends StrLookup{
@Override
public String lookup( String _key ){
if( _key.trim().equals( "log_dir" ) ){
return Path.singleInstance().getLogPath();
}
return "not-found";
}
}
/**
* @Synopsis combined
* @Return
*/
public File combined(){
File out = new File( Path.singleInstance().getLogConfPath() + File.separator + LOG4J_FILE_NAME );
try{
NodeCombiner node_combiner = new MergeCombiner();
node_combiner.addListNode( "log4j:configuration" );
CombinedConfiguration combined = new CombinedConfiguration( node_combiner );
File dir = new File( Path.singleInstance().getLogConfPath() );
IOFileFilter file_filter = new RegexFileFilter( CONFIG_FILE_NAME_PATTERN );
IOFileFilter directory_filter = TrueFileFilter.INSTANCE;
Collection< File > files = FileUtils.listFiles( dir, file_filter, directory_filter );
for( File f : files ){
XMLConfiguration c = new XMLConfiguration( f );
combined.addConfiguration( c );
}
XMLConfiguration configuration = new XMLConfiguration( combined );
configuration.setPublicID( "-//log4j/log4j Configuration//EN" );
configuration.setSystemID( "log4j.dtd" );
configuration.setRootElementName( "log4j:configuration" );
ConfigurationInterpolator interpolator = configuration.getInterpolator();
interpolator.registerLookup( "path", new RealPath() );(按你的规则替换成你的日志路劲)
XMLConfiguration rs = ( XMLConfiguration ) configuration.interpolatedConfiguration();
rs.save( out );
}catch( ConfigurationException e ){
throw new InitException( "combined exection", e );
}
return out;
}
/**
* @Synopsis modulate
* @Param File _file
* @Return
*/
public File modulate( File _file ){
try{
SAXReader reader = new SAXReader();
Document dom = reader.read( _file );
Element configuration = ( Element ) dom.selectSingleNode( "/configuration" );
List appender_list = configuration.selectNodes( "appender" );
List logger_list = configuration.selectNodes( "logger" );
Node root = configuration.selectSingleNode( "root" );
List< Element > elements = configuration.elements();
elements.clear();
for( Object object : appender_list ){
elements.add( ( Element ) object );
}
for( Object object : logger_list ){
elements.add( ( Element ) object );
}
elements.add( ( Element ) root );
OutputFormat format = OutputFormat.createPrettyPrint();
format.setIndentSize( 4 );
XMLWriter writer = new XMLWriter( new FileOutputStream( _file ), format );
writer.write( dom );
writer.close();
}catch( DocumentException e ){
throw new InitException( "fromat exception", e );
}catch( FileNotFoundException e ){
throw new InitException( "fromat exception", e );
}catch( UnsupportedEncodingException e ){
throw new InitException( "fromat exception", e );
}catch( IOException e ){
throw new InitException( "fromat exception", e );
}
return _file;
}
}
本回答由网友推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起