The Apache Log4j 1.x Compatibility API providing a bridge to Log4j 2.x implementations
—
Configuration management provides multiple approaches to configure Log4j 1.x compatibility layer including properties files, XML configuration, and programmatic setup.
public class PropertyConfigurator {
// Configure from properties file
public static void configure(String configFilename);
public static void configure(URL configURL);
public static void configure(InputStream inputStream);
public static void configure(Properties properties);
// Configure with custom class loader
public static void configure(Properties properties, LoggerRepository repository);
// Watch for configuration changes
public static void configureAndWatch(String configFilename);
public static void configureAndWatch(String configFilename, long delay);
}Parameters:
configFilename - Path to properties configuration fileconfigURL - URL pointing to configuration resourceinputStream - InputStream containing configuration dataproperties - Properties object with configurationrepository - LoggerRepository for configuration contextdelay - Delay in milliseconds for configuration file watchingpublic class DOMConfigurator {
// Configure from XML file or resource
public static void configure(String filename);
public static void configure(URL configURL);
public static void configure(InputStream inputStream);
public static void configure(Element element);
// Configure with custom logger repository
public static void configure(Element element, LoggerRepository repository);
// Watch for configuration changes
public static void configureAndWatch(String filename);
public static void configureAndWatch(String filename, long delay);
}Parameters:
filename - Path to XML configuration fileconfigURL - URL pointing to XML configurationinputStream - InputStream containing XML configurationelement - DOM Element containing configurationrepository - LoggerRepository for configuration contextdelay - Delay in milliseconds for file watchingpublic class BasicConfigurator {
// Simple console configuration
public static void configure();
public static void configure(Appender appender);
// Reset configuration
public static void resetConfiguration();
}Parameters:
appender - Appender to use for basic configurationpublic interface OptionHandler {
// Activate options after configuration
void activateOptions();
}# Root logger configuration
log4j.rootLogger=INFO, console, file
# Console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1} - %m%n
# File appender
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=application.log
log4j.appender.file.Append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c - %m%n
# Package-specific loggers
log4j.logger.com.mycompany.dao=DEBUG
log4j.logger.org.springframework=WARN
log4j.logger.org.apache.http=INFO# Rolling file appender
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.File=app.log
log4j.appender.rolling.MaxFileSize=10MB
log4j.appender.rolling.MaxBackupIndex=5
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=%d %p %c - %m%n<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Console appender -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<!-- File appender -->
<appender name="file" class="org.apache.log4j.FileAppender">
<param name="File" value="application.log"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<!-- Package loggers -->
<logger name="com.mycompany.dao">
<level value="DEBUG"/>
</logger>
<logger name="org.springframework">
<level value="WARN"/>
</logger>
<!-- Root logger -->
<root>
<priority value="INFO"/>
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</log4j:configuration>import org.apache.log4j.PropertyConfigurator;
import java.util.Properties;
public class ConfigurationExample {
public void configureLogging() {
// From file
PropertyConfigurator.configure("log4j.properties");
// From URL
URL configUrl = getClass().getResource("/log4j.properties");
PropertyConfigurator.configure(configUrl);
// From Properties object
Properties props = new Properties();
props.setProperty("log4j.rootLogger", "INFO, console");
props.setProperty("log4j.appender.console", "org.apache.log4j.ConsoleAppender");
props.setProperty("log4j.appender.console.layout", "org.apache.log4j.PatternLayout");
props.setProperty("log4j.appender.console.layout.ConversionPattern", "%d %-5p %c - %m%n");
PropertyConfigurator.configure(props);
}
}import org.apache.log4j.xml.DOMConfigurator;
import java.net.URL;
public class XMLConfigurationExample {
public void configureFromXML() {
// From file
DOMConfigurator.configure("log4j.xml");
// From URL
URL configUrl = getClass().getResource("/log4j.xml");
DOMConfigurator.configure(configUrl);
// Watch for changes
DOMConfigurator.configureAndWatch("log4j.xml", 60000); // Check every minute
}
}import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.PatternLayout;
public class BasicConfigurationExample {
public void setupBasicLogging() {
// Simple console logging
BasicConfigurator.configure();
// With custom appender
ConsoleAppender appender = new ConsoleAppender(
new PatternLayout("%d %-5p %c - %m%n"),
ConsoleAppender.SYSTEM_OUT
);
BasicConfigurator.configure(appender);
}
}import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class ConfigurationWatching {
public void setupWatching() {
// Watch properties file for changes every 30 seconds
PropertyConfigurator.configureAndWatch("log4j.properties", 30000);
// Watch XML file for changes every 60 seconds
DOMConfigurator.configureAndWatch("log4j.xml", 60000);
}
}import org.apache.log4j.LogManager;
import org.apache.log4j.BasicConfigurator;
public class ConfigurationReset {
public void resetAndReconfigure() {
// Reset all configuration
LogManager.resetConfiguration();
// Reconfigure with new settings
PropertyConfigurator.configure("new-log4j.properties");
// Or use basic configuration
BasicConfigurator.configure();
}
}import org.apache.log4j.PropertyConfigurator;
import java.net.URL;
import java.io.InputStream;
public class ResourceConfiguration {
public void configureFromClasspath() {
// Load from classpath
URL configUrl = getClass().getClassLoader().getResource("log4j.properties");
if (configUrl != null) {
PropertyConfigurator.configure(configUrl);
}
// Load as stream
InputStream configStream = getClass().getResourceAsStream("/log4j.properties");
if (configStream != null) {
PropertyConfigurator.configure(configStream);
}
}
}Install with Tessl CLI
npx tessl i tessl/maven-org-apache-logging-log4j--log4j-1-2-api