class_docstr: A MazeEnv monitoring wrapper logging events for observations, actions and rewards.
  
  :param env: The environment to wrap.
  :param observation_logging: If True observation events are logged.
  :param action_logging: If True action events are logged.
  :param reward_logging: If True additional reward events are logged.
class_docstr_tok: ["A","MazeEnv","monitoring","wrapper","logging","events","for","observations",",","actions","and","rewards",".",":","param","env",":","The","environment","to","wrap",".",":","param","observation_logging",":","If","True","observation","events","are","logged",".",":","param","action_logging",":","If","True","action","events","are","logged",".",":","param","reward_logging",":","If","True","additional","reward","events","are","logged","."]
code: def _log_observation(
      self,
      substep_name: Union[str, int],
      agent_name: str,
      observation: ObservationType,
  ) -> None:
      # log processed observations
      for observation_name, observation_value in observation.items():
          self.observation_events.observation_processed(
              step_key=substep_name,
              agent_name=agent_name,
              name=observation_name,
              value=observation_value,
          )
  
      # log original observations
      for (
          observation_name,
          observation_value,
      ) in self.observation_original.items():
          self.observation_events.observation_original(
              step_key=substep_name,
              agent_name=agent_name,
              name=observation_name,
              value=observation_value,
          )
  
imports: import warnings
  from typing import TypeVar, Union, Any, Tuple, Dict, Optional
  import numpy
  from gym import spaces
  from maze.core.annotations import override
  from maze.core.env.action_conversion import ActionType
  from maze.core.env.base_env import BaseEnv
  from maze.core.env.maze_action import MazeActionType
  from maze.core.env.maze_env import MazeEnv
  from maze.core.env.maze_state import MazeStateType
  from maze.core.env.observation_conversion import ObservationType
  from maze.core.env.simulated_env_mixin import SimulatedEnvMixin
  from maze.core.env.structured_env import StructuredEnv
  from maze.core.log_events.monitoring_events import ActionEvents, RewardEvents, ObservationEvents
  from maze.core.wrappers.wrapper import Wrapper
label_desc: Use image node_id 7 for calling the MazeEnvMonitoringWrapper obj's underlying member method code with example usage: obj._log_observation(substep_name, agent_name, observation) without return types