Browse Source

Use serilog for logging.

pull/58/head
Steven Kirk 12 years ago
parent
commit
2763e59adb
  1. 4
      Perspex.Base/Perspex.Base.csproj
  2. 51
      Perspex.Base/PerspexObject.cs
  3. 1
      Perspex.Base/packages.config
  4. 4
      Perspex.Controls/Perspex.Controls.csproj
  5. 20
      Perspex.Controls/Primitives/TemplatedControl.cs
  6. 1
      Perspex.Controls/packages.config
  7. 64
      Perspex.Layout/LayoutManager.cs
  8. 39
      Perspex.Layout/Layoutable.cs
  9. 4
      Perspex.Layout/Perspex.Layout.csproj
  10. 1
      Perspex.Layout/packages.config
  11. 4
      Perspex.SceneGraph/Perspex.SceneGraph.csproj
  12. 22
      Perspex.SceneGraph/Visual.cs
  13. 1
      Perspex.SceneGraph/packages.config
  14. 26
      TestApplication/Program.cs
  15. 8
      TestApplication/TestApplication.csproj
  16. 1
      TestApplication/packages.config

4
Perspex.Base/Perspex.Base.csproj

@ -65,6 +65,10 @@
<Compile Include="Threading\PerspexScheduler.cs" /> <Compile Include="Threading\PerspexScheduler.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.1.5.5\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath> <HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath>
<Private>True</Private> <Private>True</Private>

51
Perspex.Base/PerspexObject.cs

@ -7,7 +7,8 @@
namespace Perspex namespace Perspex
{ {
using Perspex.Reactive; using Perspex.Reactive;
using Splat; using Serilog;
using Serilog.Core.Enrichers;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -64,7 +65,7 @@ namespace Perspex
/// <remarks> /// <remarks>
/// This class is analogous to DependencyObject in WPF. /// This class is analogous to DependencyObject in WPF.
/// </remarks> /// </remarks>
public class PerspexObject : INotifyPropertyChanged, IEnableLogger public class PerspexObject : INotifyPropertyChanged
{ {
/// <summary> /// <summary>
/// The registered properties by type. /// The registered properties by type.
@ -88,11 +89,23 @@ namespace Perspex
/// </summary> /// </summary>
private PropertyChangedEventHandler inpcChanged; private PropertyChangedEventHandler inpcChanged;
/// <summary>
/// A serilog logger for logging property events.
/// </summary>
private ILogger propertyLog;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="PerspexObject"/> class. /// Initializes a new instance of the <see cref="PerspexObject"/> class.
/// </summary> /// </summary>
public PerspexObject() public PerspexObject()
{ {
this.propertyLog = Log.ForContext(new[]
{
new PropertyEnricher("Area", "Property"),
new PropertyEnricher("SourceContext", this.GetType()),
new PropertyEnricher("Id", this.GetHashCode()),
});
foreach (var property in this.GetRegisteredProperties()) foreach (var property in this.GetRegisteredProperties())
{ {
var e = new PerspexPropertyChangedEventArgs( var e = new PerspexPropertyChangedEventArgs(
@ -515,14 +528,12 @@ namespace Perspex
v = this.CreatePriorityValue(property); v = this.CreatePriorityValue(property);
this.values.Add(property, v); this.values.Add(property, v);
} }
this.Log().Debug(
"Set local value of {0}.{1} (#{2:x8}) to {3}",
this.GetType().Name,
property.Name,
this.GetHashCode(),
value);
this.propertyLog.Verbose(
"Set {Property} to {$Value} with priority {Priority}",
property,
value,
priority);
v.SetDirectValue(value, (int)priority); v.SetDirectValue(value, (int)priority);
} }
@ -569,12 +580,11 @@ namespace Perspex
this.values.Add(property, v); this.values.Add(property, v);
} }
this.Log().Debug( this.propertyLog.Verbose(
"Bound value of {0}.{1} (#{2:x8}) to {3}", "Bound {Property} to {Binding} with priority {Priority}",
this.GetType().Name, property,
property.Name, source,
this.GetHashCode(), priority);
description != null ? description.Description : "[Anonymous]");
return v.Add(source, (int)priority); return v.Add(source, (int)priority);
} }
@ -699,13 +709,12 @@ namespace Perspex
{ {
this.RaisePropertyChanged(property, oldValue, newValue, (BindingPriority)result.ValuePriority); this.RaisePropertyChanged(property, oldValue, newValue, (BindingPriority)result.ValuePriority);
this.Log().Debug( this.propertyLog.Verbose(
"Value of {0}.{1} (#{2:x8}) changed from {3} to {4}", "{Property} changed from {$Old} to {$Value} with priority {Priority}",
this.GetType().Name, property,
property.Name,
this.GetHashCode(),
oldValue, oldValue,
newValue); newValue,
(BindingPriority)result.ValuePriority);
} }
}); });

1
Perspex.Base/packages.config

@ -5,5 +5,6 @@
<package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Serilog" version="1.5.5" targetFramework="portable45-net45+win8" userInstalled="true" />
<package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" /> <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" />
</packages> </packages>

4
Perspex.Controls/Perspex.Controls.csproj

@ -127,6 +127,10 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.1.5.5\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath> <HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath>
<Private>True</Private> <Private>True</Private>

20
Perspex.Controls/Primitives/TemplatedControl.cs

@ -13,7 +13,8 @@ namespace Perspex.Controls.Primitives
using Perspex.Media; using Perspex.Media;
using Perspex.Styling; using Perspex.Styling;
using Perspex.VisualTree; using Perspex.VisualTree;
using Splat; using Serilog;
using Serilog.Core.Enrichers;
public class TemplatedControl : Control, ITemplatedControl public class TemplatedControl : Control, ITemplatedControl
{ {
@ -46,6 +47,8 @@ namespace Perspex.Controls.Primitives
private bool templateApplied; private bool templateApplied;
private ILogger templateLog;
static TemplatedControl() static TemplatedControl()
{ {
TemplateProperty.Changed.Subscribe(e => TemplateProperty.Changed.Subscribe(e =>
@ -56,6 +59,16 @@ namespace Perspex.Controls.Primitives
}); });
} }
public TemplatedControl()
{
this.templateLog = Log.ForContext(new[]
{
new PropertyEnricher("Area", "Template"),
new PropertyEnricher("SourceContext", this.GetType()),
new PropertyEnricher("Id", this.GetHashCode()),
});
}
public Brush Background public Brush Background
{ {
get { return this.GetValue(BackgroundProperty); } get { return this.GetValue(BackgroundProperty); }
@ -122,10 +135,7 @@ namespace Perspex.Controls.Primitives
if (this.Template != null) if (this.Template != null)
{ {
this.Log().Debug( this.templateLog.Verbose("Creating control template");
"Creating template for {0} (#{1:x8})",
this.GetType().Name,
this.GetHashCode());
var child = this.Template.Build(this); var child = this.Template.Build(this);
this.SetTemplatedParent(child); this.SetTemplatedParent(child);

1
Perspex.Controls/packages.config

@ -5,5 +5,6 @@
<package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Serilog" version="1.5.5" targetFramework="portable45-net45+win8" userInstalled="true" />
<package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" /> <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" />
</packages> </packages>

64
Perspex.Layout/LayoutManager.cs

@ -11,6 +11,9 @@ namespace Perspex.Layout
using System.Reactive.Subjects; using System.Reactive.Subjects;
using NGenerics.DataStructures.General; using NGenerics.DataStructures.General;
using Perspex.VisualTree; using Perspex.VisualTree;
using Serilog;
using Serilog.Core.Enrichers;
using System.Reactive.Disposables;
/// <summary> /// <summary>
/// Manages measuring and arranging of controls. /// Manages measuring and arranging of controls.
@ -53,11 +56,28 @@ namespace Perspex.Layout
/// </summary> /// </summary>
private Heap<Item> toArrange = new Heap<Item>(HeapType.Minimum); private Heap<Item> toArrange = new Heap<Item>(HeapType.Minimum);
/// <summary>
/// Prevents re-entrancy.
/// </summary>
private bool running;
/// <summary>
/// The logger to use.
/// </summary>
private ILogger log;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="LayoutManager"/> class. /// Initializes a new instance of the <see cref="LayoutManager"/> class.
/// </summary> /// </summary>
public LayoutManager() public LayoutManager()
{ {
this.log = Log.ForContext(new[]
{
new PropertyEnricher("Area", "Layout"),
new PropertyEnricher("SourceContext", this.GetType()),
new PropertyEnricher("Id", this.GetHashCode()),
});
this.layoutNeeded = new Subject<Unit>(); this.layoutNeeded = new Subject<Unit>();
this.layoutCompleted = new Subject<Unit>(); this.layoutCompleted = new Subject<Unit>();
} }
@ -102,25 +122,45 @@ namespace Perspex.Layout
/// </summary> /// </summary>
public void ExecuteLayoutPass() public void ExecuteLayoutPass()
{ {
this.LayoutQueued = false; if (this.running)
{
return;
}
for (int i = 0; i < MaxTries; ++i) using (Disposable.Create(() => this.running = false))
{ {
if (this.measureNeeded) this.running = true;
{ this.LayoutQueued = false;
this.ExecuteMeasure();
this.measureNeeded = false;
}
this.ExecuteArrange(); this.log.Information(
"Started layout pass. To measure: {Measure} To arrange: {Arrange}",
this.toMeasure.Count,
this.toArrange.Count);
if (this.toMeasure.Count == 0) var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
for (int i = 0; i < MaxTries; ++i)
{ {
break; if (this.measureNeeded)
{
this.ExecuteMeasure();
this.measureNeeded = false;
}
this.ExecuteArrange();
if (this.toMeasure.Count == 0)
{
break;
}
} }
}
this.layoutCompleted.OnNext(Unit.Default); stopwatch.Stop();
this.log.Information("Layout pass finised in {Time}", stopwatch.Elapsed);
this.layoutCompleted.OnNext(Unit.Default);
}
} }
/// <summary> /// <summary>

39
Perspex.Layout/Layoutable.cs

@ -9,7 +9,8 @@ namespace Perspex.Layout
using System; using System;
using System.Linq; using System.Linq;
using Perspex.VisualTree; using Perspex.VisualTree;
using Splat; using Serilog;
using Serilog.Core.Enrichers;
public enum HorizontalAlignment public enum HorizontalAlignment
{ {
@ -27,7 +28,7 @@ namespace Perspex.Layout
Bottom, Bottom,
} }
public class Layoutable : Visual, ILayoutable, IEnableLogger public class Layoutable : Visual, ILayoutable
{ {
public static readonly PerspexProperty<double> WidthProperty = public static readonly PerspexProperty<double> WidthProperty =
PerspexProperty.Register<Layoutable, double>("Width", double.NaN); PerspexProperty.Register<Layoutable, double>("Width", double.NaN);
@ -63,6 +64,8 @@ namespace Perspex.Layout
private Rect? previousArrange; private Rect? previousArrange;
private ILogger layoutLog;
static Layoutable() static Layoutable()
{ {
Layoutable.AffectsMeasure(Visual.IsVisibleProperty); Layoutable.AffectsMeasure(Visual.IsVisibleProperty);
@ -77,6 +80,16 @@ namespace Perspex.Layout
Layoutable.AffectsMeasure(Layoutable.VerticalAlignmentProperty); Layoutable.AffectsMeasure(Layoutable.VerticalAlignmentProperty);
} }
public Layoutable()
{
this.layoutLog = Log.ForContext(new[]
{
new PropertyEnricher("Area", "Layout"),
new PropertyEnricher("SourceContext", this.GetType()),
new PropertyEnricher("Id", this.GetHashCode()),
});
}
public double Width public double Width
{ {
get { return this.GetValue(WidthProperty); } get { return this.GetValue(WidthProperty); }
@ -192,11 +205,7 @@ namespace Perspex.Layout
this.DesiredSize = desiredSize; this.DesiredSize = desiredSize;
this.previousMeasure = availableSize; this.previousMeasure = availableSize;
this.Log().Debug( this.layoutLog.Verbose("Measure requested {DesiredSize}", this.DesiredSize);
"Measure of {0} (#{1:x8}) requested {2} ",
this.GetType().Name,
this.GetHashCode(),
this.DesiredSize);
} }
} }
@ -218,11 +227,7 @@ namespace Perspex.Layout
if (force || !this.IsArrangeValid || this.previousArrange != rect) if (force || !this.IsArrangeValid || this.previousArrange != rect)
{ {
this.Log().Debug( this.layoutLog.Verbose("Arrange to {Rect} ", rect);
"Arrange of {0} (#{1:x8}) gave {2} ",
this.GetType().Name,
this.GetHashCode(),
rect);
this.IsArrangeValid = true; this.IsArrangeValid = true;
this.ArrangeCore(rect); this.ArrangeCore(rect);
@ -236,10 +241,7 @@ namespace Perspex.Layout
if (this.IsMeasureValid) if (this.IsMeasureValid)
{ {
this.Log().Debug( this.layoutLog.Verbose("Invalidated measure");
"Invalidated measure of {0} (#{1:x8})",
this.GetType().Name,
this.GetHashCode());
} }
this.IsMeasureValid = false; this.IsMeasureValid = false;
@ -268,10 +270,7 @@ namespace Perspex.Layout
if (this.IsArrangeValid) if (this.IsArrangeValid)
{ {
this.Log().Debug( this.layoutLog.Verbose("Arrange measure");
"Invalidated arrange of {0} (#{1:x8})",
this.GetType().Name,
this.GetHashCode());
} }
this.IsArrangeValid = false; this.IsArrangeValid = false;

4
Perspex.Layout/Perspex.Layout.csproj

@ -64,6 +64,10 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.1.5.5\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath> <HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath>
<Private>True</Private> <Private>True</Private>

1
Perspex.Layout/packages.config

@ -5,5 +5,6 @@
<package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Serilog" version="1.5.5" targetFramework="portable45-net45+win8" userInstalled="true" />
<package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" /> <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" />
</packages> </packages>

4
Perspex.SceneGraph/Perspex.SceneGraph.csproj

@ -107,6 +107,10 @@
<Compile Include="VisualTree\VisualExtensions.cs" /> <Compile Include="VisualTree\VisualExtensions.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.1.5.5\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath> <HintPath>..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath>
<Private>True</Private> <Private>True</Private>

22
Perspex.SceneGraph/Visual.cs

@ -17,7 +17,8 @@ namespace Perspex
using Perspex.Platform; using Perspex.Platform;
using Perspex.Rendering; using Perspex.Rendering;
using Perspex.VisualTree; using Perspex.VisualTree;
using Splat; using Serilog;
using Serilog.Core.Enrichers;
public class Visual : Animatable, IVisual public class Visual : Animatable, IVisual
{ {
@ -46,6 +47,8 @@ namespace Perspex
private Visual visualParent; private Visual visualParent;
private ILogger visualLogger;
static Visual() static Visual()
{ {
AffectsRender(IsVisibleProperty); AffectsRender(IsVisibleProperty);
@ -55,6 +58,13 @@ namespace Perspex
public Visual() public Visual()
{ {
this.visualLogger = Log.ForContext(new[]
{
new PropertyEnricher("Area", "Visual"),
new PropertyEnricher("SourceContext", this.GetType()),
new PropertyEnricher("Id", this.GetHashCode()),
});
this.visualChildren = new PerspexList<IVisual>(); this.visualChildren = new PerspexList<IVisual>();
this.visualChildren.CollectionChanged += this.VisualChildrenChanged; this.visualChildren.CollectionChanged += this.VisualChildrenChanged;
} }
@ -307,10 +317,7 @@ namespace Perspex
private void NotifyAttachedToVisualTree(IRenderRoot root) private void NotifyAttachedToVisualTree(IRenderRoot root)
{ {
this.Log().Debug( this.visualLogger.Verbose("Attached to visual tree");
"Attached {0} (#{1:x8}) to visual tree",
this.GetType().Name,
this.GetHashCode());
this.OnAttachedToVisualTree(root); this.OnAttachedToVisualTree(root);
@ -325,10 +332,7 @@ namespace Perspex
private void NotifyDetachedFromVisualTree(IRenderRoot oldRoot) private void NotifyDetachedFromVisualTree(IRenderRoot oldRoot)
{ {
this.Log().Debug( this.visualLogger.Verbose("Detached from visual tree");
"Detached {0} (#{1:x8}) from visual tree",
this.GetType().Name,
this.GetHashCode());
this.OnDetachedFromVisualTree(oldRoot); this.OnDetachedFromVisualTree(oldRoot);

1
Perspex.SceneGraph/packages.config

@ -5,5 +5,6 @@
<package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Linq" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-Main" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" /> <package id="Rx-PlatformServices" version="2.2.5" targetFramework="portable-net45+win8" userInstalled="true" />
<package id="Serilog" version="1.5.5" targetFramework="portable45-net45+win8" userInstalled="true" />
<package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" /> <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" userInstalled="true" />
</packages> </packages>

26
TestApplication/Program.cs

@ -17,24 +17,12 @@ using Perspex.Gtk;
#endif #endif
using ReactiveUI; using ReactiveUI;
using Splat; using Splat;
using Serilog;
using Serilog.Filters;
using Serilog.Events;
namespace TestApplication namespace TestApplication
{ {
class TestLogger : ILogger
{
public LogLevel Level
{
get;
set;
}
public void Write(string message, LogLevel logLevel)
{
if ((int)logLevel < (int)Level) return;
System.Diagnostics.Debug.WriteLine(message);
}
}
class Item class Item
{ {
public string Name { get; set; } public string Name { get; set; }
@ -106,9 +94,11 @@ namespace TestApplication
static void Main(string[] args) static void Main(string[] args)
{ {
//LogManager.Enable(new TestLogger()); Log.Logger = new LoggerConfiguration()
//LogManager.Instance.LogLayoutMessages = true; .Filter.ByIncludingOnly(Matching.WithProperty("Area", "Layout"))
//LogManager.Instance.LogPropertyMessages = true; .MinimumLevel.Verbose()
.WriteTo.Trace(outputTemplate: "[{Id:X8}] [{SourceContext}] {Message}")
.CreateLogger();
// The version of ReactiveUI currently included is for WPF and so expects a WPF // The version of ReactiveUI currently included is for WPF and so expects a WPF
// dispatcher. This makes sure it's initialized. // dispatcher. This makes sure it's initialized.

8
TestApplication/TestApplication.csproj

@ -38,6 +38,14 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\reactiveui-core.6.4.0.1\lib\Net45\ReactiveUI.dll</HintPath> <HintPath>..\packages\reactiveui-core.6.4.0.1\lib\Net45\ReactiveUI.dll</HintPath>
</Reference> </Reference>
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.1.5.5\lib\net45\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.1.5.5\lib\net45\Serilog.FullNetFx.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Splat.1.6.2\lib\Net45\Splat.dll</HintPath> <HintPath>..\packages\Splat.1.6.2\lib\Net45\Splat.dll</HintPath>
<Private>True</Private> <Private>True</Private>

1
TestApplication/packages.config

@ -8,6 +8,7 @@
<package id="Rx-Main" version="2.2.5" targetFramework="net45" userInstalled="true" /> <package id="Rx-Main" version="2.2.5" targetFramework="net45" userInstalled="true" />
<package id="Rx-PlatformServices" version="2.2.5" targetFramework="net45" userInstalled="true" /> <package id="Rx-PlatformServices" version="2.2.5" targetFramework="net45" userInstalled="true" />
<package id="Rx-XAML" version="2.2.5" targetFramework="net45" userInstalled="true" /> <package id="Rx-XAML" version="2.2.5" targetFramework="net45" userInstalled="true" />
<package id="Serilog" version="1.5.5" targetFramework="net45" userInstalled="true" />
<package id="SharpDX" version="2.6.3" targetFramework="net45" userInstalled="true" /> <package id="SharpDX" version="2.6.3" targetFramework="net45" userInstalled="true" />
<package id="SharpDX.Direct2D1" version="2.6.3" targetFramework="net45" userInstalled="true" /> <package id="SharpDX.Direct2D1" version="2.6.3" targetFramework="net45" userInstalled="true" />
<package id="SharpDX.DXGI" version="2.6.3" targetFramework="net45" userInstalled="true" /> <package id="SharpDX.DXGI" version="2.6.3" targetFramework="net45" userInstalled="true" />

Loading…
Cancel
Save