diff --git a/Logging.sln b/Logging.sln index fa2c1f86..67f7160e 100644 --- a/Logging.sln +++ b/Logging.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22530.0 +VisualStudioVersion = 14.0.22625.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Framework.Logging", "src\Microsoft.Framework.Logging\Microsoft.Framework.Logging.kproj", "{19D1B6C5-8A62-4387-8816-C54874D1DF5F}" EndProject @@ -23,6 +23,8 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Framework.Logging EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{699DB330-0095-4266-B7B0-3EAB3710CA49}" EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Framework.Logging.TraceSource", "src\Microsoft.Framework.Logging.TraceSource\Microsoft.Framework.Logging.TraceSource.kproj", "{1A3EB66F-9E64-4676-852F-24995549ED8A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -105,6 +107,18 @@ Global {00F5A9B3-6213-4526-8B2F-58D5B8427AA2}.Release|Mixed Platforms.Build.0 = Release|Any CPU {00F5A9B3-6213-4526-8B2F-58D5B8427AA2}.Release|x86.ActiveCfg = Release|Any CPU {00F5A9B3-6213-4526-8B2F-58D5B8427AA2}.Release|x86.Build.0 = Release|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Debug|x86.ActiveCfg = Debug|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Debug|x86.Build.0 = Debug|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Release|Any CPU.Build.0 = Release|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Release|x86.ActiveCfg = Release|Any CPU + {1A3EB66F-9E64-4676-852F-24995549ED8A}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -117,5 +131,6 @@ Global {550E0247-0BDD-4016-A29B-250F075686FD} = {8C1F5D80-88EA-4961-84DC-7AC6E13951F4} {75A4DE6D-BBAA-4D59-829D-94009E759A18} = {699DB330-0095-4266-B7B0-3EAB3710CA49} {00F5A9B3-6213-4526-8B2F-58D5B8427AA2} = {699DB330-0095-4266-B7B0-3EAB3710CA49} + {1A3EB66F-9E64-4676-852F-24995549ED8A} = {699DB330-0095-4266-B7B0-3EAB3710CA49} EndGlobalSection EndGlobal diff --git a/src/Microsoft.Framework.Logging.Console/project.json b/src/Microsoft.Framework.Logging.Console/project.json index bad4db2b..c8d40249 100644 --- a/src/Microsoft.Framework.Logging.Console/project.json +++ b/src/Microsoft.Framework.Logging.Console/project.json @@ -2,7 +2,6 @@ "version": "1.0.0-*", "description": "Console logger implementation.", "dependencies": { - "Microsoft.Framework.Logging": "1.0.0-*", "Microsoft.Framework.Logging.Interfaces": "1.0.0-*" }, "frameworks": { @@ -12,7 +11,8 @@ "dependencies": { "System.Runtime": "4.0.20.0-beta-*", "System.Console": "4.0.0-beta-*", - "System.IO": "4.0.10-beta-*" + "System.IO": "4.0.10-beta-*", + "System.Threading": "4.0.10-beta-*" } } } diff --git a/src/Microsoft.Framework.Logging.NLog/project.json b/src/Microsoft.Framework.Logging.NLog/project.json index 507247fd..9137fccb 100644 --- a/src/Microsoft.Framework.Logging.NLog/project.json +++ b/src/Microsoft.Framework.Logging.NLog/project.json @@ -1,7 +1,7 @@ { "version": "1.0.0-*", "dependencies": { - "Microsoft.Framework.Logging": "1.0.0-*", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-*", "NLog": "3.1.0" }, "frameworks": { diff --git a/src/Microsoft.Framework.Logging.Serilog/project.json b/src/Microsoft.Framework.Logging.Serilog/project.json index 84af8f00..c86371a7 100644 --- a/src/Microsoft.Framework.Logging.Serilog/project.json +++ b/src/Microsoft.Framework.Logging.Serilog/project.json @@ -1,7 +1,7 @@ { "version": "1.0.0-*", "dependencies": { - "Microsoft.Framework.Logging": "1.0.0-*", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-*", "Serilog": "1.4.14" }, "frameworks": { diff --git a/src/Microsoft.Framework.Logging/Internal/TraceSourceScope.cs b/src/Microsoft.Framework.Logging.TraceSource/Internal/TraceSourceScope.cs similarity index 100% rename from src/Microsoft.Framework.Logging/Internal/TraceSourceScope.cs rename to src/Microsoft.Framework.Logging.TraceSource/Internal/TraceSourceScope.cs diff --git a/src/Microsoft.Framework.Logging.TraceSource/Microsoft.Framework.Logging.TraceSource.kproj b/src/Microsoft.Framework.Logging.TraceSource/Microsoft.Framework.Logging.TraceSource.kproj new file mode 100644 index 00000000..7ae336df --- /dev/null +++ b/src/Microsoft.Framework.Logging.TraceSource/Microsoft.Framework.Logging.TraceSource.kproj @@ -0,0 +1,20 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + 1a3eb66f-9e64-4676-852f-24995549ed8a + Microsoft.Framework.Logging.TraceSource + ..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\artifacts\bin\$(MSBuildProjectName)\ + + + + 2.0 + + + \ No newline at end of file diff --git a/src/Microsoft.Framework.Logging.TraceSource/TraceSourceFactoryExtensions.cs b/src/Microsoft.Framework.Logging.TraceSource/TraceSourceFactoryExtensions.cs new file mode 100644 index 00000000..6597cec4 --- /dev/null +++ b/src/Microsoft.Framework.Logging.TraceSource/TraceSourceFactoryExtensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Diagnostics; +using Microsoft.Framework.Internal; + +namespace Microsoft.Framework.Logging +{ + public static class TraceSourceFactoryExtensions + { + public static ILoggerFactory AddTraceSource( + [NotNull] this ILoggerFactory factory, + [NotNull] string switchName, + [NotNull] TraceListener listener) + { + return factory.AddTraceSource(new SourceSwitch(switchName), listener); + } + + public static ILoggerFactory AddTraceSource( + [NotNull] this ILoggerFactory factory, + [NotNull] SourceSwitch sourceSwitch, + [NotNull] TraceListener listener) + { + factory.AddProvider(new TraceSourceLoggerProvider(sourceSwitch, listener)); + + return factory; + } + } +} \ No newline at end of file diff --git a/src/Microsoft.Framework.Logging/TraceSourceLogger.cs b/src/Microsoft.Framework.Logging.TraceSource/TraceSourceLogger.cs similarity index 97% rename from src/Microsoft.Framework.Logging/TraceSourceLogger.cs rename to src/Microsoft.Framework.Logging.TraceSource/TraceSourceLogger.cs index ed6b2884..0531820e 100644 --- a/src/Microsoft.Framework.Logging/TraceSourceLogger.cs +++ b/src/Microsoft.Framework.Logging.TraceSource/TraceSourceLogger.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#if NET45 || ASPNET50 || ASPNETCORE50 using System; using System.Diagnostics; using Microsoft.Framework.Logging.Internal; @@ -69,5 +68,4 @@ public IDisposable BeginScope(object state) return new TraceSourceScope(state); } } -} -#endif +} \ No newline at end of file diff --git a/src/Microsoft.Framework.Logging/TraceSourceLoggerProvider.cs b/src/Microsoft.Framework.Logging.TraceSource/TraceSourceLoggerProvider.cs similarity index 74% rename from src/Microsoft.Framework.Logging/TraceSourceLoggerProvider.cs rename to src/Microsoft.Framework.Logging.TraceSource/TraceSourceLoggerProvider.cs index 33b17f87..a4d7e507 100644 --- a/src/Microsoft.Framework.Logging/TraceSourceLoggerProvider.cs +++ b/src/Microsoft.Framework.Logging.TraceSource/TraceSourceLoggerProvider.cs @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#if NET45 || ASPNET50 || ASPNETCORE50 using System; using System.Collections.Concurrent; using System.Diagnostics; +using Microsoft.Framework.Internal; namespace Microsoft.Framework.Logging { @@ -13,37 +13,24 @@ namespace Microsoft.Framework.Logging /// public class TraceSourceLoggerProvider : ILoggerProvider { - private const string RootTraceName = "Microsoft.AspNet"; private readonly SourceSwitch _rootSourceSwitch; private readonly TraceListener _rootTraceListener; private readonly ConcurrentDictionary _sources = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); /// - /// Initializes a new instance of the class. - /// - /// - /// Creates a factory named "Microsoft.AspNet". - /// - public TraceSourceLoggerProvider() - { - _rootSourceSwitch = new SourceSwitch(RootTraceName); - _rootTraceListener = null; - } - - /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// /// - public TraceSourceLoggerProvider(SourceSwitch rootSourceSwitch, TraceListener rootTraceListener) + public TraceSourceLoggerProvider([NotNull]SourceSwitch rootSourceSwitch, [NotNull]TraceListener rootTraceListener) { - _rootSourceSwitch = rootSourceSwitch ?? new SourceSwitch(RootTraceName); + _rootSourceSwitch = rootSourceSwitch; _rootTraceListener = rootTraceListener; } /// - /// Creates a new DiagnosticsLogger for the given component name. + /// Creates a new for the given component name. /// /// /// @@ -60,12 +47,15 @@ private TraceSource GetOrAddTraceSource(string name) private TraceSource InitializeTraceSource(string traceSourceName) { var traceSource = new TraceSource(traceSourceName); - if (traceSourceName == RootTraceName) + string parentSourceName = ParentSourceName(traceSourceName); + + if (string.IsNullOrEmpty(parentSourceName)) { if (HasDefaultSwitch(traceSource)) { traceSource.Switch = _rootSourceSwitch; } + if (_rootTraceListener != null) { traceSource.Listeners.Add(_rootTraceListener); @@ -73,13 +63,13 @@ private TraceSource InitializeTraceSource(string traceSourceName) } else { - string parentSourceName = ParentSourceName(traceSourceName); if (HasDefaultListeners(traceSource)) { TraceSource parentTraceSource = GetOrAddTraceSource(parentSourceName); traceSource.Listeners.Clear(); traceSource.Listeners.AddRange(parentTraceSource.Listeners); } + if (HasDefaultSwitch(traceSource)) { TraceSource parentTraceSource = GetOrAddTraceSource(parentSourceName); @@ -93,7 +83,7 @@ private TraceSource InitializeTraceSource(string traceSourceName) private static string ParentSourceName(string traceSourceName) { int indexOfLastDot = traceSourceName.LastIndexOf('.'); - return indexOfLastDot == -1 ? RootTraceName : traceSourceName.Substring(0, indexOfLastDot); + return indexOfLastDot == -1 ? null : traceSourceName.Substring(0, indexOfLastDot); } private static bool HasDefaultListeners(TraceSource traceSource) @@ -108,4 +98,3 @@ private static bool HasDefaultSwitch(TraceSource traceSource) } } } -#endif diff --git a/src/Microsoft.Framework.Logging.TraceSource/project.json b/src/Microsoft.Framework.Logging.TraceSource/project.json new file mode 100644 index 00000000..427d3597 --- /dev/null +++ b/src/Microsoft.Framework.Logging.TraceSource/project.json @@ -0,0 +1,30 @@ +{ + "version": "1.0.0-*", + "dependencies": { + "Microsoft.Framework.Logging.Interfaces": "1.0.0-*", + "Microsoft.Framework.NotNullAttribute.Internal": { "type": "build", "version": "1.0.0-*" } + }, + + "frameworks": { + "net45": { + "frameworkAssemblies": { + "System.Collections.Concurrent": "" + } + }, + "aspnet50": { + "frameworkAssemblies": { + "System.Collections.Concurrent": "" + } + }, + "aspnetcore50": { + "dependencies": { + "System.Collections.Concurrent": "4.0.10-beta-*", + "System.Collections": "4.0.10-beta-*", + "System.Diagnostics.TraceSource": "4.0.0-beta-*", + "System.Globalization": "4.0.10-beta-*", + "System.Linq": "4.0.0-beta-*", + "System.Threading": "4.0.10-beta-*" + } + } + } +} diff --git a/src/Microsoft.Framework.Logging/LoggingServiceCollectionExtensions.cs b/src/Microsoft.Framework.Logging/LoggingServiceCollectionExtensions.cs new file mode 100644 index 00000000..6a69286c --- /dev/null +++ b/src/Microsoft.Framework.Logging/LoggingServiceCollectionExtensions.cs @@ -0,0 +1,14 @@ +using Microsoft.Framework.Logging; + +namespace Microsoft.Framework.DependencyInjection +{ + public static class LoggingServiceCollectionExtensions + { + public static IServiceCollection AddLogging(this IServiceCollection services) + { + services.TryAdd(ServiceDescriptor.Singleton()); + services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>))); + return services; + } + } +} \ No newline at end of file diff --git a/src/Microsoft.Framework.Logging/project.json b/src/Microsoft.Framework.Logging/project.json index 139cae43..fc63ac45 100644 --- a/src/Microsoft.Framework.Logging/project.json +++ b/src/Microsoft.Framework.Logging/project.json @@ -2,6 +2,7 @@ "version": "1.0.0-*", "description": "Logging infrastructure.", "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-*", "Microsoft.Framework.Logging.Interfaces": "1.0.0-*" }, "compilationOptions": { diff --git a/test/Microsoft.Framework.Logging.Test/TraceSourceLoggerTest.cs b/test/Microsoft.Framework.Logging.Test/TraceSourceLoggerTest.cs index 934e2d73..245d45b1 100644 --- a/test/Microsoft.Framework.Logging.Test/TraceSourceLoggerTest.cs +++ b/test/Microsoft.Framework.Logging.Test/TraceSourceLoggerTest.cs @@ -3,6 +3,7 @@ using System; using System.Diagnostics; +using System.IO; using Xunit; namespace Microsoft.Framework.Logging.Test @@ -20,7 +21,7 @@ public static void IsEnabledReturnsCorrectValue() var logger = factory.CreateLogger("Test"); // Act - factory.AddProvider(new TraceSourceLoggerProvider(testSwitch, new ConsoleTraceListener())); + factory.AddTraceSource(testSwitch, new ConsoleTraceListener()); // Assert Assert.True(logger.IsEnabled(LogLevel.Critical)); @@ -48,8 +49,8 @@ public static void MultipleLoggers_IsEnabledReturnsCorrectValue(SourceLevels fir var logger = factory.CreateLogger("Test"); // Act - factory.AddProvider(new TraceSourceLoggerProvider(firstSwitch, new ConsoleTraceListener())); - factory.AddProvider(new TraceSourceLoggerProvider(secondSwitch, new ConsoleTraceListener())); + factory.AddTraceSource(firstSwitch, new ConsoleTraceListener()); + factory.AddTraceSource(secondSwitch, new ConsoleTraceListener()); // Assert Assert.Equal(expected, logger.IsEnabled(LogLevel.Information)); diff --git a/src/Microsoft.Framework.Logging/Utils/WriteContext.cs b/test/Microsoft.Framework.Logging.Test/Utils/WriteContext.cs similarity index 100% rename from src/Microsoft.Framework.Logging/Utils/WriteContext.cs rename to test/Microsoft.Framework.Logging.Test/Utils/WriteContext.cs diff --git a/test/Microsoft.Framework.Logging.Test/project.json b/test/Microsoft.Framework.Logging.Test/project.json index 3a97fd0a..488812d5 100644 --- a/test/Microsoft.Framework.Logging.Test/project.json +++ b/test/Microsoft.Framework.Logging.Test/project.json @@ -1,6 +1,8 @@ { "dependencies": { + "Microsoft.Framework.Logging": "1.0.0-*", "Microsoft.Framework.Logging.Console": "1.0.0-*", + "Microsoft.Framework.Logging.TraceSource": "1.0.0-*", "Microsoft.Framework.Logging.Serilog": "1.0.0-*", "xunit.runner.kre": "1.0.0-*" },