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

layouts.mddocs/

Layouts and Formatting

Layouts control how log messages are formatted for output. The compatibility API provides pattern-based formatting, simple layouts, and extensible custom layout capabilities.

Base Layout Class

Layout Abstract Class

public abstract class Layout {
    // Line separator constants
    public static final String LINE_SEP;
    public static final int LINE_SEP_LEN;
    
    // Abstract methods to implement
    public abstract String format(LoggingEvent event);
    public abstract boolean ignoresThrowable();
    
    // Optional methods
    public String getContentType();
    public String getHeader();
    public String getFooter();
    
    // Lifecycle
    public void activateOptions();
}

Parameters:

  • event - LoggingEvent to format

Returns:

  • String formatted message, content type, header, or footer
  • boolean indicating if throwable information is ignored

Pattern-Based Layout

PatternLayout

public class PatternLayout extends Layout {
    // Default patterns
    public static final String DEFAULT_CONVERSION_PATTERN = "%m%n";
    public static final String TTCC_CONVERSION_PATTERN = "%r [%t] %p %c %x - %m%n";
    
    // Constructors
    public PatternLayout();
    public PatternLayout(String pattern);
    
    // Pattern management
    public String getConversionPattern();
    public void setConversionPattern(String conversionPattern);
    
    // Layout implementation
    public String format(LoggingEvent event);
    public boolean ignoresThrowable();
    public void activateOptions();
}

Parameters:

  • pattern - String conversion pattern
  • conversionPattern - String pattern to set
  • event - LoggingEvent to format

Returns:

  • String current conversion pattern or formatted message
  • boolean always returns true (ignores throwable)

Pattern Conversion Specifiers

The PatternLayout uses conversion patterns with the following specifiers:

SpecifierDescriptionExample
%cCategory/Logger namecom.myapp.MyClass
%CFully qualified class namecom.myapp.MyClass
%dDate/time2023-10-15 14:30:25,123
%FFile nameMyClass.java
%lLocation informationcom.myapp.MyClass.method(MyClass.java:42)
%LLine number42
%mApplication messageUser logged in
%MMethod nameloginUser
%nPlatform-specific line separator\n or \r\n
%pPriority/LevelINFO, ERROR
%rMilliseconds since startup1234
%tThread namemain, pool-1-thread-1
%xNDC (Nested Diagnostic Context)operation.subop
%XMDC (Mapped Diagnostic Context){userId=123, sessionId=abc}

Pattern Format Modifiers

ModifierDescriptionExample
%-5pLeft-align in 5 charactersINFO
%5pRight-align in 5 characters INFO
%.10cTruncate to 10 characterscom.myapp
%20.30cMin 20, max 30 charactersPadded or truncated
%c{1}Show only last componentMyClass
%c{2}Show last 2 componentsmyapp.MyClass

Date Format Patterns

PatternDescriptionExample
%dDefault format15 Oct 2023 14:30:25,123
%d{ISO8601}ISO 8601 format2023-10-15 14:30:25,123
%d{ABSOLUTE}Absolute time14:30:25,123
%d{DATE}Date format15 Oct 2023 14:30:25,123
%d{dd MMM yyyy HH:mm:ss,SSS}Custom format15 Oct 2023 14:30:25,123

Simple Layout

SimpleLayout

public class SimpleLayout extends Layout {
    // Constructor
    public SimpleLayout();
    
    // Layout implementation
    public String format(LoggingEvent event);
    public boolean ignoresThrowable();
}

Parameters:

  • event - LoggingEvent to format

Returns:

  • String formatted as "LEVEL - message\n"
  • boolean always returns true (ignores throwable)

HTML Layout

HTMLLayout

public class HTMLLayout extends Layout {
    // Constructor
    public HTMLLayout();
    
    // Layout implementation
    public String format(LoggingEvent event);
    public boolean ignoresThrowable();
    public String getContentType();
    public String getHeader();  
    public String getFooter();
    
    // Configuration
    public boolean getLocationInfo();
    public void setLocationInfo(boolean flag);
    public String getTitle();
    public void setTitle(String title);
}

Parameters:

  • event - LoggingEvent to format
  • flag - Boolean to enable/disable location info
  • title - String title for HTML document

Returns:

  • String HTML-formatted message, content type, header, or footer
  • boolean always returns true (ignores throwable)

XML Layout

XMLLayout

public class XMLLayout extends Layout {
    // Constructor
    public XMLLayout();
    
    // Layout implementation
    public String format(LoggingEvent event);
    public boolean ignoresThrowable();
    public String getContentType();
    public String getHeader();
    public String getFooter();
    
    // Configuration
    public boolean getLocationInfo();
    public void setLocationInfo(boolean flag);
    public boolean getProperties();
    public void setProperties(boolean flag);
}

Parameters:

  • event - LoggingEvent to format
  • flag - Boolean to enable location info or properties

Returns:

  • String XML-formatted message, content type, header, or footer
  • boolean location info or properties setting

TTCCLayout (Legacy)

TTCCLayout

public class TTCCLayout extends DateLayout {
    // Constructor
    public TTCCLayout();
    public TTCCLayout(String dateFormatType);
    
    // Layout implementation
    public String format(LoggingEvent event);
    public boolean ignoresThrowable();
    
    // Configuration
    public boolean getThreadPrinting();
    public void setThreadPrinting(boolean threadPrinting);
    public boolean getCategoryPrefixing();
    public void setCategoryPrefixing(boolean categoryPrefixing);
    public boolean getContextPrinting();
    public void setContextPrinting(boolean contextPrinting);
}

Parameters:

  • dateFormatType - String date format type
  • event - LoggingEvent to format
  • threadPrinting - Boolean to enable thread printing
  • categoryPrefixing - Boolean to enable category prefixing
  • contextPrinting - Boolean to enable context printing

Returns:

  • String formatted message in TTCC format
  • boolean configuration settings

Usage Examples

PatternLayout Usage

import org.apache.log4j.*;

public class PatternLayoutExample {
    public void setupPatternLayouts() {
        Logger logger = Logger.getLogger(PatternLayoutExample.class);
        
        // Simple pattern
        PatternLayout simplePattern = new PatternLayout("%d %-5p %c - %m%n");
        ConsoleAppender console1 = new ConsoleAppender(simplePattern);
        
        // Detailed pattern with location info
        PatternLayout detailedPattern = new PatternLayout(
            "%d{ISO8601} [%t] %-5p %c{1} %M:%L - %m%n"
        );
        ConsoleAppender console2 = new ConsoleAppender(detailedPattern);
        
        // Pattern with MDC and NDC
        PatternLayout contextPattern = new PatternLayout(
            "%d{HH:mm:ss,SSS} [%t] %-5p %c - %X{userId} %x - %m%n"
        );
        ConsoleAppender console3 = new ConsoleAppender(contextPattern);
        
        logger.addAppender(console1);
    }
}

Custom Date Patterns

import org.apache.log4j.*;

public class DatePatternExample {
    public void setupDatePatterns() {
        // ISO 8601 format
        PatternLayout isoPattern = new PatternLayout("%d{ISO8601} - %m%n");
        
        // Custom date format
        PatternLayout customPattern = new PatternLayout(
            "%d{dd/MM/yyyy HH:mm:ss.SSS} [%p] %c - %m%n"
        );
        
        // Absolute time only
        PatternLayout timeOnlyPattern = new PatternLayout("%d{ABSOLUTE} - %m%n");
        
        // Multiple appenders with different date formats
        FileAppender fileAppender = new FileAppender(isoPattern, "app.log");
        ConsoleAppender consoleAppender = new ConsoleAppender(customPattern);
        
        Logger logger = Logger.getRootLogger();
        logger.addAppender(fileAppender);
        logger.addAppender(consoleAppender);
    }
}

SimpleLayout Usage

import org.apache.log4j.*;

public class SimpleLayoutExample {
    public void setupSimpleLayout() {
        // Create simple layout
        SimpleLayout layout = new SimpleLayout();
        
        // Create appender with simple layout
        ConsoleAppender appender = new ConsoleAppender(layout);
        appender.setName("simple-console");
        
        // Add to logger
        Logger logger = Logger.getLogger("simple");
        logger.addAppender(appender);
        logger.setLevel(Level.INFO);
        
        // Log messages will appear as: "INFO - Your message"
        logger.info("This is an info message");
        logger.error("This is an error message");
    }
}

HTMLLayout Usage

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

public class HTMLLayoutExample {
    public void setupHTMLLayout() throws IOException {
        // Create HTML layout
        HTMLLayout layout = new HTMLLayout();
        layout.setTitle("Application Log");
        layout.setLocationInfo(true);
        
        // Create file appender with HTML layout
        FileAppender appender = new FileAppender(layout, "app.html");
        appender.setName("html-file");
        
        // Add to logger
        Logger logger = Logger.getLogger("html");
        logger.addAppender(appender);
        logger.setLevel(Level.DEBUG);
        
        // Messages will be formatted as HTML table rows
        logger.info("Application started");
        logger.debug("Debug information");
    }
}

XMLLayout Usage

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

public class XMLLayoutExample {
    public void setupXMLLayout() throws IOException {
        // Create XML layout
        XMLLayout layout = new XMLLayout();
        layout.setLocationInfo(true);
        layout.setProperties(true);
        
        // Create file appender with XML layout
        FileAppender appender = new FileAppender(layout, "app.xml");
        appender.setName("xml-file");
        
        // Add to logger
        Logger logger = Logger.getLogger("xml");
        logger.addAppender(appender);
        
        // Messages will be formatted as XML elements
        logger.info("Application event");
        logger.warn("Warning message");
    }
}

Custom Layout Implementation

import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CustomLayout extends Layout {
    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private boolean includeLocation = false;
    
    public CustomLayout() {
        super();
    }
    
    public CustomLayout(boolean includeLocation) {
        this.includeLocation = includeLocation;
    }
    
    public boolean getIncludeLocation() {
        return includeLocation;
    }
    
    public void setIncludeLocation(boolean includeLocation) {
        this.includeLocation = includeLocation;
    }
    
    @Override
    public String format(LoggingEvent event) {
        StringBuilder sb = new StringBuilder();
        
        // Add timestamp
        sb.append("[").append(dateFormat.format(new Date(event.timeStamp))).append("] ");
        
        // Add level
        sb.append(event.getLevel().toString()).append(" ");
        
        // Add logger name
        sb.append(event.getLoggerName()).append(" ");
        
        // Add location if enabled
        if (includeLocation && event.getLocationInformation() != null) {
            sb.append("(").append(event.getLocationInformation().getClassName());
            sb.append(".").append(event.getLocationInformation().getMethodName());
            sb.append(":").append(event.getLocationInformation().getLineNumber()).append(") ");
        }
        
        // Add message
        sb.append("- ").append(event.getRenderedMessage());
        
        // Add line separator
        sb.append(LINE_SEP);
        
        return sb.toString();
    }
    
    @Override
    public boolean ignoresThrowable() {
        return false; // We handle throwables
    }
    
    @Override
    public void activateOptions() {
        // No options to activate in this simple example
    }
}

Layout Configuration Examples

import org.apache.log4j.*;

public class LayoutConfigurationExample {
    public void setupMultipleLayouts() {
        Logger logger = Logger.getLogger("multi-layout");
        
        // Console with simple format
        PatternLayout consoleLayout = new PatternLayout("%-5p %c{1} - %m%n");
        ConsoleAppender consoleAppender = new ConsoleAppender(consoleLayout);
        
        // File with detailed format
        PatternLayout fileLayout = new PatternLayout(
            "%d{ISO8601} [%t] %-5p %c %M:%L - %m%n"
        );
        FileAppender fileAppender;
        try {
            fileAppender = new FileAppender(fileLayout, "detailed.log");
            logger.addAppender(fileAppender);
        } catch (Exception e) {
            System.err.println("Failed to create file appender: " + e.getMessage());
        }
        
        // HTML for web viewing
        HTMLLayout htmlLayout = new HTMLLayout();
        htmlLayout.setTitle("Application Events");
        htmlLayout.setLocationInfo(true);
        
        FileAppender htmlAppender;
        try {
            htmlAppender = new FileAppender(htmlLayout, "events.html");
            logger.addAppender(htmlAppender);
        } catch (Exception e) {
            System.err.println("Failed to create HTML appender: " + e.getMessage());
        }
        
        logger.addAppender(consoleAppender);
        logger.setLevel(Level.DEBUG);
    }
}

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