Java 9 giới thiệu Platform Logging API: log message với service interface cho consumer. Implementation của LoggerFinder được load qua java.util.ServiceLoader bằng System ClassLoader. Ứng dụng có thể plug-in logging backend riêng (Log4j, SLF4J...) mà không cấu hình java.util.logging.
LoggerFinder tùy chỉnh
public class MyLoggerFinder extends LoggerFinder {
@Override
public Logger getLogger(String name, Module module) {
// Trả về logger tùy thuộc name/module
// VD: return Log4jLogger.getLogger(name);
}
}
Lấy Logger từ System
public class System {
public static System.Logger getLogger(String name) { ... }
public static System.Logger getLogger(String name, ResourceBundle bundle) { ... }
}
Luồng hoạt động
- App gọi
System.getLogger("com.example.MyClass"). LoggerFinder(custom hoặc default) tạo/ trả vềSystem.Logger.System.Loggerdelegate đến backend logging thực tế (JUL, Log4j, SLF4J...).
System.Logger interface
public interface Logger {
void log(Level level, ResourceBundle bundle, String msg, Throwable thrown);
void log(Level level, ResourceBundle bundle, String format, Object... params);
boolean isLoggable(Level level);
// ... các method convenience: debug, info, warning, error...
}
Lợi ích
- Decoupling: Platform code (JDK) không phụ thuộc logging implementation cụ thể.
- Pluggable: App/server (Spring, Tomcat, WildFly) cung cấp LoggerFinder riêng.
- Zero dependency: Thư viện dùng
System.Loggerkhông cần pull logging framework. - Module-friendly: Hoạt động tốt với JPMS (module system).
Mức độ log (Level)
enum Level { TRACE, DEBUG, INFO, WARNING, ERROR }
Platform Logging API là bước tiến quan trọng để JDK và ứng dụng chia sẻ logging infrastructure thống nhất, linh hoạt.