def _get_project_sync_url(sg_field_value, logger):
    """
    Return sync url from Shotgun File/Link field.
    
    :param sg_field_value: Shotgun File/Link field value as a dict or ``None``.
    :param logger: Logger instance.
    :returns: URL for sync as a str or ``None``.
    """
    # We expect a File/Link field with a web link, something like:
    # {
    #    'name': 'SG Jira Bridge',
    #    'url': 'http://localhost:9090',
    #    'content_type': None,
    #    'type': 'Attachment',
    #    'id': 123456,
    #    'link_type': 'web'
    #
    # }
    # Default value if we can't retrieve a valid value
    sync_url = None
    if isinstance(sg_field_value, dict):
        if sg_field_value.get("link_type") == "web":
            sync_url = sg_field_value.get("url")
            if sync_url and sync_url.endswith("/"):
                sync_url = sync_url[:-1]
    
    # There is a value in the sg_field_value but it's not what we expect.
    if sync_url is None and sg_field_value: 
        logger.warning(
            "Sync URL could not be extracted from %s. Expected a dictionary "
            "representing a web link like {'link_type': 'web', 'url': "
            "'https://<servername>/sg2jira/<settingsname>'}" % sg_field_value
        )

    return sync_url