Custom loggers with .save method do not get final epoch metrics in .log_metrics
🐛 Bug

To Reproduce
Steps to reproduce the behavior:

Run code sample
Observe that the output for the logger with the save method is missing the print for the final epoch

Code sample
import numpy as np
import pytorch_lightning as pl
import torch
from pytorch_lightning.loggers import LightningLoggerBase
from torch.utils.data import DataLoader, TensorDataset


class MyLogger(LightningLoggerBase):
    def log_metrics(self, metrics, step=None):
        print(f"{self.name} - {step}: {metrics}")

    def log_hyperparams(self, params):
        pass

    @property
    def name(self):
        return "my_logger"

    @property
    def version(self):
        return 1

    @property
    def experiment(self):
        return None


class MyLogger_with_save(LightningLoggerBase):
    def log_metrics(self, metrics, step=None):
        print(f"{self.name} - {step}: {metrics}")

    def log_hyperparams(self, params):
        pass

    @property
    def name(self):
        return "my_logger_with_save"

    @property
    def version(self):
        return 1

    @property
    def experiment(self):
        return None

    def save(self):
        pass


class MyLightningModule(pl.LightningModule):
    def configure_optimizers(self):
        return torch.optim.Adam(self.parameters(), lr=0.01)

    def forward(self, x):
        return self.model.forward(x)

    def __init__(self):
        super().__init__()
        self.model = torch.nn.Linear(1, 1)
        self.loss_fn = torch.nn.MSELoss()

    def train_dataloader(self):
        x = torch.from_numpy(np.random.RandomState(0).randn(6, 1).astype(np.float32))
        y = torch.from_numpy(np.random.RandomState(1).randn(6, 1).astype(np.float32))
        return DataLoader(TensorDataset(x, y), batch_size=2)

    def training_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self.forward(x)
        loss = self.loss_fn(y, y_hat)
        result = pl.TrainResult(minimize=loss)
        result.log("train_loss", loss, on_epoch=True)
        return result


torch.manual_seed(0)
torch.cuda.manual_seed_all(0)

kwargs = dict(max_epochs=3, progress_bar_refresh_rate=0, weights_summary=None)

trainer_1 = pl.Trainer(logger=MyLogger(), **kwargs)
trainer_1.fit(MyLightningModule())

trainer_2 = pl.Trainer(logger=MyLogger_with_save(), **kwargs)
trainer_2.fit(MyLightningModule())
Output
GPU available: False, used: False
TPU available: False, using: 0 TPU cores
/home/espen/envs/research/lib/python3.8/site-packages/pytorch_lightning/utilities/distributed.py:37: UserWarning: The dataloader, train dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 8 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.
  warnings.warn(*args, **kwargs)
my_logger - 3: {'epoch_train_loss': 2.462054967880249, 'epoch': 0}
my_logger - 6: {'epoch_train_loss': 2.417429208755493, 'epoch': 1}
my_logger - 9: {'epoch_train_loss': 2.378046751022339, 'epoch': 2}
Saving latest checkpoint..
GPU available: False, used: False
TPU available: False, using: 0 TPU cores
my_logger_with_save - 3: {'epoch_train_loss': 3.9954922199249268, 'epoch': 0}
my_logger_with_save - 6: {'epoch_train_loss': 3.8402137756347656, 'epoch': 1}
Saving latest checkpoint..

Expected behavior
Expected my_logger_with_save to output something for the third epoch, like my_logger does.
Environment

PL version: master / 0.9.1.rc1 / 701ca8b5496be6ee97529c190c181ef4b1bc6724
PyTorch Version: 1.6.0
How you installed PyTorch: pip
Build command you used (if compiling from source): N/A
Python version: 3.8.5
CUDA/cuDNN version: N/A
GPU models and configuration: N/A
Any other relevant information: N/A