Невозможно настроить Log4j2, используя java .util.Properties - PullRequest
0 голосов
/ 09 марта 2020

Я не могу настроить log4j2 с java .util.properties. Я всегда получаю это сообщение "tatusLogger Файл конфигурации Log4j 2 не найден". Пожалуйста, смотрите мой класс регистратора. Я читаю свойства log4j2 из двух файлов.

Я буду прикреплять свой код к этому сообщению.

package my.common.logger;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory;
import org.apache.logging.log4j.util.PropertiesUtil;

public class MyLogger {
    private static boolean configured = false;
    private static Logger logger;
    static {
        System.setProperty("log4j.configurationFactory",     "my.common.logger.JCFLog4JConfigurationFactory");
    }
    private static void readConfiguration() throws Exception {
        LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
        Configuration configuration =  ConfigurationFactory.getInstance().getConfiguration(context, createConfigurationSource()); 
        configuration.start();
        Configurator.reconfigure(); 
        configured = true;
    }
    public static Logger getLogger(String className) {
        try {
            if (!configured) readConfiguration();           
            return org.apache.log4j.LogManager.getLogger(className);
        } catch (Exception ex) {
            ex.printStackTrace();
        } 
        return null;
    }
    private static ConfigurationSource createConfigurationSource()
    {   Properties p = new Properties();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        InputStream in = null;
        try {
            p.putAll(<Read from File 1>);
            p.putAll(<Read from File 2>);
            p.store(out, null);
        } catch (IOException e) {
            e.printStackTrace();
        }
        in = new ByteArrayInputStream(out.toByteArray());
        ConfigurationSource configSrc = null;
        try {
            configSrc = new ConfigurationSource(in);
        }
        catch (IOException i)
        {
            i.printStackTrace();
        }
        return configSrc;
    }
}

Вот код фабрики конфигурации:

package nj.aoc.ito.cmfw.common.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory;
public class MyLog4JConfigurationFactory extends ConfigurationFactory {
    public MyLog4JConfigurationFactory() {

    }
    @Override
    public Configuration getConfiguration(LoggerContext ctx, ConfigurationSource source) {

         PropertiesConfigurationFactory factory = new PropertiesConfigurationFactory();
         return factory.getConfiguration(ctx, source);
    }
    @Override
    protected String[] getSupportedTypes() {
        return new String[]{".properties", "*"};
    }

}

Есть идеи, что я могу делать не так?

Спасибо, Нагс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...