简短结论:Java 自带的 java.util.logging.Logger(JUL)是支持多线程的,而且是线程安全的;但“支持多线程”要从几个层面理解。
java.util.logging.Logger 本身是线程安全的Logger 的 log()、info()、warning() 等方法可以在多个线程中同时调用Logger 的发布(publish)、级别判断等操作做了同步处理Logger 实例是推荐做法示例:
Logger logger = Logger.getLogger("com.example");
Runnable task = () -> {
logger.info("thread: " + Thread.currentThread().getName());
};
new Thread(task).start();
new Thread(task).start();
✅ 不会出问题
这是容易踩坑的地方:
例如:
ConsoleHandlerFileHandler它们内部通常有同步逻辑。
如果你写了:
class MyHandler extends Handler {
public void publish(LogRecord record) {
// 如果有共享变量,需要同步
}
}
➡ 多线程下必须自己加锁或使用线程安全结构
即使 Logger 支持多线程:
这是正常的,不是 Logger 的 bug。
Logger 内部有锁(synchronized)| 框架 | 多线程支持 |
|---|---|
java.util.logging |
✅ 支持 |
| Log4j 1.x | ✅(已过时) |
| Log4j2 | ✅✅(推荐) |
| Logback | ✅✅ |
Java 自带的 Logger 支持多线程,线程安全,但高并发场景建议用 Log4j2 / Logback。
如果你愿意,可以告诉我:
我可以给你更具体的建议或示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。