diff --git a/src/Umbraco.Core/Routing/ContentFinderByIdPath.cs b/src/Umbraco.Core/Routing/ContentFinderByIdPath.cs index 6e7238890f..380d7459ed 100644 --- a/src/Umbraco.Core/Routing/ContentFinderByIdPath.cs +++ b/src/Umbraco.Core/Routing/ContentFinderByIdPath.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; @@ -42,7 +43,7 @@ namespace Umbraco.Cms.Core.Routing /// /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. - public bool TryFindContent(IPublishedRequestBuilder frequest) + public async Task TryFindContent(IPublishedRequestBuilder frequest) { if(!_umbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext)) { @@ -70,7 +71,10 @@ namespace Umbraco.Cms.Core.Routing if (nodeId > 0) { - _logger.LogDebug("Id={NodeId}", nodeId); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Id={NodeId}", nodeId); + } node = umbracoContext?.Content?.GetById(nodeId); if (node != null) @@ -86,7 +90,10 @@ namespace Umbraco.Cms.Core.Routing } frequest.SetPublishedContent(node); - _logger.LogDebug("Found node with id={PublishedContentId}", node.Id); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Found node with id={PublishedContentId}", node.Id); + } } else { @@ -97,7 +104,10 @@ namespace Umbraco.Cms.Core.Routing if (nodeId == -1) { - _logger.LogDebug("Not a node id"); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Not a node id"); + } } return node != null; diff --git a/src/Umbraco.Core/Routing/ContentFinderByPageIdQuery.cs b/src/Umbraco.Core/Routing/ContentFinderByPageIdQuery.cs index 95b9faef2a..646d091ebb 100644 --- a/src/Umbraco.Core/Routing/ContentFinderByPageIdQuery.cs +++ b/src/Umbraco.Core/Routing/ContentFinderByPageIdQuery.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Threading.Tasks; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Web; using Umbraco.Extensions; @@ -27,7 +28,7 @@ namespace Umbraco.Cms.Core.Routing } /// - public bool TryFindContent(IPublishedRequestBuilder frequest) + public async Task TryFindContent(IPublishedRequestBuilder frequest) { if(!_umbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext)) { diff --git a/src/Umbraco.Core/Routing/ContentFinderByRedirectUrl.cs b/src/Umbraco.Core/Routing/ContentFinderByRedirectUrl.cs index d1d4873d55..a200afec67 100644 --- a/src/Umbraco.Core/Routing/ContentFinderByRedirectUrl.cs +++ b/src/Umbraco.Core/Routing/ContentFinderByRedirectUrl.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.PublishedContent; @@ -43,7 +44,7 @@ namespace Umbraco.Cms.Core.Routing /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. /// Optionally, can also assign the template or anything else on the document request, although that is not required. - public bool TryFindContent(IPublishedRequestBuilder frequest) + public async Task TryFindContent(IPublishedRequestBuilder frequest) { if (!_umbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext)) { @@ -58,7 +59,10 @@ namespace Umbraco.Cms.Core.Routing if (redirectUrl == null) { - _logger.LogDebug("No match for route: {Route}", route); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("No match for route: {Route}", route); + } return false; } @@ -66,14 +70,19 @@ namespace Umbraco.Cms.Core.Routing var url = content == null ? "#" : content.Url(_publishedUrlProvider, redirectUrl.Culture); if (url.StartsWith("#")) { - _logger.LogDebug("Route {Route} matches content {ContentId} which has no URL.", route, redirectUrl.ContentId); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Route {Route} matches content {ContentId} which has no URL.", route, redirectUrl.ContentId); + } return false; } // Appending any querystring from the incoming request to the redirect URL url = string.IsNullOrEmpty(frequest.Uri.Query) ? url : url + frequest.Uri.Query; - - _logger.LogDebug("Route {Route} matches content {ContentId} with URL '{Url}', redirecting.", route, content?.Id, url); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Route {Route} matches content {ContentId} with URL '{Url}', redirecting.", route, content?.Id, url); + } frequest .SetRedirectPermanent(url) diff --git a/src/Umbraco.Core/Routing/ContentFinderByUrl.cs b/src/Umbraco.Core/Routing/ContentFinderByUrl.cs index 3a753563df..e95a036215 100644 --- a/src/Umbraco.Core/Routing/ContentFinderByUrl.cs +++ b/src/Umbraco.Core/Routing/ContentFinderByUrl.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Web; @@ -33,7 +34,7 @@ namespace Umbraco.Cms.Core.Routing /// /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. - public virtual bool TryFindContent(IPublishedRequestBuilder frequest) + public virtual async Task TryFindContent(IPublishedRequestBuilder frequest) { if (!UmbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext)) { @@ -69,18 +70,26 @@ namespace Umbraco.Cms.Core.Routing { throw new System.ArgumentNullException(nameof(docreq)); } - - _logger.LogDebug("Test route {Route}", route); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Test route {Route}", route); + } IPublishedContent? node = umbracoContext.Content?.GetByRoute(umbracoContext.InPreviewMode, route, culture: docreq.Culture); if (node != null) { docreq.SetPublishedContent(node); - _logger.LogDebug("Got content, id={NodeId}", node.Id); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Got content, id={NodeId}", node.Id); + } } else { - _logger.LogDebug("No match."); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("No match."); + } } return node; diff --git a/src/Umbraco.Core/Routing/ContentFinderByUrlAlias.cs b/src/Umbraco.Core/Routing/ContentFinderByUrlAlias.cs index 7e51f63aa4..5a8f6e16fe 100644 --- a/src/Umbraco.Core/Routing/ContentFinderByUrlAlias.cs +++ b/src/Umbraco.Core/Routing/ContentFinderByUrlAlias.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.PublishedCache; @@ -42,7 +43,7 @@ namespace Umbraco.Cms.Core.Routing /// /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. - public bool TryFindContent(IPublishedRequestBuilder frequest) + public async Task TryFindContent(IPublishedRequestBuilder frequest) { if (!_umbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext)) { @@ -62,7 +63,10 @@ namespace Umbraco.Cms.Core.Routing if (node != null) { frequest.SetPublishedContent(node); - _logger.LogDebug("Path '{UriAbsolutePath}' is an alias for id={PublishedContentId}", frequest.Uri.AbsolutePath, node.Id); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Path '{UriAbsolutePath}' is an alias for id={PublishedContentId}", frequest.Uri.AbsolutePath, node.Id); + } } } diff --git a/src/Umbraco.Core/Routing/ContentFinderByUrlAndTemplate.cs b/src/Umbraco.Core/Routing/ContentFinderByUrlAndTemplate.cs index dfdb5eec6a..f059850086 100644 --- a/src/Umbraco.Core/Routing/ContentFinderByUrlAndTemplate.cs +++ b/src/Umbraco.Core/Routing/ContentFinderByUrlAndTemplate.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; @@ -49,7 +50,7 @@ namespace Umbraco.Cms.Core.Routing /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. /// If successful, also assigns the template. - public override bool TryFindContent(IPublishedRequestBuilder frequest) + public override async Task TryFindContent(IPublishedRequestBuilder frequest) { var path = frequest.AbsolutePathDecoded; @@ -61,7 +62,10 @@ namespace Umbraco.Cms.Core.Routing // no template if "/" if (path == "/") { - _logger.LogDebug("No template in path '/'"); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("No template in path '/'"); + } return false; } @@ -74,11 +78,16 @@ namespace Umbraco.Cms.Core.Routing if (template == null) { - _logger.LogDebug("Not a valid template: '{TemplateAlias}'", templateAlias); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Not a valid template: '{TemplateAlias}'", templateAlias); + } return false; } - - _logger.LogDebug("Valid template: '{TemplateAlias}'", templateAlias); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Valid template: '{TemplateAlias}'", templateAlias); + } // look for node corresponding to the rest of the route var route = frequest.Domain != null ? (frequest.Domain.ContentId + path) : path; @@ -86,7 +95,10 @@ namespace Umbraco.Cms.Core.Routing if (node == null) { - _logger.LogDebug("Not a valid route to node: '{Route}'", route); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Not a valid route to node: '{Route}'", route); + } return false; } diff --git a/src/Umbraco.Core/Routing/IContentFinder.cs b/src/Umbraco.Core/Routing/IContentFinder.cs index 48a70d86e8..ab160715bb 100644 --- a/src/Umbraco.Core/Routing/IContentFinder.cs +++ b/src/Umbraco.Core/Routing/IContentFinder.cs @@ -1,3 +1,5 @@ +using System.Threading.Tasks; + namespace Umbraco.Cms.Core.Routing { /// @@ -11,6 +13,6 @@ namespace Umbraco.Cms.Core.Routing /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. /// Optionally, can also assign the template or anything else on the document request, although that is not required. - bool TryFindContent(IPublishedRequestBuilder request); + Task TryFindContent(IPublishedRequestBuilder request); } } diff --git a/src/Umbraco.Core/Routing/PublishedRouter.cs b/src/Umbraco.Core/Routing/PublishedRouter.cs index 87ef468cd5..119f9980b4 100644 --- a/src/Umbraco.Core/Routing/PublishedRouter.cs +++ b/src/Umbraco.Core/Routing/PublishedRouter.cs @@ -95,7 +95,7 @@ namespace Umbraco.Cms.Core.Routing return publishedRequestBuilder; } - private IPublishedRequest TryRouteRequest(IPublishedRequestBuilder request) + private async Task TryRouteRequest(IPublishedRequestBuilder request) { FindDomain(request); @@ -109,7 +109,7 @@ namespace Umbraco.Cms.Core.Routing return request.Build(); } - FindPublishedContent(request); + await FindPublishedContent(request); return request.Build(); } @@ -131,7 +131,7 @@ namespace Umbraco.Cms.Core.Routing // outbound routing performs different/simpler logic if (options.RouteDirection == RouteDirection.Outbound) { - return TryRouteRequest(builder); + return await TryRouteRequest(builder); } // find domain @@ -166,17 +166,20 @@ namespace Umbraco.Cms.Core.Routing // to setup the rest of the pipeline but we don't want to run the finders since there's one assigned. if (!builder.HasPublishedContent()) { - _logger.LogDebug("FindPublishedContentAndTemplate: Path={UriAbsolutePath}", builder.Uri.AbsolutePath); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindPublishedContentAndTemplate: Path={UriAbsolutePath}", builder.Uri.AbsolutePath); + } // run the document finders - foundContentByFinders = FindPublishedContent(builder); + foundContentByFinders = await FindPublishedContent(builder); } // if we are not a redirect if (!builder.IsRedirect()) { // handle not-found, redirects, access... - HandlePublishedContent(builder); + await HandlePublishedContent(builder); // find a template FindTemplate(builder, foundContentByFinders); @@ -270,7 +273,10 @@ namespace Umbraco.Cms.Core.Routing const string tracePrefix = "FindDomain: "; // note - we are not handling schemes nor ports here. - _logger.LogDebug("{TracePrefix}Uri={RequestUri}", tracePrefix, request.Uri); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}Uri={RequestUri}", tracePrefix, request.Uri); + } var umbracoContext = _umbracoContextAccessor.GetRequiredUmbracoContext(); IDomainCache? domainsCache = umbracoContext.PublishedSnapshot.Domains; var domains = domainsCache?.GetAll(includeWildcards: false).ToList(); @@ -311,8 +317,10 @@ namespace Umbraco.Cms.Core.Routing if (domainAndUri != null) { // matching an existing domain - _logger.LogDebug("{TracePrefix}Matches domain={Domain}, rootId={RootContentId}, culture={Culture}", tracePrefix, domainAndUri.Name, domainAndUri.ContentId, domainAndUri.Culture); - + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}Matches domain={Domain}, rootId={RootContentId}, culture={Culture}", tracePrefix, domainAndUri.Name, domainAndUri.ContentId, domainAndUri.Culture); + } request.SetDomain(domainAndUri); // canonical? not implemented at the moment @@ -325,12 +333,17 @@ namespace Umbraco.Cms.Core.Routing else { // not matching any existing domain - _logger.LogDebug("{TracePrefix}Matches no domain", tracePrefix); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}Matches no domain", tracePrefix); + } request.SetCulture(defaultCulture ?? CultureInfo.CurrentUICulture.Name); } - - _logger.LogDebug("{TracePrefix}Culture={CultureName}", tracePrefix, request.Culture); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}Culture={CultureName}", tracePrefix, request.Culture); + } return request.Domain != null; } @@ -348,7 +361,10 @@ namespace Umbraco.Cms.Core.Routing } var nodePath = request.PublishedContent.Path; - _logger.LogDebug("{TracePrefix}Path={NodePath}", tracePrefix, nodePath); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}Path={NodePath}", tracePrefix, nodePath); + } var rootNodeId = request.Domain != null ? request.Domain.ContentId : (int?)null; var umbracoContext = _umbracoContextAccessor.GetRequiredUmbracoContext(); Domain? domain = DomainUtilities.FindWildcardDomainInPath(umbracoContext.PublishedSnapshot.Domains?.GetAll(true), nodePath, rootNodeId); @@ -357,11 +373,17 @@ namespace Umbraco.Cms.Core.Routing if (domain != null) { request.SetCulture(domain.Culture); - _logger.LogDebug("{TracePrefix}Got domain on node {DomainContentId}, set culture to {CultureName}", tracePrefix, domain.ContentId, request.Culture); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}Got domain on node {DomainContentId}, set culture to {CultureName}", tracePrefix, domain.ContentId, request.Culture); + } } else { - _logger.LogDebug("{TracePrefix}No match.", tracePrefix); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("{TracePrefix}No match.", tracePrefix); + } } } @@ -389,25 +411,41 @@ namespace Umbraco.Cms.Core.Routing /// Tries to find the document matching the request, by running the IPublishedContentFinder instances. /// /// There is no finder collection. - internal bool FindPublishedContent(IPublishedRequestBuilder request) + internal async Task FindPublishedContent(IPublishedRequestBuilder request) { const string tracePrefix = "FindPublishedContent: "; // look for the document // the first successful finder, if any, will set this.PublishedContent, and may also set this.Template // some finders may implement caching - using (_profilingLogger.DebugDuration( - $"{tracePrefix}Begin finders", - $"{tracePrefix}End finders")) + DisposableTimer? profilingScope = null; + try { - // iterate but return on first one that finds it - var found = _contentFinders.Any(finder => + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) { - _logger.LogDebug("Finder {ContentFinderType}", finder.GetType().FullName); - return finder.TryFindContent(request); - }); + profilingScope = _profilingLogger.DebugDuration( + $"{tracePrefix}Begin finders", + $"{tracePrefix}End finders"); + } - _logger.LogDebug( + // iterate but return on first one that finds it + var found = false; + foreach (var contentFinder in _contentFinders) + { + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("Finder {ContentFinderType}", contentFinder.GetType().FullName); + } + found = await contentFinder.TryFindContent(request); + if (found) + { + break; + } + } + + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug( "Found? {Found}, Content: {PublishedContentId}, Template: {TemplateAlias}, Domain: {Domain}, Culture: {Culture}, StatusCode: {StatusCode}", found, request.HasPublishedContent() ? request.PublishedContent?.Id : "NULL", @@ -415,9 +453,14 @@ namespace Umbraco.Cms.Core.Routing request.HasDomain() ? request.Domain?.ToString() : "NULL", request.Culture ?? "NULL", request.ResponseStatusCode); + } return found; } + finally + { + profilingScope?.Dispose(); + } } /// @@ -428,29 +471,40 @@ namespace Umbraco.Cms.Core.Routing /// Handles "not found", internal redirects ... /// things that must be handled in one place because they can create loops /// - private void HandlePublishedContent(IPublishedRequestBuilder request) + private async Task HandlePublishedContent(IPublishedRequestBuilder request) { // because these might loop, we have to have some sort of infinite loop detection int i = 0, j = 0; const int maxLoop = 8; do { - _logger.LogDebug("HandlePublishedContent: Loop {LoopCounter}", i); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("HandlePublishedContent: Loop {LoopCounter}", i); + } // handle not found if (request.PublishedContent == null) { request.SetIs404(); - _logger.LogDebug("HandlePublishedContent: No document, try last chance lookup"); - - // if it fails then give up, there isn't much more that we can do - if (_contentLastChanceFinder.TryFindContent(request) == false) + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) { - _logger.LogDebug("HandlePublishedContent: Failed to find a document, give up"); - break; + _logger.LogDebug("HandlePublishedContent: No document, try last chance lookup"); } - _logger.LogDebug("HandlePublishedContent: Found a document"); + // if it fails then give up, there isn't much more that we can do + if (await _contentLastChanceFinder.TryFindContent(request) == false) + { + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("HandlePublishedContent: Failed to find a document, give up"); + } + break; + } + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("HandlePublishedContent: Found a document"); + } } // follow internal redirects as long as it's not running out of control ie infinite loop of some sort @@ -471,11 +525,16 @@ namespace Umbraco.Cms.Core.Routing if (i == maxLoop || j == maxLoop) { - _logger.LogDebug("HandlePublishedContent: Looks like we are running into an infinite loop, abort"); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("HandlePublishedContent: Looks like we are running into an infinite loop, abort"); + } request.SetPublishedContent(null); } - - _logger.LogDebug("HandlePublishedContent: End"); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("HandlePublishedContent: End"); + } } /// @@ -526,21 +585,30 @@ namespace Umbraco.Cms.Core.Routing if (valid == false) { // bad redirect - log and display the current page (legacy behavior) - _logger.LogDebug( + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug( "FollowInternalRedirects: Failed to redirect to id={InternalRedirectId}: value is not an int nor a GuidUdi.", request.PublishedContent.GetProperty(Constants.Conventions.Content.InternalRedirectId)?.GetSourceValue()); + } } if (internalRedirectNode == null) { - _logger.LogDebug( + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug( "FollowInternalRedirects: Failed to redirect to id={InternalRedirectId}: no such published document.", request.PublishedContent.GetProperty(Constants.Conventions.Content.InternalRedirectId)?.GetSourceValue()); + } } else if (internalRedirectId == request.PublishedContent.Id) { // redirect to self - _logger.LogDebug("FollowInternalRedirects: Redirecting to self, ignore"); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FollowInternalRedirects: Redirecting to self, ignore"); + } } else { @@ -557,7 +625,10 @@ namespace Umbraco.Cms.Core.Routing } redirect = true; - _logger.LogDebug("FollowInternalRedirects: Redirecting to id={InternalRedirectId}", internalRedirectId); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FollowInternalRedirects: Redirecting to id={InternalRedirectId}", internalRedirectId); + } } return redirect; @@ -598,7 +669,10 @@ namespace Umbraco.Cms.Core.Routing // else lookup the template id on the document then lookup the template with that id. if (request.HasTemplate()) { - _logger.LogDebug("FindTemplate: Has a template already, and no alternate template."); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: Has a template already, and no alternate template."); + } return; } @@ -609,7 +683,10 @@ namespace Umbraco.Cms.Core.Routing request.SetTemplate(template); if (template != null) { - _logger.LogDebug("FindTemplate: Running with template id={TemplateId} alias={TemplateAlias}", template.Id, template.Alias); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: Running with template id={TemplateId} alias={TemplateAlias}", template.Id, template.Alias); + } } else { @@ -625,10 +702,15 @@ namespace Umbraco.Cms.Core.Routing // ignore if the alias does not match - just trace if (request.HasTemplate()) { - _logger.LogDebug("FindTemplate: Has a template already, but also an alternative template."); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: Has a template already, but also an alternative template."); + } + } + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: Look for alternative template alias={AltTemplate}", altTemplate); } - - _logger.LogDebug("FindTemplate: Look for alternative template alias={AltTemplate}", altTemplate); // IsAllowedTemplate deals both with DisableAlternativeTemplates and ValidateAlternativeTemplates settings if (request.PublishedContent.IsAllowedTemplate( @@ -644,28 +726,39 @@ namespace Umbraco.Cms.Core.Routing if (template != null) { request.SetTemplate(template); - _logger.LogDebug("FindTemplate: Got alternative template id={TemplateId} alias={TemplateAlias}", template.Id, template.Alias); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: Got alternative template id={TemplateId} alias={TemplateAlias}", template.Id, template.Alias); + } } else { - _logger.LogDebug("FindTemplate: The alternative template with alias={AltTemplate} does not exist, ignoring.", altTemplate); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: The alternative template with alias={AltTemplate} does not exist, ignoring.", altTemplate); + } } } else { _logger.LogWarning("FindTemplate: Alternative template {TemplateAlias} is not allowed on node {NodeId}, ignoring.", altTemplate, request.PublishedContent.Id); - // no allowed, back to default var templateId = request.PublishedContent.TemplateId; ITemplate? template = GetTemplate(templateId); request.SetTemplate(template); - _logger.LogDebug("FindTemplate: Running with template id={TemplateId} alias={TemplateAlias}", template?.Id, template?.Alias); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: Running with template id={TemplateId} alias={TemplateAlias}", template?.Id, template?.Alias); + } } } if (!request.HasTemplate()) { - _logger.LogDebug("FindTemplate: No template was found."); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("FindTemplate: No template was found."); + } // initial idea was: if we're not already 404 and UmbracoSettings.HandleMissingTemplateAs404 is true // then reset _pcr.Document to null to force a 404. @@ -682,11 +775,16 @@ namespace Umbraco.Cms.Core.Routing { if (templateId.HasValue == false || templateId.Value == default) { - _logger.LogDebug("GetTemplateModel: No template."); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("GetTemplateModel: No template."); + } return null; } - - _logger.LogDebug("GetTemplateModel: Get template id={TemplateId}", templateId); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("GetTemplateModel: Get template id={TemplateId}", templateId); + } if (templateId == null) { @@ -698,8 +796,10 @@ namespace Umbraco.Cms.Core.Routing { throw new InvalidOperationException("The template with Id " + templateId + " does not exist, the page cannot render."); } - - _logger.LogDebug("GetTemplateModel: Got template id={TemplateId} alias={TemplateAlias}", template.Id, template.Alias); + if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) + { + _logger.LogDebug("GetTemplateModel: Got template id={TemplateId} alias={TemplateAlias}", template.Id, template.Alias); + } return template; } diff --git a/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs b/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs index 3bcb8c525f..8fec3104de 100644 --- a/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs +++ b/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs @@ -1,6 +1,7 @@ using System; using System.Globalization; using System.Linq; +using System.Threading.Tasks; using Examine; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -51,14 +52,16 @@ namespace Umbraco.Cms.Core.Routing /// /// The PublishedRequest. /// A value indicating whether an Umbraco document was found and assigned. - public bool TryFindContent(IPublishedRequestBuilder frequest) + public async Task TryFindContent(IPublishedRequestBuilder frequest) { if (!_umbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext)) { return false; } - - _logger.LogDebug("Looking for a page to handle 404."); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Looking for a page to handle 404."); + } int? domainContentId = null; @@ -107,17 +110,24 @@ namespace Umbraco.Cms.Core.Routing if (error404.HasValue) { - _logger.LogDebug("Got id={ErrorNodeId}.", error404.Value); - + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Got id={ErrorNodeId}.", error404.Value); + } content = umbracoContext.Content?.GetById(error404.Value); - - _logger.LogDebug(content == null + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug(content == null ? "Could not find content with that id." : "Found corresponding content."); + } } else { - _logger.LogDebug("Got nothing."); + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug("Got nothing."); + } } frequest? diff --git a/tests/Umbraco.Tests.Common/TestLastChanceFinder.cs b/tests/Umbraco.Tests.Common/TestLastChanceFinder.cs index 6a3c2e956a..6f99b15ac6 100644 --- a/tests/Umbraco.Tests.Common/TestLastChanceFinder.cs +++ b/tests/Umbraco.Tests.Common/TestLastChanceFinder.cs @@ -1,12 +1,13 @@ -// Copyright (c) Umbraco. +// Copyright (c) Umbraco. // See LICENSE for more details. +using System.Threading.Tasks; using Umbraco.Cms.Core.Routing; namespace Umbraco.Cms.Tests.Common { public class TestLastChanceFinder : IContentLastChanceFinder { - public bool TryFindContent(IPublishedRequestBuilder frequest) => false; + public async Task TryFindContent(IPublishedRequestBuilder frequest) => false; } } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasTests.cs index 0cdbce3da8..3404463dbf 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasTests.cs @@ -47,7 +47,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing var lookup = new ContentFinderByUrlAlias(Mock.Of>(), Mock.Of(), VariationContextAccessor, umbracoContextAccessor); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(frequest.PublishedContent.Id, nodeMatch); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasWithDomainsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasWithDomainsTests.cs index 8b77c48599..aa62f461ae 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasWithDomainsTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByAliasWithDomainsTests.cs @@ -49,7 +49,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing } var finder = new ContentFinderByUrlAlias(Mock.Of>(), Mock.Of(), VariationContextAccessor, umbracoContextAccessor); - var result = finder.TryFindContent(request); + var result = await finder.TryFindContent(request); if (expectedNode > 0) { diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByIdTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByIdTests.cs index d84f9cb6fb..caa335023c 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByIdTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByIdTests.cs @@ -50,7 +50,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing Mock.Of>(), Mock.Of(), umbracoContextAccessor); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(frequest.PublishedContent.Id, nodeMatch); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByPageIdQueryTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByPageIdQueryTests.cs index 9aceaf766a..b65d19e1bc 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByPageIdQueryTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByPageIdQueryTests.cs @@ -54,7 +54,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing var lookup = new ContentFinderByPageIdQuery(mockRequestAccessor.Object, umbracoContextAccessor); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(frequest.PublishedContent.Id, nodeMatch); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAliasTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAliasTests.cs index 1ad49a95d9..8176071934 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAliasTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAliasTests.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using AutoFixture.NUnit3; using Moq; using NUnit.Framework; @@ -24,7 +25,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing [InlineAutoMoqData("/only/one/alias", 100111)] [InlineAutoMoqData("/ONLY/one/Alias", 100111)] [InlineAutoMoqData("/alias43", 100121)] - public void Lookup_By_Url_Alias ( + public async Task Lookup_By_Url_Alias ( string relativeUrl, int nodeMatch, [Frozen] IPublishedContentCache publishedContentCache, @@ -54,7 +55,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing Mock.Get(variationContextAccessor).Setup(x => x.VariationContext).Returns(variationContext); var publishedRequestBuilder = new PublishedRequestBuilder(new Uri(absoluteUrl, UriKind.Absolute), fileService); //Act - var result = sut.TryFindContent(publishedRequestBuilder); + var result = await sut.TryFindContent(publishedRequestBuilder); Assert.IsTrue(result); Assert.AreEqual(publishedRequestBuilder.PublishedContent.Id, nodeMatch); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAndTemplateTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAndTemplateTests.cs index 146d1c026e..47b93b0f01 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAndTemplateTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlAndTemplateTests.cs @@ -72,7 +72,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing umbracoContextAccessor, Mock.Of>(x=>x.CurrentValue == webRoutingSettings)); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); IPublishedRequest request = frequest.Build(); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlTests.cs index 556eed9622..95a47ec8bd 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlTests.cs @@ -63,7 +63,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing if (urlString == "/home/sub1") System.Diagnostics.Debugger.Break(); - var result = lookup.finder.TryFindContent(lookup.frequest); + var result = await lookup.finder.TryFindContent(lookup.frequest); if (expectedId > 0) { @@ -88,7 +88,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing Assert.IsFalse(GlobalSettings.HideTopLevelNodeFromPath); - var result = lookup.finder.TryFindContent(lookup.frequest); + var result = await lookup.finder.TryFindContent(lookup.frequest); Assert.IsTrue(result); Assert.AreEqual(expectedId, lookup.frequest.PublishedContent.Id); @@ -107,7 +107,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing var lookup = await GetContentFinder(urlString); - var result = lookup.finder.TryFindContent(lookup.frequest); + var result = await lookup.finder.TryFindContent(lookup.frequest); Assert.IsTrue(result); Assert.AreEqual(expectedId, lookup.frequest.PublishedContent.Id); @@ -132,7 +132,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing lookup.frequest.SetDomain(new DomainAndUri(new Domain(1, "mysite", -1, "en-US", false), new Uri("http://mysite/"))); - var result = lookup.finder.TryFindContent(lookup.frequest); + var result = await lookup.finder.TryFindContent(lookup.frequest); Assert.IsTrue(result); Assert.AreEqual(expectedId, lookup.frequest.PublishedContent.Id); @@ -158,7 +158,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing lookup.frequest.SetDomain(new DomainAndUri(new Domain(1, "mysite/æøå", -1, "en-US", false), new Uri("http://mysite/æøå"))); - var result = lookup.finder.TryFindContent(lookup.frequest); + var result = await lookup.finder.TryFindContent(lookup.frequest); Assert.IsTrue(result); Assert.AreEqual(expectedId, lookup.frequest.PublishedContent.Id); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlWithDomainsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlWithDomainsTests.cs index d992140386..49e9698e2a 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlWithDomainsTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/ContentFinderByUrlWithDomainsTests.cs @@ -140,7 +140,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing publishedRouter.FindDomain(frequest); var lookup = new ContentFinderByUrl(Mock.Of>(), umbracoContextAccessor); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(expectedId, frequest.PublishedContent.Id); } @@ -183,7 +183,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing Assert.AreEqual(expectedCulture, frequest.Culture); var lookup = new ContentFinderByUrl(Mock.Of>(), umbracoContextAccessor); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(expectedId, frequest.PublishedContent.Id); } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/DomainsAndCulturesTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/DomainsAndCulturesTests.cs index ccaeee9322..3e6d427108 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/DomainsAndCulturesTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/DomainsAndCulturesTests.cs @@ -304,7 +304,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing Assert.AreEqual(expectedCulture, frequest.Culture); var finder = new ContentFinderByUrl(Mock.Of>(), umbracoContextAccessor); - var result = finder.TryFindContent(frequest); + var result = await finder.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(frequest.PublishedContent.Id, expectedNode); @@ -352,7 +352,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing // find document var finder = new ContentFinderByUrl(Mock.Of>(), umbracoContextAccessor); - var result = finder.TryFindContent(frequest); + var result = await finder.TryFindContent(frequest); // apply wildcard domain publishedRouter.HandleWildcardDomains(frequest); @@ -388,7 +388,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing Assert.AreEqual(expectedCulture, frequest.Culture); var finder = new ContentFinderByUrl(Mock.Of>(), umbracoContextAccessor); - var result = finder.TryFindContent(frequest); + var result = await finder.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(frequest.PublishedContent.Id, expectedNode); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UrlsWithNestedDomains.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UrlsWithNestedDomains.cs index 1c96f0c0bc..15397b7dfe 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UrlsWithNestedDomains.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UrlsWithNestedDomains.cs @@ -72,7 +72,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Routing // check that it's been routed var lookup = new ContentFinderByUrl(Mock.Of>(), umbracoContextAccessor); - var result = lookup.TryFindContent(frequest); + var result = await lookup.TryFindContent(frequest); Assert.IsTrue(result); Assert.AreEqual(100111, frequest.PublishedContent.Id);