# 日志点

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

日志点 是一种不会挂起的断点，在被触发时会将调试信息写入控制台。

日志点可帮助完成以下操作：

* 让调试日志保持整洁并集中，而不是到处插入 `println()` 调用。

* 无需暂停执行便可洞察程序中对时序敏感的部分 可以在程序运行时添加或修改日志点，而无需重启程序或使用 [HotSwap](altering-the-program-s-execution-flow.html#reload_classes)。

* 调试无法编辑的库或其他代码。

* 访问原本无法访问的字段和方法，例如，在不使用反射的情况下调用第三方类的私有方法。

* 从日志条目 [导航](#navigation-and-stack-traces)回产生日志的代码，并获取更多运行时信息，例如日志点被触发时线程的堆栈跟踪

* 使用 AI 代理收集运行时证据，如 [智能体调试](agentic-debugging.html) 中所述。

> **Tip:**
> 查看 [日志点演练](https://blog.jetbrains.com/idea/2026/09/logpoints-walkthrough/) 博客文章，了解一个使用日志点跟踪容器化服务中错误的端到端示例。

## 创建日志点

Procedure:

1. 点击任意两行可执行文件之间的装订区域 会出现黄色圆形图标。

![悬停在两行可执行文件之间时会显示日志点图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/logpoints-hover-over-line.png)

或者，将文本光标放在某一行上，然后按 `Ctrl+Alt+F8` (Windows), `⌘ ⌥ F8` (macOS), `⌘ ⌥ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ F8` (macOS System Shortcuts), `Ctrl+Alt+8` (XWin), `Ctrl+Alt+8` (GNOME), `Ctrl+Alt+8` (KDE), `Ctrl+Alt+F8` (Emacs), `Ctrl+Alt+F8` (Sublime Text), `⌘ ⌥ F8` (Sublime Text (macOS)), `Ctrl+Alt+F8` (Visual Studio), `⌘ ⌥ F8` (Visual Studio (macOS)), `Ctrl+Alt+F8` (NetBeans), `Ctrl+Alt+F8` (Eclipse), `⌘ ⌥ F8` (Eclipse (macOS)) 在其上方添加日志点。

由于装订区域也用于断点，点击时可以按住修饰键来限制创建的类型:

* `Ctrl` (Windows), `Ctrl` (macOS), `Ctrl` (IntelliJ IDEA Classic (macOS)), `Ctrl` (macOS System Shortcuts), `Ctrl` (XWin), `Ctrl` (GNOME), `Ctrl` (KDE), `Ctrl` (Emacs), `Ctrl` (Sublime Text), `Ctrl` (Sublime Text (macOS)), `Ctrl` (Visual Studio), `Ctrl` (Visual Studio (macOS)), `Ctrl` (NetBeans), `Ctrl` (Eclipse), `Ctrl` (Eclipse (macOS)): 仅添加断点

* `Shift` (Windows), `Shift` (macOS), `Shift` (IntelliJ IDEA Classic (macOS)), `Shift` (macOS System Shortcuts), `Shift` (XWin), `Shift` (GNOME), `Shift` (KDE), `Shift` (Emacs), `Shift` (Sublime Text), `Shift` (Sublime Text (macOS)), `Shift` (Visual Studio), `Shift` (Visual Studio (macOS)), `Shift` (NetBeans), `Shift` (Eclipse), `Shift` (Eclipse (macOS)): 仅添加日志点

2. 输入要日志的表达式 通过此表达式，可捕获此程序点可访问的任意状态。

![编辑器装订区域中的日志点表达式字段](https://resources.jetbrains.com.cn/help/img/idea/2026.3/logpoints-enter-expression.png)

> **Tip:**
> 如果在点击装订区域前已在编辑器中选择表达式，所选表达式会自动预填到日志点表达式字段中。

> **Note:**
> 只有在新 UI 中将   在行号上显示断点   选项 [启用](editor-gutter.html#breakpoint-icons)后，才能在行间放置日志点并进行内联编辑。 如果该选项已禁用，按住 `Shift` (Windows), `Shift` (macOS), `Shift` (IntelliJ IDEA Classic (macOS)), `Shift` (macOS System Shortcuts), `Shift` (XWin), `Shift` (GNOME), `Shift` (KDE), `Shift` (Emacs), `Shift` (Sublime Text), `Shift` (Sublime Text (macOS)), `Shift` (Visual Studio), `Shift` (Visual Studio (macOS)), `Shift` (NetBeans), `Shift` (Eclipse), `Shift` (Eclipse (macOS)) 点击装订区域会在该行添加一个日志记录断点。

> **Tip:**
> 调用方法时，请务必了解它们可能产生的副作用（例如外部变量的变化），因为这可能会改变程序流程或结果。
>
>
>
>
> ```JAVA
> int hasSideEffects() {
> // returns the number of entries in the list
> someVariable++;
> return list.size();
> }
>
> ```
>
>
>
> 在示例中，每次对该  `hasSideEffects()`  求值时，  `someVariable`  的值都会递增，这可能会影响程序的行为。

Procedure: 将现有断点转换为日志点

1. 在装订区域右键单击一个已有断点，然后点击   更多  ，或按下 `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+F8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Alt+F9` (Visual Studio), `⌥ F9` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))。

2. 配置 [日志选项](#logging-options)。

3. 如果希望断点在不暂停程序的情况下将输出记录到日志，请清除   挂起   选项。 如果希望日志输出并在同一个断点处停下，请保留勾选   挂起  。

## 使用命令补全添加日志点

在 Java 和 Kotlin 文件中，可以使用 [命令补全](command-completion.html#invoke-command-completion) 直接在编辑器中为表达式添加日志点。

Procedure:

1. 将文本光标置于要记录到日志的表达式之后，然后键入  `。`  或  `..` 。

2. 选择   添加日志点  。 要对列表应用筛选器，请键入  `日志`  或  `打印` 。

3. 如果有多个表达式在文本光标处结束，请选择要记录到日志的表达式。

IntelliJ IDEA 会在当前行上方添加一个包含所选表达式的日志点。

在 Java 中，如果表达式单独占一行，例如  `users.size()` ，IntelliJ IDEA 会移除此行，改为使用日志点记录该表达式。

## 日志选项

当断点被触发时，可将以下内容记录到控制台：

* “断点已触发”消息 ：一条类似 `Breakpoint reached at ocean.Whale.main(Whale.java:5)` 的日志消息。

* 堆栈跟踪 ：当前帧的堆栈跟踪。 如果您想在不中断程序执行的情况下检查导致此点的路径，这将非常有用。 如果任务是从另一个线程调度的，则堆栈跟踪还会包括来自该线程的 [异步帧](debug-asynchronous-code.html)。 要显示这些帧，请确保 插装代理 选项在 `设置 | 构建、执行、部署 | 调试器 | 异步堆栈跟踪` 下已启用（默认已启用）。 要从远程进程获取异步帧，请 [将调试器代理添加到远程 JVM](debug-asynchronous-code.html#async_stack_traces_remote)。

* 评估并记录 ：任意表达式的结果，例如， `"Initializing"` 或 `users.size()` 。 表达式会忽略任何访问修饰符，并在设置断点的行的上下文中进行求值。 表达式的结果取自 return 语句。 当没有 return 语句时，结果取自代码的最后一行，这行代码不必是表达式：文字常量也适用。 这可以用来生成自定义消息或在程序执行时跟踪一些值。 对表达式求值时，请务必了解其可能的副作用，因为这些副作用可能会影响程序的行为和结果。

## 导航与堆栈跟踪

IntelliJ IDEA的日志点可导航到相应代码，并找出日志点被触发时实际经过的代码路径

Procedure:

* 点击由 IntelliJ IDEA 中的日志点生成的日志条目，然后选择   打开  。 或者，按住 `Ctrl` (Windows), `Ctrl` (macOS), `Ctrl` (IntelliJ IDEA Classic (macOS)), `Ctrl` (macOS System Shortcuts), `Ctrl` (XWin), `Ctrl` (GNOME), `Ctrl` (KDE), `Ctrl` (Emacs), `Ctrl` (Sublime Text), `Ctrl` (Sublime Text (macOS)), `Ctrl` (Visual Studio), `Ctrl` (Visual Studio (macOS)), `Ctrl` (NetBeans), `Ctrl` (Eclipse), `Ctrl` (Eclipse (macOS))点击。

![点击调试日志条目时会弹出显示“打开”的弹窗](https://resources.jetbrains.com.cn/help/img/idea/2026.3/logpoints-navigation-stacktrace.png)

相应代码将在编辑器中打开，   堆栈跟踪  标签页显示日志点被触发时线程的堆栈跟踪

## 缩小日志记录范围

由于日志点本质上是带有日志选项的常规断点，因此可以与其他断点属性结合使用。

条件
: 添加条件，仅当布尔表达式计算为  `true` 时才日志输出 该条件需要在设置断点的行处有效。

通过次数
: 指定断点仅在被触发一定次数后才会生效。 这对于调试涉及在长时间运行的循环中暂停应用程序或选择性记录频繁事件的场景非常有用。
:
:
:
: 计数完成后，它会重置并重新开始。 这意味着如果   通过次数   设置为  `10` ，断点将在每第十次被触发时生效。
:
:
:
: 如果同时设置了   通过计数   和   条件  ，IntelliJ IDEA 首先满足条件，然后检查   通过计数  。
:
:
:
: > **Note:**
: > 当   通过计数  被设置时， [实例和类过滤器](#filters)不可用。

筛选器
: 使用筛选器将断点限定为特定类、对象实例或调用方法。 当多个入口会进入同一段代码且只需要对某一路径日志输出时十分有用

依赖断点
: 非挂起断点可作为   在命中以下断点之前禁用  中其他断点的触发器。 仅在达到特定代码路径后让后续断点生效时可使用此功能

完整的断点属性列表请参阅 [配置断点属性](using-breakpoints.html#breakpoint-properties)。

## 日志点图标

非挂起断点使用与常规挂起断点不同的装订区域图标。

|  |  折线图  |  方法  |  Field  |  异常  |
| --- | --- | --- | --- | --- |
|  非挂起  |  ![非挂起行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_no_suspend_breakpoint.svg)  |  ![非挂起方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_no_suspend_method_breakpoint.svg)  |  ![非挂起字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_no_suspend_field_breakpoint.svg)  |  |
|  已验证的非挂起  |  ![已验证的非挂起行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_no_suspend_breakpoint.svg)  |  ![已验证的非挂起方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_no_suspend_method_breakpoint.svg)  |  ![已验证的非挂起字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_no_suspend_field_breakpoint.svg)  |  |

> **Note:**
> 提供的图标对应标准 IDE 主题。 自定义主题可能会使用不同的图标。

## 管理日志点

日志点在与其他断点相同的   断点  对话框中显示。 在此可以禁用、静音、移除、描述及与其他断点设置分组管理。

如需了解更多信息，请参阅 [断点](using-breakpoints.html)。

## See also

### JetBrains 博客文章

[Logpoints Walkthrough](https://blog.jetbrains.com/idea/2026/09/logpoints-walkthrough/)

