Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions Doc/c-api/init_config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down
2 changes: 0 additions & 2 deletions Doc/using/ios.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
3 changes: 0 additions & 3 deletions Include/cpython/initconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions Lib/test/test_apple.py
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
2 changes: 0 additions & 2 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
15 changes: 0 additions & 15 deletions Python/initconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -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},
};
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
}


Expand Down Expand Up @@ -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
}


Expand Down
31 changes: 12 additions & 19 deletions Python/pylifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
2 changes: 0 additions & 2 deletions iOS/testbed/iOSTestbedTests/iOSTestbedTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading