CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-logging-log4j--log4j-1-2-api

The Apache Log4j 1.x Compatibility API providing a bridge to Log4j 2.x implementations

Pending
Overview
Eval results
Files

appenders.mddocs/

Appenders and Output

Appenders define where log messages are sent, including console output, files, rolling files, and custom destinations. The compatibility API provides full Log4j 1.x appender functionality.

Core Appender Interface

Appender Interface

public interface Appender {
    // Core appender methods
    void doAppend(LoggingEvent event);
    void close();
    boolean requiresLayout();
    
    // Name management
    String getName();
    void setName(String name);
    
    // Layout management
    Layout getLayout();
    void setLayout(Layout layout);
    
    // Error handling
    ErrorHandler getErrorHandler();
    void setErrorHandler(ErrorHandler eh);
    
    // Filter management
    void addFilter(Filter newFilter);
    Filter getFilter();
    void clearFilters();
}

Parameters:

  • event - LoggingEvent to append
  • name - String name for the appender
  • layout - Layout for message formatting
  • eh - ErrorHandler for error management
  • newFilter - Filter to add to filter chain

Returns:

  • String appender name
  • Layout current layout
  • ErrorHandler current error handler
  • Filter first filter in chain
  • boolean indicating if layout is required

AppenderSkeleton Base Class

public abstract class AppenderSkeleton implements Appender, OptionHandler {
    // Abstract method to implement
    protected abstract void append(LoggingEvent event);
    
    // Configuration
    public void activateOptions();
    
    // Name management
    public String getName();
    public void setName(String name);
    
    // Layout management
    public Layout getLayout();
    public void setLayout(Layout layout);
    
    // Threshold management
    public Priority getThreshold();
    public void setThreshold(Priority threshold);
    public boolean isAsSevereAsThreshold(Priority priority);
    
    // Error handling
    public ErrorHandler getErrorHandler();
    public void setErrorHandler(ErrorHandler errorHandler);
    
    // Filter management
    public void addFilter(Filter newFilter);
    public Filter getFilter();
    public void clearFilters();
    
    // Lifecycle
    public void close();
    public boolean isClosed();
}

Parameters:

  • event - LoggingEvent to process
  • name - String name for appender
  • layout - Layout for formatting
  • threshold - Priority threshold for filtering
  • priority - Priority to check against threshold
  • errorHandler - ErrorHandler for error management
  • newFilter - Filter to add

Returns:

  • String, Layout, Priority, ErrorHandler, Filter as appropriate
  • boolean for threshold checks and closed status

Console Appenders

ConsoleAppender

public class ConsoleAppender extends WriterAppender {
    // Target constants
    public static final String SYSTEM_OUT = "System.out";
    public static final String SYSTEM_ERR = "System.err";
    
    // Constructors
    public ConsoleAppender();
    public ConsoleAppender(Layout layout);
    public ConsoleAppender(Layout layout, String target);
    
    // Target management
    public String getTarget();
    public void setTarget(String value);
    
    // Follow option
    public boolean getFollow();
    public void setFollow(boolean follow);
    
    // Appender behavior
    public boolean requiresLayout();
    public void activateOptions();
}

Parameters:

  • layout - Layout for message formatting
  • target - Target stream (SYSTEM_OUT or SYSTEM_ERR)
  • value - String target value to set
  • follow - Boolean indicating if target should be followed

Returns:

  • String current target
  • boolean follow setting and layout requirement

File Appenders

FileAppender

public class FileAppender extends WriterAppender {
    // Constructors
    public FileAppender();
    public FileAppender(Layout layout, String filename) throws IOException;
    public FileAppender(Layout layout, String filename, boolean append) throws IOException;
    
    // File management
    public String getFile();
    public void setFile(String file);
    public boolean getAppend();
    public void setAppend(boolean flag);
    
    // Buffering
    public boolean getBufferedIO();
    public void setBufferedIO(boolean bufferedIO);
    public int getBufferSize();
    public void setBufferSize(int bufferSize);
    
    // Lifecycle
    public void activateOptions();
    protected void closeFile();
    protected void setQWForFiles(Writer writer);
    
    // Utility
    protected void reset();
    protected void writeHeader();
    protected void writeFooter();
}

Parameters:

  • layout - Layout for message formatting
  • filename - String path to log file
  • append - Boolean indicating if file should be appended to
  • flag - Boolean append flag
  • bufferedIO - Boolean indicating if IO should be buffered
  • bufferSize - Integer buffer size in bytes
  • writer - Writer for file output

Returns:

  • String current filename
  • boolean append and buffering settings
  • int buffer size

Throws:

  • IOException - When file operations fail

RollingFileAppender

public class RollingFileAppender extends FileAppender {
    // Constructors
    public RollingFileAppender();
    public RollingFileAppender(Layout layout, String filename) throws IOException;
    public RollingFileAppender(Layout layout, String filename, boolean append) throws IOException;
    
    // Rolling configuration
    public long getMaximumFileSize();
    public void setMaximumFileSize(long maxFileSize);
    public void setMaxFileSize(String value);
    public int getMaxBackupIndex();
    public void setMaxBackupIndex(int maxBackups);
    
    // Rolling behavior
    public void rollOver();
    protected void subAppend(LoggingEvent event);
}

Parameters:

  • layout - Layout for formatting
  • filename - String path to log file
  • append - Boolean append flag
  • maxFileSize - Long maximum file size in bytes
  • value - String representation of max file size (e.g., "10MB")
  • maxBackups - Integer maximum number of backup files
  • event - LoggingEvent to append

Returns:

  • long maximum file size
  • int maximum backup index

Throws:

  • IOException - When file operations fail

DailyRollingFileAppender

public class DailyRollingFileAppender extends FileAppender {
    // Date pattern constants
    public static final String MONTHLY_ROLLOVER = "'.'yyyy-MM";
    public static final String WEEKLY_ROLLOVER = "'.'yyyy-ww";
    public static final String DAILY_ROLLOVER = "'.'yyyy-MM-dd";
    public static final String TWICE_DAILY_ROLLOVER = "'.'yyyy-MM-dd-a";
    public static final String HOURLY_ROLLOVER = "'.'yyyy-MM-dd-HH";
    public static final String MINUTELY_ROLLOVER = "'.'yyyy-MM-dd-HH-mm";
    
    // Constructors
    public DailyRollingFileAppender();
    public DailyRollingFileAppender(Layout layout, String filename, String datePattern) throws IOException;
    
    // Date pattern management
    public String getDatePattern();
    public void setDatePattern(String pattern);
    
    // Rolling behavior
    public void activateOptions();
    protected void subAppend(LoggingEvent event);
}

Parameters:

  • layout - Layout for formatting
  • filename - String path to log file
  • datePattern - String date pattern for rolling (SimpleDateFormat pattern)
  • pattern - String date pattern to set
  • event - LoggingEvent to append

Returns:

  • String current date pattern

Throws:

  • IOException - When file operations fail

Network Appenders

SocketAppender

public class SocketAppender extends AppenderSkeleton {
    // Constructors
    public SocketAppender();
    public SocketAppender(InetAddress address, int port);
    public SocketAppender(String host, int port);
    
    // Connection configuration
    public String getRemoteHost();
    public void setRemoteHost(String host);
    public int getPort();
    public void setPort(int port);
    public int getReconnectionDelay();
    public void setReconnectionDelay(int delay);
    
    // Lifecycle
    public void activateOptions();
    public void close();
    public boolean requiresLayout();
    
    // Appending
    protected void append(LoggingEvent event);
}

Parameters:

  • address - InetAddress of remote host
  • port - Integer port number
  • host - String hostname or IP address
  • delay - Integer reconnection delay in milliseconds
  • event - LoggingEvent to send

Returns:

  • String remote host
  • int port and reconnection delay
  • boolean layout requirement (false)

Custom Appenders

WriterAppender Base Class

public class WriterAppender extends AppenderSkeleton {
    // Constructors
    public WriterAppender();
    public WriterAppender(Layout layout, Writer writer);
    public WriterAppender(Layout layout, OutputStream os);
    
    // Writer management
    public void setWriter(Writer writer);
    protected void closeWriter();
    protected void writeHeader();
    protected void writeFooter();
    
    // Encoding
    public String getEncoding();
    public void setEncoding(String value);
    
    // Immediate flush
    public boolean getImmediateFlush();
    public void setImmediateFlush(boolean value);
    
    // Appending
    protected void append(LoggingEvent event);
    protected void subAppend(LoggingEvent event);
    
    // Lifecycle
    public void activateOptions();
    public void close();
    public boolean requiresLayout();
}

Parameters:

  • layout - Layout for formatting
  • writer - Writer for output
  • os - OutputStream for output
  • value - String encoding name or boolean immediate flush flag
  • event - LoggingEvent to append

Returns:

  • String current encoding
  • boolean immediate flush setting and layout requirement

Usage Examples

Console Appender Setup

import org.apache.log4j.*;

public class ConsoleAppenderExample {
    public void setupConsoleLogging() {
        // Create pattern layout
        PatternLayout layout = new PatternLayout("%d{HH:mm:ss} %-5p %c{1} - %m%n");
        
        // Create console appender
        ConsoleAppender appender = new ConsoleAppender(layout, ConsoleAppender.SYSTEM_OUT);
        appender.setName("console");
        
        // Add to root logger
        Logger rootLogger = Logger.getRootLogger();
        rootLogger.addAppender(appender);
        rootLogger.setLevel(Level.INFO);
    }
}

File Appender Setup

import org.apache.log4j.*;
import java.io.IOException;

public class FileAppenderExample {
    public void setupFileLogging() throws IOException {
        // Create layout
        PatternLayout layout = new PatternLayout("%d{ISO8601} [%t] %-5p %c - %m%n");
        
        // Create file appender
        FileAppender appender = new FileAppender(layout, "application.log", true);
        appender.setName("file");
        appender.setBufferedIO(true);
        appender.setBufferSize(8192);
        appender.activateOptions();
        
        // Add to logger
        Logger logger = Logger.getLogger("com.myapp");
        logger.addAppender(appender);
        logger.setLevel(Level.DEBUG);
    }
}

Rolling File Appender Setup

import org.apache.log4j.*;
import java.io.IOException;

public class RollingFileExample {
    public void setupRollingFile() throws IOException {
        // Create layout
        PatternLayout layout = new PatternLayout("%d %p %c - %m%n");
        
        // Create rolling file appender
        RollingFileAppender appender = new RollingFileAppender(layout, "app.log", true);
        appender.setName("rolling");
        appender.setMaxFileSize("10MB");
        appender.setMaxBackupIndex(5);
        appender.activateOptions();
        
        // Add to root logger
        Logger.getRootLogger().addAppender(appender);
    }
}

Daily Rolling File Appender

import org.apache.log4j.*;
import java.io.IOException;

public class DailyRollingExample {
    public void setupDailyRolling() throws IOException {
        // Create layout
        PatternLayout layout = new PatternLayout("%d{ISO8601} %-5p %c - %m%n");
        
        // Create daily rolling appender
        DailyRollingFileAppender appender = new DailyRollingFileAppender(
            layout, 
            "daily.log", 
            DailyRollingFileAppender.DAILY_ROLLOVER
        );
        appender.setName("daily");
        appender.activateOptions();
        
        // Add to logger
        Logger logger = Logger.getLogger("com.myapp.daily");
        logger.addAppender(appender);
    }
}

Custom Appender Implementation

import org.apache.log4j.*;
import org.apache.log4j.spi.LoggingEvent;

public class CustomAppender extends AppenderSkeleton {
    private String customProperty;
    
    public CustomAppender() {
        super();
    }
    
    public String getCustomProperty() {
        return customProperty;
    }
    
    public void setCustomProperty(String customProperty) {
        this.customProperty = customProperty;
    }
    
    @Override
    protected void append(LoggingEvent event) {
        // Custom appending logic
        String message = layout.format(event);
        // Process message with custom logic
        processMessage(message);
    }
    
    @Override
    public void close() {
        // Cleanup resources
        if (this.closed) {
            return;
        }
        this.closed = true;
    }
    
    @Override
    public boolean requiresLayout() {
        return true;
    }
    
    private void processMessage(String message) {
        // Custom message processing
    }
}

Utility Appenders

NullAppender

A special appender that discards all log messages. Useful for silencing specific loggers or during testing.

public class NullAppender extends AppenderSkeleton {
    // Constructors
    public NullAppender();
    
    // Factory method (preferred)
    public static NullAppender getNullAppender();
    
    // Deprecated factory method
    @Deprecated
    public NullAppender getInstance();
    
    // Inherited methods (all no-op)
    public void activateOptions();
    protected void append(LoggingEvent event);
    public void close();
    public void doAppend(LoggingEvent event);
    public boolean requiresLayout();
}

Parameters:

  • All methods are no-op implementations

Returns:

  • getNullAppender() returns singleton instance
  • requiresLayout() returns false

Usage Example:

import org.apache.log4j.Logger;
import org.apache.log4j.varia.NullAppender;

public class NullAppenderExample {
    public void setupNullAppender() {
        Logger logger = Logger.getLogger("noisy.component");
        
        // Use singleton instance (preferred)
        logger.addAppender(NullAppender.getNullAppender());
        
        // Or create new instance
        logger.addAppender(new NullAppender());
        
        // This logger will now discard all messages
        logger.info("This message will be discarded");
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-logging-log4j--log4j-1-2-api

docs

appenders.md

builders.md

configuration.md

context.md

index.md

layouts.md

logging.md

spi.md

tile.json