def log_player_trades_with_port(self, player, to_port, port, to_player):
        """
        :param player: catan.game.Player
        :param to_port: list of tuples, [(int, game.board.Terrain), (int, game.board.Terrain)]
        :param port: catan.board.Port
        :param to_player: list of tuples, [(int, game.board.Terrain), (int, game.board.Terrain)]
        """
        self._log('{0} trades '.format(player.color))

        # to_port items
        self._log('[')
        for i, (num, res) in enumerate(to_port):
            if i > 0:
                self._log(', ')
            self._log('{0} {1}'.format(num, res.value))
        self._log(']')

        self._log(' to port {0} for '.format(port.type.value))

        # to_player items
        self._log('[')
        for i, (num, res) in enumerate(to_player):
            if i > 0:
                self._log(', ')
            self._log('{0} {1}'.format(num, res.value))
        self._log(']')

        self._log('\n')
:param player: catan.game.Player
        :param to_port: list of tuples, [(int, game.board.Terrain), (int, game.board.Terrain)]
        :param port: catan.board.Port
        :param to_player: list of tuples, [(int, game.board.Terrain), (int, game.board.Terrain)]