IDE Infrastructure
Logging
The IntelliJ Platform uses Logger
abstraction class to shield from underlying logging implementation and configuration.
Plugins should get a dedicated instance:
If logging is used only to report exceptions, use convenience method thisLogger()
instead of a dedicated instance:
By default, all messages with level INFO
and higher are written to log output file idea.log. To enable DEBUG
/TRACE
logging for specific categories, use .
To locate the log file, choose the internal mode is enabled, the currently running IDE log file can be opened using .
action. WhenTo locate it for a specific installation, see this Knowledge Base article. See Development Instance Sandbox Directory on how to find it for development instances.
See Testing FAQ on how to enable DEBUG
/TRACE
level logging during tests and get separate logs for failing tests.
To provide additional context for reporting fatal errors, use Logger.error()
methods taking additional Attachment
(see CoreAttachmentFactory
and AttachmentFactory
).
Error Reporting
The IDE will show fatal errors caught by itself as well as logging messages with ERROR
level in the IDE Fatal Errors dialog:
for IDE platform: in EAP releases or when running in internal mode
for third-party plugins: always
For the latter, reporting is disabled by default — instead, there's an option to disable the plugin causing the exception.
To let users report such errors to the vendor, plugins can use one of the solutions:
Use JetBrains Exception Analyzer (EA) that sends errors to the backend provided by JetBrains (2023.3+).
Implement custom
ErrorReportSubmitter
registered incom.intellij.errorHandler
extension point. See IntelliJ Platform Explorer for existing implementations — ranging from pre-filling web-based issue tracker forms to fully automated submission to log monitoring systems. This tutorial also offers a working solution for using Sentry.
To disable the red exclamation notification icon in the status bar, invoke idea.fatal.error.notification=disabled
in opened idea.properties.
Runtime Information
ApplicationInfo
provides information on the IDE version and vendor. NOTE: to restrict compatibility, declare IDEs and versions via plugin.xml.
To get information about OS and Java VM, use SystemInfo
.
To access relevant configuration directories, see PathManager
.
To obtain unique installation UUID, use PermanentInstallationID
. For paid plugins, see also Marketplace docs.
Context Help
To show custom context web-based help for your plugin's functionality (e.g., for dialogs), provide WebHelpProvider
registered in com.intellij.webHelpProvider
extension point.
Running Tasks Once
Use RunOnceUtil
to run a task exactly once per project/application.
Application Events
Application lifecycle events can be tracked via the AppLifecycleListener
listener. See also Application Startup and Project and Application Close.
Register the ApplicationActivationListener
listener to be notified of "application focused/unfocused" events.
To request restart of the IDE, use Application.restart()
Launching Browser
Use BrowserLauncher
.
Open File in System File Manager
Use RevealFileAction.openFile()
or openDirectory()
.
Theme Change
Use the LafManagerListener
topic to receive change notifications (e.g., to refresh UI).
Power Save Mode
PowerSaveMode
service and PowerSaveMode.Listener
topic to disable such features in your plugin accordingly.
Plugin Management
Installed plugins can be checked via PluginManagerCore.isPluginInstalled()
.
See also Plugin Load/Unload Events.
Plugin Suggestions
For specific features (e.g., File Type, Facet, ...), the IDE will suggest installing matching plugins automatically. See Plugin Recommendations in Marketplace documentation for details.
To suggest other relevant plugins, use PluginsAdvertiser.installAndEnable()
.
Deprecating a Plugin
To suggest replacing the currently installed deprecated plugin with the new one, implement PluginReplacement
registered in com.intellij.pluginReplacement
extension point.
Network
Use HttpConnectionUtils
to use platform network settings (e.g., proxy) (2024.3). For earlier versions, see HttpConfigurable
.