Przeniesienie konfiguracji log4j

0

Wszedłem w nowy projekt i musze wprowadzić zmianę. Mam plik konfiguracyjny log4j.xml w której mam podaną ścieżkę do miejsca gdzie się mają zapisywać mi się logi na serwerze, co ile ma być nadpisywany plik, archiwizacja itp. Musze pozmieniać to teraz tak aby ścieżkę można było ustawić w bazie danych. Ogolnie xml ma zostać w przypadku jak w bazie nie będzie podanej sciezki. Mam klasę Entity Config która zawiera pole a wartość tego pola w bazie to własnie ścieżka do folderu gdzie ma zapisywać się log. Wie może ktoś jak można to zrobić ?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="Test [%t] %-5level %C %M: %msg%n"/>
		</Console>
		<RollingFile name="RollingFileAppender" fileName="logs/server1/test_log.log"
		      filePattern="logs/server1/$${date:yyyy-MM}/test_log-%d{MM-dd-yyyy}-%i.log.gz">
			<PatternLayout pattern="%d [%t] %p %c - %m%n"/>
			<Policies>
				<OnStartupTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="10 MB" />
			</Policies>
			<DefaultRolloverStrategy max="1000" />
		</RollingFile>
	</Appenders>
	<Loggers>
		<Logger name="org.hibernate.SQL" level="debug" additivity="false">
			<AppenderRef ref="Console"/>
			<AppenderRef ref="RollingFileAppender"/>
		</Logger>
		<Logger name="test" level="info" additivity="false">
			<AppenderRef ref="Console"/>
			<AppenderRef ref="RollingFileAppender"/>
		</Logger>
		<Root level="error">
			<AppenderRef ref="Console"/>
			<AppenderRef ref="RollingFileAppender"/>
		</Root>
	</Loggers>
</Configuration>
2

Link do dokumentacji -> https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html

Ustawienie dynamiczne appendera

Logger logger = Logger.getLogger(YourClass.class);
logger.addAppender(new FileAppender(<tutaj ustawienia>))

Done...

0

Przepisałem konfigurację do Javy ale nie jestem przekonany czy jest ok. Czy możecie zerknąć i napisać co jest do poprawki ?

@Plugin(name = "Console", category = ConfigurationFactory.CATEGORY )
public class LoggerConfig  extends ConfigurationFactory {

    @EJB
    private static PersistenceLocal persistence;

    static Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder){
        AppenderComponentBuilder console = builder.newAppender("Console", "CONSOLE");
        LayoutComponentBuilder layout = builder.newLayout("PatternLayout")
                .addAttribute("pattern", "xxx [%t] %-5level %C %M: %msg%n");
        console.add(layout);


        ComponentBuilder triggeringPolicies = builder.newComponent("Policies")
                .addComponent(builder.newComponent("SizeBasedTriggeringPolicy")
                        .addAttribute("size", "10M"));

        AppenderComponentBuilder rollingFile = builder.newAppender("RollingFile", "ROLLINGFILE");
        rollingFile.addAttribute("fileName", persistence.getConfigList().get("LOG_DIR"));
        rollingFile.addAttribute("filePattern", persistence.getConfigList().get("LOG_DIR") + "/${date:yyyy-MM}/xxx_log-%d{MM-dd-yyyy}-%i.log.gz");
        rollingFile.add(layout);
        rollingFile.addComponent(triggeringPolicies);
        builder.add(rollingFile);

        AppenderComponentBuilder file = builder.newAppender("FileSystem", "File");
        file.addAttribute("fileName", persistence.getConfigList().get("LOG_DIR"));
        file.add(layout);
        builder.add(file);


        LoggerComponentBuilder loggerDebug = builder.newLogger("org.hibernate.SQL", Level.DEBUG);
        loggerDebug.add(builder.newAppenderRef("Console"));
        loggerDebug.add(builder.newAppenderRef("RollingFile"));
        loggerDebug.addAttribute("additivity", false);
        builder.add(loggerDebug);

        LoggerComponentBuilder logger = builder.newLogger("com.xxxp");
        logger.add(builder.newAppenderRef("Console"));
        logger.add(builder.newAppenderRef("RollingFile"));
        logger.addAttribute("additivity", false);
        builder.add(logger);

        RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.ERROR);
        rootLogger.add(builder.newAppenderRef("Console"));
        rootLogger.add(builder.newAppenderRef("RollingFile"));
        rootLogger.addAttribute("additivity", false);
        builder.add(rootLogger);

        return builder.build();
    }

    @Override
    public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
        return getConfiguration(loggerContext, source.toString(), null);
    }

    public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) {
        ConfigurationBuilder<BuiltConfiguration> builder = newConfigurationBuilder();
        return createConfiguration(name, builder);
    }

    @Override
    protected String[] getSupportedTypes() {
        return new String[] { "*" };
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1