class_docstr: Logs the training of components.
class_docstr_tok: ["Logs","the","training","of","components","."]
docstr: Logs when a component finished its training.
docstr_tok: ["Logs","when","a","component","finished","its","training","."]
code: def on_after_node(
      self,
      node_name: Text,
      execution_context: ExecutionContext,
      config: Dict[Text, Any],
      output: Any,
      input_hook_data: Dict,
  ) -> None:
      """Logs when a component finished its training."""
      node = self._pruned_schema.nodes[node_name]
  
      if not self._does_node_train(node):
          return
  
      if self._is_cached_node(node):
          actual_component = execution_context.graph_schema.nodes[
              node_name
          ]
          logger.info(
              f"Restored component '{actual_component.uses.__name__}' from cache."
          )
      else:
          logger.info(
              f"Finished training component '{node.uses.__name__}'."
          )
  
imports: import logging
  from typing import Any, Dict, Text, Type
  from rasa.engine.caching import TrainingCache
  from rasa.engine.graph import ExecutionContext, GraphNodeHook, GraphSchema, SchemaNode
  from rasa.engine.storage.storage import ModelStorage
  from rasa.engine.training.components import PrecomputedValueProvider
  import rasa.shared.utils.io
  from rasa.engine.training import fingerprinting
label_desc: Use image node_id 5 for calling the LoggingHook obj's underlying member method code with example usage: obj.on_after_node(node_name, execution_context, config, output, input_hook_data) without return types