text: Title: IPython 9 `logfile` causes crash
  Body: Running `ipython` with `--logfile` or `--logappend` causes a crash in `ipython>=9`
  e.g. `ipython --logfile=log.txt`
  
  This is failing due to the following error:
  ```py
    File "/usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py", line 817, in init_logstart
      self.magic('logstart %s' % self.logfile)
      ^^^^^^^^^^
  AttributeError: 'TerminalInteractiveShell' object has no attribute 'magic'
  ```
  
  ---
  
  Using docker for reproducibility
  `docker pull python@sha256:385ccb8304f6330738a6d9e6fa0bd7608e006da7e15bc52b33b0398e1ba4a15b`
  (digest matches current `latest` tag)
  
  Installing `ipython==9.0.1` and running with `--logfile=log.txt` with verbose crash:
  ```sh
  docker run --rm python@sha256:385ccb8304f6330738a6d9e6fa0bd7608e006da7e15bc52b33b0398e1ba4a15b \
          sh -c \
          'pip install -qq ipython
          ipython --logfile=log.txt --BaseIPythonApplication.verbose_crash=True
          cat /root/.ipython/Crash_report_ipython.txt'
  ```
  
  <details>
  
  ```
  ---------------------------------------------------------------------------
  ---------------------------------------------------------------------------
  AttributeError                     Python 3.13.2: /usr/local/bin/python3.13
                                                     Thu Mar  6 19:37:39 2025
  A problem occurred executing Python code.  Here is the sequence of function
  calls leading up to the error, with the most recent (innermost) call last.
  File /usr/local/bin/ipython:8
        1 #!/usr/local/bin/python3.13
        2 # -*- coding: utf-8 -*-
        3 import re
        4 import sys
        5 from IPython import start_ipython
        6 if __name__ == '__main__':
        7     sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
  ----> 8     sys.exit(start_ipython())
  
  File /usr/local/lib/python3.13/site-packages/IPython/__init__.py:139, in start_ipython(argv=None, **kwargs={})
      113 def start_ipython(argv=None, **kwargs):
      114     """Launch a normal IPython instance (as opposed to embedded)
      115
      116     `IPython.embed()` puts a shell in a particular calling scope,
     (...)    136         allowing configuration of the instance (see :ref:`terminal_options`).
      137     """
      138     from IPython.terminal.ipapp import launch_new_instance
  --> 139     return launch_new_instance(argv=argv, **kwargs)
          launch_new_instance = <bound method Application.launch_instance of <class 'IPython.terminal.ipapp.TerminalIPythonApp'>>
          argv = None
          kwargs = {}
  File /usr/local/lib/python3.13/site-packages/traitlets/config/application.py:1074, in Application.launch_instance(cls=<class 'IPython.terminal.ipapp.TerminalIPythonApp'>, argv=None, **kwargs={})
     1067 @classmethod
     1068 def launch_instance(cls, argv: ArgvType = None, **kwargs: t.Any) -> None:
     1069     """Launch a global instance of this Application
     1070
     1071     If a global instance already exists, this reinitializes and starts it
     1072     """
     1073     app = cls.instance(**kwargs)
  -> 1074     app.initialize(argv)
          app = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>
          argv = None   1075     app.start()
  
  File /usr/local/lib/python3.13/site-packages/traitlets/config/application.py:118, in catch_config_error.<locals>.inner(app=<IPython.terminal.ipapp.TerminalIPythonApp object>, *args=(None,), **kwargs={})
      115 @functools.wraps(method)
      116 def inner(app: Application, *args: t.Any, **kwargs: t.Any) -> t.Any:
      117     try:
  --> 118         return method(app, *args, **kwargs)
          method = <function TerminalIPythonApp.initialize at 0xffffa318f1a0>
          app = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>
          args = (None,)
          kwargs = {}    119     except (TraitError, ArgumentError) as e:
      120         app.log.fatal("Bad config encountered during initialization: %s", e)
      121         app.log.debug("Config at the time: %s", app.config)
      122         app.exit(1)
  
  File /usr/local/lib/python3.13/site-packages/IPython/terminal/ipapp.py:286, in TerminalIPythonApp.initialize(self=<IPython.terminal.ipapp.TerminalIPythonApp object>, argv=None)
      274 @catch_config_error
      275 def initialize(self, argv=None):
      276     """Do actions after construct, but before starting the app."""
      277     super(TerminalIPythonApp, self).initialize(argv)
      278     if self.subapp is not None:
      279         # don't bother initializing further, starting subapp
      280         return
      281     # print(self.extra_args)
      282     if self.extra_args and not self.something_to_run:
      283         self.file_to_run = self.extra_args[0]
      284     self.init_path()
      285     # create the shell
  --> 286     self.init_shell()
          self = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>    287     # and draw the banner
      288     self.init_banner()
      289     # Now a variety of things that happen after the banner is printed.
      290     self.init_gui_pylab()
      291     self.init_extensions()
      292     self.init_code()
  
  File /usr/local/lib/python3.13/site-packages/IPython/terminal/ipapp.py:300, in TerminalIPythonApp.init_shell(self=<IPython.terminal.ipapp.TerminalIPythonApp object>)
      294 def init_shell(self):
      295     """initialize the InteractiveShell instance"""
      296     # Create an InteractiveShell instance.
      297     # shell.display_banner should always be False for the terminal
      298     # based app, because we call shell.show_banner() by hand below
      299     # so the banner shows *before* all extension loading stuff.
  --> 300     self.shell = self.interactive_shell_class.instance(parent=self,
          self = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>    301                     profile_dir=self.profile_dir,
      302                     ipython_dir=self.ipython_dir, user_ns=self.user_ns)
      303     self.shell.configurables.append(self)
  
  File /usr/local/lib/python3.13/site-packages/traitlets/config/configurable.py:583, in SingletonConfigurable.instance(cls=<class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>, *args=(), **kwargs={'ipython_dir': '/root/.ipython', 'parent': <IPython.terminal.ipapp.TerminalIPythonApp object>, 'profile_dir': <IPython.core.profiledir.ProfileDir object>, 'user_ns': None})
      553 @classmethod
      554 def instance(cls: type[CT], *args: t.Any, **kwargs: t.Any) -> CT:
      555     """Returns a global instance of this class.
      556
      557     This method create a new instance if none have previously been created
     (...)    579         True
      580     """
      581     # Create and save the instance
      582     if cls._instance is None:
  --> 583         inst = cls(*args, **kwargs)
          cls = <class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>
          args = ()
          kwargs = {'parent': <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>, 'profile_dir': <IPython.core.profiledir.ProfileDir object at 0xffffa354bcb0>, 'ipython_dir': '/root/.ipython', 'user_ns': None}    584         # Now make sure that the instance will also be returned by
      585         # parent classes' _instance attribute.
      586         for subclass in cls._walk_mro():
      587             subclass._instance = inst
      589     if isinstance(cls._instance, cls):
      590         return cls._instance
      591     else:
      592         raise MultipleInstanceError(
      593             f"An incompatible sibling of '{cls.__name__}' is already instantiated"
      594             f" as singleton: {type(cls._instance).__name__}"
      595         )
  
  File /usr/local/lib/python3.13/site-packages/IPython/terminal/interactiveshell.py:977, in TerminalInteractiveShell.__init__(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>, *args=(), **kwargs={'ipython_dir': '/root/.ipython', 'parent': <IPython.terminal.ipapp.TerminalIPythonApp object>, 'profile_dir': <IPython.core.profiledir.ProfileDir object>, 'user_ns': None})
      976 def __init__(self, *args, **kwargs) -> None:
  --> 977     super(TerminalInteractiveShell, self).__init__(*args, **kwargs)
          self = <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0xffffa31bc590>
          args = ()
          kwargs = {'parent': <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>, 'profile_dir': <IPython.core.profiledir.ProfileDir object at 0xffffa354bcb0>, 'ipython_dir': '/root/.ipython', 'user_ns': None}
          TerminalInteractiveShell = <class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>    978     self._set_autosuggestions(self.autosuggestions_provider)
      979     self.init_prompt_toolkit_cli()
      980     self.init_term_title()
      981     self.keep_running = True
      982     self._set_formatter(self.autoformatter)
  
  File /usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py:650, in InteractiveShell.__init__(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>, ipython_dir='/root/.ipython', profile_dir=<IPython.core.profiledir.ProfileDir object>, user_module=None, user_ns=None, custom_exceptions=((), None), **kwargs={'parent': <IPython.terminal.ipapp.TerminalIPythonApp object>})
      632 self.init_logger()
      633 self.init_builtins()
      635 # The following was in post_config_initialization
      636 self.raw_input_original = input
      637 self.init_completer()
      638 # TODO: init_io() needs to happen before init_traceback handlers
      639 # because the traceback handlers hardcode the stdout/stderr streams.
      640 # This logic in in debugger.Pdb and should eventually be changed.
      641 self.init_io()
      642 self.init_traceback_handlers(custom_exceptions)
      643 self.init_prompts()
      644 self.init_display_formatter()
      645 self.init_display_pub()
      646 self.init_data_pub()
      647 self.init_displayhook()
      648 self.init_magics()
      649 self.init_alias()
  --> 650 self.init_logstart()
          self = <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0xffffa31bc590>    651 self.init_pdb()
      652 self.init_extension_manager()
      653 self.init_payload()
      654 self.events.trigger('shell_initialized', self)
      655 atexit.register(self.atexit_operations)
      657 # The trio runner is used for running Trio in the foreground thread. It
      658 # is different from `_trio_runner(async_fn)` in `async_helpers.py`
      659 # which calls `trio.run()` for every cell. This runner runs all cells
      660 # inside a single Trio event loop. If used, it is set from
      661 # `ipykernel.kernelapp`.
      662 self.trio_runner = None
  
  File /usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py:817, in InteractiveShell.init_logstart(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>)
      811 def init_logstart(self):
      812     """Initialize logging in case it was requested at the command line.
      813     """
      814     if self.logappend:
      815         self.magic('logstart %s append' % self.logappend)
      816     elif self.logfile:
  --> 817         self.magic('logstart %s' % self.logfile)
          self = <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0xffffa31bc590>    818     elif self.logstart:
      819         self.magic('logstart')
  
  AttributeError: 'TerminalInteractiveShell' object has no attribute 'magic'
  
  **********************************************************************
  
  Oops, ipython crashed. We do our best to make it stable, but...
  
  A crash report was automatically generated with the following information:
    - A verbatim copy of the crash traceback.
    - A copy of your input history during this session.
    - Data on your current ipython configuration.
  
  It was left in the file named:
  	'/root/.ipython/Crash_report_ipython.txt'
  If you can email this file to the developers, the information in it will help
  them in understanding and correcting the problem.
  
  You can mail it to: The IPython Development Team at ipython-dev@python.org
  with the subject 'ipython Crash Report'.
  
  If you want to do it now, the following command will work (under Unix):
  mail -s 'ipython Crash Report' ipython-dev@python.org < /root/.ipython/Crash_report_ipython.txt
  
  In your email, please also include information about:
  - The operating system under which the crash happened: Linux, macOS, Windows,
    other, and which exact version (for example: Ubuntu 16.04.3, macOS 10.13.2,
    Windows 10 Pro), and whether it is 32-bit or 64-bit;
  - How ipython was installed: using pip or conda, from GitHub, as part of
    a Docker container, or other, providing more detail if possible;
  - How to reproduce the crash: what exact sequence of instructions can one
    input to get the same crash? Ideally, find a minimal yet complete sequence
    of instructions that yields the crash.
  
  To ensure accurate tracking of this issue, please file a report about it at:
  https://github.com/ipython/ipython/issues
  
  Hit <Enter> to quit (your terminal may close):Error in sys.excepthook:
  Traceback (most recent call last):
    File "/usr/local/lib/python3.13/site-packages/IPython/core/application.py", line 288, in excepthook
      return self.crash_handler(etype, evalue, tb)
             ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
    File "/usr/local/lib/python3.13/site-packages/IPython/core/crashhandler.py", line 206, in __call__
      builtin_mod.input("Hit <Enter> to quit (your terminal may close):")
      ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  EOFError: EOF when reading a line
  
  Original exception was:
  Traceback (most recent call last):
    File "/usr/local/bin/ipython", line 8, in <module>
      sys.exit(start_ipython())
               ~~~~~~~~~~~~~^^
    File "/usr/local/lib/python3.13/site-packages/IPython/__init__.py", line 139, in start_ipython
      return launch_new_instance(argv=argv, **kwargs)
    File "/usr/local/lib/python3.13/site-packages/traitlets/config/application.py", line 1074, in launch_instance
      app.initialize(argv)
      ~~~~~~~~~~~~~~^^^^^^
    File "/usr/local/lib/python3.13/site-packages/traitlets/config/application.py", line 118, in inner
      return method(app, *args, **kwargs)
    File "/usr/local/lib/python3.13/site-packages/IPython/terminal/ipapp.py", line 286, in initialize
      self.init_shell()
      ~~~~~~~~~~~~~~~^^
    File "/usr/local/lib/python3.13/site-packages/IPython/terminal/ipapp.py", line 300, in init_shell
      self.shell = self.interactive_shell_class.instance(parent=self,
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
                      profile_dir=self.profile_dir,
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      ipython_dir=self.ipython_dir, user_ns=self.user_ns)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/local/lib/python3.13/site-packages/traitlets/config/configurable.py", line 583, in instance
      inst = cls(*args, **kwargs)
    File "/usr/local/lib/python3.13/site-packages/IPython/terminal/interactiveshell.py", line 977, in __init__
      super(TerminalInteractiveShell, self).__init__(*args, **kwargs)
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
    File "/usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py", line 650, in __init__
      self.init_logstart()
      ~~~~~~~~~~~~~~~~~~^^
    File "/usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py", line 817, in init_logstart
      self.magic('logstart %s' % self.logfile)
      ^^^^^^^^^^
  AttributeError: 'TerminalInteractiveShell' object has no attribute 'magic'
  ***************************************************************************
  
  IPython post-mortem report
  
  {'commit_hash': 'd64897cf0',
   'commit_source': 'installation',
   'default_encoding': 'utf-8',
   'ipython_path': '/usr/local/lib/python3.13/site-packages/IPython',
   'ipython_version': '9.0.1',
   'os_name': 'posix',
   'platform': 'Linux-6.10.14-linuxkit-aarch64-with-glibc2.36',
   'sys_executable': '/usr/local/bin/python3.13',
   'sys_platform': 'linux',
   'sys_version': '3.13.2 (main, Feb 25 2025, 21:31:02) [GCC 12.2.0]'}
  
  ***************************************************************************
  
  Application name: ipython
  
  Current user configuration structure:
  
  {'BaseIPythonApplication': {'verbose_crash': True},
   'TerminalInteractiveShell': {'logfile': 'log.txt'}}
  
  ***************************************************************************
  
  Crash traceback:
  
  ---------------------------------------------------------------------------
  ---------------------------------------------------------------------------
  AttributeError                     Python 3.13.2: /usr/local/bin/python3.13
                                                     Thu Mar  6 19:37:39 2025
  A problem occurred executing Python code.  Here is the sequence of function
  calls leading up to the error, with the most recent (innermost) call last.
  File /usr/local/bin/ipython:8
        1 #!/usr/local/bin/python3.13
        2 # -*- coding: utf-8 -*-
        3 import re
        4 import sys
        5 from IPython import start_ipython
        6 if __name__ == '__main__':
        7     sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
  ----> 8     sys.exit(start_ipython())
  
  File /usr/local/lib/python3.13/site-packages/IPython/__init__.py:139, in start_ipython(argv=None, **kwargs={})
      113 def start_ipython(argv=None, **kwargs):
      114     """Launch a normal IPython instance (as opposed to embedded)
      115
      116     `IPython.embed()` puts a shell in a particular calling scope,
     (...)    136         allowing configuration of the instance (see :ref:`terminal_options`).
      137     """
      138     from IPython.terminal.ipapp import launch_new_instance
  --> 139     return launch_new_instance(argv=argv, **kwargs)
          launch_new_instance = <bound method Application.launch_instance of <class 'IPython.terminal.ipapp.TerminalIPythonApp'>>
          argv = None
          kwargs = {}
  File /usr/local/lib/python3.13/site-packages/traitlets/config/application.py:1074, in Application.launch_instance(cls=<class 'IPython.terminal.ipapp.TerminalIPythonApp'>, argv=None, **kwargs={})
     1067 @classmethod
     1068 def launch_instance(cls, argv: ArgvType = None, **kwargs: t.Any) -> None:
     1069     """Launch a global instance of this Application
     1070
     1071     If a global instance already exists, this reinitializes and starts it
     1072     """
     1073     app = cls.instance(**kwargs)
  -> 1074     app.initialize(argv)
          app = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>
          argv = None   1075     app.start()
  
  File /usr/local/lib/python3.13/site-packages/traitlets/config/application.py:118, in catch_config_error.<locals>.inner(app=<IPython.terminal.ipapp.TerminalIPythonApp object>, *args=(None,), **kwargs={})
      115 @functools.wraps(method)
      116 def inner(app: Application, *args: t.Any, **kwargs: t.Any) -> t.Any:
      117     try:
  --> 118         return method(app, *args, **kwargs)
          method = <function TerminalIPythonApp.initialize at 0xffffa318f1a0>
          app = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>
          args = (None,)
          kwargs = {}    119     except (TraitError, ArgumentError) as e:
      120         app.log.fatal("Bad config encountered during initialization: %s", e)
      121         app.log.debug("Config at the time: %s", app.config)
      122         app.exit(1)
  
  File /usr/local/lib/python3.13/site-packages/IPython/terminal/ipapp.py:286, in TerminalIPythonApp.initialize(self=<IPython.terminal.ipapp.TerminalIPythonApp object>, argv=None)
      274 @catch_config_error
      275 def initialize(self, argv=None):
      276     """Do actions after construct, but before starting the app."""
      277     super(TerminalIPythonApp, self).initialize(argv)
      278     if self.subapp is not None:
      279         # don't bother initializing further, starting subapp
      280         return
      281     # print(self.extra_args)
      282     if self.extra_args and not self.something_to_run:
      283         self.file_to_run = self.extra_args[0]
      284     self.init_path()
      285     # create the shell
  --> 286     self.init_shell()
          self = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>    287     # and draw the banner
      288     self.init_banner()
      289     # Now a variety of things that happen after the banner is printed.
      290     self.init_gui_pylab()
      291     self.init_extensions()
      292     self.init_code()
  
  File /usr/local/lib/python3.13/site-packages/IPython/terminal/ipapp.py:300, in TerminalIPythonApp.init_shell(self=<IPython.terminal.ipapp.TerminalIPythonApp object>)
      294 def init_shell(self):
      295     """initialize the InteractiveShell instance"""
      296     # Create an InteractiveShell instance.
      297     # shell.display_banner should always be False for the terminal
      298     # based app, because we call shell.show_banner() by hand below
      299     # so the banner shows *before* all extension loading stuff.
  --> 300     self.shell = self.interactive_shell_class.instance(parent=self,
          self = <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>    301                     profile_dir=self.profile_dir,
      302                     ipython_dir=self.ipython_dir, user_ns=self.user_ns)
      303     self.shell.configurables.append(self)
  
  File /usr/local/lib/python3.13/site-packages/traitlets/config/configurable.py:583, in SingletonConfigurable.instance(cls=<class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>, *args=(), **kwargs={'ipython_dir': '/root/.ipython', 'parent': <IPython.terminal.ipapp.TerminalIPythonApp object>, 'profile_dir': <IPython.core.profiledir.ProfileDir object>, 'user_ns': None})
      553 @classmethod
      554 def instance(cls: type[CT], *args: t.Any, **kwargs: t.Any) -> CT:
      555     """Returns a global instance of this class.
      556
      557     This method create a new instance if none have previously been created
     (...)    579         True
      580     """
      581     # Create and save the instance
      582     if cls._instance is None:
  --> 583         inst = cls(*args, **kwargs)
          cls = <class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>
          args = ()
          kwargs = {'parent': <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>, 'profile_dir': <IPython.core.profiledir.ProfileDir object at 0xffffa354bcb0>, 'ipython_dir': '/root/.ipython', 'user_ns': None}    584         # Now make sure that the instance will also be returned by
      585         # parent classes' _instance attribute.
      586         for subclass in cls._walk_mro():
      587             subclass._instance = inst
      589     if isinstance(cls._instance, cls):
      590         return cls._instance
      591     else:
      592         raise MultipleInstanceError(
      593             f"An incompatible sibling of '{cls.__name__}' is already instantiated"
      594             f" as singleton: {type(cls._instance).__name__}"
      595         )
  
  File /usr/local/lib/python3.13/site-packages/IPython/terminal/interactiveshell.py:977, in TerminalInteractiveShell.__init__(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>, *args=(), **kwargs={'ipython_dir': '/root/.ipython', 'parent': <IPython.terminal.ipapp.TerminalIPythonApp object>, 'profile_dir': <IPython.core.profiledir.ProfileDir object>, 'user_ns': None})
      976 def __init__(self, *args, **kwargs) -> None:
  --> 977     super(TerminalInteractiveShell, self).__init__(*args, **kwargs)
          self = <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0xffffa31bc590>
          args = ()
          kwargs = {'parent': <IPython.terminal.ipapp.TerminalIPythonApp object at 0xffffa354b620>, 'profile_dir': <IPython.core.profiledir.ProfileDir object at 0xffffa354bcb0>, 'ipython_dir': '/root/.ipython', 'user_ns': None}
          TerminalInteractiveShell = <class 'IPython.terminal.interactiveshell.TerminalInteractiveShell'>    978     self._set_autosuggestions(self.autosuggestions_provider)
      979     self.init_prompt_toolkit_cli()
      980     self.init_term_title()
      981     self.keep_running = True
      982     self._set_formatter(self.autoformatter)
  
  File /usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py:650, in InteractiveShell.__init__(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>, ipython_dir='/root/.ipython', profile_dir=<IPython.core.profiledir.ProfileDir object>, user_module=None, user_ns=None, custom_exceptions=((), None), **kwargs={'parent': <IPython.terminal.ipapp.TerminalIPythonApp object>})
      632 self.init_logger()
      633 self.init_builtins()
      635 # The following was in post_config_initialization
      636 self.raw_input_original = input
      637 self.init_completer()
      638 # TODO: init_io() needs to happen before init_traceback handlers
      639 # because the traceback handlers hardcode the stdout/stderr streams.
      640 # This logic in in debugger.Pdb and should eventually be changed.
      641 self.init_io()
      642 self.init_traceback_handlers(custom_exceptions)
      643 self.init_prompts()
      644 self.init_display_formatter()
      645 self.init_display_pub()
      646 self.init_data_pub()
      647 self.init_displayhook()
      648 self.init_magics()
      649 self.init_alias()
  --> 650 self.init_logstart()
          self = <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0xffffa31bc590>    651 self.init_pdb()
      652 self.init_extension_manager()
      653 self.init_payload()
      654 self.events.trigger('shell_initialized', self)
      655 atexit.register(self.atexit_operations)
      657 # The trio runner is used for running Trio in the foreground thread. It
      658 # is different from `_trio_runner(async_fn)` in `async_helpers.py`
      659 # which calls `trio.run()` for every cell. This runner runs all cells
      660 # inside a single Trio event loop. If used, it is set from
      661 # `ipykernel.kernelapp`.
      662 self.trio_runner = None
  
  File /usr/local/lib/python3.13/site-packages/IPython/core/interactiveshell.py:817, in InteractiveShell.init_logstart(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>)
      811 def init_logstart(self):
      812     """Initialize logging in case it was requested at the command line.
      813     """
      814     if self.logappend:
      815         self.magic('logstart %s append' % self.logappend)
      816     elif self.logfile:
  --> 817         self.magic('logstart %s' % self.logfile)
          self = <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0xffffa31bc590>    818     elif self.logstart:
      819         self.magic('logstart')
  
  AttributeError: 'TerminalInteractiveShell' object has no attribute 'magic'
  
  ***************************************************************************
  
  History of session input:
  ```
  </details>