The Apache Log4j 1.x Compatibility API providing a bridge to Log4j 2.x implementations
—
Configuration builders provide programmatic configuration capabilities that integrate with Log4j 2.x configuration system while maintaining Log4j 1.x compatibility. These builders enable type-safe, fluent configuration APIs.
public interface Builder<T> {
// Build the configured object
T build();
}Returns:
T the built configuration objectpublic interface Parser<T extends Builder<? extends Object>> {
// Parse configuration and return builder
T parse(Element element);
}Parameters:
element - DOM Element containing configurationReturns:
T builder configured from the elementpublic interface AppenderBuilder<T extends Appender> extends Builder<T> {
// Common appender configuration
AppenderBuilder<T> setName(String name);
AppenderBuilder<T> setLayout(Layout layout);
AppenderBuilder<T> setFilter(Filter filter);
AppenderBuilder<T> setErrorHandler(ErrorHandler errorHandler);
// Build the appender
@Override
T build();
}Parameters:
name - String name for the appenderlayout - Layout for message formattingfilter - Filter for message filteringerrorHandler - ErrorHandler for error managementReturns:
AppenderBuilder<T> for method chainingT the built appenderpublic class ConsoleAppenderBuilder implements AppenderBuilder<ConsoleAppender>, Parser<ConsoleAppenderBuilder> {
// Builder methods
public ConsoleAppenderBuilder setName(String name);
public ConsoleAppenderBuilder setLayout(Layout layout);
public ConsoleAppenderBuilder setFilter(Filter filter);
public ConsoleAppenderBuilder setErrorHandler(ErrorHandler errorHandler);
// Console-specific configuration
public ConsoleAppenderBuilder setTarget(String target);
public ConsoleAppenderBuilder setFollow(boolean follow);
// Build and parse
@Override
public ConsoleAppender build();
@Override
public ConsoleAppenderBuilder parse(Element element);
}Parameters:
name - String appender namelayout - Layout for formattingfilter - Filter for message filteringerrorHandler - ErrorHandler for errorstarget - String target (SYSTEM_OUT or SYSTEM_ERR)follow - Boolean follow settingelement - DOM Element for parsingReturns:
ConsoleAppenderBuilder for chainingConsoleAppender built instancepublic class FileAppenderBuilder implements AppenderBuilder<FileAppender>, Parser<FileAppenderBuilder> {
// Builder methods
public FileAppenderBuilder setName(String name);
public FileAppenderBuilder setLayout(Layout layout);
public FileAppenderBuilder setFilter(Filter filter);
public FileAppenderBuilder setErrorHandler(ErrorHandler errorHandler);
// File-specific configuration
public FileAppenderBuilder setFileName(String fileName);
public FileAppenderBuilder setAppend(boolean append);
public FileAppenderBuilder setBufferedIO(boolean bufferedIO);
public FileAppenderBuilder setBufferSize(int bufferSize);
// Build and parse
@Override
public FileAppender build();
@Override
public FileAppenderBuilder parse(Element element);
}Parameters:
name - String appender namelayout - Layout for formattingfilter - Filter for filteringerrorHandler - ErrorHandler for errorsfileName - String path to log fileappend - Boolean append flagbufferedIO - Boolean buffering flagbufferSize - Integer buffer sizeReturns:
FileAppenderBuilder for chainingFileAppender built instancepublic class RollingFileAppenderBuilder implements AppenderBuilder<RollingFileAppender>, Parser<RollingFileAppenderBuilder> {
// Inherited builder methods
public RollingFileAppenderBuilder setName(String name);
public RollingFileAppenderBuilder setLayout(Layout layout);
public RollingFileAppenderBuilder setFilter(Filter filter);
public RollingFileAppenderBuilder setErrorHandler(ErrorHandler errorHandler);
public RollingFileAppenderBuilder setFileName(String fileName);
public RollingFileAppenderBuilder setAppend(boolean append);
// Rolling-specific configuration
public RollingFileAppenderBuilder setMaxFileSize(String maxFileSize);
public RollingFileAppenderBuilder setMaxBackupIndex(int maxBackupIndex);
// Build and parse
@Override
public RollingFileAppender build();
@Override
public RollingFileAppenderBuilder parse(Element element);
}Parameters:
maxFileSize - String maximum file size (e.g., "10MB")maxBackupIndex - Integer maximum backup filesReturns:
RollingFileAppenderBuilder for chainingRollingFileAppender built instancepublic interface LayoutBuilder<T extends Layout> extends Builder<T> {
// Build the layout
@Override
T build();
}Returns:
T the built layoutpublic class PatternLayoutBuilder implements LayoutBuilder<PatternLayout>, Parser<PatternLayoutBuilder> {
// Configuration
public PatternLayoutBuilder setConversionPattern(String pattern);
// Build and parse
@Override
public PatternLayout build();
@Override
public PatternLayoutBuilder parse(Element element);
}Parameters:
pattern - String conversion patternelement - DOM Element for parsingReturns:
PatternLayoutBuilder for chainingPatternLayout built instancepublic class SimpleLayoutBuilder implements LayoutBuilder<SimpleLayout>, Parser<SimpleLayoutBuilder> {
// Build and parse
@Override
public SimpleLayout build();
@Override
public SimpleLayoutBuilder parse(Element element);
}Parameters:
element - DOM Element for parsingReturns:
SimpleLayoutBuilder for chainingSimpleLayout built instancepublic interface FilterBuilder extends Builder<Filter>, Parser<FilterBuilder> {
// Build the filter
@Override
Filter build();
// Parse configuration
@Override
FilterBuilder parse(Element element);
}Parameters:
element - DOM Element for parsingReturns:
Filter built instanceFilterBuilder configured from elementpublic class LevelRangeFilterBuilder implements FilterBuilder {
// Configuration
public LevelRangeFilterBuilder setLevelMin(Level levelMin);
public LevelRangeFilterBuilder setLevelMax(Level levelMax);
public LevelRangeFilterBuilder setAcceptOnMatch(boolean acceptOnMatch);
// Build and parse
@Override
public Filter build();
@Override
public LevelRangeFilterBuilder parse(Element element);
}Parameters:
levelMin - Level minimum level for rangelevelMax - Level maximum level for rangeacceptOnMatch - Boolean accept or deny on matchelement - DOM Element for parsingReturns:
LevelRangeFilterBuilder for chainingFilter built instancepublic class LevelMatchFilterBuilder implements FilterBuilder {
// Configuration
public LevelMatchFilterBuilder setLevel(Level level);
public LevelMatchFilterBuilder setAcceptOnMatch(boolean acceptOnMatch);
// Build and parse
@Override
public Filter build();
@Override
public LevelMatchFilterBuilder parse(Element element);
}Parameters:
level - Level to match againstacceptOnMatch - Boolean accept or deny on matchelement - DOM Element for parsingReturns:
LevelMatchFilterBuilder for chainingFilter built instancepublic class ConfigurationBuilder implements Builder<LoggerRepository> {
// Logger configuration
public ConfigurationBuilder addLogger(String name, Level level, boolean additivity);
public ConfigurationBuilder addLogger(String name, Level level, boolean additivity, Appender... appenders);
public ConfigurationBuilder setRootLogger(Level level, Appender... appenders);
// Appender management
public ConfigurationBuilder addAppender(Appender appender);
public ConfigurationBuilder removeAppender(String name);
// Repository configuration
public ConfigurationBuilder setThreshold(Level threshold);
// Build configuration
@Override
public LoggerRepository build();
// Apply configuration
public void configure();
}Parameters:
name - String logger namelevel - Level logging leveladditivity - Boolean additivity flagappenders - Appender array of appendersappender - Appender to add or removethreshold - Level global thresholdReturns:
ConfigurationBuilder for chainingLoggerRepository built repositoryimport org.apache.log4j.builders.appender.ConsoleAppenderBuilder;
import org.apache.log4j.builders.layout.PatternLayoutBuilder;
import org.apache.log4j.*;
public class ConsoleAppenderBuilderExample {
public void createConsoleAppender() {
// Build pattern layout
PatternLayout layout = new PatternLayoutBuilder()
.setConversionPattern("%d{HH:mm:ss} %-5p %c{1} - %m%n")
.build();
// Build console appender
ConsoleAppender appender = new ConsoleAppenderBuilder()
.setName("console")
.setLayout(layout)
.setTarget(ConsoleAppender.SYSTEM_OUT)
.setFollow(true)
.build();
// Add to logger
Logger logger = Logger.getLogger("builder-example");
logger.addAppender(appender);
logger.setLevel(Level.INFO);
logger.info("Console appender created with builder");
}
}import org.apache.log4j.builders.appender.FileAppenderBuilder;
import org.apache.log4j.builders.layout.PatternLayoutBuilder;
import org.apache.log4j.*;
public class FileAppenderBuilderExample {
public void createFileAppender() {
// Build layout
PatternLayout layout = new PatternLayoutBuilder()
.setConversionPattern("%d{ISO8601} [%t] %-5p %c - %m%n")
.build();
// Build file appender
FileAppender appender = new FileAppenderBuilder()
.setName("file")
.setLayout(layout)
.setFileName("application.log")
.setAppend(true)
.setBufferedIO(true)
.setBufferSize(8192)
.build();
// Configure logger
Logger logger = Logger.getLogger("file-example");
logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
logger.debug("File appender created with builder");
}
}import org.apache.log4j.builders.appender.RollingFileAppenderBuilder;
import org.apache.log4j.builders.layout.PatternLayoutBuilder;
import org.apache.log4j.*;
public class RollingFileBuilderExample {
public void createRollingFileAppender() {
// Build layout
PatternLayout layout = new PatternLayoutBuilder()
.setConversionPattern("%d %p %c - %m%n")
.build();
// Build rolling file appender
RollingFileAppender appender = new RollingFileAppenderBuilder()
.setName("rolling")
.setLayout(layout)
.setFileName("app.log")
.setAppend(true)
.setMaxFileSize("10MB")
.setMaxBackupIndex(5)
.build();
// Configure logger
Logger logger = Logger.getLogger("rolling-example");
logger.addAppender(appender);
logger.setLevel(Level.INFO);
logger.info("Rolling file appender created");
}
}import org.apache.log4j.builders.filter.*;
import org.apache.log4j.builders.appender.ConsoleAppenderBuilder;
import org.apache.log4j.builders.layout.PatternLayoutBuilder;
import org.apache.log4j.*;
public class FilterBuilderExample {
public void createFilteredAppender() {
// Build level range filter (INFO to ERROR)
Filter levelRangeFilter = new LevelRangeFilterBuilder()
.setLevelMin(Level.INFO)
.setLevelMax(Level.ERROR)
.setAcceptOnMatch(true)
.build();
// Build level match filter (only WARN)
Filter levelMatchFilter = new LevelMatchFilterBuilder()
.setLevel(Level.WARN)
.setAcceptOnMatch(true)
.build();
// Build layout
PatternLayout layout = new PatternLayoutBuilder()
.setConversionPattern("%-5p %c - %m%n")
.build();
// Build appender with filter
ConsoleAppender appender = new ConsoleAppenderBuilder()
.setName("filtered-console")
.setLayout(layout)
.setFilter(levelRangeFilter)
.build();
// Configure logger
Logger logger = Logger.getLogger("filtered-example");
logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
// Test filtering
logger.debug("Debug message - should be filtered out");
logger.info("Info message - should appear");
logger.warn("Warn message - should appear");
logger.error("Error message - should appear");
}
}import org.apache.log4j.builders.*;
import org.apache.log4j.builders.appender.*;
import org.apache.log4j.builders.layout.*;
import org.apache.log4j.*;
public class ConfigurationBuilderExample {
public void buildCompleteConfiguration() {
// Build console layout
PatternLayout consoleLayout = new PatternLayoutBuilder()
.setConversionPattern("%-5p %c{1} - %m%n")
.build();
// Build file layout
PatternLayout fileLayout = new PatternLayoutBuilder()
.setConversionPattern("%d{ISO8601} [%t] %-5p %c - %m%n")
.build();
// Build console appender
ConsoleAppender consoleAppender = new ConsoleAppenderBuilder()
.setName("console")
.setLayout(consoleLayout)
.setTarget(ConsoleAppender.SYSTEM_OUT)
.build();
// Build rolling file appender
RollingFileAppender fileAppender = new RollingFileAppenderBuilder()
.setName("file")
.setLayout(fileLayout)
.setFileName("app.log")
.setMaxFileSize("10MB")
.setMaxBackupIndex(3)
.build();
// Build complete configuration
LoggerRepository repository = new ConfigurationBuilder()
.addAppender(consoleAppender)
.addAppender(fileAppender)
.setRootLogger(Level.INFO, consoleAppender, fileAppender)
.addLogger("com.myapp.dao", Level.DEBUG, false, fileAppender)
.addLogger("org.springframework", Level.WARN, true)
.setThreshold(Level.DEBUG)
.build();
// Apply configuration
new ConfigurationBuilder()
.addAppender(consoleAppender)
.addAppender(fileAppender)
.setRootLogger(Level.INFO, consoleAppender, fileAppender)
.configure();
}
}import org.apache.log4j.builders.appender.ConsoleAppenderBuilder;
import org.apache.log4j.builders.layout.PatternLayoutBuilder;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class XMLParsingExample {
public void parseXMLConfiguration() throws Exception {
// Example XML element parsing
String xmlConfig =
"<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 - %m%n'/>" +
" </layout>" +
"</appender>";
// Parse XML (simplified example)
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// In real implementation, you would parse the actual XML
// Element appenderElement = ...;
// Parse with builders
ConsoleAppenderBuilder appenderBuilder = new ConsoleAppenderBuilder();
// ConsoleAppender appender = appenderBuilder.parse(appenderElement).build();
// For demonstration, build manually
PatternLayout layout = new PatternLayoutBuilder()
.setConversionPattern("%-5p %c - %m%n")
.build();
ConsoleAppender appender = new ConsoleAppenderBuilder()
.setName("console")
.setTarget("System.out")
.setLayout(layout)
.build();
Logger.getRootLogger().addAppender(appender);
}
}import org.apache.log4j.builders.*;
import org.apache.log4j.*;
public class FluentConfigurationExample {
public void createFluentConfiguration() {
// Fluent API for complex configuration
new ConfigurationBuilder()
// Root logger with console output
.setRootLogger(Level.INFO,
new ConsoleAppenderBuilder()
.setName("root-console")
.setLayout(new PatternLayoutBuilder()
.setConversionPattern("%-5p %c{1} - %m%n")
.build())
.build())
// Application logger with file output
.addLogger("com.myapp", Level.DEBUG, false,
new RollingFileAppenderBuilder()
.setName("app-file")
.setFileName("myapp.log")
.setMaxFileSize("50MB")
.setMaxBackupIndex(10)
.setLayout(new PatternLayoutBuilder()
.setConversionPattern("%d{ISO8601} [%t] %-5p %c - %m%n")
.build())
.build())
// Third-party library logger with warn level
.addLogger("org.apache", Level.WARN, true)
.addLogger("org.springframework", Level.WARN, true)
// Apply the configuration
.configure();
}
}Install with Tessl CLI
npx tessl i tessl/maven-org-apache-logging-log4j--log4j-1-2-api