2016-10-04 43 views
0

log4j2で複数の設定ファイルを使用できます。私は自分のプロジェクトを実行して、デフォルトの設定ファイル--logger.xmlをロードしてから、別のファイルlogger_1.xmlの2番目の設定があるかどうかを確認し、それを追加して最初の設定を上書きしないでください。 ダミーコードがあります。要するに、ファイルパスでarrayListを埋めて、それらのすべてをロードしたいと思います。LOG4J2 Javaを使用して複数の設定ファイルを使用する

public class LoggerConfiguratorManager 
{ 
public static final String LOG4J_PATH = "etc/confs/logger.xml"; 

    private static LoggerContext context = null; 
    private static final ConfigurationFactory factory = XmlConfigurationFactory.getInstance(); 
    private static ConfigurationSource configurationSource = null; 
    private static Configuration configuration = null; 
    private static final ArrayList<String> registred_logger = new ArrayList<>(); 

    private static void loadLoggerConfig(String logger_path) 
    { 
    InputStream is = null; 
    try 
    { 
     if(logger_path.endsWith(".xml")) 
     is = new FileInputStream(logger_path); 
     else 
     { 
     final ZipFile archive = new ZipFile(logger_path); 
     final ZipEntry logger_entry = archive.getEntry(LOG4J_PATH); 
     if(logger_entry == null) throw new IOException("Cannot find 'logger.xml' in " + logger_path); 
     is = archive.getInputStream(logger_entry); 
     } 

     configurationSource = new ConfigurationSource(is); 
     configuration = factory.getConfiguration(configurationSource); 
    } 
    catch(IOException ex) 
    { 
     System.err.println("============================================================================="); 
     System.err.println("=============================== LOGGER CONFIG ==============================="); 
     System.err.println("============================================================================="); 
     System.err.println("=== [ERROR] " + ex); 
    } 
    finally 
    { 
     if (configurationSource != null) 
     { 
     context = Configurator.initialize(null, configurationSource); 
     context.start(configuration); 
     try { is.close(); } catch(IOException ex) { } 
     } 
    } 
    } 

    public static void load() 
    { 
    registred_logger.add(Globals.getClassLocation(LoggerConfiguratorManager.class)); 

    for(final String conf : registred_logger) 
     loadLoggerConfig(conf); 
    } 

    public static void regLoggerConf(String conf_path) { registred_logger.add(conf_path); } 

答えて

0

私が代わりにやってお勧めします:

public class LoggerConfiguratorManager { 

    private static final String LOG4J_PATH = "etc/confs/log4j2.xml"; 
    private static final StringBuffer paths = new StringBuffer(LOG4J_PATH); 

    public static void registerConfiguration(String confPath) { 
     paths.append(",").append(confPath); 
    } 

    public static void initLog4j() { 
     Configurator.initializer("My Config", null, paths.toString(), null); 
    } 
    } 

いっぱい働い例えばhttps://github.com/rgoers/CompositeConfigurationExampleを参照してください。

+0

これは私のケースでは、ファイルが別のプログラムの中にある、つまりjarアーカイブの中にあります。これは助けになりません:(他の提案。 –

+0

どうすればファイルを見つけることができますか? – rgoers

+0

あなたは私のコードを見ることができます。私はまず現在のクラスファイルのパスを取得し、次にZipEntryを使用してLogger.xml全体をInputStreamに取得します –

関連する問題