or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/maven-org-apache-logging-log4j--log4j-docker

Apache Log4j Docker Support library that provides Docker container information lookup functionality for Log4j logging framework

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.apache.logging.log4j/log4j-docker@2.25.x

To install, run

npx @tessl/cli install tessl/maven-org-apache-logging-log4j--log4j-docker@2.25.0

index.mddocs/

Apache Log4j Docker Support

Apache Log4j Docker Support provides Docker container information lookup functionality for the Log4j logging framework. It enables applications running within Docker containers to access container metadata such as container ID, image information, and network settings through the DockerLookup plugin.

Package Information

  • Package Name: log4j-docker
  • Package Type: maven
  • Language: Java
  • Group ID: org.apache.logging.log4j
  • Artifact ID: log4j-docker
  • Installation: Add to Maven dependencies:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-docker</artifactId>
    <version>2.25.1</version>
</dependency>

Gradle:

implementation 'org.apache.logging.log4j:log4j-docker:2.25.1'

Core Imports

import org.apache.logging.log4j.docker.DockerLookup;
import org.apache.logging.log4j.docker.model.Container;
import org.apache.logging.log4j.docker.model.Network;
import org.apache.logging.log4j.docker.model.NetworkSettings;
import org.apache.logging.log4j.docker.model.Mount;
import org.apache.logging.log4j.docker.model.PortDefinition;
import org.apache.logging.log4j.docker.model.IPAMConfig;

Basic Usage

The DockerLookup plugin automatically registers with Log4j and can be used in configuration files:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - [${docker:containerId}] %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Configuration

Set the DOCKER_URI environment variable or system property to the Docker daemon endpoint:

export DOCKER_URI=http://localhost:2375

Or in Java:

System.setProperty("DOCKER_URI", "http://localhost:2375");

Capabilities

Docker Lookup Plugin

The main plugin that provides Docker container information to Log4j patterns.

@Plugin(name = "docker", category = StrLookup.CATEGORY)
public class DockerLookup extends AbstractLookup {
    public DockerLookup();
    public String lookup(LogEvent ignored, String key);
}

Supported Lookup Keys:

  • shortContainerId - Returns the first 12 characters of the container ID
  • containerId - Returns the full container ID
  • containerName - Returns the container name(s)
  • shortImageId - Returns the first 12 characters of the image ID
  • imageId - Returns the full image ID
  • imageName - Returns the image name

Usage in Log4j configuration:

<PatternLayout pattern="%d - [${docker:shortContainerId}] [${docker:imageName}] %msg%n"/>

Container Information Model

The library provides comprehensive data models for Docker container information.

public class Container {
    public String getId();
    public void setId(String id);
    
    public List<String> getNames();
    public void setNames(List<String> names);
    
    public String getImage();
    public void setImage(String image);
    
    public String getImageId();
    public void setImageId(String imageId);
    
    public String getCommand();
    public void setCommand(String command);
    
    public Long getCreated();
    public void setCreated(Long created);
    
    public List<PortDefinition> getPorts();
    public void setPorts(List<PortDefinition> ports);
    
    public Map<String, String> getLabels();
    public void setLabels(Map<String, String> labels);
    
    public String getState();
    public void setState(String state);
    
    public String getStatus();
    public void setStatus(String status);
    
    public HostConfig getHostConfig();
    public void setHostConfig(HostConfig hostConfig);
    
    public NetworkSettings getNetworkSettings();
    public void setNetworkSettings(NetworkSettings networkSettings);
    
    public List<Mount> getMounts();
    public void setMounts(List<Mount> mounts);
}

Network Configuration

Access to Docker network settings and configuration.

public class NetworkSettings {
    public Map<String, Network> getNetworks();
    public void setNetworks(Map<String, Network> networks);
    
    public String getBridge();
    public void setBridge(String bridge);
    
    public String getSandboxId();
    public void setSandboxId(String sandboxId);
    
    public boolean isHairpinMode();
    public void setHairpinMode(boolean hairpinMode);
    
    public String getLinkLocalIPv6Address();
    public void setLinkLocalIPv6Address(String linkLocalIPv6Address);
    
    public int getLinkLocalIPv6PrefixLen();
    public void setLinkLocalIPv6PrefixLen(int linkLocalIPv6PrefixLen);
    
    public Map<String, String> getPorts();
    public void setPorts(Map<String, String> ports);
    
    public String getSandboxKey();
    public void setSandboxKey(String sandboxKey);
    
    public String getSecondaryIPaddresses();
    public void setSecondaryIPaddresses(String secondaryIPaddresses);
    
    public String getEndpointId();
    public void setEndpointId(String endpointId);
    
    public String getGateway();
    public void setGateway(String gateway);
    
    public String getGlobalIPv6Address();
    public void setGlobalIPv6Address(String globalIPv6Address);
    
    public int getGlobalIPv6PrefixLen();
    public void setGlobalIPv6PrefixLen(int globalIPv6PrefixLen);
    
    public String getIpAddress();
    public void setIpAddress(String ipAddress);
    
    public int getIpPrefixLen();
    public void setIpPrefixLen(int ipPrefixLen);
    
    public String getIpv6Gateway();
    public void setIpv6Gateway(String ipv6Gateway);
    
    public String getMacAddress();
    public void setMacAddress(String macAddress);
}
public class Network {
    public IPAMConfig getIpamConfig();
    public void setIpamConfig(IPAMConfig ipamConfig);
    
    public String getLinks();
    public void setLinks(String links);
    
    public String[] getAliases();
    public void setAliases(String[] aliases);
    
    public String getNetworkId();
    public void setNetworkId(String networkId);
    
    public String getEndpointId();
    public void setEndpointId(String endpointId);
    
    public String getGateway();
    public void setGateway(String gateway);
    
    public String getIpAddress();
    public void setIpAddress(String ipAddress);
    
    public Integer getIpPrefixLen();
    public void setIpPrefixLen(Integer ipPrefixLen);
    
    public String getIpv6Gateway();
    public void setIpv6Gateway(String ipv6Gateway);
    
    public String getGlobalIPv6Address();
    public void setGlobalIPv6Address(String globalIPv6Address);
    
    public Integer getGlobalIPv6PrefixLen();
    public void setGlobalIPv6PrefixLen(Integer globalIPv6PrefixLen);
    
    public String getMacAddress();
    public void setMacAddress(String macAddress);
    
    public String getDriverOpts();
    public void setDriverOpts(String driverOpts);
}

Volume Mount Information

Access to Docker volume and bind mount details.

public class Mount {
    public String getType();
    public void setType(String type);
    
    public String getName();
    public void setName(String name);
    
    public String getSource();
    public void setSource(String source);
    
    public String getDestination();
    public void setDestination(String destination);
    
    public String getDriver();
    public void setDriver(String driver);
    
    public String getMode();
    public void setMode(String mode);
    
    public Boolean getReadWrite();
    public void setReadWrite(Boolean readWrite);
    
    public String getPropagation();
    public void setPropagation(String propagation);
}

Port Mapping Information

Access to Docker port mapping and networking details.

public class PortDefinition {
    public String getIp();
    public void setIp(String ip);
    
    public Integer getPrivatePort();
    public void setPrivatePort(Integer privatePort);
    
    public Integer getPublicPort();
    public void setPublicPort(Integer publicPort);
    
    public String getType();
    public void setType(String type);
}

Host Configuration

Docker host configuration settings are accessible through the Container class, but the HostConfig class itself has no public methods in the current implementation.

IP Address Management

Access to Docker network IP address management configuration.

public class IPAMConfig {
    public String getSubnet();
    public void setSubnet(String subnet);
    
    public String getIpRange();
    public void setIpRange(String ipRange);
    
    public String getGateway();
    public void setGateway(String gateway);
    
    public String getIpv4Address();
    public void setIpv4Address(String ipv4Address);
}

Error Handling

The DockerLookup plugin handles connection failures gracefully:

  • Returns null when Docker information is unavailable
  • Logs warnings when Docker URI is not configured
  • Logs warnings when unable to connect to Docker daemon
  • Logs warnings when unable to determine current container

When Docker information is unavailable, lookup operations return null values, allowing logging to continue normally without Docker context.

Dependencies

This library requires:

  • Apache Log4j Core
  • Apache Log4j API
  • Jackson JSON processing libraries (core, databind, annotations)

Usage Examples

Basic Container Identification

<PatternLayout pattern="%d [${docker:shortContainerId}] %level - %msg%n"/>

Detailed Container Context

<PatternLayout pattern="%d [${docker:containerName}@${docker:imageName}] %level - %msg%n"/>

Environment-Specific Logging

// Application code
Logger logger = LogManager.getLogger(MyApplication.class);
logger.info("Application started in container");

// Output with Docker context:
// 2024-01-15 10:30:45 [abc123456789] INFO - Application started in container