diff --git a/Common/Core/vtkLogger.cxx b/Common/Core/vtkLogger.cxx
index 5e15876d78cae723bf65ec568ded7132c4a89f63..81559b8d230a4ddf861dd632245ef946cb39e003 100644
--- a/Common/Core/vtkLogger.cxx
+++ b/Common/Core/vtkLogger.cxx
@@ -106,6 +106,13 @@ VTK_ABI_NAMESPACE_END
 VTK_ABI_NAMESPACE_BEGIN
 //=============================================================================
 bool vtkLogger::EnableUnsafeSignalHandler = true;
+bool vtkLogger::EnableSigabrtHandler = false;
+bool vtkLogger::EnableSigbusHandler = false;
+bool vtkLogger::EnableSigfpeHandler = false;
+bool vtkLogger::EnableSigillHandler = false;
+bool vtkLogger::EnableSigintHandler = false;
+bool vtkLogger::EnableSigsegvHandler = false;
+bool vtkLogger::EnableSigtermHandler = false;
 vtkLogger::Verbosity vtkLogger::InternalVerbosityLevel = vtkLogger::VERBOSITY_1;
 
 //------------------------------------------------------------------------------
@@ -138,6 +145,13 @@ void vtkLogger::Init(int& argc, char* argv[], const char* verbosity_flag /*= "-v
   loguru::Options options;
   options.verbosity_flag = verbosity_flag;
   options.signal_options.unsafe_signal_handler = vtkLogger::EnableUnsafeSignalHandler;
+  options.signal_options.sigabrt = vtkLogger::EnableSigabrtHandler;
+  options.signal_options.sigbus = vtkLogger::EnableSigbusHandler;
+  options.signal_options.sigfpe = vtkLogger::EnableSigfpeHandler;
+  options.signal_options.sigill = vtkLogger::EnableSigillHandler;
+  options.signal_options.sigint = vtkLogger::EnableSigintHandler;
+  options.signal_options.sigsegv = vtkLogger::EnableSigsegvHandler;
+  options.signal_options.sigterm = vtkLogger::EnableSigtermHandler;
   if (strlen(detail::ThreadName) > 0)
   {
     options.main_thread_name = detail::ThreadName;
diff --git a/Common/Core/vtkLogger.h b/Common/Core/vtkLogger.h
index e7b38dd9f4231e1857cfd301d79cbc39b3ec7d0d..d42b90e87e9b4a0e8efc44eb5fa8b28ec37c8284 100644
--- a/Common/Core/vtkLogger.h
+++ b/Common/Core/vtkLogger.h
@@ -37,7 +37,24 @@
  * that, use `vtkLogger::SetThreadName`. Calling `vtkLogger::Init` will set the name
  * for the main thread.
  *
- * To prevent the logging framework from intercepting signals from your application,
+ * You can choose to turn on signal handlers for intercepting signals. By default,
+ * all signal handlers are disabled. The following is a list of signal handlers
+ * and the corresponding static variable that can be used to enable/disable each
+ * signal handler.
+ *
+ * - SIGABRT - `vtkLogger::EnableSigabrtHandler`
+ * - SIGBUS - `vtkLogger::EnableSigbusHandler`
+ * - SIGFPE - `vtkLogger::EnableSigfpeHandler`
+ * - SIGILL - `vtkLogger::EnableSigillHandler`
+ * - SIGINT - `vtkLogger::EnableSigintHandler`
+ * - SIGSEGV - `vtkLogger::EnableSigsegvHandler`
+ * - SIGTERM - `vtkLogger::EnableSigtermHandler`
+ *
+ * To enable any of these signal handlers, set their value to `true` prior to calling
+ * `vtkLogger::Init(argc, argv)` or `vtkLogger::Init()`.
+ *
+ * When signal handlers are enabled,
+ * to prevent the logging framework from intercepting signals from your application,
  * you can set the static variable `vtkLogger::EnableUnsafeSignalHandler` to `false`
  * prior to calling `vtkLogger::Init(argc, argv)` or `vtkLogger::Init()`.
  *
@@ -420,6 +437,13 @@ public:
    * certain circumstances.
    */
   static bool EnableUnsafeSignalHandler;
+  static bool EnableSigabrtHandler;
+  static bool EnableSigbusHandler;
+  static bool EnableSigfpeHandler;
+  static bool EnableSigillHandler;
+  static bool EnableSigintHandler;
+  static bool EnableSigsegvHandler;
+  static bool EnableSigtermHandler;
 
 protected:
   vtkLogger();