mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Improved logging
This commit is contained in:
parent
fce05c2ed1
commit
2d97f1f2c7
|
|
@ -60,7 +60,6 @@ namespace MapControl.Caching
|
||||||
}
|
}
|
||||||
|
|
||||||
logger = loggerFactory?.CreateLogger<SQLiteCache>();
|
logger = loggerFactory?.CreateLogger<SQLiteCache>();
|
||||||
|
|
||||||
logger?.LogInformation("Opened database {path}", path);
|
logger?.LogInformation("Opened database {path}", path);
|
||||||
|
|
||||||
if (options.ExpirationScanFrequency > TimeSpan.Zero)
|
if (options.ExpirationScanFrequency > TimeSpan.Zero)
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,9 @@ namespace MapControl
|
||||||
|
|
||||||
private static string QueryString(ushort tag) => $"/ifd/{{ushort={tag}}}";
|
private static string QueryString(ushort tag) => $"/ifd/{{ushort={tag}}}";
|
||||||
|
|
||||||
|
private static ILogger logger;
|
||||||
|
private static ILogger Logger => logger ?? (logger = ImageLoader.LoggerFactory?.CreateLogger(nameof(GeoImage)));
|
||||||
|
|
||||||
public static readonly DependencyProperty SourcePathProperty =
|
public static readonly DependencyProperty SourcePathProperty =
|
||||||
DependencyPropertyHelper.RegisterAttached<string>("SourcePath", typeof(GeoImage), null,
|
DependencyPropertyHelper.RegisterAttached<string>("SourcePath", typeof(GeoImage), null,
|
||||||
async (element, oldValue, newValue) => await LoadGeoImageAsync(element, newValue));
|
async (element, oldValue, newValue) => await LoadGeoImageAsync(element, newValue));
|
||||||
|
|
@ -136,7 +139,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
ImageLoader.LoggerFactory?.CreateLogger(typeof(GeoImage))?.LogError(ex, "Failed loading from {path}", sourcePath);
|
Logger?.LogError(ex, "Failed loading from {path}", sourcePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ namespace MapControl
|
||||||
public ImageSource ImageSource { get; set; }
|
public ImageSource ImageSource { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ILogger logger;
|
||||||
|
private static ILogger Logger => logger ?? (logger = ImageLoader.LoggerFactory?.CreateLogger<GroundOverlay>());
|
||||||
|
|
||||||
public static readonly DependencyProperty SourcePathProperty =
|
public static readonly DependencyProperty SourcePathProperty =
|
||||||
DependencyPropertyHelper.Register<GroundOverlay, string>(nameof(SourcePath), null,
|
DependencyPropertyHelper.Register<GroundOverlay, string>(nameof(SourcePath), null,
|
||||||
async (groundOverlay, oldValue, newValue) => await groundOverlay.LoadAsync(newValue));
|
async (groundOverlay, oldValue, newValue) => await groundOverlay.LoadAsync(newValue));
|
||||||
|
|
@ -84,7 +87,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
ImageLoader.LoggerFactory?.CreateLogger<GroundOverlay>()?.LogError(ex, "Failed loading from {path}", sourcePath);
|
Logger?.LogError(ex, "Failed loading from {path}", sourcePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ namespace MapControl.Caching
|
||||||
rootDirectory.Create();
|
rootDirectory.Create();
|
||||||
|
|
||||||
logger = loggerFactory?.CreateLogger<ImageFileCache>();
|
logger = loggerFactory?.CreateLogger<ImageFileCache>();
|
||||||
|
|
||||||
logger?.LogInformation("Started in {name}", rootDirectory.FullName);
|
logger?.LogInformation("Started in {name}", rootDirectory.FullName);
|
||||||
|
|
||||||
var memoryCacheOptions = new MemoryDistributedCacheOptions();
|
var memoryCacheOptions = new MemoryDistributedCacheOptions();
|
||||||
|
|
@ -91,7 +90,7 @@ namespace MapControl.Caching
|
||||||
|
|
||||||
memoryCache.Set(key, value, options);
|
memoryCache.Set(key, value, options);
|
||||||
|
|
||||||
logger?.LogTrace("Read {name}", file.FullName);
|
logger?.LogDebug("Read {name}", file.FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
@ -126,7 +125,7 @@ namespace MapControl.Caching
|
||||||
|
|
||||||
await memoryCache.SetAsync(key, value, options, token).ConfigureAwait(false);
|
await memoryCache.SetAsync(key, value, options, token).ConfigureAwait(false);
|
||||||
|
|
||||||
logger?.LogTrace("Read {name}", file.FullName);
|
logger?.LogDebug("Read {name}", file.FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
@ -160,7 +159,7 @@ namespace MapControl.Caching
|
||||||
|
|
||||||
SetExpiration(file, options);
|
SetExpiration(file, options);
|
||||||
|
|
||||||
logger?.LogTrace("Wrote {name}", file.FullName);
|
logger?.LogDebug("Wrote {name}", file.FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
@ -191,7 +190,7 @@ namespace MapControl.Caching
|
||||||
|
|
||||||
SetExpiration(file, options);
|
SetExpiration(file, options);
|
||||||
|
|
||||||
logger?.LogTrace("Wrote {name}", file.FullName);
|
logger?.LogDebug("Wrote {name}", file.FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace MapControl
|
||||||
|
|
||||||
static ImageLoader()
|
static ImageLoader()
|
||||||
{
|
{
|
||||||
HttpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
|
HttpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(10) };
|
||||||
HttpClient.DefaultRequestHeaders.Add("User-Agent", $"XAML-Map-Control/{typeof(ImageLoader).Assembly.GetName().Version}");
|
HttpClient.DefaultRequestHeaders.Add("User-Agent", $"XAML-Map-Control/{typeof(ImageLoader).Assembly.GetName().Version}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -59,7 +59,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger?.LogError(ex, "Failed loading image from {uri}", uri);
|
Logger?.LogError(ex, "Failed loading {uri}", uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
progress?.Report(1d);
|
progress?.Report(1d);
|
||||||
|
|
@ -93,7 +93,9 @@ namespace MapControl
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var responseMessage = await HttpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false))
|
var completionOptions = progress != null ? HttpCompletionOption.ResponseHeadersRead : HttpCompletionOption.ResponseContentRead;
|
||||||
|
|
||||||
|
using (var responseMessage = await HttpClient.GetAsync(uri, completionOptions).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
if (responseMessage.IsSuccessStatusCode)
|
if (responseMessage.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
|
|
@ -112,13 +114,17 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Logger?.LogWarning("{uri}: {status} {reason}", uri, (int)responseMessage.StatusCode, responseMessage.ReasonPhrase);
|
Logger?.LogWarning("{status} ({reason}) from {uri}", (int)responseMessage.StatusCode, responseMessage.ReasonPhrase, uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (TaskCanceledException)
|
||||||
|
{
|
||||||
|
Logger?.LogWarning("Timeout while loading {uri}", uri);
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger?.LogError(ex, "Failed loading image from {uri}", uri);
|
Logger?.LogError(ex, "Failed loading {uri}", uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,9 @@ namespace MapControl
|
||||||
|
|
||||||
public partial class TileImageLoader : ITileImageLoader
|
public partial class TileImageLoader : ITileImageLoader
|
||||||
{
|
{
|
||||||
|
private static ILogger logger;
|
||||||
|
private static ILogger Logger => logger ?? (logger = ImageLoader.LoggerFactory?.CreateLogger<TileImageLoader>());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default folder path where a persistent cache implementation may save data, i.e. "C:\ProgramData\MapControl\TileCache".
|
/// Default folder path where a persistent cache implementation may save data, i.e. "C:\ProgramData\MapControl\TileCache".
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -69,9 +72,6 @@ namespace MapControl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static int MaxLoadTasks { get; set; } = 4;
|
public static int MaxLoadTasks { get; set; } = 4;
|
||||||
|
|
||||||
private static ILogger logger;
|
|
||||||
private static ILogger Logger => logger ?? (logger = ImageLoader.LoggerFactory?.CreateLogger<TileImageLoader>());
|
|
||||||
|
|
||||||
private readonly ConcurrentStack<Tile> tileStack = new ConcurrentStack<Tile>();
|
private readonly ConcurrentStack<Tile> tileStack = new ConcurrentStack<Tile>();
|
||||||
private int tileCount;
|
private int tileCount;
|
||||||
private int taskCount;
|
private int taskCount;
|
||||||
|
|
@ -98,14 +98,14 @@ namespace MapControl
|
||||||
while (taskCount < maxTasks)
|
while (taskCount < maxTasks)
|
||||||
{
|
{
|
||||||
Interlocked.Increment(ref taskCount);
|
Interlocked.Increment(ref taskCount);
|
||||||
Logger?.LogTrace("Task count: {count}", taskCount);
|
Logger?.LogDebug("Task count: {count}", taskCount);
|
||||||
|
|
||||||
_ = Task.Run(async () =>
|
_ = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await LoadTilesFromStack(tileSource, cacheName, progress).ConfigureAwait(false);
|
await LoadTilesFromStack(tileSource, cacheName, progress).ConfigureAwait(false);
|
||||||
|
|
||||||
Interlocked.Decrement(ref taskCount);
|
Interlocked.Decrement(ref taskCount);
|
||||||
Logger?.LogTrace("Task count: {count}", taskCount);
|
Logger?.LogDebug("Task count: {count}", taskCount);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -125,7 +125,7 @@ namespace MapControl
|
||||||
|
|
||||||
progress?.Report((double)tileNumber / tileCount);
|
progress?.Report((double)tileNumber / tileCount);
|
||||||
|
|
||||||
Logger?.LogTrace("Loading tile {number} of {count} ({zoom}/{column}/{row}) in thread {thread}",
|
Logger?.LogDebug("Loading tile {number} of {count} ({zoom}/{column}/{row}) in thread {thread}",
|
||||||
tileNumber, tileCount, tile.ZoomLevel, tile.Column, tile.Row, Environment.CurrentManagedThreadId);
|
tileNumber, tileCount, tile.ZoomLevel, tile.Column, tile.Row, Environment.CurrentManagedThreadId);
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,9 @@ namespace MapControl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class WmtsTileLayer : MapTileLayerBase
|
public class WmtsTileLayer : MapTileLayerBase
|
||||||
{
|
{
|
||||||
|
private static ILogger logger;
|
||||||
|
private static ILogger Logger => logger ?? (logger = ImageLoader.LoggerFactory?.CreateLogger<WmtsTileLayer>());
|
||||||
|
|
||||||
public static readonly DependencyProperty CapabilitiesUriProperty =
|
public static readonly DependencyProperty CapabilitiesUriProperty =
|
||||||
DependencyPropertyHelper.Register<WmtsTileLayer, Uri>(nameof(CapabilitiesUri), null,
|
DependencyPropertyHelper.Register<WmtsTileLayer, Uri>(nameof(CapabilitiesUri), null,
|
||||||
(layer, oldValue, newValue) => layer.TileMatrixSets.Clear());
|
(layer, oldValue, newValue) => layer.TileMatrixSets.Clear());
|
||||||
|
|
@ -202,7 +205,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
ImageLoader.LoggerFactory?.CreateLogger<WmtsTileLayer>()?.LogError(ex, "Failed reading capabilities from {uri}", CapabilitiesUri);
|
Logger?.LogError(ex, "Failed reading capabilities from {uri}", CapabilitiesUri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger?.LogError(ex, "{uri}", uri);
|
Logger?.LogError(ex, "Failed loading {uri}", uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.Report(1d);
|
progress.Report(1d);
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,14 @@ namespace SampleApplication
|
||||||
{
|
{
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddDebug());
|
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder,
|
||||||
ImageLoader.LoggerFactory = loggerFactory;
|
// LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Information)));
|
||||||
|
|
||||||
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder, loggerFactory);
|
|
||||||
//TileImageLoader.Cache = tileCache;
|
//TileImageLoader.Cache = tileCache;
|
||||||
//Closed += (s, e) => tileCache.Dispose();
|
//Closed += (s, e) => tileCache.Dispose();
|
||||||
|
|
||||||
|
ImageLoader.LoggerFactory = LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Warning));
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
sampleOverlayMenuItem.MapLayerFactory = async () => await GroundOverlay.CreateAsync("etna.kml");
|
sampleOverlayMenuItem.MapLayerFactory = async () => await GroundOverlay.CreateAsync("etna.kml");
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using MapControl;
|
using MapControl;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
@ -15,7 +16,13 @@ namespace SampleApplication
|
||||||
{
|
{
|
||||||
public MainPage()
|
public MainPage()
|
||||||
{
|
{
|
||||||
//TileImageLoader.Cache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder);
|
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder,
|
||||||
|
// LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Information)));
|
||||||
|
|
||||||
|
//TileImageLoader.Cache = tileCache;
|
||||||
|
//Unloaded += (s, e) => tileCache.Dispose();
|
||||||
|
|
||||||
|
ImageLoader.LoggerFactory = LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Warning));
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,9 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug">
|
||||||
|
<Version>9.0.8</Version>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
|
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
|
||||||
<Version>6.2.14</Version>
|
<Version>6.2.14</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
||||||
|
|
@ -16,13 +16,14 @@ namespace SampleApplication
|
||||||
{
|
{
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddDebug());
|
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder,
|
||||||
ImageLoader.LoggerFactory = loggerFactory;
|
// LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Information)));
|
||||||
|
|
||||||
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder, loggerFactory);
|
|
||||||
//TileImageLoader.Cache = tileCache;
|
//TileImageLoader.Cache = tileCache;
|
||||||
//Closed += (s, e) => tileCache.Dispose();
|
//Closed += (s, e) => tileCache.Dispose();
|
||||||
|
|
||||||
|
ImageLoader.LoggerFactory = LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Warning));
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
sampleOverlayMenuItem.MapLayerFactory = async () => await GroundOverlay.CreateAsync("etna.kml");
|
sampleOverlayMenuItem.MapLayerFactory = async () => await GroundOverlay.CreateAsync("etna.kml");
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,14 @@ namespace SampleApplication
|
||||||
{
|
{
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddDebug());
|
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder,
|
||||||
ImageLoader.LoggerFactory = loggerFactory;
|
// LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Information)));
|
||||||
|
|
||||||
//var tileCache = new MapControl.Caching.ImageFileCache(TileImageLoader.DefaultCacheFolder, loggerFactory);
|
|
||||||
//TileImageLoader.Cache = tileCache;
|
//TileImageLoader.Cache = tileCache;
|
||||||
//Closed += (s, e) => tileCache.Dispose();
|
//Closed += (s, e) => tileCache.Dispose();
|
||||||
|
|
||||||
|
ImageLoader.LoggerFactory = LoggerFactory.Create(builder => builder.AddDebug().SetMinimumLevel(LogLevel.Warning));
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
sampleOverlayMenuItem.MapLayerFactory = async () => await GroundOverlay.CreateAsync("etna.kml");
|
sampleOverlayMenuItem.MapLayerFactory = async () => await GroundOverlay.CreateAsync("etna.kml");
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue