Skip to content
This repository was archived by the owner on Dec 13, 2018. It is now read-only.

Commit 3cecf9e

Browse files
adamhathcockkichalla
authored andcommitted
Add extension to have CreateLogger with Type object as well as generic
1 parent 6352e15 commit 3cecf9e

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

src/Microsoft.Extensions.Logging.Abstractions/LoggerFactoryExtensions.cs

+20-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
5+
using Microsoft.Extensions.Logging.Abstractions.Internal;
56

67
namespace Microsoft.Extensions.Logging
78
{
@@ -21,8 +22,26 @@ public static ILogger<T> CreateLogger<T>(this ILoggerFactory factory)
2122
{
2223
throw new ArgumentNullException(nameof(factory));
2324
}
24-
2525
return new Logger<T>(factory);
2626
}
27+
/// <summary>
28+
/// Creates a new ILogger instance using the full name of the given type.
29+
/// </summary>
30+
/// <param name="factory">The factory.</param>
31+
/// <param name="type">The type.</param>
32+
public static ILogger CreateLogger(this ILoggerFactory factory, Type type)
33+
{
34+
if (factory == null)
35+
{
36+
throw new ArgumentNullException(nameof(factory));
37+
}
38+
39+
if (type == null)
40+
{
41+
throw new ArgumentNullException(nameof(type));
42+
}
43+
44+
return factory.CreateLogger(TypeNameHelper.GetTypeDisplayName(type));
45+
}
2746
}
2847
}

test/Microsoft.Extensions.Logging.Test/LoggerFactoryExtensionsTest.cs

+49
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,55 @@ public void CreatesLoggerName_OnMultipleTypeArgumentGenericType_CreatesWithoutGe
110110
Assert.Single(testSink.Writes);
111111
Assert.Equal(fullNameWithoutBacktick, testSink.Writes[0].LoggerName);
112112
}
113+
114+
115+
[Fact]
116+
public void LoggerFactoryCreate_CallsCreateWithCorrectName()
117+
{
118+
// Arrange
119+
var expected = typeof(TestType).FullName;
120+
121+
var factory = new Mock<ILoggerFactory>();
122+
factory.Setup(f => f.CreateLogger(
123+
It.IsAny<string>()))
124+
.Returns(new Mock<ILogger>().Object);
125+
126+
// Act
127+
factory.Object.CreateLogger(typeof(TestType));
128+
129+
// Assert
130+
factory.Verify(f => f.CreateLogger(expected));
131+
}
132+
133+
[Fact]
134+
public void LoggerFactoryCreate_SingleGeneric_CallsCreateWithCorrectName()
135+
{
136+
// Arrange
137+
var factory = new Mock<ILoggerFactory>();
138+
factory.Setup(f => f.CreateLogger(It.Is<string>(
139+
x => x.Equals("Microsoft.Extensions.Logging.Test.GenericClass"))))
140+
.Returns(new Mock<ILogger>().Object);
141+
142+
var logger = factory.Object.CreateLogger(typeof(GenericClass<TestType>));
143+
144+
// Assert
145+
Assert.NotNull(logger);
146+
}
147+
148+
[Fact]
149+
public void LoggerFactoryCreate_TwoGenerics_CallsCreateWithCorrectName()
150+
{
151+
// Arrange
152+
var factory = new Mock<ILoggerFactory>();
153+
factory.Setup(f => f.CreateLogger(It.Is<string>(
154+
x => x.Equals("Microsoft.Extensions.Logging.Test.GenericClass"))))
155+
.Returns(new Mock<ILogger>().Object);
156+
157+
var logger = factory.Object.CreateLogger(typeof(GenericClass<TestType, SecondTestType>));
158+
159+
// Assert
160+
Assert.NotNull(logger);
161+
}
113162
}
114163

115164
internal class TestType

0 commit comments

Comments
 (0)