https://github.com/python/cpython/commit/589f422d1bb5892ad0c14d2414abca1de1049767
commit: 589f422d1bb5892ad0c14d2414abca1de1049767
branch: 3.13
author: Russell Keith-Magee <russ...@keith-magee.com>
committer: freakboy3742 <russ...@keith-magee.com>
date: 2025-03-13T11:53:11+08:00
summary:

[3.13] gh-130940: Remove PyConfig.use_system_logger (#131129)

Removes ``PyConfig.use_system_logger``, resolving an ABI incompatibility 
introduced in
3.13.2.

Changes the default behavior of iOS to *always* direct stdout/stderr to the 
system log.

files:
A Misc/NEWS.d/next/Library/2025-03-12-11-53-32.gh-issue-130940.81K1Tg.rst
M Doc/c-api/init_config.rst
M Doc/using/ios.rst
M Include/cpython/initconfig.h
M Lib/test/test_apple.py
M Lib/test/test_embed.py
M Python/initconfig.c
M Python/pylifecycle.c
M iOS/testbed/iOSTestbedTests/iOSTestbedTests.m

diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst
index cd78fe18e35d1c..612aa2aa711253 100644
--- a/Doc/c-api/init_config.rst
+++ b/Doc/c-api/init_config.rst
@@ -1271,17 +1271,6 @@ PyConfig
 
       Default: ``1`` in Python config and ``0`` in isolated config.
 
-   .. c:member:: int use_system_logger
-
-      If non-zero, ``stdout`` and ``stderr`` will be redirected to the system
-      log.
-
-      Only available on macOS 10.12 and later, and on iOS.
-
-      Default: ``0`` (don't use system log).
-
-      .. versionadded:: 3.13.2
-
    .. c:member:: int user_site_directory
 
       If non-zero, add the user site directory to :data:`sys.path`.
diff --git a/Doc/using/ios.rst b/Doc/using/ios.rst
index aa43f75ec35a6c..dff694941d0aeb 100644
--- a/Doc/using/ios.rst
+++ b/Doc/using/ios.rst
@@ -296,8 +296,6 @@ To add Python to an iOS Xcode project:
    * Buffered stdio (:c:member:`PyConfig.buffered_stdio`) is *disabled*;
    * Writing bytecode (:c:member:`PyConfig.write_bytecode`) is *disabled*;
    * Signal handlers (:c:member:`PyConfig.install_signal_handlers`) are 
*enabled*;
-   * System logging (:c:member:`PyConfig.use_system_logger`) is *enabled*
-     (optional, but strongly recommended);
    * ``PYTHONHOME`` for the interpreter is configured to point at the
      ``python`` subfolder of your app's bundle; and
    * The ``PYTHONPATH`` for the interpreter includes:
diff --git a/Include/cpython/initconfig.h b/Include/cpython/initconfig.h
index 20f5c9ad9bb9a8..5da5ef9e5431b1 100644
--- a/Include/cpython/initconfig.h
+++ b/Include/cpython/initconfig.h
@@ -179,9 +179,6 @@ typedef struct PyConfig {
     int use_frozen_modules;
     int safe_path;
     int int_max_str_digits;
-#ifdef __APPLE__
-    int use_system_logger;
-#endif
 
     int cpu_count;
 #ifdef Py_GIL_DISABLED
diff --git a/Lib/test/test_apple.py b/Lib/test/test_apple.py
index ab5296afad1d3f..f14db75e2f21fd 100644
--- a/Lib/test/test_apple.py
+++ b/Lib/test/test_apple.py
@@ -1,10 +1,10 @@
 import unittest
 from _apple_support import SystemLog
-from test.support import is_apple
+from test.support import is_apple_mobile
 from unittest.mock import Mock, call
 
-if not is_apple:
-    raise unittest.SkipTest("Apple-specific")
+if not is_apple_mobile:
+    raise unittest.SkipTest("iOS-specific")
 
 
 # Test redirection of stdout and stderr to the Apple system log.
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index ed459794952581..a354f856c8057d 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -627,8 +627,6 @@ class InitConfigTests(EmbeddingTestsMixin, 
unittest.TestCase):
         CONFIG_COMPAT.update({
             'legacy_windows_stdio': 0,
         })
-    if support.is_apple:
-        CONFIG_COMPAT['use_system_logger'] = False
 
     CONFIG_PYTHON = dict(CONFIG_COMPAT,
         _config_init=API_PYTHON,
diff --git 
a/Misc/NEWS.d/next/Library/2025-03-12-11-53-32.gh-issue-130940.81K1Tg.rst 
b/Misc/NEWS.d/next/Library/2025-03-12-11-53-32.gh-issue-130940.81K1Tg.rst
new file mode 100644
index 00000000000000..366c057f5a1c05
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-03-12-11-53-32.gh-issue-130940.81K1Tg.rst
@@ -0,0 +1,4 @@
+The ``PyConfig.use_system_logger`` attribute, introduced in Python 3.13.2, has
+been removed. The introduction of this attribute inadvertently introduced an
+ABI breakage on macOS and iOS. The use of the system logger is now enabled
+by default on iOS, and disabled by default on macOS.
diff --git a/Python/initconfig.c b/Python/initconfig.c
index 9b446eccab9a57..8060a1647c0ebe 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -130,9 +130,6 @@ static const PyConfigSpec PYCONFIG_SPEC[] = {
 #ifdef Py_DEBUG
     SPEC(run_presite, WSTR_OPT),
 #endif
-#ifdef __APPLE__
-    SPEC(use_system_logger, BOOL),
-#endif
 
     {NULL, 0, 0},
 };
@@ -751,9 +748,6 @@ config_check_consistency(const PyConfig *config)
     assert(config->cpu_count != 0);
     // config->use_frozen_modules is initialized later
     // by _PyConfig_InitImportConfig().
-#ifdef __APPLE__
-    assert(config->use_system_logger >= 0);
-#endif
 #ifdef Py_STATS
     assert(config->_pystats >= 0);
 #endif
@@ -856,9 +850,6 @@ _PyConfig_InitCompatConfig(PyConfig *config)
     config->_is_python_build = 0;
     config->code_debug_ranges = 1;
     config->cpu_count = -1;
-#ifdef __APPLE__
-    config->use_system_logger = 0;
-#endif
 #ifdef Py_GIL_DISABLED
     config->enable_gil = _PyConfig_GIL_DEFAULT;
 #endif
@@ -887,9 +878,6 @@ config_init_defaults(PyConfig *config)
 #ifdef MS_WINDOWS
     config->legacy_windows_stdio = 0;
 #endif
-#ifdef __APPLE__
-    config->use_system_logger = 0;
-#endif
 }
 
 
@@ -925,9 +913,6 @@ PyConfig_InitIsolatedConfig(PyConfig *config)
 #ifdef MS_WINDOWS
     config->legacy_windows_stdio = 0;
 #endif
-#ifdef __APPLE__
-    config->use_system_logger = 0;
-#endif
 }
 
 
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index c96455e65aa3ba..a8852a88f94a37 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -47,20 +47,15 @@
 #  include <TargetConditionals.h>
 #  include <mach-o/loader.h>
 // The os_log unified logging APIs were introduced in macOS 10.12, iOS 10.0,
-// tvOS 10.0, and watchOS 3.0;
+// tvOS 10.0, and watchOS 3.0; we enable the use of the system logger
+// automatically on non-macOS platforms.
 #  if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
-#    define HAS_APPLE_SYSTEM_LOG 1
-#  elif defined(TARGET_OS_OSX) && TARGET_OS_OSX
-#    if defined(MAC_OS_X_VERSION_10_12) && MAC_OS_X_VERSION_MIN_REQUIRED >= 
MAC_OS_X_VERSION_10_12
-#      define HAS_APPLE_SYSTEM_LOG 1
-#    else
-#      define HAS_APPLE_SYSTEM_LOG 0
-#    endif
+#    define USE_APPLE_SYSTEM_LOG 1
 #  else
-#    define HAS_APPLE_SYSTEM_LOG 0
+#    define USE_APPLE_SYSTEM_LOG 0
 #  endif
 
-#  if HAS_APPLE_SYSTEM_LOG
+#  if USE_APPLE_SYSTEM_LOG
 #    include <os/log.h>
 #  endif
 #endif
@@ -92,7 +87,7 @@ static PyStatus init_sys_streams(PyThreadState *tstate);
 #ifdef __ANDROID__
 static PyStatus init_android_streams(PyThreadState *tstate);
 #endif
-#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
+#if defined(__APPLE__) && USE_APPLE_SYSTEM_LOG
 static PyStatus init_apple_streams(PyThreadState *tstate);
 #endif
 static void wait_for_thread_shutdown(PyThreadState *tstate);
@@ -1280,12 +1275,10 @@ init_interp_main(PyThreadState *tstate)
         return status;
     }
 #endif
-#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
-    if (config->use_system_logger) {
-        status = init_apple_streams(tstate);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
+#if defined(__APPLE__) && USE_APPLE_SYSTEM_LOG
+    status = init_apple_streams(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
     }
 #endif
 
@@ -2971,7 +2964,7 @@ init_android_streams(PyThreadState *tstate)
 
 #endif  // __ANDROID__
 
-#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
+#if defined(__APPLE__) && USE_APPLE_SYSTEM_LOG
 
 static PyObject *
 apple_log_write_impl(PyObject *self, PyObject *args)
@@ -3032,7 +3025,7 @@ init_apple_streams(PyThreadState *tstate)
     return status;
 }
 
-#endif  // __APPLE__ && HAS_APPLE_SYSTEM_LOG
+#endif  // __APPLE__ && USE_APPLE_SYSTEM_LOG
 
 
 static void
diff --git a/iOS/testbed/iOSTestbedTests/iOSTestbedTests.m 
b/iOS/testbed/iOSTestbedTests/iOSTestbedTests.m
index dd6e76f9496fe0..d417b4cd63e2d4 100644
--- a/iOS/testbed/iOSTestbedTests/iOSTestbedTests.m
+++ b/iOS/testbed/iOSTestbedTests/iOSTestbedTests.m
@@ -53,8 +53,6 @@ - (void)testPython {
     // Enforce UTF-8 encoding for stderr, stdout, file-system encoding and 
locale.
     // See https://docs.python.org/3/library/os.html#python-utf-8-mode.
     preconfig.utf8_mode = 1;
-    // Use the system logger for stdout/err
-    config.use_system_logger = 1;
     // Don't buffer stdio. We want output to appears in the log immediately
     config.buffered_stdio = 0;
     // Don't write bytecode; we can't modify the app bundle

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to