def METHOD_NAME(self, stage, **kwargs):
    """
    Go through the plans and check if they are ready to be produced in the given stage of the run. If they are,
    the logger will pass all the arguments to the 'plan.produce' method and collect the returned artifact.
    :param stage:            The stage to produce the artifact to check if its ready.
    :param kwargs:           All of the required produce arguments to pass onto the plans.
    """
    # Initialize a new list of plans for all the plans that will still need to be produced:
    plans = []
    # Go ver the plans to produce their artifacts:
    for plan in self._plans:
        # Check if the plan is ready:
        if plan.is_ready(stage=stage):
            # Produce the artifact:
            self._not_logged_artifacts = {
                **self._not_logged_artifacts,
                **plan.produce(**kwargs),
            }
            # If the plan should not be produced again, continue to the next one so it won't be collected:
            if not plan.is_reproducible():
                continue
        # Collect the plan to produce it later (or again if reproducible):
        plans.append(plan)
    # Clear the old plans:
    self._plans = plans
    # Add evaluation prefix if in Evaluation mode:
    if self._mode == LoggingMode.EVALUATION:
        self._not_logged_artifacts = {
            f"evaluation-{key}": value
            for key, value in self._not_logged_artifacts.items()
        }
        for artifact in self._not_logged_artifacts.values():
            artifact.key = f"evaluation-{artifact.key}"