Strange behavior of loss logger, different from actual loss, and with delay. Probably I am misreading something.
❓ Questions and Help
What is your question?
How to interpret command line loss outputs?
Code
With overfit batches = 1 and batch size = 1, I expect train_loss = val_loss for all epochs and steps.
I also expect the value reported in command line to be the same value reported to tensorboard.
I am using very standard code, logging is performed like so
train step (notice subtracting 1 from epoch to align with val loss on graph):
    ...
    tb = self.logger.experiment
    tb.add_scalars("losses", {"train_loss": loss}, global_step=self.current_epoch - 1)
    self.log("train_loss", loss, prog_bar=True, on_step=False, on_epoch=True)
    return loss

val_step
    if not self.trainer.running_sanity_check:
        tb.add_scalars("losses", {"val_loss": loss}, global_step=self.current_epoch)

    outputs = {"val_loss":  loss, "recon_batch": recon_batch, "label_batch": label_batch,
               "label_img": label_img}

    self.log("val_loss", loss, prog_bar=True, on_step=False, on_epoch=True)
    return outputs

Notice the same loss is reported both to Tensorboard and to .log.
What I get is
Epoch 0: 100%|██████████| 2/2 [00:04<00:00,  2.14s/it, loss=0.64, v_num=183, val_loss=0.623]
Epoch 1:  50%|█████     | 1/2 [00:01<00:01,  1.66s/it, loss=0.631, v_num=183, val_loss=0.623, train_loss=0.64]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 1: 100%|██████████| 2/2 [00:04<00:00,  2.10s/it, loss=0.631, v_num=183, val_loss=0.592, train_loss=0.64]
Epoch 2:  50%|█████     | 1/2 [00:01<00:01,  1.76s/it, loss=0.618, v_num=183, val_loss=0.592, train_loss=0.623]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 2: 100%|██████████| 2/2 [00:04<00:00,  2.10s/it, loss=0.618, v_num=183, val_loss=0.537, train_loss=0.623]
Epoch 3:  50%|█████     | 1/2 [00:01<00:01,  1.66s/it, loss=0.598, v_num=183, val_loss=0.537, train_loss=0.592]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 3: 100%|██████████| 2/2 [00:04<00:00,  2.11s/it, loss=0.598, v_num=183, val_loss=0.448, train_loss=0.592]
Epoch 4:  50%|█████     | 1/2 [00:01<00:01,  1.71s/it, loss=0.568, v_num=183, val_loss=0.448, train_loss=0.537]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 4: 100%|██████████| 2/2 [00:04<00:00,  2.07s/it, loss=0.568, v_num=183, val_loss=0.325, train_loss=0.537]
Epoch 5:  50%|█████     | 1/2 [00:01<00:01,  1.70s/it, loss=0.528, v_num=183, val_loss=0.325, train_loss=0.448]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 5: 100%|██████████| 2/2 [00:04<00:00,  2.12s/it, loss=0.528, v_num=183, val_loss=0.202, train_loss=0.448]
Epoch 6:  50%|█████     | 1/2 [00:01<00:01,  1.71s/it, loss=0.481, v_num=183, val_loss=0.202, train_loss=0.325]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 6: 100%|██████████| 2/2 [00:04<00:00,  2.08s/it, loss=0.481, v_num=183, val_loss=0.2, train_loss=0.325]
Epoch 7:  50%|█████     | 1/2 [00:01<00:01,  1.72s/it, loss=0.446, v_num=183, val_loss=0.2, train_loss=0.202]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 7: 100%|██████████| 2/2 [00:04<00:00,  2.10s/it, loss=0.446, v_num=183, val_loss=0.192, train_loss=0.202]
Epoch 8:  50%|█████     | 1/2 [00:01<00:01,  1.70s/it, loss=0.418, v_num=183, val_loss=0.192, train_loss=0.2]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 8: 100%|██████████| 2/2 [00:04<00:00,  2.12s/it, loss=0.418, v_num=183, val_loss=0.105, train_loss=0.2]\
and so on
Notice train_loss [epoch_i] == val_loss[epoch_i - 2]
Tensorboard shows expected behavior - exact same loss (except for the shift I had to put in the logging to make it make sense)

Please explain how to interpret what I am seeing.
What's your environment?

OS: [e.g. iOS, Linux, Win] Win
Packaging [e.g. pip, conda] pip
Version [e.g. 0.5.2.1] 1.1.4