data: str
 
     def str_for_log(self, name: str) -> str:
-        'Optimized for Client.log per-line listing.'
+        'Optimized for Client._log per-line listing.'
         listing = '+' if self.enabled else '-'
         listing += f' {name}'
         if self.data:
             self.conn_setup.port = PORT_SSL
         self.client_id = self.conn_setup.hostname
         super().__init__(client_id=self.client_id, **kwargs)
-        self.log = Logger(self._log)
+        self._log = Logger(self._do_log)
         self.update_login(nick_confirmed=False,
                           nickname=self.conn_setup.nickname)
-        self.log.add(f'connecting {self.conn_setup}')
+        self._log.add(f'connecting {self.conn_setup}')
         self.start_connecting()
 
     def start_connecting(self) -> None:
                                            client_id=self.client_id)
                 self._client_trigger('_on_connect')
             except IrcConnAbortException as e:
-                self.log.alert(str(e))
+                self._log.alert(str(e))
             except Exception as e:  # pylint: disable=broad-exception-caught
                 self._put(ExceptionEvent(e))
 
     def _on_connect(self) -> None:
         'Steps to perform right after connection.'
         assert self.conn is not None
-        self.log.add('connected to server (SSL: '
-                     f'{"yes" if self.conn.ssl else "no"})',
-                     stream=STREAM_GLOB)
+        self._log.add('connected to server (SSL: '
+                      f'{"yes" if self.conn.ssl else "no"})',
+                      stream=STREAM_GLOB)
         self._caps.challenge('LS', '302')
         self.send(IrcMessage(verb='USER',
                              params=(getuser(), '0', '*',
         self.send(IrcMessage(verb='NICK', params=(self.conn_setup.nickname,)))
 
     @abstractmethod
-    def _log(self, msg: str, stream: str = STREAM_SERVER) -> None:
+    def _do_log(self, msg: str, stream: str = STREAM_SERVER) -> None:
         'Write msg into log of stream, whatever shape that may have.'
 
     def send(self,
              ) -> None:
         'Send line-separator-delimited message over socket.'
         if not self.conn:
-            self.log.alert('cannot send, connection seems closed')
+            self._log.alert('cannot send, connection seems closed')
             return
         self.conn.send(msg)
         if to_log:
-            self.log.add(to_log, prefix='', stream=stream)
-        self.log.add(msg.raw, prefix=_LOG_PREFIX_SEND_RAW, stream=STREAM_RAW)
+            self._log.add(to_log, prefix='', stream=stream)
+        self._log.add(msg.raw, prefix=_LOG_PREFIX_SEND_RAW, stream=STREAM_RAW)
 
     def update_login(self, nick_confirmed: bool, nickname: str = '') -> None:
         '''Manage conn_setup.nickname, .nick_confirmed.
             verb = ('set' if first_run
                     else f'changed from "{self.conn_setup.nickname}"')
             self.conn_setup.nickname = nickname
-            self.log.add(f'{prefix} {verb} to "{nickname}"',
-                         stream=STREAM_GLOB)
+            self._log.add(f'{prefix} {verb} to "{nickname}"',
+                          stream=STREAM_GLOB)
         if first_run or nick_confirmed != self.nick_confirmed:
             self.nick_confirmed = nick_confirmed
             if not first_run:
-                self.log.add(f'{prefix} {"" if nick_confirmed else "un"}'
-                             'confirmed')
+                self._log.add(f'{prefix} {"" if nick_confirmed else "un"}'
+                              'confirmed')
 
     def close(self) -> None:
         'Close both recv Loop and socket.'
-        self.log.add(msg='disconnecting from server', stream=STREAM_GLOB)
+        self._log.add(msg='disconnecting from server', stream=STREAM_GLOB)
         self._caps.clear()
         if self.conn:
             self.conn.close()
 
     def handle_msg(self, msg: IrcMessage) -> None:
         'Process incoming msg towards appropriate client steps.'
-        self.log.add(msg.raw, prefix=_LOG_PREFIX_RECV_RAW, stream=STREAM_RAW)
+        self._log.add(msg.raw, prefix=_LOG_PREFIX_RECV_RAW, stream=STREAM_RAW)
         match msg.verb:
             case 'PING':
                 self.send(IrcMessage(verb='PONG', params=(msg.params[0],)))
                 self.update_login(nickname=msg.params[0], nick_confirmed=True)
             case 'PRIVMSG':
                 nickname = msg.source.split('!')[0]
-                self.log.add(f'< [{nickname}] {msg.params[-1]}',
-                             stream=nickname,
-                             prefix=_LOG_PREFIX_PRIVMSG)
+                self._log.add(f'< [{nickname}] {msg.params[-1]}',
+                              stream=nickname,
+                              prefix=_LOG_PREFIX_PRIVMSG)
             case 'CAP':
                 for to_log in self._caps.process_msg(msg.params[1:]):
-                    self.log.add(to_log)
+                    self._log.add(to_log)
                 if self._caps.sasl_wait:
                     if self.conn_setup.password:
                         self.send(IrcMessage('AUTHENTICATE', ('PLAIN',)))
                     self.send(IrcMessage('AUTHENTICATE', (auth,)))
             case '903' | '904':
                 if msg.verb == '904':
-                    self.log.alert('SASL authentication failed')
+                    self._log.alert('SASL authentication failed')
                 self._caps.challenge('END')