Skip to content

Commit 50db791

Browse files
author
mwatson
committed
2 parents ddf6239 + 27da9cc commit 50db791

File tree

115 files changed

+56
-714909
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+56
-714909
lines changed

Src/ConsoleTest/App.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<appender-ref ref="Console" />
1212
</root>
1313
<appender name="StackifyAppender" type="StackifyLib.log4net.StackifyAppender, StackifyLib.log4net">
14+
<logicalThreadContextKeys>TestLogicalThreadContext</logicalThreadContextKeys>
1415
</appender>
1516
<appender name="Console" type="log4net.Appender.ConsoleAppender">
1617
<layout type="log4net.Layout.PatternLayout">

Src/ConsoleTest/ConsoleTest.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@
3232
<WarningLevel>4</WarningLevel>
3333
</PropertyGroup>
3434
<ItemGroup>
35-
<Reference Include="log4net">
36-
<HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
35+
<Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
36+
<HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
37+
<Private>True</Private>
3738
</Reference>
3839
<Reference Include="System" />
3940
<Reference Include="System.Core" />

Src/ConsoleTest/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="log4net" version="2.0.3" targetFramework="net45" />
3+
<package id="log4net" version="2.0.5" targetFramework="net45" />
44
</packages>

Src/StackifyLib.log4net.Tests/StackifyAppenderTest.cs

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,27 @@ public class StackifyAppenderTest
2323
private MockLogClient _mockLogClient;
2424
private StackifyAppender _appender;
2525

26-
[SetUp]
26+
[OneTimeSetUp]
2727
public void Init()
2828
{
2929
_mockLogClient = new MockLogClient();
3030
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
3131

32-
PatternLayout patternLayout = new PatternLayout();
33-
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
34-
patternLayout.ActivateOptions();
35-
36-
RollingFileAppender roller = new RollingFileAppender();
37-
roller.AppendToFile = false;
38-
roller.File = @"Logs\EventLog.txt";
39-
roller.Layout = patternLayout;
40-
roller.MaxSizeRollBackups = 5;
41-
roller.MaximumFileSize = "1GB";
42-
roller.RollingStyle = RollingFileAppender.RollingMode.Size;
43-
roller.StaticLogFileName = true;
44-
roller.ActivateOptions();
45-
hierarchy.Root.AddAppender(roller);
46-
4732
_appender = new StackifyAppender { CreateLogClient = (s, s1) => _mockLogClient, threadContextKeys = "TestThreadContext", logicalThreadContextKeys = "TestLogicalThreadContext" };
4833
_appender.ActivateOptions();
4934
hierarchy.Root.AddAppender(_appender);
5035

5136
hierarchy.Root.Level = Level.Info;
5237
hierarchy.Configured = true;
38+
Console.WriteLine("Setup Log4Net");
39+
}
40+
41+
public void CleanUp()
42+
{
43+
// Just a bit of cleanup.
44+
ThreadContext.Properties["TestThreadContext"] = null;
45+
LogicalThreadContext.Properties["TestLogicalThreadContext"] = null;
46+
Console.WriteLine("Cleaned up Context");
5347
}
5448

5549
[Test]
@@ -58,6 +52,7 @@ public void ShouldIncludeContextObjects_WhenUsingLog4NetContextStacks()
5852
LogMsg result = null;
5953
_mockLogClient.OnQueueMessage = m => result = m;
6054
var logger = LogManager.GetLogger("Test");
55+
6156
using (LogicalThreadContext.Stacks["TestLogicalThreadContext"].Push("Logical Test Value"))
6257
using (ThreadContext.Stacks["TestThreadContext"].Push("Thread Test Value"))
6358
{
@@ -77,6 +72,31 @@ public void ShouldIncludeContextObjects_WhenUsingLog4NetContextStacks()
7772
Assert.AreEqual("Thread Test Value", dataObj.context.testthreadcontext.Value, "TestThreadContext didn't match expected value.");
7873
Assert.AreEqual("Logical Test Value", dataObj.context.testlogicalthreadcontext.Value, "TestLogicalThreadContext didn't match expected value");
7974
}
75+
76+
[Test]
77+
public void ShouldIncludeContextObjects_WhenUsingLog4NetContextProperty()
78+
{
79+
LogMsg result = null;
80+
_mockLogClient.OnQueueMessage = m => result = m;
81+
var logger = LogManager.GetLogger("Test");
82+
LogicalThreadContext.Properties["TestLogicalThreadContext"] = new { MyProp = "Logical Test Value" };
83+
ThreadContext.Properties["TestThreadContext"] = new { MyProp = "Thread Test Value" };
84+
85+
logger.Info("Test Message");
86+
87+
Console.WriteLine("Actual Result:");
88+
Console.WriteLine(JsonConvert.SerializeObject(result, Formatting.Indented));
89+
Console.WriteLine();
90+
91+
Assert.IsNotNull(result, "No Message was queued");
92+
Assert.IsNotNull(result.data, "Data was not set on result");
93+
94+
// Data is JSON, so we are going to Deserialize it so we can take a deeper look.
95+
dynamic dataObj = JsonConvert.DeserializeObject(result.data);
96+
97+
Assert.AreEqual("Thread Test Value", dataObj.context.testthreadcontext.MyProp.Value, "TestThreadContext didn't match expected value.");
98+
Assert.AreEqual("Logical Test Value", dataObj.context.testlogicalthreadcontext.MyProp.Value, "TestLogicalThreadContext didn't match expected value");
99+
}
80100
}
81101

82102
public class MockLogClient : ILogClient

Src/StackifyLib.log4net/StackifyAppender.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,6 @@ internal LogMsg Translate(LoggingEvent loggingEvent)
237237
msg.Msg += "\r\n" + error.ToString();
238238
}
239239
}
240-
241-
242240

243241
if (!string.IsNullOrWhiteSpace(errorAdditionalMessage) && error != null)
244242
{
@@ -333,16 +331,28 @@ private Dictionary<string, object> GetDiagnosticContextProperties()
333331
// Check if the property is a Log4net Context Stack,
334332
// If it is, then we want to read it as a string as that is
335333
// the expected behavior for a Log4Net Appender.
334+
336335
var tcs = mdcValue as Apache_log4net.Util.ThreadContextStack;
337336
if (tcs != null)
338337
{
339338
properties[mdcKey.ToLower()] = tcs.ToString();
339+
continue;
340340
}
341-
else
341+
342+
// Log4Net 1.2.14 (2.0.4) added LogicalThreadContextStack
343+
// see https://issues.apache.org/jira/browse/LOG4NET-455
344+
// To maintain compatibility with version 2.0.0 in this library, we have to use reflection here.
345+
346+
// TODO: Require version 1.2.14, as we know there are issues in prior versions.
347+
var mdcType = mdcValue.GetType();
348+
if (mdcType.FullName == "log4net.Util.LogicalThreadContextStack")
342349
{
343-
// for anything else, we will let Json.Net take care of it.
344-
properties[mdcKey.ToLower()] = mdcValue;
350+
properties[mdcKey.ToLower()] = mdcValue.ToString();
351+
continue;
345352
}
353+
354+
// for anything else, we will let Json.Net take care of it.
355+
properties[mdcKey.ToLower()] = mdcValue;
346356
}
347357
}
348358

Src/packages/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

Src/packages/Costura.Fody.1.3.2.0/Content/FodyWeavers.xml.install.xdt

Lines changed: 0 additions & 4 deletions
This file was deleted.

Src/packages/Costura.Fody.1.3.2.0/Content/FodyWeavers.xml.uninstall.xdt

Lines changed: 0 additions & 4 deletions
This file was deleted.
-47.1 KB
Binary file not shown.
-91 KB
Binary file not shown.

0 commit comments

Comments
 (0)