Author: bodewig
Date: Sun Mar 29 10:00:50 2015
New Revision: 1669884
URL: http://svn.apache.org/r1669884
Log:
LOG4NET-455 LogicalThreadContext does not flow correctly through async/await
Patch by Alexander Houben
closes #12 by @ahouben
Added:
logging/log4net/trunk/src/log4net.Tests/Context/LogicalThreadContextTest.cs
(with props)
logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2012.csproj (with
props)
logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStack.cs (with
props)
logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStacks.cs
(with props)
logging/log4net/trunk/src/log4net/log4net.vs2012.csproj (with props)
logging/log4net/trunk/src/log4net/log4net.vs2012.sln (with props)
Modified:
logging/log4net/trunk/src/log4net.Tests/Utils.cs
logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2010.csproj
logging/log4net/trunk/src/log4net/AssemblyInfo.cs
logging/log4net/trunk/src/log4net/LogicalThreadContext.cs
logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs
logging/log4net/trunk/src/log4net/log4net.vs2010.csproj
Added:
logging/log4net/trunk/src/log4net.Tests/Context/LogicalThreadContextTest.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.Tests/Context/LogicalThreadContextTest.cs?rev=1669884&view=auto
==============================================================================
--- logging/log4net/trunk/src/log4net.Tests/Context/LogicalThreadContextTest.cs
(added)
+++ logging/log4net/trunk/src/log4net.Tests/Context/LogicalThreadContextTest.cs
Sun Mar 29 10:00:50 2015
@@ -0,0 +1,344 @@
+#region Apache License
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#endregion
+
+using System;
+using System.Threading.Tasks;
+using System.Linq;
+
+using log4net.Config;
+using log4net.Layout;
+using log4net.Repository;
+using log4net.Tests.Appender;
+using log4net.Util;
+
+using NUnit.Framework;
+
+namespace log4net.Tests.Context
+{
+#if FRAMEWORK_4_5_OR_ABOVE
+ /// <summary>
+ /// Used for internal unit testing the <see
cref="LogicalThreadContext"/> class.
+ /// </summary>
+ /// <remarks>
+ /// Used for internal unit testing the <see
cref="LogicalThreadContext"/> class.
+ /// </remarks>
+ [TestFixture]
+ public class LogicalThreadContextTest
+ {
+ [TearDown]
+ public void TearDown()
+ {
+ Utils.RemovePropertyFromAllContexts();
+ }
+
+ [Test]
+ public void TestLogicalThreadPropertiesPatternBasicGetSet()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestLogicalThreadPropertiesPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread properties value set");
+ stringAppender.Reset();
+
+ LogicalThreadContext.Properties[Utils.PROPERTY_KEY] =
"val1";
+
+ log1.Info("TestMessage");
+ Assert.AreEqual("val1", stringAppender.GetString(),
"Test logical thread properties value set");
+ stringAppender.Reset();
+
+
LogicalThreadContext.Properties.Remove(Utils.PROPERTY_KEY);
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread properties value removed");
+ stringAppender.Reset();
+ }
+
+ [Test]
+ public async Task TestLogicalThreadPropertiesPatternAsyncAwait()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestLogicalThreadPropertiesPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread stack value set");
+ stringAppender.Reset();
+
+ string testValueForCurrentContext = "Outer";
+ LogicalThreadContext.Properties[Utils.PROPERTY_KEY] =
testValueForCurrentContext;
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(testValueForCurrentContext,
stringAppender.GetString(), "Test logical thread properties value set");
+ stringAppender.Reset();
+
+ var strings = await Task.WhenAll(Enumerable.Range(0,
10).Select(x => SomeWorkProperties(x.ToString())));
+
+ // strings should be ["00AA0BB0", "01AA1BB1",
"02AA2BB2", ...]
+ for (int i = 0; i < strings.Length; i++)
+ {
+
Assert.AreEqual(string.Format("{0}{1}AA{1}BB{1}", testValueForCurrentContext,
i), strings[i], "Test logical thread properties expected sequence");
+ }
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(testValueForCurrentContext,
stringAppender.GetString(), "Test logical thread properties value set");
+ stringAppender.Reset();
+
+
LogicalThreadContext.Properties.Remove(Utils.PROPERTY_KEY);
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread properties value removed");
+ stringAppender.Reset();
+ }
+
+ [Test]
+ public void TestLogicalThreadStackPattern()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestThreadStackPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread stack value set");
+ stringAppender.Reset();
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push("val1"))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual("val1",
stringAppender.GetString(), "Test logical thread stack value set");
+ stringAppender.Reset();
+ }
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread stack value removed");
+ stringAppender.Reset();
+ }
+
+ [Test]
+ public void TestLogicalThreadStackPattern2()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestThreadStackPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread stack value set");
+ stringAppender.Reset();
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push("val1"))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual("val1",
stringAppender.GetString(), "Test logical thread stack value set");
+ stringAppender.Reset();
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push("val2"))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual("val1 val2",
stringAppender.GetString(), "Test logical thread stack value pushed 2nd val");
+ stringAppender.Reset();
+ }
+ }
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread stack value removed");
+ stringAppender.Reset();
+ }
+
+ [Test]
+ public void TestLogicalThreadStackPatternNullVal()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestThreadStackPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread stack value set");
+ stringAppender.Reset();
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(null))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread stack value set");
+ stringAppender.Reset();
+ }
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread stack value removed");
+ stringAppender.Reset();
+ }
+
+ [Test]
+ public void TestLogicalThreadStackPatternNullVal2()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestThreadStackPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread stack value set");
+ stringAppender.Reset();
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push("val1"))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual("val1",
stringAppender.GetString(), "Test logical thread stack value set");
+ stringAppender.Reset();
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(null))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual("val1 ",
stringAppender.GetString(), "Test logical thread stack value pushed null");
+ stringAppender.Reset();
+ }
+ }
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread stack value removed");
+ stringAppender.Reset();
+ }
+
+ [Test]
+ public async Task TestLogicalThreadStackPatternAsyncAwait()
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log1 = LogManager.GetLogger(rep.Name,
"TestLogicalThreadStackPattern");
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test no logical thread stack value set");
+ stringAppender.Reset();
+
+ string testValueForCurrentContext = "Outer";
+ string[] strings = null;
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(testValueForCurrentContext))
+ {
+ log1.Info("TestMessage");
+ Assert.AreEqual(testValueForCurrentContext,
stringAppender.GetString(), "Test logical thread stack value set");
+ stringAppender.Reset();
+
+ strings = await
Task.WhenAll(Enumerable.Range(0, 10).Select(x => SomeWorkStack(x.ToString())));
+ }
+
+ // strings should be ["Outer 0 AOuter 0 AOuter 0Outer 0
BOuter 0 B Outer 0", ...]
+ for (int i = 0; i < strings.Length; i++)
+ {
+ Assert.AreEqual(string.Format("{0} {1} A{0} {1}
A{0} {1}{0} {1} B{0} {1} B{0} {1}", testValueForCurrentContext, i), strings[i],
"Test logical thread properties expected sequence");
+ }
+
+ log1.Info("TestMessage");
+ Assert.AreEqual(SystemInfo.NullText,
stringAppender.GetString(), "Test logical thread properties value removed");
+ stringAppender.Reset();
+ }
+
+ static async Task<string> SomeWorkProperties(string
propertyName)
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log = LogManager.GetLogger(rep.Name,
"TestLogicalThreadStackPattern");
+ log.Info("TestMessage");
+
+ // set a new one
+ LogicalThreadContext.Properties[Utils.PROPERTY_KEY] =
propertyName;
+ log.Info("TestMessage");
+
+ await MoreWorkProperties(log, "A");
+ log.Info("TestMessage");
+ await MoreWorkProperties(log, "B");
+ log.Info("TestMessage");
+ return stringAppender.GetString();
+ }
+
+ static async Task MoreWorkProperties(ILog log, string
propertyName)
+ {
+ LogicalThreadContext.Properties[Utils.PROPERTY_KEY] =
propertyName;
+ log.Info("TestMessage");
+ await Task.Delay(1);
+ log.Info("TestMessage");
+ }
+
+ static async Task<string> SomeWorkStack(string stackName)
+ {
+ StringAppender stringAppender = new StringAppender();
+ stringAppender.Layout = new PatternLayout("%property{"
+ Utils.PROPERTY_KEY + "}");
+
+ ILoggerRepository rep =
LogManager.CreateRepository(Guid.NewGuid().ToString());
+ BasicConfigurator.Configure(rep, stringAppender);
+
+ ILog log = LogManager.GetLogger(rep.Name,
"TestLogicalThreadStackPattern");
+
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(stackName))
+ {
+ log.Info("TestMessage");
+ Assert.AreEqual(string.Format("Outer {0}",
stackName), stringAppender.GetString(), "Test logical thread stack value set");
+ stringAppender.Reset();
+
+ await MoreWorkStack(log, "A");
+ log.Info("TestMessage");
+ await MoreWorkStack(log, "B");
+ log.Info("TestMessage");
+ }
+
+ return stringAppender.GetString();
+ }
+
+ static async Task MoreWorkStack(ILog log, string stackName)
+ {
+ using
(LogicalThreadContext.Stacks[Utils.PROPERTY_KEY].Push(stackName))
+ {
+ log.Info("TestMessage");
+ await Task.Delay(1);
+ log.Info("TestMessage");
+ }
+ }
+ }
+#endif
+}
\ No newline at end of file
Propchange:
logging/log4net/trunk/src/log4net.Tests/Context/LogicalThreadContextTest.cs
------------------------------------------------------------------------------
svn:eol-style = native
Modified: logging/log4net/trunk/src/log4net.Tests/Utils.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.Tests/Utils.cs?rev=1669884&r1=1669883&r2=1669884&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net.Tests/Utils.cs (original)
+++ logging/log4net/trunk/src/log4net.Tests/Utils.cs Sun Mar 29 10:00:50 2015
@@ -105,6 +105,7 @@ namespace log4net.Tests
internal static void RemovePropertyFromAllContexts() {
GlobalContext.Properties.Remove(PROPERTY_KEY);
ThreadContext.Properties.Remove(PROPERTY_KEY);
+ LogicalThreadContext.Properties.Remove(PROPERTY_KEY);
}
}
}
\ No newline at end of file
Modified: logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2010.csproj
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2010.csproj?rev=1669884&r1=1669883&r2=1669884&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2010.csproj
(original)
+++ logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2010.csproj Sun Mar
29 10:00:50 2015
@@ -163,6 +163,9 @@
<Compile Include="AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="Context\LogicalThreadContextTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
<Compile Include="Context\ThreadContextTest.cs">
<SubType>Code</SubType>
</Compile>
Added: logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2012.csproj
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2012.csproj?rev=1669884&view=auto
==============================================================================
--- logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2012.csproj (added)
+++ logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2012.csproj Sun Mar
29 10:00:50 2015
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+ <PropertyGroup>
+ <ProjectType>Local</ProjectType>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{B0530F10-0238-49A9-93B0-8EF412E90BCF}</ProjectGuid>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ApplicationIcon>
+ </ApplicationIcon>
+ <AssemblyKeyContainerName>
+ </AssemblyKeyContainerName>
+ <AssemblyName>log4net.Tests</AssemblyName>
+ <AssemblyOriginatorKeyFile>
+ </AssemblyOriginatorKeyFile>
+ <DefaultClientScript>JScript</DefaultClientScript>
+ <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
+ <DefaultTargetSchema>IE50</DefaultTargetSchema>
+ <DelaySign>false</DelaySign>
+ <OutputType>Library</OutputType>
+ <RootNamespace>log4net.Tests</RootNamespace>
+ <StartupObject>
+ </StartupObject>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'
">
+ <OutputPath>..\..\build\bin\log4net.Tests\net\4.5\debug\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+
<DefineConstants>TRACE;DEBUG;DOTNET;FRAMEWORK_3_5_OR_ABOVE;FRAMEWORK_4_0_OR_ABOVE;FRAMEWORK_4_5_OR_ABOVE</DefineConstants>
+ <DocumentationFile>
+ </DocumentationFile>
+ <DebugSymbols>true</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>false</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>full</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==
'Release|AnyCPU' ">
+ <OutputPath>..\..\build\bin\log4net.Tests\net\4.5\release\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+
<DefineConstants>TRACE;DOTNET;FRAMEWORK_3_5_OR_ABOVE;FRAMEWORK_4_0_OR_ABOVE;FRAMEWORK_4_5_OR_ABOVE</DefineConstants>
+ <DocumentationFile>
+ </DocumentationFile>
+ <DebugSymbols>false</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>true</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>none</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="nunit.framework, Version=2.5.2.9222, Culture=neutral,
PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\lib\test\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="System">
+ <Name>System</Name>
+ </Reference>
+ <Reference Include="System.configuration" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data">
+ <Name>System.Data</Name>
+ </Reference>
+ <Reference Include="System.Runtime.Remoting">
+ <Name>System.Runtime.Remoting</Name>
+ </Reference>
+ <Reference Include="System.Xml">
+ <Name>System.XML</Name>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\log4net\AssemblyVersionInfo.cs">
+ <Link>AssemblyVersionInfo.cs</Link>
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AdoNetAppenderTest.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetCommand.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetConnection.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetParameter.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetParameterCollection.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetTransaction.cs" />
+ <Compile Include="Appender\AppenderCollectionTest.cs" />
+ <Compile Include="Appender\BufferingAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\CountingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\EventLogAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RemotingAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RollingFileAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\StringAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TraceAppenderTest.cs" />
+ <Compile Include="AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Context\LogicalThreadContextTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Context\ThreadContextTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\EvaluatorTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\FixingTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ShutdownTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\StringFormatTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Hierarchy\Hierarchy.cs" />
+ <Compile Include="Hierarchy\Logger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\DynamicPatternLayoutTest.cs" />
+ <Compile Include="Layout\PatternLayoutTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayoutTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="LoggerRepository\ConfigurationMessages.cs" />
+ <Compile Include="Filter\FilterTest.cs" />
+ <Compile Include="Utils.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\CyclicBufferTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\EnvironmentPatternConverterTest.cs" />
+ <Compile Include="Util\LogLogTest.cs" />
+ <Compile Include="Util\PatternConverterTest.cs" />
+ <Compile Include="Util\PatternStringTest.cs" />
+ <Compile Include="Util\PropertiesDictionaryTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\RandomStringPatternConverterTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\SystemInfoTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TransformTest.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\log4net\log4net.vs2012.csproj">
+ <Project>{181fe707-e161-4722-9f38-6aaab6faa106}</Project>
+ <Name>log4net.vs2012</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PreBuildEvent>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+</Project>
Propchange: logging/log4net/trunk/src/log4net.Tests/log4net.Tests.vs2012.csproj
------------------------------------------------------------------------------
svn:eol-style = native
Modified: logging/log4net/trunk/src/log4net/AssemblyInfo.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/AssemblyInfo.cs?rev=1669884&r1=1669883&r2=1669884&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/AssemblyInfo.cs (original)
+++ logging/log4net/trunk/src/log4net/AssemblyInfo.cs Sun Mar 29 10:00:50 2015
@@ -49,7 +49,9 @@ using System.Runtime.CompilerServices;
//
#if DOTNET
-#if FRAMEWORK_4_0_OR_ABOVE
+#if FRAMEWORK_4_5_OR_ABOVE
+[assembly: AssemblyTitle("Apache log4net for .NET Framework 4.5")]
+#elif FRAMEWORK_4_0_OR_ABOVE
#if CLIENT_PROFILE
[assembly: AssemblyTitle("Apache log4net for .NET Framework 4.0 Client
Profile")]
#else
Modified: logging/log4net/trunk/src/log4net/LogicalThreadContext.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/LogicalThreadContext.cs?rev=1669884&r1=1669883&r2=1669884&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/LogicalThreadContext.cs (original)
+++ logging/log4net/trunk/src/log4net/LogicalThreadContext.cs Sun Mar 29
10:00:50 2015
@@ -125,7 +125,7 @@ namespace log4net
/// The logical thread stacks.
/// </para>
/// </remarks>
- public static ThreadContextStacks Stacks
+ public static LogicalThreadContextStacks Stacks
{
get { return s_stacks; }
}
@@ -142,7 +142,7 @@ namespace log4net
/// <summary>
/// The thread context stacks instance
/// </summary>
- private readonly static ThreadContextStacks s_stacks = new
ThreadContextStacks(s_properties);
+ private readonly static LogicalThreadContextStacks s_stacks =
new LogicalThreadContextStacks(s_properties);
#endregion Private Static Fields
}
Modified:
logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs?rev=1669884&r1=1669883&r2=1669884&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs
(original)
+++ logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs
Sun Mar 29 10:00:50 2015
@@ -98,9 +98,14 @@ namespace log4net.Util
return null;
}
set
- {
+ {
// Force the dictionary to be created
- GetProperties(true)[key] = value;
+ var props = GetProperties(true);
+ // Reason for cloning the dictionary below:
object instances set on the CallContext
+ // need to be immutable to correctly flow
through async/await
+ var immutableProps = new
PropertiesDictionary(props);
+ immutableProps[key] = value;
+ SetCallContextData(immutableProps);
}
}
@@ -122,7 +127,9 @@ namespace log4net.Util
PropertiesDictionary dictionary = GetProperties(false);
if (dictionary != null)
{
- dictionary.Remove(key);
+ var immutableProps = new
PropertiesDictionary(dictionary);
+ immutableProps.Remove(key);
+ SetCallContextData(immutableProps);
}
}
@@ -139,7 +146,8 @@ namespace log4net.Util
PropertiesDictionary dictionary = GetProperties(false);
if (dictionary != null)
{
- dictionary.Clear();
+ var immutableProps = new PropertiesDictionary();
+ SetCallContextData(immutableProps);
}
}
Added: logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStack.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStack.cs?rev=1669884&view=auto
==============================================================================
--- logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStack.cs (added)
+++ logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStack.cs Sun Mar
29 10:00:50 2015
@@ -0,0 +1,411 @@
+#region Apache License
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#endregion
+
+using System;
+using System.Collections;
+
+using log4net.Core;
+
+namespace log4net.Util
+{
+
+ /// <summary>
+ /// Delegate type used for LogicalThreadContextStack's callbacks.
+ /// </summary>
+ public delegate void TwoArgAction<T1, T2>(T1 t1, T2 t2);
+
+ /// <summary>
+ /// Implementation of Stack for the <see
cref="log4net.LogicalThreadContext"/>
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Implementation of Stack for the <see
cref="log4net.LogicalThreadContext"/>
+ /// </para>
+ /// </remarks>
+ /// <author>Nicko Cadell</author>
+ public sealed class LogicalThreadContextStack : IFixingRequired
+ {
+ #region Private Instance Fields
+
+ /// <summary>
+ /// The stack store.
+ /// </summary>
+ private Stack m_stack = new Stack();
+
+ /// <summary>
+ /// The name of this <see
cref="log4net.Util.LogicalThreadContextStack"/> within the
+ /// <see cref="log4net.Util.LogicalThreadContextProperties"/>.
+ /// </summary>
+ private string m_propertyKey;
+
+ /// <summary>
+ /// The callback used to let the <see
cref="log4net.Util.LogicalThreadContextStacks"/> register a
+ /// new instance of a <see
cref="log4net.Util.LogicalThreadContextStack"/>.
+ /// </summary>
+ private TwoArgAction<string, LogicalThreadContextStack>
m_registerNew;
+
+ #endregion Private Instance Fields
+
+ #region Public Instance Constructors
+
+ /// <summary>
+ /// Internal constructor
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Initializes a new instance of the <see
cref="LogicalThreadContextStack" /> class.
+ /// </para>
+ /// </remarks>
+ internal LogicalThreadContextStack(string propertyKey,
TwoArgAction<string, LogicalThreadContextStack> registerNew)
+ {
+ m_propertyKey = propertyKey;
+ m_registerNew = registerNew;
+ }
+
+ #endregion Public Instance Constructors
+
+ #region Public Properties
+
+ /// <summary>
+ /// The number of messages in the stack
+ /// </summary>
+ /// <value>
+ /// The current number of messages in the stack
+ /// </value>
+ /// <remarks>
+ /// <para>
+ /// The current number of messages in the stack. That is
+ /// the number of times <see cref="Push"/> has been called
+ /// minus the number of times <see cref="Pop"/> has been called.
+ /// </para>
+ /// </remarks>
+ public int Count
+ {
+ get { return m_stack.Count; }
+ }
+
+ #endregion // Public Properties
+
+ #region Public Methods
+
+ /// <summary>
+ /// Clears all the contextual information held in this stack.
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Clears all the contextual information held in this stack.
+ /// Only call this if you think that this thread is being
reused after
+ /// a previous call execution which may not have completed
correctly.
+ /// You do not need to use this method if you always guarantee
to call
+ /// the <see cref="IDisposable.Dispose"/> method of the <see
cref="IDisposable"/>
+ /// returned from <see cref="Push"/> even in exceptional
circumstances,
+ /// for example by using the
<c>using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message"))</c>
+ /// syntax.
+ /// </para>
+ /// </remarks>
+ public void Clear()
+ {
+ m_registerNew(m_propertyKey, new
LogicalThreadContextStack(m_propertyKey, m_registerNew));
+ }
+
+ /// <summary>
+ /// Removes the top context from this stack.
+ /// </summary>
+ /// <returns>The message in the context that was removed from
the top of this stack.</returns>
+ /// <remarks>
+ /// <para>
+ /// Remove the top context from this stack, and return
+ /// it to the caller. If this stack is empty then an
+ /// empty string (not <see langword="null"/>) is returned.
+ /// </para>
+ /// </remarks>
+ public string Pop()
+ {
+ // copy current stack
+ Stack stack = new Stack(new Stack(m_stack));
+ string result = "";
+ if (stack.Count > 0)
+ {
+ result = ((StackFrame)(stack.Pop())).Message;
+ }
+ m_registerNew(m_propertyKey,
+ new LogicalThreadContextStack(m_propertyKey,
m_registerNew) { m_stack = stack });
+ return result;
+ }
+
+ /// <summary>
+ /// Pushes a new context message into this stack.
+ /// </summary>
+ /// <param name="message">The new context message.</param>
+ /// <returns>
+ /// An <see cref="IDisposable"/> that can be used to clean up
the context stack.
+ /// </returns>
+ /// <remarks>
+ /// <para>
+ /// Pushes a new context onto this stack. An <see
cref="IDisposable"/>
+ /// is returned that can be used to clean up this stack. This
+ /// can be easily combined with the <c>using</c> keyword to
scope the
+ /// context.
+ /// </para>
+ /// </remarks>
+ /// <example>Simple example of using the <c>Push</c> method
with the <c>using</c> keyword.
+ /// <code lang="C#">
+ ///
using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message"))
+ /// {
+ /// log.Warn("This should have an ThreadContext
Stack message");
+ /// }
+ /// </code>
+ /// </example>
+ public IDisposable Push(string message)
+ {
+ // do modifications on a copy
+ Stack stack = new Stack(new Stack(m_stack));
+ stack.Push(new StackFrame(message, (stack.Count > 0) ?
(StackFrame)stack.Peek() : null));
+
+ var contextStack = new
LogicalThreadContextStack(m_propertyKey, m_registerNew) { m_stack = stack };
+ m_registerNew(m_propertyKey, contextStack);
+ return new AutoPopStackFrame(contextStack, stack.Count
- 1);
+ }
+
+ #endregion Public Methods
+
+ #region Internal Methods
+
+ /// <summary>
+ /// Gets the current context information for this stack.
+ /// </summary>
+ /// <returns>The current context information.</returns>
+ internal string GetFullMessage()
+ {
+ Stack stack = m_stack;
+ if (stack.Count > 0)
+ {
+ return ((StackFrame)(stack.Peek())).FullMessage;
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Gets and sets the internal stack used by this <see
cref="LogicalThreadContextStack"/>
+ /// </summary>
+ /// <value>The internal storage stack</value>
+ /// <remarks>
+ /// <para>
+ /// This property is provided only to support backward
compatability
+ /// of the <see cref="NDC"/>. Tytpically the internal stack
should not
+ /// be modified.
+ /// </para>
+ /// </remarks>
+ internal Stack InternalStack
+ {
+ get { return m_stack; }
+ set { m_stack = value; }
+ }
+
+ #endregion Internal Methods
+
+ /// <summary>
+ /// Gets the current context information for this stack.
+ /// </summary>
+ /// <returns>Gets the current context information</returns>
+ /// <remarks>
+ /// <para>
+ /// Gets the current context information for this stack.
+ /// </para>
+ /// </remarks>
+ public override string ToString()
+ {
+ return GetFullMessage();
+ }
+
+ /// <summary>
+ /// Get a portable version of this object
+ /// </summary>
+ /// <returns>the portable instance of this object</returns>
+ /// <remarks>
+ /// <para>
+ /// Get a cross thread portable version of this object
+ /// </para>
+ /// </remarks>
+ object IFixingRequired.GetFixedObject()
+ {
+ return GetFullMessage();
+ }
+
+ /// <summary>
+ /// Inner class used to represent a single context frame in the
stack.
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Inner class used to represent a single context frame in the
stack.
+ /// </para>
+ /// </remarks>
+ private sealed class StackFrame
+ {
+ #region Private Instance Fields
+
+ private readonly string m_message;
+ private readonly StackFrame m_parent;
+ private string m_fullMessage = null;
+
+ #endregion
+
+ #region Internal Instance Constructors
+
+ /// <summary>
+ /// Constructor
+ /// </summary>
+ /// <param name="message">The message for this
context.</param>
+ /// <param name="parent">The parent context in the
chain.</param>
+ /// <remarks>
+ /// <para>
+ /// Initializes a new instance of the <see
cref="StackFrame" /> class
+ /// with the specified message and parent context.
+ /// </para>
+ /// </remarks>
+ internal StackFrame(string message, StackFrame parent)
+ {
+ m_message = message;
+ m_parent = parent;
+
+ if (parent == null)
+ {
+ m_fullMessage = message;
+ }
+ }
+
+ #endregion Internal Instance Constructors
+
+ #region Internal Instance Properties
+
+ /// <summary>
+ /// Get the message.
+ /// </summary>
+ /// <value>The message.</value>
+ /// <remarks>
+ /// <para>
+ /// Get the message.
+ /// </para>
+ /// </remarks>
+ internal string Message
+ {
+ get { return m_message; }
+ }
+
+ /// <summary>
+ /// Gets the full text of the context down to the root
level.
+ /// </summary>
+ /// <value>
+ /// The full text of the context down to the root level.
+ /// </value>
+ /// <remarks>
+ /// <para>
+ /// Gets the full text of the context down to the root
level.
+ /// </para>
+ /// </remarks>
+ internal string FullMessage
+ {
+ get
+ {
+ if (m_fullMessage == null && m_parent
!= null)
+ {
+ m_fullMessage =
string.Concat(m_parent.FullMessage, " ", m_message);
+ }
+ return m_fullMessage;
+ }
+ }
+
+ #endregion Internal Instance Properties
+ }
+
+ /// <summary>
+ /// Struct returned from the <see
cref="LogicalThreadContextStack.Push"/> method.
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// This struct implements the <see cref="IDisposable"/> and is
designed to be used
+ /// with the <see langword="using"/> pattern to remove the
stack frame at the end of the scope.
+ /// </para>
+ /// </remarks>
+ private struct AutoPopStackFrame : IDisposable
+ {
+ #region Private Instance Fields
+
+ /// <summary>
+ /// The depth to trim the stack to when this instance
is disposed
+ /// </summary>
+ private int m_frameDepth;
+
+ /// <summary>
+ /// The outer LogicalThreadContextStack.
+ /// </summary>
+ private LogicalThreadContextStack
m_logicalThreadContextStack;
+
+ #endregion Private Instance Fields
+
+ #region Internal Instance Constructors
+
+ /// <summary>
+ /// Constructor
+ /// </summary>
+ /// <param name="logicalThreadContextStack">The
internal stack used by the ThreadContextStack.</param>
+ /// <param name="frameDepth">The depth to return the
stack to when this object is disposed.</param>
+ /// <remarks>
+ /// <para>
+ /// Initializes a new instance of the <see
cref="AutoPopStackFrame" /> class with
+ /// the specified stack and return depth.
+ /// </para>
+ /// </remarks>
+ internal AutoPopStackFrame(LogicalThreadContextStack
logicalThreadContextStack, int frameDepth)
+ {
+ m_frameDepth = frameDepth;
+ m_logicalThreadContextStack =
logicalThreadContextStack;
+ }
+
+ #endregion Internal Instance Constructors
+
+ #region Implementation of IDisposable
+
+ /// <summary>
+ /// Returns the stack to the correct depth.
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Returns the stack to the correct depth.
+ /// </para>
+ /// </remarks>
+ public void Dispose()
+ {
+ if (m_frameDepth >= 0 &&
m_logicalThreadContextStack.m_stack != null)
+ {
+ Stack stack = new Stack(new
Stack(m_logicalThreadContextStack.m_stack));
+ while (stack.Count > m_frameDepth)
+ {
+ stack.Pop();
+ }
+
m_logicalThreadContextStack.m_registerNew(m_logicalThreadContextStack.m_propertyKey,
+ new
LogicalThreadContextStack(m_logicalThreadContextStack.m_propertyKey,
m_logicalThreadContextStack.m_registerNew) { m_stack = stack });
+ }
+ }
+
+ #endregion Implementation of IDisposable
+ }
+
+ }
+}
Propchange: logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStack.cs
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStacks.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStacks.cs?rev=1669884&view=auto
==============================================================================
--- logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStacks.cs (added)
+++ logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStacks.cs Sun
Mar 29 10:00:50 2015
@@ -0,0 +1,133 @@
+#region Apache License
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#endregion
+
+using System;
+using System.Collections;
+
+namespace log4net.Util
+{
+ /// <summary>
+ /// Implementation of Stacks collection for the <see
cref="log4net.LogicalThreadContext"/>
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Implementation of Stacks collection for the <see
cref="log4net.LogicalThreadContext"/>
+ /// </para>
+ /// </remarks>
+ /// <author>Nicko Cadell</author>
+ public sealed class LogicalThreadContextStacks
+ {
+ private readonly LogicalThreadContextProperties m_properties;
+
+ #region Public Instance Constructors
+
+ /// <summary>
+ /// Internal constructor
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Initializes a new instance of the <see
cref="ThreadContextStacks" /> class.
+ /// </para>
+ /// </remarks>
+ internal
LogicalThreadContextStacks(LogicalThreadContextProperties properties)
+ {
+ m_properties = properties;
+ }
+
+ #endregion Public Instance Constructors
+
+ #region Public Instance Properties
+
+ /// <summary>
+ /// Gets the named thread context stack
+ /// </summary>
+ /// <value>
+ /// The named stack
+ /// </value>
+ /// <remarks>
+ /// <para>
+ /// Gets the named thread context stack
+ /// </para>
+ /// </remarks>
+ public LogicalThreadContextStack this[string key]
+ {
+ get
+ {
+ LogicalThreadContextStack stack = null;
+
+ object propertyValue = m_properties[key];
+ if (propertyValue == null)
+ {
+ // Stack does not exist, create
+ stack = new
LogicalThreadContextStack(key, registerNew);
+ m_properties[key] = stack;
+ }
+ else
+ {
+ // Look for existing stack
+ stack = propertyValue as
LogicalThreadContextStack;
+ if (stack == null)
+ {
+ // Property is not set to a
stack!
+ string propertyValueString =
SystemInfo.NullText;
+
+ try
+ {
+ propertyValueString =
propertyValue.ToString();
+ }
+ catch
+ {
+ }
+
+ LogLog.Error(declaringType,
"ThreadContextStacks: Request for stack named [" + key + "] failed because a
property with the same name exists which is a [" + propertyValue.GetType().Name
+ "] with value [" + propertyValueString + "]");
+
+ stack = new
LogicalThreadContextStack(key, registerNew);
+ }
+ }
+
+ return stack;
+ }
+ }
+
+ #endregion Public Instance Properties
+
+ #region Private Instance Fields
+
+ private void registerNew(string stackName,
LogicalThreadContextStack stack)
+ {
+ m_properties[stackName] = stack;
+ }
+
+ #endregion Private Instance Fields
+
+ #region Private Static Fields
+
+ /// <summary>
+ /// The fully qualified type of the ThreadContextStacks class.
+ /// </summary>
+ /// <remarks>
+ /// Used by the internal logger to record the Type of the
+ /// log message.
+ /// </remarks>
+ private readonly static Type declaringType =
typeof(LogicalThreadContextStacks);
+
+ #endregion Private Static Fields
+ }
+}
+
Propchange: logging/log4net/trunk/src/log4net/Util/LogicalThreadContextStacks.cs
------------------------------------------------------------------------------
svn:eol-style = native
Modified: logging/log4net/trunk/src/log4net/log4net.vs2010.csproj
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/log4net.vs2010.csproj?rev=1669884&r1=1669883&r2=1669884&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/log4net.vs2010.csproj (original)
+++ logging/log4net/trunk/src/log4net/log4net.vs2010.csproj Sun Mar 29 10:00:50
2015
@@ -723,9 +723,15 @@
<Compile Include="Util\ThreadContextProperties.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="Util\LogicalThreadContextStack.cs">
+ <SubType>Code</SubType>
+ </Compile>
<Compile Include="Util\ThreadContextStack.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="Util\LogicalThreadContextStacks.cs">
+ <SubType>Code</SubType>
+ </Compile>
<Compile Include="Util\ThreadContextStacks.cs">
<SubType>Code</SubType>
</Compile>
Added: logging/log4net/trunk/src/log4net/log4net.vs2012.csproj
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/log4net.vs2012.csproj?rev=1669884&view=auto
==============================================================================
--- logging/log4net/trunk/src/log4net/log4net.vs2012.csproj (added)
+++ logging/log4net/trunk/src/log4net/log4net.vs2012.csproj Sun Mar 29 10:00:50
2015
@@ -0,0 +1,802 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+ <PropertyGroup>
+ <ProjectType>Local</ProjectType>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{181FE707-E161-4722-9F38-6AAAB6FAA106}</ProjectGuid>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ApplicationIcon>
+ </ApplicationIcon>
+ <AssemblyKeyContainerName>
+ </AssemblyKeyContainerName>
+ <AssemblyName>log4net</AssemblyName>
+ <AssemblyOriginatorKeyFile>
+ </AssemblyOriginatorKeyFile>
+ <DefaultClientScript>JScript</DefaultClientScript>
+ <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
+ <DefaultTargetSchema>IE50</DefaultTargetSchema>
+ <DelaySign>false</DelaySign>
+ <OutputType>Library</OutputType>
+ <RootNamespace>log4net</RootNamespace>
+ <StartupObject>
+ </StartupObject>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'
">
+ <OutputPath>..\..\build\bin\log4net\net\4.5\debug\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+
<DefineConstants>TRACE;DEBUG;DOTNET;FRAMEWORK_3_5_OR_ABOVE;FRAMEWORK_4_0_OR_ABOVE;FRAMEWORK_4_5_OR_ABOVE</DefineConstants>
+ <DocumentationFile>log4net.xml</DocumentationFile>
+ <DebugSymbols>true</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>false</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>full</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>SecurityRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==
'Release|AnyCPU' ">
+ <OutputPath>..\..\build\bin\log4net\net\4.5\release\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+
<DefineConstants>TRACE;STRONG;DOTNET;FRAMEWORK_3_5_OR_ABOVE;FRAMEWORK_4_0_OR_ABOVE;FRAMEWORK_4_5_OR_ABOVE</DefineConstants>
+ <DocumentationFile>log4net.xml</DocumentationFile>
+ <DebugSymbols>false</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>true</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>none</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System">
+ <Name>System</Name>
+ </Reference>
+ <Reference Include="System.configuration" />
+ <Reference Include="System.Data">
+ <Name>System.Data</Name>
+ </Reference>
+ <Reference Include="System.Web">
+ <Name>System.Web</Name>
+ </Reference>
+ <Reference Include="System.Xml">
+ <Name>System.XML</Name>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Appender\AdoNetAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AnsiColorTerminalAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AppenderCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AppenderSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AspNetTraceAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\BufferingAppenderSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\BufferingForwardingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ColoredConsoleAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ConsoleAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\DebugAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\EventLogAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\FileAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ForwardingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\IAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\IBulkAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\LocalSyslogAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ManagedColoredConsoleAppender.cs" />
+ <Compile Include="Appender\MemoryAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\NetSendAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\OutputDebugStringAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RemoteSyslogAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RemotingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RollingFileAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\SmtpAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\SmtpPickupDirAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TelnetAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TextWriterAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TraceAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\UdpAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="AssemblyVersionInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\AliasDomainAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\AliasRepositoryAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\BasicConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\ConfiguratorAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\DomainAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\DOMConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\DOMConfiguratorAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\Log4NetConfigurationSectionHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\PluginAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\RepositoryAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\SecurityContextProviderAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\XmlConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\XmlConfiguratorAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\CompactRepositorySelector.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\DefaultRepositorySelector.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ErrorCode.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ExceptionEvaluator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IAppenderAttachable.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IErrorHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IFixingRequired.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ILogger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ILoggerWrapper.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IOptionHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IRepositorySelector.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ITriggeringEventEvaluator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\Level.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LevelCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LevelEvaluator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LevelMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LocationInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LogException.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LoggerManager.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LoggerWrapperImpl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LoggingEvent.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LogImpl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\MethodItem.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\SecurityContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\SecurityContextProvider.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\StackFrameItem.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\TimeEvaluator.cs" />
+ <Compile Include="Core\WrapperMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\AbsoluteTimeDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\DateTimeDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\IDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\Iso8601DateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\SimpleDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\DenyAllFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\FilterDecision.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\FilterSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\IFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\LevelMatchFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\LevelRangeFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\LoggerMatchFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\MdcFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\NdcFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\PropertyFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\StringMatchFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="GlobalContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ILog.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\DynamicPatternLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\ExceptionLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\ILayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\IRawLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Layout2RawLayoutAdapter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\LayoutSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\PatternLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AppDomainPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetCachePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetContextPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetRequestPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetSessionPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\DatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\ExceptionPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\FileLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\FullLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\IdentityPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\LevelPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\LineLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\LoggerPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\MessagePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\MethodLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\NamedPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\NdcPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\PatternLayoutConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\PropertyPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\RelativeTimePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\StackTraceDetailPatternConverter.cs" />
+ <Compile Include="Layout\Pattern\StackTracePatternConverter.cs" />
+ <Compile Include="Layout\Pattern\ThreadPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\TypeNamePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\UserNamePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\UtcDatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawLayoutConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawPropertyLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawTimeStampLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawUtcTimeStampLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\SimpleLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayoutBase.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayoutSchemaLog4j.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="LogicalThreadContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="LogManager.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="MDC.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="NDC.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ObjectRenderer\DefaultRenderer.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ObjectRenderer\IObjectRenderer.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ObjectRenderer\RendererMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\IPlugin.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\IPluginFactory.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\PluginCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\PluginMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\PluginSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\RemoteLoggingServerPlugin.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\ConfigurationChangedEventArgs.cs" />
+ <Compile Include="Repository\Hierarchy\DefaultLoggerFactory.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\Hierarchy.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\ILoggerFactory.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\Logger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\LoggerKey.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\ProvisionNode.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\RootLogger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\XmlHierarchyConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\IBasicRepositoryConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\ILoggerRepository.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\IXmlRepositoryConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\LoggerRepositorySkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ThreadContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\AppenderAttachedImpl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\CompositeProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ContextPropertiesBase.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ConverterInfo.cs" />
+ <Compile Include="Util\CountingQuietTextWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\CyclicBuffer.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\EmptyCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\EmptyDictionary.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\FormattingInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\GlobalContextProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ILogExtensions.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LevelMapping.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LevelMappingEntry.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogicalThreadContextProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogLog.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NativeError.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NullDictionaryEnumerator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NullEnumerator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NullSecurityContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\OnlyOnceErrorHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\OptionConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternParser.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternString.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\AppDomainPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\DatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\EnvironmentFolderPathPatternConverter.cs"
/>
+ <Compile
Include="Util\PatternStringConverters\EnvironmentPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\IdentityPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\LiteralPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\NewLinePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\ProcessIdPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\PropertyPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\RandomStringPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile
Include="Util\PatternStringConverters\UserNamePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\UtcDatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PropertiesDictionary.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PropertyEntry.cs" />
+ <Compile Include="Util\ProtectCloseTextWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\QuietTextWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ReaderWriterLock.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ReadOnlyPropertiesDictionary.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ReusableStringWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\SystemInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\SystemStringFormat.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TextWriterAdapter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ThreadContextProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogicalThreadContextStack.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ThreadContextStack.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogicalThreadContextStacks.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ThreadContextStacks.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\Transform.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\BooleanConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\ConversionNotSupportedException.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\ConverterRegistry.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\EncodingConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\IConvertFrom.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\IConvertTo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\IPAddressConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\PatternLayoutConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\PatternStringConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\TypeConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\TypeConverterAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\WindowsSecurityContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PreBuildEvent>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+</Project>
Propchange: logging/log4net/trunk/src/log4net/log4net.vs2012.csproj
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4net/trunk/src/log4net/log4net.vs2012.sln
URL:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/log4net.vs2012.sln?rev=1669884&view=auto
==============================================================================
--- logging/log4net/trunk/src/log4net/log4net.vs2012.sln (added)
+++ logging/log4net/trunk/src/log4net/log4net.vs2012.sln Sun Mar 29 10:00:50
2015
@@ -0,0 +1,45 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.vs2012",
"log4net.vs2012.csproj", "{181FE707-E161-4722-9F38-6AAAB6FAA106}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.Tests.vs2012",
"..\log4net.Tests\log4net.Tests.vs2012.csproj",
"{B0530F10-0238-49A9-93B0-8EF412E90BCF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Debug|Any CPU.ActiveCfg
= Debug|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Debug|Any CPU.Build.0 =
Debug|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Release|Any
CPU.ActiveCfg = Release|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Release|Any CPU.Build.0
= Release|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Debug|Any CPU.ActiveCfg
= Debug|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Debug|Any CPU.Build.0 =
Debug|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Release|Any
CPU.ActiveCfg = Release|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Release|Any CPU.Build.0
= Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Propchange: logging/log4net/trunk/src/log4net/log4net.vs2012.sln
------------------------------------------------------------------------------
svn:eol-style = native