High-performance logging library for Java 17+ with compile-time annotation processing, async logging via LMAX Disruptor, and comprehensive Spring Boot integration. Inspired by SLF4J, built for modern Java.
Open source library with advanced features for production workloads
Hermes combines compile-time magic with runtime performance to deliver a logging experience that just works
Zero-boilerplate logging with compile-time annotation processing. No reflection, no runtime overhead.
Lock-free ring buffer for 10M+ logs/sec throughput. Non-blocking publish with background processing.
Auto-configuration via starter module. YAML config binding and actuator health indicators included.
Idiomatic Kotlin extensions with lazy evaluation, MDC DSL, and structured logging builders.
Console, File, Rolling, Async, Logstash. Pattern and JSON layouts with ThreadLocal optimization.
Native-image metadata included. Compile-time processing eliminates reflection requirements.
Three simple steps from zero to production-ready logging
Add @InjectLogger and extend the generated base class. The annotation processor creates a parent class with a protected Logger field during compilation.
Maven compiles your code and the annotation processor generates the base class. Zero runtime reflection means native-image compatibility out of the box.
Use the inherited log field to write logs. Configure appenders and layouts programmatically or via Spring Boot YAML config.
Six Maven modules with clear separation of concerns
Core interfaces and annotations (Logger, LoggerFactory, @InjectLogger, MDC, Marker)
HermesLogger implementation, appenders (Console, File, Rolling, Async, Logstash), layouts (Pattern, JSON)
Compile-time annotation processor that generates base classes with protected Logger fields
Auto-configuration, HermesProperties YAML binding, health indicators
Idiomatic Kotlin DSL extensions, lazy evaluation, MDC DSL, structured logging
Working examples and demonstrations for common scenarios
See how easy it is to use Hermes in your Java or Kotlin projects
@InjectLogger
public class UserService extends UserServiceHermesLogger {
public void createUser(String username) {
log.info("Creating user: {}", username);
try {
// Business logic here
log.debug("User created successfully");
} catch (Exception e) {
log.error("Failed to create user", e);
}
}
}Hermes adapts to your architecture and deployment needs
Lightweight footprint and async logging for high-throughput services with minimal latency impact.
Auto-configuration and YAML binding for seamless integration with Spring Boot ecosystem.
LMAX Disruptor async appender delivers 10M+ logs/sec without blocking application threads.
Idiomatic Kotlin DSL with lazy evaluation and structured logging for modern JVM applications.
GraalVM native-image compatible with zero reflection and compile-time processing.
JSON logging with Logstash appender for centralized log aggregation and monitoring.
Add Hermes to your project in seconds
<dependency>
<groupId>io.github.dotbrains</groupId>
<artifactId>hermes-api</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>io.github.dotbrains</groupId>
<artifactId>hermes-core</artifactId>
<version>1.0.0</version>
<scope>runtime</scope>
</dependency>
<!-- For annotation processing -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.github.dotbrains</groupId>
<artifactId>hermes-processor</artifactId>
<version>1.0.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>@InjectLogger
public class UserService
extends UserServiceHermesLogger {
public void processUser(User user) {
log.info("Processing user: {}",
user.getId());
try {
// Your business logic
log.debug("User processed");
} catch (Exception e) {
log.error("Error: {}",
e.getMessage(), e);
}
}
}💡 Pro tip: The annotation processor will generate UserServiceHermesLogger with a protected log field during compilation.
Join the community and start building with zero-boilerplate Java logging today