From 3d7551cc83806f4b8959727c9afeb6d54c83fa0f Mon Sep 17 00:00:00 2001 From: David Joseph Bonnici Date: Thu, 30 Jul 2015 10:42:00 +0200 Subject: [PATCH] addition of source files --- BoostTestAdapter.sln | 59 + BoostTestAdapter/App.config | 27 + .../Boost/Results/BoostStandardError.cs | 57 + .../Boost/Results/BoostStandardOutput.cs | 241 + .../Results/BoostTestResultOutputBase.cs | 88 + .../Boost/Results/BoostTestResultXMLOutput.cs | 71 + BoostTestAdapter/Boost/Results/BoostXmlLog.cs | 232 + .../Boost/Results/BoostXmlReport.cs | 153 + .../Boost/Results/IBoostTestResultOutput.cs | 21 + .../Boost/Results/LogEntryTypes/LogEntry.cs | 50 + .../Results/LogEntryTypes/LogEntryError.cs | 43 + .../LogEntryTypes/LogEntryException.cs | 58 + .../LogEntryTypes/LogEntryFatalError.cs | 43 + .../Results/LogEntryTypes/LogEntryInfo.cs | 43 + .../LogEntryTypes/LogEntryMemoryLeak.cs | 93 + .../Results/LogEntryTypes/LogEntryMessage.cs | 43 + .../LogEntryStandardErrorMessage.cs | 26 + .../LogEntryStandardOutputMessage.cs | 26 + .../Results/LogEntryTypes/LogEntryWarning.cs | 43 + BoostTestAdapter/Boost/Results/TestResult.cs | 226 + .../Boost/Results/TestResultCollection.cs | 226 + .../Boost/Runner/BoostTestRunner.cs | 14 + .../Boost/Runner/BoostTestRunnerBase.cs | 260 + .../Runner/BoostTestRunnerCommandLineArgs.cs | 444 + .../Runner/BoostTestRunnerFactoryOptions.cs | 12 + .../Boost/Runner/BoostTestRunnerSettings.cs | 40 + .../Runner/BoostTestRunnerTimeoutException.cs | 77 + .../Runner/DefaultBoostTestRunnerFactory.cs | 63 + .../Boost/Runner/ExternalBoostTestRunner.cs | 132 + .../Boost/Runner/IBoostTestRunner.cs | 32 + .../Boost/Runner/IBoostTestRunnerFactory.cs | 16 + BoostTestAdapter/Boost/Test/ITestVisitable.cs | 15 + BoostTestAdapter/Boost/Test/ITestVisitor.cs | 20 + BoostTestAdapter/Boost/Test/TestCase.cs | 106 + BoostTestAdapter/Boost/Test/TestFramework.cs | 90 + .../Boost/Test/TestFrameworkBuilder.cs | 144 + BoostTestAdapter/Boost/Test/TestSuite.cs | 162 + BoostTestAdapter/Boost/Test/TestUnit.cs | 147 + BoostTestAdapter/BoostTestAdapter.csproj | 219 + BoostTestAdapter/BoostTestDiscoverer.cs | 104 + .../BoostTestDiscovererFactoryOptions.cs | 12 + .../BoostTestDiscovererInternal.cs | 357 + BoostTestAdapter/BoostTestExeDiscoverer.cs | 89 + BoostTestAdapter/BoostTestExecutor.cs | 707 + .../DefaultBoostTestDiscovererFactory.cs | 61 + .../ExternalBoostTestDiscoverer.cs | 298 + BoostTestAdapter/GlobalSuppressions.cs | Bin 0 -> 7554 bytes BoostTestAdapter/IBoostTestDiscoverer.cs | 12 + .../IBoostTestDiscovererFactory.cs | 16 + BoostTestAdapter/ProjectInfo.cs | 37 + BoostTestAdapter/Properties/AssemblyInfo.cs | 42 + .../Settings/BoostTestAdapterSettings.cs | 94 + .../BoostTestAdapterSettingsProvider.cs | 72 + .../ExternalBoostTestRunnerSettings.cs | 180 + .../ConditionalInclusionsMachine.cs | 287 + .../DiscardingDueToFailedIf.cs | 83 + .../DiscardingDueToMultilineDefine.cs | 47 + .../DiscardingDueToSuccessfullIf.cs | 52 + .../IConditionalInclusionsState.cs | 18 + .../ConditionalInclusions/IncludingDueToIf.cs | 119 + .../ConditionalInclusions/NormalState.cs | 115 + .../ConditionalInclusionsFilter.cs | 45 + .../SourceFilter/CppSourceFile.cs | 19 + .../SourceFilter/ExpressionEvaluation.cs | 97 + BoostTestAdapter/SourceFilter/IEvaluation.cs | 30 + .../SourceFilter/ISourceFilter.cs | 18 + .../SourceFilter/MultilineCommentFilter.cs | 75 + .../SourceFilter/QuotedStringsFilter.cs | 102 + .../SourceFilter/SingleLineCommentFilter.cs | 29 + .../SourceFilter/SourceDiscoveryException.cs | 32 + .../SourceFilter/SourceFilterFactory.cs | 46 + BoostTestAdapter/Utility/Code.cs | 22 + BoostTestAdapter/Utility/CommandEvaluator.cs | 117 + BoostTestAdapter/Utility/CommandLine.cs | 41 + BoostTestAdapter/Utility/Logger.cs | 140 + BoostTestAdapter/Utility/NativeMethods.cs | 77 + .../Utility/ProcessStartInfoEx.cs | 64 + .../Utility/QualifiedNameBuilder.cs | 195 + BoostTestAdapter/Utility/ROTException.cs | 36 + BoostTestAdapter/Utility/SourceFileInfo.cs | 63 + BoostTestAdapter/Utility/TestRun.cs | 59 + .../VisualStudio/DefaultDiscoverySink.cs | 61 + .../DefaultVisualStudioInstanceProvider.cs | 135 + .../IVisualStudioInstanceProvider.cs | 16 + .../Utility/VisualStudio/VSTestModel.cs | 287 + BoostTestAdapter/Utility/XmlReaderHelper.cs | 29 + BoostTestAdapter/packages.config | 4 + .../BoostTestAdapter.dll.config | 27 + .../BoostTestAdapterNunit.csproj | 179 + .../BoostTestAdaptorNunitTestRunner.nunit | 6 + .../BoostTestDiscovererTest.cs | 79 + .../BoostTestExeDiscovererTest.cs | 412 + .../BoostTestExecutorTest.cs | 689 + BoostTestAdapterNunit/BoostTestResultTest.cs | 709 + .../BoostTestRunnerCommandLineArgsTest.cs | 56 + .../BoostTestSettingsTest.cs | 228 + BoostTestAdapterNunit/BoostTestTest.cs | 446 + BoostTestAdapterNunit/CommandEvaluatorTest.cs | 45 + .../ConditionalInclusionsFilterTest.cs | 273 + .../CorrectReferencedAssembliesTest.cs | 31 + .../DefaultBoostTestRunnerFactoryTest.cs | 72 + .../DefaultTestDiscovererFactoryTest.cs | 68 + .../ExpressionEvaluationTest.cs | 64 + .../ExternalBoostTestDiscovererTest.cs | 121 + .../Fakes/ConsoleMessageLogger.cs | 20 + .../Fakes/DefaultTestContext.cs | 161 + BoostTestAdapterNunit/LoggerTest.cs | 166 + .../MultiLineCommentFilterTest.cs | 29 + .../ProjectOutPutCheckerVs12Nunit.cs | 93 + .../Properties/AssemblyInfo.cs | 37 + .../QuotedStringsFilterTest.cs | 28 + .../CppSources/BoostFixtureTestCase.cpp | 40 + .../CppSources/BoostFixtureTestSuite.cpp | 61 + .../CppSources/BoostUnitTestSample.cpp | 42 + ...ostUnitTestSampleRequiringUseOfFilters.cpp | 66 + .../BoostTestAdapter.dll.config | 27 + .../AbortedTest/sample.test.log.xml | 1 + .../AbortedTest/sample.test.report.xml | 1 + .../BoostFailTest/sample.test.log.xml | 1 + .../BoostFailTest/sample.test.report.xml | 1 + .../FailedRequireTest/sample.test.log.xml | 1 + .../FailedRequireTest/sample.test.report.xml | 1 + .../MemoryLeakTest/sample.test.log.xml | 12 + .../MemoryLeakTest/sample.test.report.xml | 7 + .../MultipleTests/sample.test.log.xml | 20 + .../MultipleTests/sample.test.report.xml | 12 + .../NestedTestSuite/sample.test.log.xml | 1 + .../NestedTestSuite/sample.test.report.xml | 1 + .../NoMatchingTests/sample.test.log.xml | 0 .../NoMatchingTests/sample.test.report.xml | 1 + .../OutputTest/sample.test.report.xml | 5 + .../PassedTest/sample.test.log.xml | 1 + .../PassedTest/sample.test.report.xml | 1 + .../SpecialCharacters/sample.test.log.xml | 1 + .../SpecialCharacters/sample.test.report.xml | 1 + .../conditionalIncludesDisabled.runsettings | 11 + .../Resources/Settings/default.runsettings | Bin 0 -> 1102 bytes .../Resources/Settings/empty.runsettings | 3 + .../Settings/externalTestRunner.runsettings | 15 + .../Resources/Settings/sample.2.runsettings | 42 + .../Resources/Settings/sample.runsettings | 19 + ...ditionalInclusionsBadSourceFileNesting.cpp | 156 + ...itionalInclusionsComplexEvaluationFail.cpp | 6 + ...exEvaluationSuccess_FilteredSourceCode.cpp | 112 + ...EvaluationSuccess_UnfilteredSourceCode.cpp | 112 + ...alInclusionsIfTests_FilteredSourceCode.cpp | 518 + ...InclusionsIfTests_UnFilteredSourceCode.cpp | 518 + ...nclusionsIfdefTests_FilteredSourceCode.cpp | 155 + ...lusionsIfdefTests_UnFilteredSourceCode.cpp | 156 + ...ultiLineCommentTest_FilteredSourceCode.cpp | 19 + ...tiLineCommentTest_UnFilteredSourceCode.cpp | 19 + ...edStringsFilterTest_FilteredSourceCode.cpp | 15 + ...StringsFilterTest_UnFilteredSourceCode.cpp | 15 + ...neCommentFilterTest_FilteredSourceCode.cpp | 7 + ...CommentFilterTest_UnFilteredSourceCode.cpp | 7 + .../Resources/TestLists/empty.test.list.xml | 4 + .../Resources/TestLists/sample.test.list.xml | 18 + .../SingleLineCommentFilterTest.cs | 28 + BoostTestAdapterNunit/SourceFiltersTest.cs | 31 + BoostTestAdapterNunit/TestDiscovererNunit.cs | 246 + .../Utility/DummySolution.cs | 119 + .../Utility/DummySourceFile.cs | 65 + .../Utility/DummyVSProvider.cs | 28 + .../Utility/ReadOnlyDictionaryWrapper.cs | 79 + .../Utility/SourceFilterTestBase.cs | 44 + BoostTestAdapterNunit/Utility/TestHelper.cs | 71 + .../Utility/VisualStudioInstanceBuilders.cs | 184 + .../Utility/Xml/XmlComparison.cs | 239 + BoostTestAdapterNunit/VSTestModelTest.cs | 435 + .../VisualStudio2012AdapterTest.cs | 91 + BoostTestAdapterNunit/packages.config | 6 + BoostTestPlugin/BoostTestAdapter.dll.config | 27 + BoostTestPlugin/BoostTestPlugin.csproj | 146 + BoostTestPlugin/Boost_preview.png | Bin 0 -> 106654 bytes .../VC/Test/Boost Unit Test File.zip | Bin 0 -> 114989 bytes BoostTestPlugin/LICENSE_1_0.txt | 23 + .../VC/Test/Boost Unit Test Project.zip | Bin 0 -> 119676 bytes BoostTestPlugin/Properties/AssemblyInfo.cs | 34 + BoostTestPlugin/Release Notes.txt | 157 + BoostTestPlugin/app.config | 11 + BoostTestPlugin/boost_test_logoSquare.ico | Bin 0 -> 212693 bytes BoostTestPlugin/packages.config | 4 + BoostTestPlugin/source.extension.vsixmanifest | 36 + Doku/TestCasesListing.Detailed.xml | 18 + Doku/TestCasesListing.Simple.xml | 18 + .../accessing_the_test_explorer_window.png | Bin 0 -> 48212 bytes Doku/images/adding_boost_unit_test_file.png | Bin 0 -> 45022 bytes ...alyze_code_coverage_for_selected_tests.png | Bin 0 -> 40125 bytes Doku/images/boost_includes_path.png | Bin 0 -> 49346 bytes Doku/images/boost_library_path.png | Bin 0 -> 54204 bytes Doku/images/boost_test_adapter_solution.png | Bin 0 -> 18694 bytes ...test_adapter_in_extensions_and_updates.png | Bin 0 -> 58082 bytes Doku/images/boost_unit_test_project.png | Bin 0 -> 61842 bytes Doku/images/boost_unit_test_project_files.png | Bin 0 -> 103649 bytes Doku/images/clear_search.png | Bin 0 -> 13985 bytes Doku/images/context_menu_add_new_item.png | Bin 0 -> 40605 bytes Doku/images/debug_selected_tests.png | Bin 0 -> 50239 bytes Doku/images/discovered_tests_01.png | Bin 0 -> 113372 bytes Doku/images/enumerated_tests.png | Bin 0 -> 27251 bytes Doku/images/excluded_from_build.png | Bin 0 -> 67299 bytes Doku/images/experimental_instance.png | Bin 0 -> 46409 bytes Doku/images/group_by_duration.png | Bin 0 -> 33460 bytes Doku/images/group_by_outcome.png | Bin 0 -> 28973 bytes Doku/images/group_by_project.png | Bin 0 -> 28897 bytes Doku/images/group_by_traits.png | Bin 0 -> 29716 bytes Doku/images/grouping_by_traits.png | Bin 0 -> 34602 bytes .../indentifying_boost_library_toolset.png | Bin 0 -> 12255 bytes Doku/images/jit_visual_studio_selection.png | Bin 0 -> 19293 bytes .../launch_debugger_compilation_symbol.png | Bin 0 -> 75132 bytes Doku/images/logger_initialized.png | Bin 0 -> 10398 bytes Doku/images/memory_leak_detection.png | Bin 0 -> 58202 bytes Doku/images/myPlaylist.png | Bin 0 -> 21568 bytes Doku/images/platform_toolset.png | Bin 0 -> 89020 bytes Doku/images/project_configuration_type.png | Bin 0 -> 56158 bytes Doku/images/run_all_execution.png | Bin 0 -> 122954 bytes Doku/images/run_selected_tests.png | Bin 0 -> 67385 bytes .../running_tests_in_code_coverage_mode.png | Bin 0 -> 25228 bytes ...unning_tests_not_in_code_coverage_mode.png | Bin 0 -> 29868 bytes Doku/images/save_new_playlist.png | Bin 0 -> 55689 bytes Doku/images/search_filters.png | Bin 0 -> 18864 bytes Doku/images/select_test_settings_file.png | Bin 0 -> 22520 bytes Doku/images/set_as_startup_project.png | Bin 0 -> 45686 bytes Doku/images/source_extension_vsixmanifest.png | Bin 0 -> 85519 bytes Doku/images/start_external_program.png | Bin 0 -> 76919 bytes Doku/images/start_without_debugging.png | Bin 0 -> 16069 bytes Doku/images/test_adapter_registration.png | Bin 0 -> 34817 bytes Doku/images/test_case_output.png | Bin 0 -> 84171 bytes Doku/images/test_execution_timeout.png | Bin 0 -> 70824 bytes Doku/images/test_explorer_successfull_run.png | Bin 0 -> 16243 bytes Doku/images/unit_test_location.png | Bin 0 -> 128536 bytes ...upported_preprocessor_evaluated_macros.png | Bin 0 -> 47160 bytes Doku/images/visual_studio_debugging.png | Bin 0 -> 85352 bytes Doku/images/visual_studio_jit_debugger.png | Bin 0 -> 24296 bytes ...ternalTestRunnerDiscoveryType1.runsettings | 16 + ...ternalTestRunnerDiscoveryType2.runsettings | 18 + Doku/sample.runsettings | 15 + README.md | 458 +- VisualStudio2012Adapter/GlobalSuppressions.cs | Bin 0 -> 1996 bytes .../Properties/AssemblyInfo.cs | 38 + VisualStudio2012Adapter/VisualStudio2012.cs | 14 + .../VisualStudio2012Adapter.csproj | 82 + VisualStudio2013Adapter/GlobalSuppressions.cs | Bin 0 -> 1996 bytes .../Properties/AssemblyInfo.cs | 37 + VisualStudio2013Adapter/VisualStudio2013.cs | 14 + .../VisualStudio2013Adapter.csproj | 82 + VisualStudio2015Adapter/GlobalSuppressions.cs | Bin 0 -> 1996 bytes .../Properties/AssemblyInfo.cs | 38 + VisualStudio2015Adapter/VisualStudio2015.cs | 14 + .../VisualStudio2015Adapter.csproj | 82 + VisualStudioAdapter/Defines.cs | 110 + VisualStudioAdapter/GlobalSuppressions.cs | Bin 0 -> 1230 bytes VisualStudioAdapter/IProject.cs | 25 + VisualStudioAdapter/IProjectConfiguration.cs | 19 + VisualStudioAdapter/IPropertySheet.cs | 7 + VisualStudioAdapter/ISolution.cs | 20 + VisualStudioAdapter/IVCPPCompilerOptions.cs | 14 + VisualStudioAdapter/IVisualStudio.cs | 18 + .../Properties/AssemblyInfo.cs | 37 + .../VisualStudioAdapter.csproj | 56 + VisualStudioAdapterShared/Project.cs | 138 + .../ProjectConfiguration.cs | 55 + VisualStudioAdapterShared/Solution.cs | 104 + .../VCppCompilerOptions.cs | 211 + VisualStudioAdapterShared/VisualStudio.cs | 55 + packages/NUnit.2.6.4/NUnit.2.6.4.nupkg | Bin 0 -> 99004 bytes packages/NUnit.2.6.4/NUnit.2.6.4.nuspec | 27 + packages/NUnit.2.6.4/lib/nunit.framework.xml | 10984 ++++++ packages/NUnit.2.6.4/license.txt | 15 + .../log4net.2.0.3/lib/net10-full/log4net.xml | 30525 +++++++++++++++ .../log4net.2.0.3/lib/net11-full/log4net.xml | 30548 +++++++++++++++ .../log4net.2.0.3/lib/net20-full/log4net.xml | 30771 +++++++++++++++ .../lib/net35-client/log4net.xml | 31609 +++++++++++++++ .../log4net.2.0.3/lib/net35-full/log4net.xml | 31814 ++++++++++++++++ .../lib/net40-client/log4net.xml | 31609 +++++++++++++++ .../log4net.2.0.3/lib/net40-full/log4net.xml | 31814 ++++++++++++++++ packages/log4net.2.0.3/log4net.2.0.3.nupkg | Bin 0 -> 1931465 bytes packages/log4net.2.0.3/log4net.2.0.3.nuspec | 20 + packages/repositories.config | 7 + 278 files changed, 248425 insertions(+), 9 deletions(-) create mode 100644 BoostTestAdapter.sln create mode 100644 BoostTestAdapter/App.config create mode 100644 BoostTestAdapter/Boost/Results/BoostStandardError.cs create mode 100644 BoostTestAdapter/Boost/Results/BoostStandardOutput.cs create mode 100644 BoostTestAdapter/Boost/Results/BoostTestResultOutputBase.cs create mode 100644 BoostTestAdapter/Boost/Results/BoostTestResultXMLOutput.cs create mode 100644 BoostTestAdapter/Boost/Results/BoostXmlLog.cs create mode 100644 BoostTestAdapter/Boost/Results/BoostXmlReport.cs create mode 100644 BoostTestAdapter/Boost/Results/IBoostTestResultOutput.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntry.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryError.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryException.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryFatalError.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryInfo.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMemoryLeak.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMessage.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardErrorMessage.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardOutputMessage.cs create mode 100644 BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryWarning.cs create mode 100644 BoostTestAdapter/Boost/Results/TestResult.cs create mode 100644 BoostTestAdapter/Boost/Results/TestResultCollection.cs create mode 100644 BoostTestAdapter/Boost/Runner/BoostTestRunner.cs create mode 100644 BoostTestAdapter/Boost/Runner/BoostTestRunnerBase.cs create mode 100644 BoostTestAdapter/Boost/Runner/BoostTestRunnerCommandLineArgs.cs create mode 100644 BoostTestAdapter/Boost/Runner/BoostTestRunnerFactoryOptions.cs create mode 100644 BoostTestAdapter/Boost/Runner/BoostTestRunnerSettings.cs create mode 100644 BoostTestAdapter/Boost/Runner/BoostTestRunnerTimeoutException.cs create mode 100644 BoostTestAdapter/Boost/Runner/DefaultBoostTestRunnerFactory.cs create mode 100644 BoostTestAdapter/Boost/Runner/ExternalBoostTestRunner.cs create mode 100644 BoostTestAdapter/Boost/Runner/IBoostTestRunner.cs create mode 100644 BoostTestAdapter/Boost/Runner/IBoostTestRunnerFactory.cs create mode 100644 BoostTestAdapter/Boost/Test/ITestVisitable.cs create mode 100644 BoostTestAdapter/Boost/Test/ITestVisitor.cs create mode 100644 BoostTestAdapter/Boost/Test/TestCase.cs create mode 100644 BoostTestAdapter/Boost/Test/TestFramework.cs create mode 100644 BoostTestAdapter/Boost/Test/TestFrameworkBuilder.cs create mode 100644 BoostTestAdapter/Boost/Test/TestSuite.cs create mode 100644 BoostTestAdapter/Boost/Test/TestUnit.cs create mode 100644 BoostTestAdapter/BoostTestAdapter.csproj create mode 100644 BoostTestAdapter/BoostTestDiscoverer.cs create mode 100644 BoostTestAdapter/BoostTestDiscovererFactoryOptions.cs create mode 100644 BoostTestAdapter/BoostTestDiscovererInternal.cs create mode 100644 BoostTestAdapter/BoostTestExeDiscoverer.cs create mode 100644 BoostTestAdapter/BoostTestExecutor.cs create mode 100644 BoostTestAdapter/DefaultBoostTestDiscovererFactory.cs create mode 100644 BoostTestAdapter/ExternalBoostTestDiscoverer.cs create mode 100644 BoostTestAdapter/GlobalSuppressions.cs create mode 100644 BoostTestAdapter/IBoostTestDiscoverer.cs create mode 100644 BoostTestAdapter/IBoostTestDiscovererFactory.cs create mode 100644 BoostTestAdapter/ProjectInfo.cs create mode 100644 BoostTestAdapter/Properties/AssemblyInfo.cs create mode 100644 BoostTestAdapter/Settings/BoostTestAdapterSettings.cs create mode 100644 BoostTestAdapter/Settings/BoostTestAdapterSettingsProvider.cs create mode 100644 BoostTestAdapter/Settings/ExternalBoostTestRunnerSettings.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/ConditionalInclusionsMachine.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToFailedIf.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToMultilineDefine.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToSuccessfullIf.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/IConditionalInclusionsState.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/IncludingDueToIf.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusions/NormalState.cs create mode 100644 BoostTestAdapter/SourceFilter/ConditionalInclusionsFilter.cs create mode 100644 BoostTestAdapter/SourceFilter/CppSourceFile.cs create mode 100644 BoostTestAdapter/SourceFilter/ExpressionEvaluation.cs create mode 100644 BoostTestAdapter/SourceFilter/IEvaluation.cs create mode 100644 BoostTestAdapter/SourceFilter/ISourceFilter.cs create mode 100644 BoostTestAdapter/SourceFilter/MultilineCommentFilter.cs create mode 100644 BoostTestAdapter/SourceFilter/QuotedStringsFilter.cs create mode 100644 BoostTestAdapter/SourceFilter/SingleLineCommentFilter.cs create mode 100644 BoostTestAdapter/SourceFilter/SourceDiscoveryException.cs create mode 100644 BoostTestAdapter/SourceFilter/SourceFilterFactory.cs create mode 100644 BoostTestAdapter/Utility/Code.cs create mode 100644 BoostTestAdapter/Utility/CommandEvaluator.cs create mode 100644 BoostTestAdapter/Utility/CommandLine.cs create mode 100644 BoostTestAdapter/Utility/Logger.cs create mode 100644 BoostTestAdapter/Utility/NativeMethods.cs create mode 100644 BoostTestAdapter/Utility/ProcessStartInfoEx.cs create mode 100644 BoostTestAdapter/Utility/QualifiedNameBuilder.cs create mode 100644 BoostTestAdapter/Utility/ROTException.cs create mode 100644 BoostTestAdapter/Utility/SourceFileInfo.cs create mode 100644 BoostTestAdapter/Utility/TestRun.cs create mode 100644 BoostTestAdapter/Utility/VisualStudio/DefaultDiscoverySink.cs create mode 100644 BoostTestAdapter/Utility/VisualStudio/DefaultVisualStudioInstanceProvider.cs create mode 100644 BoostTestAdapter/Utility/VisualStudio/IVisualStudioInstanceProvider.cs create mode 100644 BoostTestAdapter/Utility/VisualStudio/VSTestModel.cs create mode 100644 BoostTestAdapter/Utility/XmlReaderHelper.cs create mode 100644 BoostTestAdapter/packages.config create mode 100644 BoostTestAdapterNunit/BoostTestAdapter.dll.config create mode 100644 BoostTestAdapterNunit/BoostTestAdapterNunit.csproj create mode 100644 BoostTestAdapterNunit/BoostTestAdaptorNunitTestRunner.nunit create mode 100644 BoostTestAdapterNunit/BoostTestDiscovererTest.cs create mode 100644 BoostTestAdapterNunit/BoostTestExeDiscovererTest.cs create mode 100644 BoostTestAdapterNunit/BoostTestExecutorTest.cs create mode 100644 BoostTestAdapterNunit/BoostTestResultTest.cs create mode 100644 BoostTestAdapterNunit/BoostTestRunnerCommandLineArgsTest.cs create mode 100644 BoostTestAdapterNunit/BoostTestSettingsTest.cs create mode 100644 BoostTestAdapterNunit/BoostTestTest.cs create mode 100644 BoostTestAdapterNunit/CommandEvaluatorTest.cs create mode 100644 BoostTestAdapterNunit/ConditionalInclusionsFilterTest.cs create mode 100644 BoostTestAdapterNunit/CorrectReferencedAssembliesTest.cs create mode 100644 BoostTestAdapterNunit/DefaultBoostTestRunnerFactoryTest.cs create mode 100644 BoostTestAdapterNunit/DefaultTestDiscovererFactoryTest.cs create mode 100644 BoostTestAdapterNunit/ExpressionEvaluationTest.cs create mode 100644 BoostTestAdapterNunit/ExternalBoostTestDiscovererTest.cs create mode 100644 BoostTestAdapterNunit/Fakes/ConsoleMessageLogger.cs create mode 100644 BoostTestAdapterNunit/Fakes/DefaultTestContext.cs create mode 100644 BoostTestAdapterNunit/LoggerTest.cs create mode 100644 BoostTestAdapterNunit/MultiLineCommentFilterTest.cs create mode 100644 BoostTestAdapterNunit/ProjectOutPutCheckerVs12Nunit.cs create mode 100644 BoostTestAdapterNunit/Properties/AssemblyInfo.cs create mode 100644 BoostTestAdapterNunit/QuotedStringsFilterTest.cs create mode 100644 BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestCase.cpp create mode 100644 BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestSuite.cpp create mode 100644 BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSample.cpp create mode 100644 BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSampleRequiringUseOfFilters.cpp create mode 100644 BoostTestAdapterNunit/Resources/Log4NetConfigFile/BoostTestAdapter.dll.config create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/OutputTest/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.log.xml create mode 100644 BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.report.xml create mode 100644 BoostTestAdapterNunit/Resources/Settings/conditionalIncludesDisabled.runsettings create mode 100644 BoostTestAdapterNunit/Resources/Settings/default.runsettings create mode 100644 BoostTestAdapterNunit/Resources/Settings/empty.runsettings create mode 100644 BoostTestAdapterNunit/Resources/Settings/externalTestRunner.runsettings create mode 100644 BoostTestAdapterNunit/Resources/Settings/sample.2.runsettings create mode 100644 BoostTestAdapterNunit/Resources/Settings/sample.runsettings create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsBadSourceFileNesting.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationFail.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_FilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_UnfilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_FilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_UnFilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_FilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_UnFilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_FilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_UnFilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_FilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_UnFilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_FilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_UnFilteredSourceCode.cpp create mode 100644 BoostTestAdapterNunit/Resources/TestLists/empty.test.list.xml create mode 100644 BoostTestAdapterNunit/Resources/TestLists/sample.test.list.xml create mode 100644 BoostTestAdapterNunit/SingleLineCommentFilterTest.cs create mode 100644 BoostTestAdapterNunit/SourceFiltersTest.cs create mode 100644 BoostTestAdapterNunit/TestDiscovererNunit.cs create mode 100644 BoostTestAdapterNunit/Utility/DummySolution.cs create mode 100644 BoostTestAdapterNunit/Utility/DummySourceFile.cs create mode 100644 BoostTestAdapterNunit/Utility/DummyVSProvider.cs create mode 100644 BoostTestAdapterNunit/Utility/ReadOnlyDictionaryWrapper.cs create mode 100644 BoostTestAdapterNunit/Utility/SourceFilterTestBase.cs create mode 100644 BoostTestAdapterNunit/Utility/TestHelper.cs create mode 100644 BoostTestAdapterNunit/Utility/VisualStudioInstanceBuilders.cs create mode 100644 BoostTestAdapterNunit/Utility/Xml/XmlComparison.cs create mode 100644 BoostTestAdapterNunit/VSTestModelTest.cs create mode 100644 BoostTestAdapterNunit/VisualStudio2012AdapterTest.cs create mode 100644 BoostTestAdapterNunit/packages.config create mode 100644 BoostTestPlugin/BoostTestAdapter.dll.config create mode 100644 BoostTestPlugin/BoostTestPlugin.csproj create mode 100644 BoostTestPlugin/Boost_preview.png create mode 100644 BoostTestPlugin/ItemTemplates/VC/Test/Boost Unit Test File.zip create mode 100644 BoostTestPlugin/LICENSE_1_0.txt create mode 100644 BoostTestPlugin/ProjectTemplates/VC/Test/Boost Unit Test Project.zip create mode 100644 BoostTestPlugin/Properties/AssemblyInfo.cs create mode 100644 BoostTestPlugin/Release Notes.txt create mode 100644 BoostTestPlugin/app.config create mode 100644 BoostTestPlugin/boost_test_logoSquare.ico create mode 100644 BoostTestPlugin/packages.config create mode 100644 BoostTestPlugin/source.extension.vsixmanifest create mode 100644 Doku/TestCasesListing.Detailed.xml create mode 100644 Doku/TestCasesListing.Simple.xml create mode 100644 Doku/images/accessing_the_test_explorer_window.png create mode 100644 Doku/images/adding_boost_unit_test_file.png create mode 100644 Doku/images/analyze_code_coverage_for_selected_tests.png create mode 100644 Doku/images/boost_includes_path.png create mode 100644 Doku/images/boost_library_path.png create mode 100644 Doku/images/boost_test_adapter_solution.png create mode 100644 Doku/images/boost_unit_test_adapter_in_extensions_and_updates.png create mode 100644 Doku/images/boost_unit_test_project.png create mode 100644 Doku/images/boost_unit_test_project_files.png create mode 100644 Doku/images/clear_search.png create mode 100644 Doku/images/context_menu_add_new_item.png create mode 100644 Doku/images/debug_selected_tests.png create mode 100644 Doku/images/discovered_tests_01.png create mode 100644 Doku/images/enumerated_tests.png create mode 100644 Doku/images/excluded_from_build.png create mode 100644 Doku/images/experimental_instance.png create mode 100644 Doku/images/group_by_duration.png create mode 100644 Doku/images/group_by_outcome.png create mode 100644 Doku/images/group_by_project.png create mode 100644 Doku/images/group_by_traits.png create mode 100644 Doku/images/grouping_by_traits.png create mode 100644 Doku/images/indentifying_boost_library_toolset.png create mode 100644 Doku/images/jit_visual_studio_selection.png create mode 100644 Doku/images/launch_debugger_compilation_symbol.png create mode 100644 Doku/images/logger_initialized.png create mode 100644 Doku/images/memory_leak_detection.png create mode 100644 Doku/images/myPlaylist.png create mode 100644 Doku/images/platform_toolset.png create mode 100644 Doku/images/project_configuration_type.png create mode 100644 Doku/images/run_all_execution.png create mode 100644 Doku/images/run_selected_tests.png create mode 100644 Doku/images/running_tests_in_code_coverage_mode.png create mode 100644 Doku/images/running_tests_not_in_code_coverage_mode.png create mode 100644 Doku/images/save_new_playlist.png create mode 100644 Doku/images/search_filters.png create mode 100644 Doku/images/select_test_settings_file.png create mode 100644 Doku/images/set_as_startup_project.png create mode 100644 Doku/images/source_extension_vsixmanifest.png create mode 100644 Doku/images/start_external_program.png create mode 100644 Doku/images/start_without_debugging.png create mode 100644 Doku/images/test_adapter_registration.png create mode 100644 Doku/images/test_case_output.png create mode 100644 Doku/images/test_execution_timeout.png create mode 100644 Doku/images/test_explorer_successfull_run.png create mode 100644 Doku/images/unit_test_location.png create mode 100644 Doku/images/unsupported_preprocessor_evaluated_macros.png create mode 100644 Doku/images/visual_studio_debugging.png create mode 100644 Doku/images/visual_studio_jit_debugger.png create mode 100644 Doku/sample-WithExternalTestRunnerDiscoveryType1.runsettings create mode 100644 Doku/sample-WithExternalTestRunnerDiscoveryType2.runsettings create mode 100644 Doku/sample.runsettings create mode 100644 VisualStudio2012Adapter/GlobalSuppressions.cs create mode 100644 VisualStudio2012Adapter/Properties/AssemblyInfo.cs create mode 100644 VisualStudio2012Adapter/VisualStudio2012.cs create mode 100644 VisualStudio2012Adapter/VisualStudio2012Adapter.csproj create mode 100644 VisualStudio2013Adapter/GlobalSuppressions.cs create mode 100644 VisualStudio2013Adapter/Properties/AssemblyInfo.cs create mode 100644 VisualStudio2013Adapter/VisualStudio2013.cs create mode 100644 VisualStudio2013Adapter/VisualStudio2013Adapter.csproj create mode 100644 VisualStudio2015Adapter/GlobalSuppressions.cs create mode 100644 VisualStudio2015Adapter/Properties/AssemblyInfo.cs create mode 100644 VisualStudio2015Adapter/VisualStudio2015.cs create mode 100644 VisualStudio2015Adapter/VisualStudio2015Adapter.csproj create mode 100644 VisualStudioAdapter/Defines.cs create mode 100644 VisualStudioAdapter/GlobalSuppressions.cs create mode 100644 VisualStudioAdapter/IProject.cs create mode 100644 VisualStudioAdapter/IProjectConfiguration.cs create mode 100644 VisualStudioAdapter/IPropertySheet.cs create mode 100644 VisualStudioAdapter/ISolution.cs create mode 100644 VisualStudioAdapter/IVCPPCompilerOptions.cs create mode 100644 VisualStudioAdapter/IVisualStudio.cs create mode 100644 VisualStudioAdapter/Properties/AssemblyInfo.cs create mode 100644 VisualStudioAdapter/VisualStudioAdapter.csproj create mode 100644 VisualStudioAdapterShared/Project.cs create mode 100644 VisualStudioAdapterShared/ProjectConfiguration.cs create mode 100644 VisualStudioAdapterShared/Solution.cs create mode 100644 VisualStudioAdapterShared/VCppCompilerOptions.cs create mode 100644 VisualStudioAdapterShared/VisualStudio.cs create mode 100644 packages/NUnit.2.6.4/NUnit.2.6.4.nupkg create mode 100644 packages/NUnit.2.6.4/NUnit.2.6.4.nuspec create mode 100644 packages/NUnit.2.6.4/lib/nunit.framework.xml create mode 100644 packages/NUnit.2.6.4/license.txt create mode 100644 packages/log4net.2.0.3/lib/net10-full/log4net.xml create mode 100644 packages/log4net.2.0.3/lib/net11-full/log4net.xml create mode 100644 packages/log4net.2.0.3/lib/net20-full/log4net.xml create mode 100644 packages/log4net.2.0.3/lib/net35-client/log4net.xml create mode 100644 packages/log4net.2.0.3/lib/net35-full/log4net.xml create mode 100644 packages/log4net.2.0.3/lib/net40-client/log4net.xml create mode 100644 packages/log4net.2.0.3/lib/net40-full/log4net.xml create mode 100644 packages/log4net.2.0.3/log4net.2.0.3.nupkg create mode 100644 packages/log4net.2.0.3/log4net.2.0.3.nuspec create mode 100644 packages/repositories.config diff --git a/BoostTestAdapter.sln b/BoostTestAdapter.sln new file mode 100644 index 0000000..1b6ddee --- /dev/null +++ b/BoostTestAdapter.sln @@ -0,0 +1,59 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoostTestAdapter", "BoostTestAdapter\BoostTestAdapter.csproj", "{BC4B3BED-9241-4DD6-8070-A9B66DFC08C1}" + ProjectSection(ProjectDependencies) = postProject + {EB0051E3-1DDA-418C-ABAF-C1DA5339114C} = {EB0051E3-1DDA-418C-ABAF-C1DA5339114C} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoostTestPlugin", "BoostTestPlugin\BoostTestPlugin.csproj", "{7918D2BE-590C-4F1B-9A72-9F1CE4640AA9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualStudioAdapter", "VisualStudioAdapter\VisualStudioAdapter.csproj", "{62347CC7-C839-413D-A7CE-598409F6F15B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualStudio2012Adapter", "VisualStudio2012Adapter\VisualStudio2012Adapter.csproj", "{30ECC867-CE89-425F-B452-7A8A320F727D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualStudio2013Adapter", "VisualStudio2013Adapter\VisualStudio2013Adapter.csproj", "{82DF0AEB-582A-4B38-96FC-AAEE773BEAFE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualStudio2015Adapter", "VisualStudio2015Adapter\VisualStudio2015Adapter.csproj", "{EB0051E3-1DDA-418C-ABAF-C1DA5339114C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoostTestAdapterNunit", "BoostTestAdapterNunit\BoostTestAdapterNunit.csproj", "{FE58A67C-D313-46FD-B8F3-F80383EE5FD1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC4B3BED-9241-4DD6-8070-A9B66DFC08C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BC4B3BED-9241-4DD6-8070-A9B66DFC08C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BC4B3BED-9241-4DD6-8070-A9B66DFC08C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BC4B3BED-9241-4DD6-8070-A9B66DFC08C1}.Release|Any CPU.Build.0 = Release|Any CPU + {7918D2BE-590C-4F1B-9A72-9F1CE4640AA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7918D2BE-590C-4F1B-9A72-9F1CE4640AA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7918D2BE-590C-4F1B-9A72-9F1CE4640AA9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7918D2BE-590C-4F1B-9A72-9F1CE4640AA9}.Release|Any CPU.Build.0 = Release|Any CPU + {62347CC7-C839-413D-A7CE-598409F6F15B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62347CC7-C839-413D-A7CE-598409F6F15B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62347CC7-C839-413D-A7CE-598409F6F15B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62347CC7-C839-413D-A7CE-598409F6F15B}.Release|Any CPU.Build.0 = Release|Any CPU + {30ECC867-CE89-425F-B452-7A8A320F727D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30ECC867-CE89-425F-B452-7A8A320F727D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30ECC867-CE89-425F-B452-7A8A320F727D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30ECC867-CE89-425F-B452-7A8A320F727D}.Release|Any CPU.Build.0 = Release|Any CPU + {82DF0AEB-582A-4B38-96FC-AAEE773BEAFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82DF0AEB-582A-4B38-96FC-AAEE773BEAFE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82DF0AEB-582A-4B38-96FC-AAEE773BEAFE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82DF0AEB-582A-4B38-96FC-AAEE773BEAFE}.Release|Any CPU.Build.0 = Release|Any CPU + {EB0051E3-1DDA-418C-ABAF-C1DA5339114C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB0051E3-1DDA-418C-ABAF-C1DA5339114C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB0051E3-1DDA-418C-ABAF-C1DA5339114C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB0051E3-1DDA-418C-ABAF-C1DA5339114C}.Release|Any CPU.Build.0 = Release|Any CPU + {FE58A67C-D313-46FD-B8F3-F80383EE5FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE58A67C-D313-46FD-B8F3-F80383EE5FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE58A67C-D313-46FD-B8F3-F80383EE5FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE58A67C-D313-46FD-B8F3-F80383EE5FD1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/BoostTestAdapter/App.config b/BoostTestAdapter/App.config new file mode 100644 index 0000000..400ca7b --- /dev/null +++ b/BoostTestAdapter/App.config @@ -0,0 +1,27 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/BoostStandardError.cs b/BoostTestAdapter/Boost/Results/BoostStandardError.cs new file mode 100644 index 0000000..03ed9b9 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/BoostStandardError.cs @@ -0,0 +1,57 @@ +using System.IO; +using BoostTestAdapter.Boost.Results.LogEntryTypes; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Standard Error as emitted by Boost Test executables + /// + public class BoostStandardError : BoostTestResultOutputBase + { + /// + /// Constructor accepting a path to the external file + /// + /// The path to an external file. File will be opened on construction. + public BoostStandardError(string path) + : base(path) + { + } + + /// + /// Constructor accepting a stream to the file contents + /// + /// The file content stream. + public BoostStandardError(Stream stream) + : base(stream) + { + } + + #region BoostTestResultOutputBase + + public override void Parse(TestResultCollection collection) + { + Utility.Code.Require(collection, "collection"); + + string err = null; + + using (StreamReader reader = new StreamReader(this.InputStream)) + { + err = reader.ReadToEnd(); + } + + if (!string.IsNullOrEmpty(err)) + { + // Attach the stderr output to each TestCase result in the collection + // since we cannot distinguish to which TestCase (in case multiple TestCases are registered) + // the output is associated with. + foreach (TestResult result in collection) + { + // Consider the whole standard error contents as 1 entry. + result.LogEntries.Add(new LogEntryStandardErrorMessage(err)); + } + } + } + + #endregion BoostTestResultOutputBase + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/BoostStandardOutput.cs b/BoostTestAdapter/Boost/Results/BoostStandardOutput.cs new file mode 100644 index 0000000..c6c0171 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/BoostStandardOutput.cs @@ -0,0 +1,241 @@ +using System.IO; +using System.Text.RegularExpressions; +using BoostTestAdapter.Boost.Results.LogEntryTypes; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Standard Output as emitted by Boost Test executables + /// + public class BoostStandardOutput : BoostTestResultOutputBase + { + #region Constructors + + /// + /// Constructor accepting a path to the external file + /// + /// The path to an external file. File will be opened on construction. + public BoostStandardOutput(string path) + : base(path) + { + this.FailTestOnMemoryLeak = false; + } + + /// + /// Constructor accepting a stream to the file contents + /// + /// The file content stream. + public BoostStandardOutput(Stream stream) + : base(stream) + { + this.FailTestOnMemoryLeak = false; + } + + #endregion Constructors + + #region Properties + + public bool FailTestOnMemoryLeak { get; set; } + + #endregion Properties + + #region IBoostOutputParser + + /// + /// Processes the standard output and populates the relevant test result data of the referenced collection + /// + /// test result collection where the leak information data will be inserted at + public override void Parse(TestResultCollection collection) + { + string strConsoleOutput = StreamToString(this.InputStream); + + //the below regex is intended to only to "detect" if any memory leaks are present. Note that any console output printed by the test generally appears before the memory leaks dump. + Regex regexObj = new Regex(@"Detected\smemory\sleaks!\nDumping objects\s->\n(.*)Object dump complete.", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline); + Match outputMatch = regexObj.Match(strConsoleOutput); + + //leak has been detected + if (outputMatch.Success) + { + RegisterMemoryLeak(outputMatch.Groups[1].Value, collection); + } + + // Extract non-memory leak output + string output = strConsoleOutput.Substring(0, ((outputMatch.Success) ? outputMatch.Index : strConsoleOutput.Length)); + RegisterStandardOutputMessage(output, collection); + } + + #endregion IBoostOutputParser + + private void RegisterMemoryLeak(string leakInformation, TestResultCollection collection) + { + foreach (TestResult result in collection) + { + if (this.FailTestOnMemoryLeak) + { + result.Result = TestResultType.Failed; + } + + Regex regexLeakInformation = new Regex(@"(?:([\\:\w\rA-z.]*?)([\w\d.]*)\((\d{1,})\)\s:\s)?\{(\d{1,})\}[\w\s\d]*,\s(\d{1,})[\s\w.]*\n(.*?)(?=$|(?:[\\\w.:]*\(\d{1,}\)\s:\s)?\{\d{1,}\d)", RegexOptions.IgnoreCase | RegexOptions.Singleline); //the old one wasRegex regexLeakInformation = new Regex(@"^(.*\\)(.*?)\((\d{1,})\).*?{(\d{1,})}.*?(\d{1,})\sbyte", RegexOptions.IgnoreCase | RegexOptions.Multiline); + /* + + The same regex works for when the complete file path along with the line number are reported in the console output such as in the below sample output + + d:\hwa\dev\svn\boostunittestadapterdev\branches\tempbugfixing\sample\boostunittest\boostunittest2\adapterbugs.cpp(58) : {869} normal block at 0x00A88A58, 4 bytes long. + Data: < > CD CD CD CD + d:\hwa\dev\svn\boostunittestadapterdev\branches\tempbugfixing\sample\boostunittest\boostunittest2\adapterbugs.cpp(55) : {868} normal block at 0x00A88788, 4 bytes long. + Data: < > F5 01 00 00 + + and also when this information is not reported such as in the below sample output + + {869} normal block at 0x005E8998, 4 bytes long. + Data: < > CD CD CD CD + {868} normal block at 0x005E8848, 4 bytes long. + Data: < > F5 01 00 00 + + */ + + #region regexLeakInformation + + // (?:([\\:\w\rA-z.]*?)([\w\d.]*)\((\d{1,})\)\s:\s)?\{(\d{1,})\}[\w\s\d]*,\s(\d{1,})[\s\w.]*\n(.*?)(?=$|(?:[\\\w.:]*\(\d{1,}\)\s:\s)?\{\d{1,}\d) + // + // Options: Case insensitive; Exact spacing; Dot matches line breaks; ^$ don't match at line breaks; Numbered capture + // + // Match the regular expression below «(?:([\\:\w\rA-z.]*?)([\w\d.]*)\((\d{1,})\)\s:\s)?» + // Between zero and one times, as many times as possible, giving back as needed (greedy) «?» + // Match the regex below and capture its match into backreference number 1 «([\\:\w\rA-z.]*?)» + // Match a single character present in the list below «[\\:\w\rA-z.]*?» + // Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» + // The backslash character «\\» + // The literal character “:” «:» + // A “word character” (Unicode; any letter or ideograph, digit, connector punctuation) «\w» + // The carriage return character «\r» + // A character in the range between “A” and “z” (case insensitive) «A-z» + // The literal character “.” «.» + // Match the regex below and capture its match into backreference number 2 «([\w\d.]*)» + // Match a single character present in the list below «[\w\d.]*» + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» + // A “word character” (Unicode; any letter or ideograph, digit, connector punctuation) «\w» + // A “digit” (0–9 in any Unicode script) «\d» + // The literal character “.” «.» + // Match the character “(” literally «\(» + // Match the regex below and capture its match into backreference number 3 «(\d{1,})» + // Match a single character that is a “digit” (0–9 in any Unicode script) «\d{1,}» + // Between one and unlimited times, as many times as possible, giving back as needed (greedy) «{1,}» + // Match the character “)” literally «\)» + // Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // Match the character “:” literally «:» + // Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // Match the character “{” literally «\{» + // Match the regex below and capture its match into backreference number 4 «(\d{1,})» + // Match a single character that is a “digit” (0–9 in any Unicode script) «\d{1,}» + // Between one and unlimited times, as many times as possible, giving back as needed (greedy) «{1,}» + // Match the character “}” literally «\}» + // Match a single character present in the list below «[\w\s\d]*» + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» + // A “word character” (Unicode; any letter or ideograph, digit, connector punctuation) «\w» + // A “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // A “digit” (0–9 in any Unicode script) «\d» + // Match the character “,” literally «,» + // Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // Match the regex below and capture its match into backreference number 5 «(\d{1,})» + // Match a single character that is a “digit” (0–9 in any Unicode script) «\d{1,}» + // Between one and unlimited times, as many times as possible, giving back as needed (greedy) «{1,}» + // Match a single character present in the list below «[\s\w.]*» + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» + // A “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // A “word character” (Unicode; any letter or ideograph, digit, connector punctuation) «\w» + // The literal character “.” «.» + // Match the line feed character «\n» + // Match the regex below and capture its match into backreference number 6 «(.*?)» + // Match any single character «.*?» + // Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» + // Assert that the regex below can be matched, starting at this position (positive lookahead) «(?=$|(?:[\\\w.:]*\(\d{1,}\)\s:\s)?\{\d{1,}\d)» + // Match this alternative (attempting the next alternative only if this one fails) «$» + // Assert position at the end of the string, or before the line break at the end of the string, if any (line feed) «$» + // Or match this alternative (the entire group fails if this one fails to match) «(?:[\\\w.:]*\(\d{1,}\)\s:\s)?\{\d{1,}\d» + // Match the regular expression below «(?:[\\\w.:]*\(\d{1,}\)\s:\s)?» + // Between zero and one times, as many times as possible, giving back as needed (greedy) «?» + // Match a single character present in the list below «[\\\w.:]*» + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» + // The backslash character «\\» + // A “word character” (Unicode; any letter or ideograph, digit, connector punctuation) «\w» + // A single character from the list “.:” «.:» + // Match the character “(” literally «\(» + // Match a single character that is a “digit” (0–9 in any Unicode script) «\d{1,}» + // Between one and unlimited times, as many times as possible, giving back as needed (greedy) «{1,}» + // Match the character “)” literally «\)» + // Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // Match the character “:” literally «:» + // Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s» + // Match the character “{” literally «\{» + // Match a single character that is a “digit” (0–9 in any Unicode script) «\d{1,}» + // Between one and unlimited times, as many times as possible, giving back as needed (greedy) «{1,}» + // Match a single character that is a “digit” (0–9 in any Unicode script) «\d» + + #endregion regexLeakInformation + + Match matchLeakInformation = regexLeakInformation.Match(leakInformation); + while (matchLeakInformation.Success) + { + LogEntryMemoryLeak leak = new LogEntryMemoryLeak(); + + result.LogEntries.Add(leak); + + //Capturing group 1,2 and 3 will have the 'Success' property false in case the C++ new operator has not been replaced via the macro + + // Temporary variable used to try and parse unsigned integer values; + uint value = 0; + + if (matchLeakInformation.Groups[1].Success && matchLeakInformation.Groups[2].Success && matchLeakInformation.Groups[3].Success) + { + leak.LeakSourceFilePath = matchLeakInformation.Groups[1].Value; + + leak.LeakSourceFileName = matchLeakInformation.Groups[2].Value; + + if (uint.TryParse(matchLeakInformation.Groups[3].Value, out value)) + { + leak.LeakLineNumber = value; + } + + leak.LeakSourceFileAndLineNumberReportingActive = true; + } + else + { + leak.LeakSourceFileAndLineNumberReportingActive = false; + } + + if (uint.TryParse(matchLeakInformation.Groups[4].Value, out value)) + { + leak.LeakMemoryAllocationNumber = value; + } + + if (uint.TryParse(matchLeakInformation.Groups[5].Value, out value)) + { + leak.LeakSizeInBytes = value; + } + + leak.LeakLeakedDataContents = matchLeakInformation.Groups[6].Value; + + matchLeakInformation = matchLeakInformation.NextMatch(); + } + } + } + + private static void RegisterStandardOutputMessage(string output, TestResultCollection collection) + { + if (!string.IsNullOrEmpty(output)) + { + foreach (TestResult result in collection) + { + result.LogEntries.Add(new LogEntryStandardOutputMessage(output)); + } + } + } + + private static string StreamToString(Stream stream) + { + StreamReader reader = new StreamReader(stream); + return reader.ReadToEnd(); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/BoostTestResultOutputBase.cs b/BoostTestAdapter/Boost/Results/BoostTestResultOutputBase.cs new file mode 100644 index 0000000..018a128 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/BoostTestResultOutputBase.cs @@ -0,0 +1,88 @@ +using System; +using System.IO; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Base class for IBoostTestResultOutput implementations + /// providing common functionality. + /// + public abstract class BoostTestResultOutputBase : IBoostTestResultOutput + { + #region Constructors + + /// + /// Constructor for external files. + /// + /// The path to an external file. File will be opened on construction. + protected BoostTestResultOutputBase(string path) + { + this.CloseStreamOnDispose = true; + this.InputStream = File.OpenRead(path); + this.IsDisposed = false; + } + + /// + /// Constructor for streams. Ideal for test purposes. + /// + /// The stream containing the output. + protected BoostTestResultOutputBase(Stream stream) + { + this.CloseStreamOnDispose = false; + this.InputStream = stream; + + this.IsDisposed = false; + } + + #endregion Constructors + + #region Properties + + /// + /// Flag stating whether the stream should be closed on dispose. + /// + protected bool CloseStreamOnDispose { get; set; } + + /// + /// The input stream representing the content. + /// + protected Stream InputStream { get; set; } + + #endregion Properties + + #region IBoostOutputParser + + public abstract void Parse(TestResultCollection collection); + + #endregion IBoostOutputParser + + #region IDisposable + + public void Dispose() + { + Dispose(true); + + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!IsDisposed) + { + if (disposing) + { + if (this.CloseStreamOnDispose) + { + this.InputStream.Dispose(); + } + } + } + + IsDisposed = true; + } + + private bool IsDisposed { get; set; } + + #endregion IDisposable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/BoostTestResultXMLOutput.cs b/BoostTestAdapter/Boost/Results/BoostTestResultXMLOutput.cs new file mode 100644 index 0000000..b0b455a --- /dev/null +++ b/BoostTestAdapter/Boost/Results/BoostTestResultXMLOutput.cs @@ -0,0 +1,71 @@ +using System.IO; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results +{ + + /// + /// Boost Test Result abstraction needed for the proper handling of XML documents. + /// + public abstract class BoostTestResultXMLOutput : BoostTestResultOutputBase + { + protected BoostTestResultXMLOutput(string path) + : base(AddXMLEncodingDeclaration(path)) + { + this.CloseStreamOnDispose = true; + } + + protected BoostTestResultXMLOutput(Stream stream) + : base(stream) + { + + } + + /// + /// Boost UTF does not add any XML Encoding Declaration in the XML file so in case a file contains German characters, + /// upon loading the xml document an exception will be thrown due to un-allowed characters + /// + /// path of the xml file to be loaded + /// Stream object containing the xml file data + private static Stream AddXMLEncodingDeclaration(string path) + { + MemoryStream memoryStream = null; + try + { + memoryStream = new MemoryStream(); + StreamWriter writer = new StreamWriter(memoryStream); + writer.WriteLine(""); + writer.Flush(); + FileStream fileStream = null; + try + { + fileStream = File.OpenRead(path); + fileStream.CopyTo(memoryStream); + } + finally + { + if (fileStream != null) + { + fileStream.Close(); + } + else + { + Logger.Error("filestream was found to be null when handling path: " + path); + } + } + + memoryStream.Position = 0; + } + catch + { + if (memoryStream != null) + { + memoryStream.Close(); + } + throw; + } + + return memoryStream; + } + } +} diff --git a/BoostTestAdapter/Boost/Results/BoostXmlLog.cs b/BoostTestAdapter/Boost/Results/BoostXmlLog.cs new file mode 100644 index 0000000..95277a6 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/BoostXmlLog.cs @@ -0,0 +1,232 @@ +using System.Globalization; +using System.IO; +using System.Xml; +using BoostTestAdapter.Boost.Results.LogEntryTypes; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Boost Xml Log + /// + public class BoostXmlLog : BoostTestResultXMLOutput + { + #region Constants + + /// + /// Xml constants + /// + private static class Xml + { + public const string TestLog = "TestLog"; + public const string TestSuite = "TestSuite"; + public const string TestCase = "TestCase"; + public const string Name = "name"; + public const string TestingTime = "TestingTime"; + public const string Info = "Info"; + public const string Message = "Message"; + public const string Warning = "Warning"; + public const string Error = "Error"; + public const string FatalError = "FatalError"; + public const string Exception = "Exception"; + public const string LastCheckpoint = "LastCheckpoint"; + public const string File = "file"; + public const string Line = "line"; + } + + #endregion Constants + + #region Constructors + + /// + /// Constructor accepting a path to the external file + /// + /// The path to an external file. File will be opened on construction. + public BoostXmlLog(string path) + : base(path) + { + } + + /// + /// Constructor accepting a stream to the file contents + /// + /// The file content stream. + public BoostXmlLog(Stream stream) + : base(stream) + { + } + + #endregion Constructors + + #region IBoostOutputParser + + public override void Parse(TestResultCollection collection) + { + XmlDocument doc = new XmlDocument(); + doc.Load(this.InputStream); + + if (doc.DocumentElement.Name == Xml.TestLog) + { + ParseTestUnitsLog(doc.DocumentElement.ChildNodes, new QualifiedNameBuilder(), collection); + } + } + + #endregion IBoostOutputParser + + /// + /// Parses child TestUnit nodes. + /// + /// The collection of Xml nodes which are valid TestUnit nodes. + /// The QualifiedNameBuilder which hosts the current fully qualified path. + /// The TestResultCollection which will host the result. + private static void ParseTestUnitsLog(XmlNodeList nodes, QualifiedNameBuilder path, TestResultCollection collection) + { + foreach (XmlNode child in nodes) + { + if (child.NodeType == XmlNodeType.Element) + { + if (child.Name == Xml.TestSuite) + { + ParseTestSuiteLog(child, path, collection); + } + else if (child.Name == Xml.TestCase) + { + ParseTestCaseLog(child, path, collection); + } + } + } + } + + /// + /// Parses a TestSuite log node. + /// + /// The TestSuite Xml node to parse. + /// The QualifiedNameBuilder which hosts the current fully qualified path. + /// The TestResultCollection which will host the result. + private static void ParseTestSuiteLog(XmlNode node, QualifiedNameBuilder path, TestResultCollection collection) + { + path.Push(node.Attributes[Xml.Name].Value); + + ParseTestUnitsLog(node.ChildNodes, path, collection); + + path.Pop(); + } + + /// + /// Parses a TestCase log node. + /// + /// The TestCase Xml node to parse. + /// The QualifiedNameBuilder which hosts the current fully qualified path. + /// The TestResultCollection which will host the result. + private static void ParseTestCaseLog(XmlNode node, QualifiedNameBuilder path, TestResultCollection collection) + { + // Temporarily push TestCase on TestSuite name builder to acquire the fully qualified name of the TestCase + path.Push(node.Attributes[Xml.Name].Value); + + // Acquire result record of this TestCase + TestResult result = collection[path.ToString()]; + if (result == null) + { + result = new TestResult(collection); + collection[path.ToString()] = result; + } + + // Reset path to original value + path.Pop(); + + XmlNode testingTime = node.SelectSingleNode(Xml.TestingTime); + + if (testingTime != null) + { + // Duration is in seconds i.e. remember to * 10 for milliseconds. + result.Duration = uint.Parse(testingTime.InnerText, CultureInfo.InvariantCulture); + } + + ParseTestCaseLogEntries(node.ChildNodes, result); + } + + /// + /// Parses Log Entries from the collection of log nodes. + /// + /// The collection of Xml nodes which are valid LogEntry nodes. + /// The TestResult which will host the parsed LogEntries. + private static void ParseTestCaseLogEntries(XmlNodeList nodes, TestResult result) + { + foreach (XmlNode child in nodes) + { + if (child.NodeType == XmlNodeType.Element) + { + LogEntry entry = null; + + switch (child.Name) + { + case Xml.Info: entry = new LogEntryInfo(child.InnerText); break; + case Xml.Message: entry = new LogEntryMessage(child.InnerText); break; + case Xml.Warning: entry = new LogEntryWarning(child.InnerText); break; + case Xml.Error: entry = new LogEntryError(child.InnerText); break; + case Xml.FatalError: entry = new LogEntryFatalError(child.InnerText); break; + case Xml.Exception: entry = ParseTestCaseLogException(child); break; + } + + if (entry != null) + { + entry.Source = ParseSourceInfo(child); + result.LogEntries.Add(entry); + } + } + } + } + + /// + /// Parse SourceFileInfo from the provided node. + /// + /// The Xml node which contains source file information. + /// A SourceFileInfo populated from the provided Xml node. + private static SourceFileInfo ParseSourceInfo(XmlNode node) + { + SourceFileInfo info = null; + + XmlAttribute file = node.Attributes[Xml.File]; + if (file != null) + { + info = new SourceFileInfo(file.Value); + } + + if (info != null) + { + XmlAttribute line = node.Attributes[Xml.Line]; + if (line != null) + { + info.LineNumber = int.Parse(line.Value, CultureInfo.InvariantCulture); + } + } + + return info; + } + + /// + /// Parse a LogException from the provided node. + /// + /// The Xml node which contains exception information. + /// A LogEntryException populated from the provided Xml node. + private static LogEntryException ParseTestCaseLogException(XmlNode node) + { + LogEntryException exception = new LogEntryException(); + + foreach (XmlNode child in node.ChildNodes) + { + if (child.NodeType == XmlNodeType.CDATA) + { + exception.Detail = child.InnerText; + } + else if ((child.NodeType == XmlNodeType.Element) && (child.Name == Xml.LastCheckpoint)) + { + exception.LastCheckpoint = ParseSourceInfo(child); + exception.CheckpointDetail = child.InnerText; + } + } + + return exception; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/BoostXmlReport.cs b/BoostTestAdapter/Boost/Results/BoostXmlReport.cs new file mode 100644 index 0000000..0d5e6ce --- /dev/null +++ b/BoostTestAdapter/Boost/Results/BoostXmlReport.cs @@ -0,0 +1,153 @@ +using System.Globalization; +using System.IO; +using System.Xml.XPath; +using BoostTestAdapter.Boost.Test; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Boost Xml Report + /// + public class BoostXmlReport : BoostTestResultXMLOutput + { + #region Constants + + /// + /// Xml constants + /// + private static class Xml + { + public const string TestResult = "TestResult"; + public const string TestSuite = "TestSuite"; + public const string TestCase = "TestCase"; + public const string Name = "name"; + public const string Result = "result"; + public const string AssertionsPassed = "assertions_passed"; + public const string AssertionsFailed = "assertions_failed"; + public const string ExpectedFailures = "expected_failures"; + } + + #endregion Constants + + #region Constructors + + /// + /// Constructor accepting a path to the external file + /// + /// The path to an external file. File will be opened on construction. + public BoostXmlReport(string path) + : base(path) + { + } + + /// + /// Constructor accepting a stream to the file contents + /// + /// The file content stream. + public BoostXmlReport(Stream stream) + : base(stream) + { + } + + #endregion Constructors + + #region IBoostOutputParser + + public override void Parse(TestResultCollection collection) + { + XPathDocument doc = new XPathDocument(this.InputStream); + XPathNavigator nav = doc.CreateNavigator(); + + // Move to document root node + if ((nav.MoveToFirstChild()) && (nav.LocalName == Xml.TestResult)) + { + ParseTestUnitsReport(nav, null, collection); + } + } + + #endregion IBoostOutputParser + + /// + /// Parses child TestUnit nodes. + /// + /// The parent XPathNavigator which hosts TestUnit nodes. + /// The parent TestSuite to which TestUnits are attached to. + /// The TestResultCollection which will host the result. + private static void ParseTestUnitsReport(XPathNavigator nav, TestSuite parent, TestResultCollection collection) + { + foreach (XPathNavigator child in nav.SelectChildren(Xml.TestSuite, string.Empty)) + { + ParseTestSuiteReport(child, parent, collection); + } + + foreach (XPathNavigator child in nav.SelectChildren(Xml.TestCase, string.Empty)) + { + ParseTestCaseReport(child, parent, collection); + } + } + + /// + /// Parses a TestSuite node. + /// + /// The XPathNavigator pointing to a TestSuite node. + /// The parent TestSuite to which TestUnits are attached to. + /// The TestResultCollection which will host the result. + private static void ParseTestSuiteReport(XPathNavigator node, TestSuite parent, TestResultCollection collection) + { + TestSuite testSuite = new TestSuite(node.GetAttribute(Xml.Name, string.Empty), parent); + collection[testSuite] = ParseTestResult(node, testSuite, collection); + + ParseTestUnitsReport(node, testSuite, collection); + } + + /// + /// Parses a TestCase node. + /// + /// The XPathNavigator pointing to a TestCase node. + /// The parent TestSuite to which TestUnits are attached to. + /// The TestResultCollection which will host the result. + private static void ParseTestCaseReport(XPathNavigator node, TestSuite parent, TestResultCollection collection) + { + TestCase testCase = new TestCase(node.GetAttribute(Xml.Name, string.Empty), parent); + collection[testCase] = ParseTestResult(node, testCase, collection); + } + + /// + /// Parses a general test result information from the provided node. + /// + /// The XPathNavigator pointing to a TestUnit node. + /// The test unit for which the test results are related to. + /// The TestResultCollection which will host the result. + private static TestResult ParseTestResult(XPathNavigator node, TestUnit unit, TestResultCollection collection) + { + TestResult result = new TestResult(collection); + + result.Unit = unit; + result.Result = ParseResultType(node.GetAttribute(Xml.Result, string.Empty)); + + result.AssertionsPassed = uint.Parse(node.GetAttribute(Xml.AssertionsPassed, string.Empty), CultureInfo.InvariantCulture); + result.AssertionsFailed = uint.Parse(node.GetAttribute(Xml.AssertionsFailed, string.Empty), CultureInfo.InvariantCulture); + result.ExpectedFailures = uint.Parse(node.GetAttribute(Xml.ExpectedFailures, string.Empty), CultureInfo.InvariantCulture); + + return result; + } + + /// + /// Parses a Result enumeration from string. + /// + /// The value to parse. + /// The parsed Result enumeration value. + private static TestResultType ParseResultType(string value) + { + switch (value.ToUpperInvariant()) + { + case "PASSED": return TestResultType.Passed; + case "FAILED": return TestResultType.Failed; + case "ABORTED": return TestResultType.Aborted; + case "SKIPPED": return TestResultType.Skipped; + } + + return TestResultType.Skipped; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/IBoostTestResultOutput.cs b/BoostTestAdapter/Boost/Results/IBoostTestResultOutput.cs new file mode 100644 index 0000000..a819bec --- /dev/null +++ b/BoostTestAdapter/Boost/Results/IBoostTestResultOutput.cs @@ -0,0 +1,21 @@ +using System; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Interface for Boost Test result output. + /// + public interface IBoostTestResultOutput : IDisposable + { + /// + /// Parses the referenced output and updates the referred to + /// TestResultCollection with the newly collected information. + /// + /// + /// Implementations should check whether the collection already has an entry + /// defined for a particular TestUnit and update the entry or rewrite as necessary. + /// + /// The TestResultCollection which will host the parsed details. + void Parse(TestResultCollection collection); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntry.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntry.cs new file mode 100644 index 0000000..6b8e787 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntry.cs @@ -0,0 +1,50 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// Base class for Log entries + /// + public abstract class LogEntry + { + #region Constructors + + /// + /// Default constructor. + /// + protected LogEntry() + { + } + + /// + /// Constructor accepting a SourceFileInfo + /// + /// Source file information related to this log message. May be null. + protected LogEntry(SourceFileInfo source) : + this() + { + this.Source = source; + } + + #endregion Constructors + + /// + /// Source file information related to this log message. May be null. + /// + public SourceFileInfo Source { get; set; } + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Base"; + } + + /// + /// Log detail message. + /// + public string Detail { get; set; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryError.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryError.cs new file mode 100644 index 0000000..0333a94 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryError.cs @@ -0,0 +1,43 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// 'Error' log entry + /// + public class LogEntryError : LogEntry + { + #region Constructors + + /// + /// Constructor accepting a detail message + /// + /// detail message of type string + public LogEntryError(string detail) + { + this.Detail = detail; + } + + /// + /// Constructor accepting a detail message and a SourceFileInfo object + /// + /// detail message of type string + /// Source file information related to this log message. May be null. + public LogEntryError(string detail, SourceFileInfo source) + : base(source) + { + this.Detail = detail; + } + + #endregion Constructors + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Error"; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryException.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryException.cs new file mode 100644 index 0000000..388a1e6 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryException.cs @@ -0,0 +1,58 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// A LogEntry specification detailing an exception message. + /// + public class LogEntryException : LogEntry + { + #region Constructors + + public LogEntryException() : + this(null) + { + } + + /// + /// Constructor accepting a detail message of type string + /// + /// Exception detail message + public LogEntryException(string detail) : + this(detail, null) + { + } + + /// + /// Constructor accepting an exception detail message and a SourceFileInfo object + /// + /// detail message of type string + /// Source file information related to this log message. May be null. + public LogEntryException(string detail, SourceFileInfo source) + : base(source) + { + this.Detail = detail; + } + + #endregion Constructors + + /// + /// Last Checkpoint source information. + /// + public SourceFileInfo LastCheckpoint { get; set; } + + /// + /// Checkpoint detail message. + /// + public string CheckpointDetail { get; set; } + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Exception"; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryFatalError.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryFatalError.cs new file mode 100644 index 0000000..2c213dc --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryFatalError.cs @@ -0,0 +1,43 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// A 'Fatal Error' log entry. + /// + public class LogEntryFatalError : LogEntry + { + #region Constructors + + /// + /// Constructor accepting a detail message of type string + /// + /// Exception detail message + public LogEntryFatalError(string detail) + { + this.Detail = detail; + } + + /// + /// Constructor accepting a detail message and a SourceFileInfo object + /// + /// detail message of type string + /// Source file information related to this log message. May be null. + public LogEntryFatalError(string detail, SourceFileInfo source) + : base(source) + { + this.Detail = detail; + } + + #endregion Constructors + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Fatal Error"; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryInfo.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryInfo.cs new file mode 100644 index 0000000..abd244a --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryInfo.cs @@ -0,0 +1,43 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// An 'Info' log entry + /// + public class LogEntryInfo : LogEntry + { + #region Constructors + + /// + /// Constructor accepting a detail message of type string + /// + /// Exception detail message + public LogEntryInfo(string detail) + { + this.Detail = detail; + } + + /// + /// Constructor accepting a detail message and a SourceFileInfo object + /// + /// detail message of type string + /// Source file information related to this log message. May be null. + public LogEntryInfo(string detail, SourceFileInfo source) + : base(source) + { + this.Detail = detail; + } + + #endregion Constructors + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Info"; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMemoryLeak.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMemoryLeak.cs new file mode 100644 index 0000000..a089d26 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMemoryLeak.cs @@ -0,0 +1,93 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// Log entry for an identified memory leak. + /// + public class LogEntryMemoryLeak : LogEntry + { + private const string MemoryLeakNotification = "Memory leaks have been been detected. Please refer to the output tab for more details."; + + #region Constructors + + /// + /// Default constructor. + /// + public LogEntryMemoryLeak() + { + this.Detail = MemoryLeakNotification; + } + + /// + /// Constructor accepting a SourceFileInfo object + /// + /// Source file information related to this log message. May be null. + public LogEntryMemoryLeak(SourceFileInfo source) + : base(source) + { + } + + public LogEntryMemoryLeak(string leakSourceFilePath, string leakSourceFileName, uint? leakLineNumber, uint? leakSizeInBytes, uint? leakMemoryAllocationNumber, string leakLeakedDataContents) + { + this.LeakSourceFilePath = leakSourceFilePath; + this.LeakSourceFileName = leakSourceFileName; + this.LeakLineNumber = leakLineNumber; + this.LeakSizeInBytes = leakSizeInBytes; + this.LeakMemoryAllocationNumber = leakMemoryAllocationNumber; + this.LeakLeakedDataContents = leakLeakedDataContents; + this.Detail = MemoryLeakNotification; + } + + #endregion Constructors + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Memory leak"; + } + + /// + /// Indicates the source file path where the leak was detected at + /// + /// If null, the information regarding the leak source file path is not available. This generally is because the macro to replace the C++ operator new has not been utilized in the test project. + public string LeakSourceFilePath { get; set; } + + /// + /// Indicates the source filename where the leak was detected at + /// + /// If null, the information regarding the leak source file name is not available. This generally is because the macro to replace the C++ operator new has not been utilized in the test project. + public string LeakSourceFileName { get; set; } + + /// + /// Line number (respective the source file specified in property LeakSourceFileName) where the leak is detected at + /// + /// If null, the information regarding the leak line number is not available. This generally is because the macro to replace the C++ operator new has not been utilized in the test project, or the parsing of the line number failed. + public uint? LeakLineNumber { get; set; } + + /// + /// Number of bytes leaked. + /// + /// The Boost UTF always reports the leak size in bytes. If null, then it means that the parsing of the respective console output failed. + public uint? LeakSizeInBytes { get; set; } + + /// + /// Property containing the memory allocation number of the leak/ + /// + /// The Boost UTF always reports the Memory allocation number whenever a memory leak is reported. If null, then it means that the parsing of the respective console output failed. + public uint? LeakMemoryAllocationNumber { get; set; } + + /// + /// Property containing the leaked data contents as reported by Boost UTF + /// + public string LeakLeakedDataContents { get; set; } + + /// + /// Property serves as an indicator wheather the source file and the line number information for the memory leak were available or not + /// + public bool LeakSourceFileAndLineNumberReportingActive { get; set; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMessage.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMessage.cs new file mode 100644 index 0000000..5ffab19 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryMessage.cs @@ -0,0 +1,43 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// A 'Message' log entry + /// + public class LogEntryMessage : LogEntry + { + #region Constructors + + /// + /// Constructor accepting a detail message + /// + /// detail message of type string + public LogEntryMessage(string detail) + { + this.Detail = detail; + } + + /// + /// Constructor accepting a detail message and a SourceFileInfo object + /// + /// detail message of type string + /// Source file information related to this log message. May be null. + public LogEntryMessage(string detail, SourceFileInfo source) + : base(source) + { + this.Detail = detail; + } + + #endregion Constructors + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Message"; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardErrorMessage.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardErrorMessage.cs new file mode 100644 index 0000000..6e10566 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardErrorMessage.cs @@ -0,0 +1,26 @@ +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// Log entry for a message emitted to standard error. + /// + public class LogEntryStandardErrorMessage : LogEntry + { + #region Constructors + + public LogEntryStandardErrorMessage(string detail) + { + this.Detail = detail; + } + + #endregion Constructors + + #region object overrides + + public override string ToString() + { + return "Standard Error"; + } + + #endregion object overrides + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardOutputMessage.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardOutputMessage.cs new file mode 100644 index 0000000..daea3ee --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryStandardOutputMessage.cs @@ -0,0 +1,26 @@ +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// Log entry for a message emitted to standard output. + /// + public class LogEntryStandardOutputMessage : LogEntry + { + #region Constructors + + public LogEntryStandardOutputMessage(string detail) + { + this.Detail = detail; + } + + #endregion Constructors + + #region object overrides + + public override string ToString() + { + return "Standard Output"; + } + + #endregion object overrides + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryWarning.cs b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryWarning.cs new file mode 100644 index 0000000..1dfacff --- /dev/null +++ b/BoostTestAdapter/Boost/Results/LogEntryTypes/LogEntryWarning.cs @@ -0,0 +1,43 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Results.LogEntryTypes +{ + /// + /// A 'Warning' log entry + /// + public class LogEntryWarning : LogEntry + { + #region Constructors + + /// + /// Constructor accepting a detail message + /// + /// detail message of type string + public LogEntryWarning(string detail) + { + this.Detail = detail; + } + + /// + /// Constructor accepting a detail message and a SourceFileInfo object + /// + /// detail message of type string + /// Source file information related to this log message. May be null. + public LogEntryWarning(string detail, SourceFileInfo source) + : base(source) + { + this.Detail = detail; + } + + #endregion Constructors + + /// + /// returns a string with the description of the class + /// + /// string having the description of the class + public override string ToString() + { + return "Warning"; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/TestResult.cs b/BoostTestAdapter/Boost/Results/TestResult.cs new file mode 100644 index 0000000..05be8e6 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/TestResult.cs @@ -0,0 +1,226 @@ +using System.Collections.Generic; +using System.Linq; +using BoostTestAdapter.Boost.Results.LogEntryTypes; +using BoostTestAdapter.Boost.Test; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Test result enumeration. + /// + public enum TestResultType + { + Passed, + Skipped, + Aborted, + Failed + } + + /// + /// Aggregates Boost Test result information. + /// + public class TestResult + { + /// + /// Constructor. + /// + public TestResult() : + this(null) + { + } + + /// + /// Constructor. + /// + /// The parent collection which hosts this TestResult. + public TestResult(TestResultCollection collection) + { + this.Collection = collection; + this.LogEntries = new List(); + } + + /// + /// Parent collection which hosts this result. + /// + public TestResultCollection Collection { get; private set; } + + /// + /// Test Unit related to this test result. + /// + public TestUnit Unit { get; set; } + + /// + /// Result type. + /// + public TestResultType Result { get; set; } + + /// + /// Number of assertions passed. + /// + public uint AssertionsPassed { get; set; } + + /// + /// Number of assertions failed. + /// + public uint AssertionsFailed { get; set; } + + /// + /// Number of expected failures. + /// + public uint ExpectedFailures { get; set; } + + /// + /// Number of contained test cases which passed. + /// + public uint TestCasesPassed + { + get + { + return GetCount(TestResultType.Passed); + } + } + + /// + /// Number of contained test cases which failed. + /// + public uint TestCasesFailed + { + get + { + return GetCount(new TestResultType[] { TestResultType.Failed, TestResultType.Aborted }); + } + } + + /// + /// Number of contained test cases which were skipped. + /// + public uint TestCasesSkipped + { + get + { + return GetCount(TestResultType.Skipped); + } + } + + /// + /// Number of contained test cases which were aborted. + /// + public uint TestCasesAborted + { + get + { + return GetCount(TestResultType.Aborted); + } + } + + /// + /// Duration of test in microseconds + /// + public uint Duration { get; set; } + + /// + /// Collection of related log entries. + /// + public ICollection LogEntries { get; private set; } + + #region Utility + + /// + /// Returns the number of contained test cases which are of the specified Result type. + /// + /// The result type to lookup + /// The number of contained test cases which are of the specified Result type. + private uint GetCount(TestResultType type) + { + return GetCount(new TestResultType[] { type }); + } + + /// + /// Returns the number of contained test cases which are of the specified Result type. + /// + /// The result types to lookup + /// The number of contained test cases which are of the specified Result type. + private uint GetCount(IEnumerable types) + { + if (this.Collection == null) + { + if (this.Unit is TestCase) + { + return (types.Contains(this.Result)) ? 1u : 0u; + } + } + else + { + TestCaseResultVisitor visitor = new TestCaseResultVisitor(this.Collection, types); + this.Unit.Apply(visitor); + return visitor.Count; + } + + return 0u; + } + + /// + /// Boost Test Unit visitor implementation. Aggregates the number of + /// test cases which are of a specific Result type. + /// + private class TestCaseResultVisitor : ITestVisitor + { + #region Constructors + + /// + /// Constructor. + /// + /// The TestResultCollection which hosts all results. + /// The types to lookup + public TestCaseResultVisitor(TestResultCollection collection, IEnumerable types) + { + this.Collection = collection; + this.ResultTypes = types; + this.Count = 0; + } + + #endregion Constructors + + #region Properties + + public TestResultCollection Collection { get; private set; } + + public IEnumerable ResultTypes { get; private set; } + + /// + /// The number of test cases encountered which are of the specified Result type. + /// + public uint Count { get; private set; } + + #endregion Properties + + #region ITestVisitor + + public void Visit(TestCase testCase) + { + Utility.Code.Require(testCase, "testCase"); + + TestResult result = this.Collection[testCase]; + + if ((result != null) && (this.ResultTypes.Contains(result.Result))) + { + ++this.Count; + } + } + + public void Visit(TestSuite testSuite) + { + Utility.Code.Require(testSuite, "testSuite"); + + foreach (TestUnit unit in testSuite.Children) + { + unit.Apply(this); + } + } + + #endregion ITestVisitor + } + + #endregion Utility + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Results/TestResultCollection.cs b/BoostTestAdapter/Boost/Results/TestResultCollection.cs new file mode 100644 index 0000000..7d56533 --- /dev/null +++ b/BoostTestAdapter/Boost/Results/TestResultCollection.cs @@ -0,0 +1,226 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BoostTestAdapter.Boost.Runner; +using BoostTestAdapter.Boost.Test; +using BoostTestAdapter.Settings; + +namespace BoostTestAdapter.Boost.Results +{ + /// + /// Collection of Boost Test Results. + /// + public class TestResultCollection : IEnumerable + { + #region Constructors + + /// + /// Default Constructor. + /// + public TestResultCollection() + { + this.Results = new Dictionary(); + } + + #endregion Constructors + + #region Properties + + private Dictionary Results { get; set; } + + #endregion Properties + + #region Indexers + + /// + /// Returns the result for the requested TestUnit or null if not found. + /// + /// TestUnit to lookup. + /// The results associated with the requested TestUnit or null if not found. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1043:UseIntegralOrStringArgumentForIndexers")] + public TestResult this[TestUnit unit] + { + get + { + Utility.Code.Require(unit, "unit"); + return this[unit.FullyQualifiedName]; + } + + set + { + Utility.Code.Require(unit, "unit"); + this[unit.FullyQualifiedName] = value; + } + } + + /// + /// Returns the result for the requested TestUnit fully qualified name or null if not found. + /// + /// The TestUnit's fully qualified name to lookup. + /// The results associated with the requested TestUnit fully qualified name or null if not found. + public TestResult this[string fullyQualifiedName] + { + get + { + TestResult value = null; + if (this.Results.TryGetValue(fullyQualifiedName, out value)) + { + return value; + } + + return null; + } + + set + { + this.Results[fullyQualifiedName] = value; + } + } + + #endregion Indexers + + /// + /// Parses the Xml report and log file as specified within the provided + /// BoostTestRunnerCommandLineArgs instance. + /// + /// The BoostTestRunnerCommandLineArgs which specify the report and log file. + /// The BoostTestAdapterSettings which specify adapter specific settings. + public void Parse(BoostTestRunnerCommandLineArgs args, BoostTestAdapterSettings settings) + { + IEnumerable parsers = Enumerable.Empty(); + + try + { + parsers = new IBoostTestResultOutput[] { + GetReportParser(args), + GetLogParser(args), + GetStandardOutput(args, settings), + GetStandardError(args) + }; + + Parse(parsers); + } + finally + { + foreach (IBoostTestResultOutput parser in parsers) + { + if (parser != null) + { + parser.Dispose(); + } + } + } + } + + /// + /// Parses the collection of BoostTestResultOutput. Results are stored + /// within this instance. + /// + /// The Boost Test output which will be parsed. + public void Parse(IEnumerable output) + { + Utility.Code.Require(output, "output"); + + foreach (IBoostTestResultOutput parser in output) + { + if (parser != null) + { + parser.Parse(this); + } + } + } + + #region IBoostTestResultOutput Factory Methods + + /// + /// Factory method which provides the report IBoostTestResultOutput based on the provided BoostTestRunnerCommandLineArgs + /// + /// The command line args which were used to generate the test results + /// An IBoostTestResultOutput or null if one cannot be identified from the provided arguments + private static IBoostTestResultOutput GetReportParser(BoostTestRunnerCommandLineArgs args) + { + string report = args.ReportFile; + if (!string.IsNullOrEmpty(report)) + { + if (args.ReportFormat == OutputFormat.XML) + { + return new BoostXmlReport(args.ReportFile); + } + } + + return null; + } + + /// + /// Factory method which provides the log IBoostTestResultOutput based on the provided BoostTestRunnerCommandLineArgs + /// + /// The command line args which were used to generate the test results + /// An IBoostTestResultOutput or null if one cannot be identified from the provided arguments + private static IBoostTestResultOutput GetLogParser(BoostTestRunnerCommandLineArgs args) + { + string log = args.LogFile; + if (!string.IsNullOrEmpty(log)) + { + if (args.LogFormat == OutputFormat.XML) + { + return new BoostXmlLog(args.LogFile); + } + } + + return null; + } + + /// + /// Factory method which provides the standard output IBoostTestResultOutput based on the provided BoostTestRunnerCommandLineArgs and BoostTestAdapterSettings + /// + /// The command line args which were used to generate the test results + /// The run time settings which were used to generate the test results + /// An IBoostTestResultOutput or null if one cannot be identified from the provided arguments + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] + private static IBoostTestResultOutput GetStandardOutput(BoostTestRunnerCommandLineArgs args, BoostTestAdapterSettings settings) + { + if ((!string.IsNullOrEmpty(args.StandardOutFile)) && (File.Exists(args.StandardOutFile))) + { + return new BoostStandardOutput(args.StandardOutFile) + { + FailTestOnMemoryLeak = settings.FailTestOnMemoryLeak + }; + } + + return null; + } + + /// + /// Factory method which provides the standard error IBoostTestResultOutput based on the provided BoostTestRunnerCommandLineArgs and BoostTestAdapterSettings + /// + /// The command line args which were used to generate the test results + /// An IBoostTestResultOutput or null if one cannot be identified from the provided arguments + private static IBoostTestResultOutput GetStandardError(BoostTestRunnerCommandLineArgs args) + { + if ((!string.IsNullOrEmpty(args.StandardErrorFile)) && (File.Exists(args.StandardErrorFile))) + { + return new BoostStandardError(args.StandardErrorFile); + } + + return null; + } + + #endregion IBoostTestResultOutput Factory Methods + + #region IEnumerable + + public IEnumerator GetEnumerator() + { + // Only enumerate over TestCase results since for our general use case, those are the most important. + return this.Results.Values.Where((result) => { return (result.Unit as TestCase) != null; }).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + #endregion IEnumerable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/BoostTestRunner.cs b/BoostTestAdapter/Boost/Runner/BoostTestRunner.cs new file mode 100644 index 0000000..9a50799 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/BoostTestRunner.cs @@ -0,0 +1,14 @@ +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// IBoostTestRunner implementation. Executes stand-alone + /// (i.e. test runner included within '.exe') Boost Tests. + /// + public class BoostTestRunner : BoostTestRunnerBase + { + public BoostTestRunner(string exe) : + base(exe) + { + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/BoostTestRunnerBase.cs b/BoostTestAdapter/Boost/Runner/BoostTestRunnerBase.cs new file mode 100644 index 0000000..2115381 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/BoostTestRunnerBase.cs @@ -0,0 +1,260 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Management; +using BoostTestAdapter.Utility; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Abstract IBoostTestRunner specification which contains common functionality + /// for executing external '.exe' Boost Test runners. + /// + public abstract class BoostTestRunnerBase : IBoostTestRunner + { + #region Constructors + + /// + /// Constructor. + /// + /// Path to the '.exe' file. + protected BoostTestRunnerBase(string testRunnerExecutable) + { + this.TestRunnerExecutable = testRunnerExecutable; + } + + #endregion Constructors + + #region Properties + + /// + /// Boost Test runner '.exe' file path. + /// + protected string TestRunnerExecutable { get; private set; } + + #endregion Properties + + #region IBoostTestRunner + + public virtual void Debug(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings, IFrameworkHandle framework) + { + Utility.Code.Require(settings, "settings"); + + using (Process process = Debug(framework, GetStartInfo(args, settings))) + { + MonitorProcess(process, settings.Timeout); + } + } + + public virtual void Run(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + Utility.Code.Require(settings,"settings"); + + using (Process process = Run(GetStartInfo(args, settings))) + { + MonitorProcess(process, settings.Timeout); + } + } + + public virtual string Source + { + get { return this.TestRunnerExecutable; } + } + + #endregion IBoostTestRunner + + /// + /// Monitors the provided process for the specified timeout. + /// + /// The process to monitor. + /// The timeout threshold until the process and its children should be killed. + /// Thrown in case specified timeout threshold is exceeded. + private static void MonitorProcess(Process process, int timeout) + { + process.WaitForExit(timeout); + + if (!process.HasExited) + { + KillProcessIncludingChildren(process); + + throw new TimeoutException(timeout); + } + } + + /// + /// Starts a Process in a debug session using the provided command line arguments string. + /// + /// The IFrameworkHandle which provides debug session handling. + /// The process start info which will be used to launch the external test program. + /// The newly spawned debug process. + private static Process Debug(IFrameworkHandle framework, ProcessStartInfo info) + { + if (framework == null) + { + return Run(info); + } + + Dictionary environment = + info.EnvironmentVariables.Cast().ToDictionary( + item => item.Key.ToString(), + item => item.Value.ToString() + ); + + int pid = framework.LaunchProcessWithDebuggerAttached( + info.FileName, + info.WorkingDirectory, + info.Arguments, + environment + ); + + // Get a process on the local computer, using the process id. + return Process.GetProcessById(pid); + } + + /// + /// Starts a Process using the provided command line arguments string. + /// + /// The process start info which will be used to launch the external test program. + /// The newly spawned debug process. + private static Process Run(ProcessStartInfo info) + { + // Wrap the process inside cmd.exe in so that we can redirect stdout, + // stderr to file using a similar mechanism as available for Debug runs. + return Process.Start(ProcessStartInfoEx.StartThroughCmdShell(info.Clone())); + } + + /// + /// Builds a ProcessStartInfo instance using the provided command line string. + /// + /// The command line arguments. + /// The Boost Test runner settings currently being applied. + /// A ProcessStartInfo instance. + protected virtual ProcessStartInfo GetStartInfo(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + Utility.Code.Require(args, "args"); + + ProcessStartInfo startInfo = new ProcessStartInfo + { + CreateNoWindow = false, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden, + WorkingDirectory = args.WorkingDirectory, + FileName = this.TestRunnerExecutable, + Arguments = args.ToString(), + RedirectStandardError = false, + RedirectStandardInput = false + }; + + return startInfo; + } + + /// + /// Kills a process identified by its pid and all its children processes + /// + /// process object + /// + private static void KillProcessIncludingChildren(Process process) + { + Logger.Info("Finding processes spawned by process with Id [{0}]", process.Id); + + // Once the children pids are available we start killing the processes. + // Enumerate each and every child immediately via the .toList() method. + List children = EnumerateChildren(process).ToList(); + + // Killing the main process + if (KillProcess(process)) + { + Logger.Error("Successfully killed process {0}.", process.Id); + } + else + { + Logger.Error("Unable to kill process {0}. Process may still be running.", process.Id); + } + + foreach (Process child in children) + { + // Recurse + KillProcessIncludingChildren(child); + } + } + + /// + /// Enumerates all live children of the provided parent Process instance. + /// + /// The parent process whose live children are to be enumerated + /// An enumeration of live/active child processes + private static IEnumerable EnumerateChildren(Process process) + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT ProcessId FROM Win32_Process WHERE ParentProcessId = " + process.Id.ToString()); + ManagementObjectCollection collection = searcher.Get(); + + foreach (ManagementBaseObject item in collection) + { + int childPid = Convert.ToInt32(item["ProcessId"]); + + Process child = null; + + try + { + child = Process.GetProcessById(childPid); + } + catch (ArgumentException /* ex */) + { + Logger.Error("Child process [{0}] does not exist.", childPid); + // Reset child to null so that it is not enumerated + child = null; + } + catch (Exception /* ex */) + { + child = null; + } + + if (child != null) + { + yield return child; + } + } + } + + /// + /// Kill a process immediately + /// + /// process object + /// return true if success or false if it was not successfull + private static bool KillProcess(Process process) + { + return KillProcess(process, 0); + } + + /// + /// Kill a process + /// + /// process object + /// the timeout in milliseconds to note correct process termination + /// return true if success or false if it was not successfull + private static bool KillProcess(Process process, int killTimeout) + { + if (process.HasExited) + { + return true; + } + + try + { + // If the call to the Kill method is made while the process is already terminating, a Win32Exception is thrown for Access Denied. + + process.Kill(); + return process.WaitForExit(killTimeout); + } + catch (Exception e) + { + Logger.Error(e.Message); + } + + return false; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/BoostTestRunnerCommandLineArgs.cs b/BoostTestAdapter/Boost/Runner/BoostTestRunnerCommandLineArgs.cs new file mode 100644 index 0000000..3af5da3 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/BoostTestRunnerCommandLineArgs.cs @@ -0,0 +1,444 @@ +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Output format options for Boost Test output. + /// Reference: http://www.boost.org/doc/libs/1_43_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html + /// + public enum OutputFormat + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "HRF")] + HRF, // Human Readable Format + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "XML")] + XML, + + Default = HRF + } + + /// + /// Log level enumeration + /// Reference: http://www.boost.org/doc/libs/1_43_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html + /// + public enum LogLevel + { + All, + Success, + TestSuite, + Message, + Warning, + Error, + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp")] + CppException, + SystemError, + FatalError, + Nothing, + + Default = Error + } + + /// + /// Report level enumeration + /// Reference: http://www.boost.org/doc/libs/1_43_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html + /// + public enum ReportLevel + { + None, + Confirm, + Short, + Detailed, + + Default = Confirm + } + + /// + /// Aggregates all possible command line options made available by the Boost Test framework. + /// Reference: http://www.boost.org/doc/libs/1_43_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html + /// + public class BoostTestRunnerCommandLineArgs + { + #region Constants + + private const string RunTestArg = "--run_test"; + + private const string LogFormatArg = "--log_format"; + private const string LogLevelArg = "--log_level"; + private const string LogSinkArg = "--log_sink"; + + private const string ReportFormatArg = "--report_format"; + private const string ReportLevelArg = "--report_level"; + private const string ReportSinkArg = "--report_sink"; + + private const string DetectMemoryLeakArg = "--detect_memory_leak"; + + private const string TestSeparator = ","; + + private const char ArgSeparator = ' '; + private const char ArgValueSeparator = '='; + + private const char RedirectionOperator = '>'; + private const string ErrRedirectionOperator = "2>"; + + #endregion Constants + + #region Members + + private string _reportFile = null; + private string _logFile = null; + private string _stdOutFile = null; + private string _stdErrFile = null; + + #endregion Members + + #region Constructors + + /// + /// Default Constructor. Initializes options to their defaults as specified in: + /// http://www.boost.org/doc/libs/1_43_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html. + /// + public BoostTestRunnerCommandLineArgs() + { + this.Tests = new List(); + + this.LogFormat = OutputFormat.Default; + this.LogLevel = LogLevel.Default; + + this.ReportFormat = OutputFormat.Default; + this.ReportLevel = ReportLevel.Default; + + this.DetectMemoryLeaks = 1; + } + + /// + /// Copy Constructor. Creates a shallow copy of the provided instance. + /// + /// The instance to be copied. + protected BoostTestRunnerCommandLineArgs(BoostTestRunnerCommandLineArgs args) + { + Utility.Code.Require(args, "args"); + + this.WorkingDirectory = args.WorkingDirectory; + + // Shallow copy + this.Tests = args.Tests; + + this.LogFormat = args.LogFormat; + this.LogLevel = args.LogLevel; + this.LogFile = args.LogFile; + + this.ReportFormat = args.ReportFormat; + this.ReportLevel = args.ReportLevel; + this.ReportFile = args.ReportFile; + + this.DetectMemoryLeaks = args.DetectMemoryLeaks; + + this.StandardOutFile = args.StandardOutFile; + this.StandardErrorFile = args.StandardErrorFile; + } + + #endregion Constructors + + /// + /// Specify the process' working directory + /// + public string WorkingDirectory { get; set; } + + /// + /// List of fully qualified name tests which are to be executed. + /// + public IList Tests { get; private set; } + + /// + /// Output format for log information. + /// + public OutputFormat LogFormat { get; set; } + + /// + /// Log level. + /// + public LogLevel LogLevel { get; set; } + + /// + /// Path (relative to the WorkingDirectory) to the log file which will host Boost Test output. + /// + public string LogFile + { + get + { + return GetPath(this._logFile); + } + + set + { + this._logFile = value; + } + } + + /// + /// Output format for report information. + /// + public OutputFormat ReportFormat { get; set; } + + /// + /// Report level. + /// + public ReportLevel ReportLevel { get; set; } + + /// + /// Path (relative to the WorkingDirectory) to the report file which will host Boost Test report output. + /// + public string ReportFile + { + get + { + return GetPath(this._reportFile); + } + + set + { + this._reportFile = value; + } + } + + /// + /// Set to value greater than 0 to detect memory leaks. + /// Refer to: http://www.boost.org/doc/libs/1_43_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html. + /// + public uint DetectMemoryLeaks { get; set; } + + /// + /// Path (relative to the WorkingDirectory) to the report file which will host the standard output content. + /// + public string StandardOutFile + { + get + { + return GetPath(this._stdOutFile); + } + + set + { + this._stdOutFile = value; + } + } + + /// + /// Path (relative to the WorkingDirectory) to the report file which will host the standard error content. + /// + public string StandardErrorFile + { + get + { + return GetPath(this._stdErrFile); + } + + set + { + this._stdErrFile = value; + } + } + + /// + /// Provides a string representation of the command line. + /// + /// The command line as a string. + public override string ToString() + { + StringBuilder args = new StringBuilder(); + + // --run_tests=a,b,c + if (this.Tests.Count > 0) + { + AddArgument(RunTestArg, string.Join(TestSeparator, this.Tests), args); + } + + if (this.LogFormat != OutputFormat.Default) + { + // --log_format=xml + AddArgument(LogFormatArg, OutputFormatToString(this.LogFormat), args); + } + + if (this.LogLevel != LogLevel.Default) + { + // --log_level=test_suite + AddArgument(LogLevelArg, LogLevelToString(this.LogLevel), args); + } + + // --log_sink=log.xml + if (!string.IsNullOrEmpty(this._logFile)) + { + AddArgument(LogSinkArg, this._logFile, args); + } + + if (this.ReportFormat != OutputFormat.Default) + { + // --report_format=xml + AddArgument(ReportFormatArg, OutputFormatToString(this.ReportFormat), args); + } + + if (this.ReportLevel != ReportLevel.Default) + { + // --report_level=detailed + AddArgument(ReportLevelArg, ReportLevelToString(this.ReportLevel), args); + } + + // --report_sink=report.xml + if (!string.IsNullOrEmpty(this._reportFile)) + { + AddArgument(ReportSinkArg, this._reportFile, args); + } + + if (this.DetectMemoryLeaks != 1) + { + // --detect_memory_leak + AddArgument(DetectMemoryLeakArg, this.DetectMemoryLeaks.ToString(CultureInfo.InvariantCulture), args); + } + + // > std.out + if (!string.IsNullOrEmpty(this._stdOutFile)) + { + args.Append(RedirectionOperator).Append(ArgSeparator).Append(Quote(this._stdOutFile)).Append(ArgSeparator); + } + + // 2> std.err + if (!string.IsNullOrEmpty(this._stdErrFile)) + { + args.Append(ErrRedirectionOperator).Append(ArgSeparator).Append(Quote(this._stdErrFile)); + } + + return args.ToString().TrimEnd(); + } + + /// + /// Returns a rooted path for the provided one. + /// + /// The path to root. + /// The rooted path. + protected string GetPath(string path) + { + if (!string.IsNullOrEmpty(path) && !Path.IsPathRooted(path)) + { + return Path.Combine(this.WorkingDirectory, path); + } + + return path; + } + + /// + /// Provides a (valid) string representation of the provided OutputFormat. + /// + /// The value to serialize to string. + /// A (valid) string representation of the provided OutputFormat. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase")] + private static string OutputFormatToString(OutputFormat value) + { + return value.ToString().ToLowerInvariant(); + } + + /// + /// Provides a (valid) string representation of the provided LogLevel. + /// + /// The value to serialize to string. + /// A (valid) string representation of the provided LogLevel. + private static string LogLevelToString(LogLevel value) + { + return LevelToString(value.ToString()); + } + + /// + /// Provides a (valid) string representation of the provided ReportLevel. + /// + /// The value to serialize to string. + /// A (valid) string representation of the provided ReportLevel. + private static string ReportLevelToString(ReportLevel value) + { + return LevelToString(value.ToString()); + } + + /// + /// Provides a (valid) string representation of the provided LogLevel/ReportLevel. + /// Changes from pascal case to underscore separated lower case. + /// + /// The value to serialize to string. + /// A (valid) string representation of the provided LogLevel/ReportLevel. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase")] + private static string LevelToString(string value) + { + return Regex.Replace(value, "([A-Z])", "_$1").Substring(1).ToLowerInvariant(); + } + + /// + /// Adds a no-value command-line argument to the provided StringBuilder. + /// + /// The command line option. + /// The StringBuilder which will host the result. + /// host + protected static StringBuilder AddArgument(string prefix, StringBuilder host) + { + return AddArgument(prefix, string.Empty, host); + } + + /// + /// Adds a command-line argument to the provided StringBuilder. + /// + /// The command line option. + /// The command line option's value. + /// The StringBuilder which will host the result. + /// host + protected static StringBuilder AddArgument(string prefix, string value, StringBuilder host) + { + return AddArgument(prefix, ArgValueSeparator, value, host); + } + + /// + /// Adds a command-line argument to the provided StringBuilder. + /// + /// The command line option. + /// The separator to use between the prefix and the value. + /// The command line option's value. + /// The StringBuilder which will host the result. + /// host + protected static StringBuilder AddArgument(string prefix, char separator, string value, StringBuilder host) + { + Utility.Code.Require(host, "host"); + + if (separator == ' ') + { + prefix = Quote(prefix); + value = Quote(value); + } + else + { + host.Append('"'); + } + + host.Append(prefix); + + if (!string.IsNullOrEmpty(value)) + { + host.Append(separator).Append(value); + } + + if (separator != ' ') + { + host.Append('"'); + } + + return host.Append(ArgSeparator); + } + + /// + /// Quotes the provided string within double quotation marks. + /// + /// The string to quote. + /// The quoted value. + private static string Quote(string value) + { + return (string.IsNullOrEmpty(value)) ? value : ('"' + value + '"'); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/BoostTestRunnerFactoryOptions.cs b/BoostTestAdapter/Boost/Runner/BoostTestRunnerFactoryOptions.cs new file mode 100644 index 0000000..6448434 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/BoostTestRunnerFactoryOptions.cs @@ -0,0 +1,12 @@ +using BoostTestAdapter.Settings; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Aggregates all options for BoostTestRunnerFactory + /// + public class BoostTestRunnerFactoryOptions + { + public ExternalBoostTestRunnerSettings ExternalTestRunnerSettings { get; set; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/BoostTestRunnerSettings.cs b/BoostTestAdapter/Boost/Runner/BoostTestRunnerSettings.cs new file mode 100644 index 0000000..cb76830 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/BoostTestRunnerSettings.cs @@ -0,0 +1,40 @@ +using System; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Aggregates common settings for a Boost Test execution. + /// + public class BoostTestRunnerSettings : ICloneable + { + /// + /// Constructor. Initializes all settings to their default state. + /// + public BoostTestRunnerSettings() + { + this.Timeout = -1; + } + + /// + /// Timeout for unit test execution. + /// + public int Timeout { get; set; } + + #region IClonable + + public BoostTestRunnerSettings Clone() + { + return new BoostTestRunnerSettings() + { + Timeout = this.Timeout + }; + } + + object ICloneable.Clone() + { + return this.Clone(); + } + + #endregion IClonable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/BoostTestRunnerTimeoutException.cs b/BoostTestAdapter/Boost/Runner/BoostTestRunnerTimeoutException.cs new file mode 100644 index 0000000..1e4961c --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/BoostTestRunnerTimeoutException.cs @@ -0,0 +1,77 @@ +using System; +using System.Runtime.Serialization; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// An exception raised in case a timeout threshold is exceeded. + /// + [Serializable] + public class TimeoutException : Exception + { + #region Constructors + + #region Standard Exception Constructors + + public TimeoutException() : + this(-1) + { + } + + public TimeoutException(string message) : + this(-1, message) + { + } + + public TimeoutException(string message, Exception innerException) : + base(message, innerException) + { + this.Timeout = -1; + } + + protected TimeoutException(SerializationInfo info, StreamingContext context) : + base(info, context) + { + this.Timeout = info.GetInt32("Timeout"); + } + + #endregion Standard Exception Constructors + + /// + /// Constructor + /// + /// The timeout threshold which was exceeded. + public TimeoutException(int timeout) : + this(timeout, "The Boost Test Runner exceeded the timeout threshold of " + timeout) + { + } + + /// + /// Constructor + /// + /// The timeout threshold which was exceeded. + /// The message for this exception. + public TimeoutException(int timeout, string message) : + base(message) + { + this.Timeout = timeout; + } + + #endregion Constructors + + /// + /// The timeout threshold which was exceeded. + /// + public int Timeout { get; protected set; } + + #region ISerializable + + public override void GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue("Timeout", this.Timeout); + } + + #endregion ISerializable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/DefaultBoostTestRunnerFactory.cs b/BoostTestAdapter/Boost/Runner/DefaultBoostTestRunnerFactory.cs new file mode 100644 index 0000000..d38d5c7 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/DefaultBoostTestRunnerFactory.cs @@ -0,0 +1,63 @@ +using System.IO; +using BoostTestAdapter.Settings; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Default implementation for IBoostTestRunnerFactory. + /// + public class DefaultBoostTestRunnerFactory : IBoostTestRunnerFactory + { + #region IBoostTestRunnerFactory + + /// + /// Based on the provided file name, returns a suitable IBoostTestRunner + /// instance or null if none are available. + /// + /// The identifier which is to be executed via the IBoostTestRunner. + /// test runner settings + /// A suitable IBoostTestRunner instance or null if none are available. + public IBoostTestRunner GetRunner(string identifier, BoostTestRunnerFactoryOptions options) + { + IBoostTestRunner runner = null; + + if ((options != null) && (options.ExternalTestRunnerSettings != null)) + { + // Provision an external test runner + runner = GetExternalTestRunner(identifier, options.ExternalTestRunnerSettings); + } + + // Provision a default internal runner + if (runner == null) + { + runner = GetInternalTestRunner(identifier); + } + + return runner; + } + + private static IBoostTestRunner GetInternalTestRunner(string source) + { + switch (Path.GetExtension(source)) + { + case ".exe": return new BoostTestRunner(source); + } + + return null; + } + + private static IBoostTestRunner GetExternalTestRunner(string source, ExternalBoostTestRunnerSettings settings) + { + Utility.Code.Require(settings, "settings"); + + if (settings.ExtensionType == Path.GetExtension(source)) + { + return new ExternalBoostTestRunner(source, settings); + } + + return null; + } + + #endregion IBoostTestRunnerFactory + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/ExternalBoostTestRunner.cs b/BoostTestAdapter/Boost/Runner/ExternalBoostTestRunner.cs new file mode 100644 index 0000000..296860c --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/ExternalBoostTestRunner.cs @@ -0,0 +1,132 @@ +using System; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Configurable External Boost Test Runner. Launches a process as specified + /// in the provided configuration to execute tests. + /// + public class ExternalBoostTestRunner : BoostTestRunnerBase + { + #region Constants + + private const string SourcePlaceholder = "source"; + private const string TimeoutPlaceholder = "timeout"; + private const string BoostArgsPlaceholder = "boost-args"; + + #endregion Constants + + #region Members + + private string _source = null; + + #endregion Members + + /// + /// Constructo + /// + /// The test source (dll/exe) for which this external test runner will execute + /// External test runner configuration + public ExternalBoostTestRunner(string source, ExternalBoostTestRunnerSettings settings) : + base(GetTestExecutable(settings, source)) + { + this._source = source; + this.Settings = settings; + } + + public ExternalBoostTestRunnerSettings Settings { get; private set; } + + #region IBoostTestRunner + + public override string Source + { + get { return this._source; } + } + + #endregion IBoostTestRunner + + #region BoostTestRunnerBase + + /// + /// Provides a ProcessStartInfo structure containing the necessary information to launch the test process. + /// Aggregates the BoostTestRunnerCommandLineArgs structure with the command-line arguments specified at configuration stage. + /// + /// The Boost Test Framework command line arguments + /// The Boost Test Runner settings + /// A valid ProcessStartInfo structure to launch the test executable + protected override ProcessStartInfo GetStartInfo(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + ProcessStartInfo info = base.GetStartInfo(args, settings); + + CommandEvaluator evaluator = BuildEvaluator(this.Source, args, settings); + CommandEvaluationResult result = evaluator.Evaluate(this.Settings.ExecutionCommandLine.Arguments); + + string cmdLineArgs = result.Result; + if (!result.MappedVariables.Contains(BoostArgsPlaceholder)) + { + cmdLineArgs = result.Result + (result.Result.EndsWith(" ", StringComparison.Ordinal) ? string.Empty : " ") + args.ToString(); + } + + info.FileName = this.Settings.ExecutionCommandLine.FileName; + info.Arguments = cmdLineArgs; + + return info; + } + + #endregion BoostTestRunnerBase + + /// + /// Extracts and evaluates the test executable from the external Boost Test runner configuration. + /// + /// The external Boost Test runner configuration + /// The test source module containing the tests to execute + /// The evaluated, test executable program string + private static string GetTestExecutable(ExternalBoostTestRunnerSettings settings, string source) + { + Utility.Code.Require(settings, "settings"); + Utility.Code.Require(settings.ExecutionCommandLine, "settings.ExecutionCommandLine"); + + return BuildEvaluator(source).Evaluate(settings.ExecutionCommandLine.FileName).Result; + } + + /// + /// Provides a preset CommandEvaluator instance for evaluating strings containing the source placeholder. + /// + /// The source placeholder value + /// A CommandEvaluator instance for evaluating strings containing the source placeholder. + private static CommandEvaluator BuildEvaluator(string source) + { + CommandEvaluator evaluator = new CommandEvaluator(); + + evaluator.SetVariable(SourcePlaceholder, source); + + return evaluator; + } + + /// + /// Provides a preset CommandEvaluator instance for evaluating strings containing the source, timeout and boost-args placeholders. + /// + /// The source placeholder value + /// The boost arguments placeholder value + /// The test runner settings which contains the timeout placeholder value + /// A CommandEvaluator instance for evaluating strings containing the source, timeout and boost-args placeholders. + private static CommandEvaluator BuildEvaluator(string source, BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + CommandEvaluator evaluator = BuildEvaluator(source); + + if (settings.Timeout > -1) + { + evaluator.SetVariable(TimeoutPlaceholder, settings.Timeout.ToString(CultureInfo.InvariantCulture)); + } + + evaluator.SetVariable(BoostArgsPlaceholder, args.ToString()); + + return evaluator; + } + } +} diff --git a/BoostTestAdapter/Boost/Runner/IBoostTestRunner.cs b/BoostTestAdapter/Boost/Runner/IBoostTestRunner.cs new file mode 100644 index 0000000..dfc82c9 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/IBoostTestRunner.cs @@ -0,0 +1,32 @@ +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; + +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// BoostTestRunner interface. Identifies a Boost Test Runner. + /// + public interface IBoostTestRunner + { + /// + /// Initializes a debug instance of this Boost Test runner. + /// + /// The Boost Test framework command line options. + /// The Boost Test runner settings. + /// An IFrameworkHandle which provides debugging capabilities. + /// Thrown in case specified timeout threshold is exceeded. + void Debug(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings, IFrameworkHandle framework); + + /// + /// Executes the Boost Test runner with the provided arguments. + /// + /// The Boost Test framework command line options. + /// The Boost Test runner settings. + /// Thrown in case specified timeout threshold is exceeded. + void Run(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings); + + /// + /// Provides a source Id distinguishing different instances + /// + string Source { get; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Runner/IBoostTestRunnerFactory.cs b/BoostTestAdapter/Boost/Runner/IBoostTestRunnerFactory.cs new file mode 100644 index 0000000..3a9e4f2 --- /dev/null +++ b/BoostTestAdapter/Boost/Runner/IBoostTestRunnerFactory.cs @@ -0,0 +1,16 @@ +namespace BoostTestAdapter.Boost.Runner +{ + /// + /// Abstract Factory which provides IBoostTestRunner instances. + /// + public interface IBoostTestRunnerFactory + { + /// + /// Returns an IBoostTestRunner based on the provided identifier. + /// + /// A unique identifier able to distinguish different BoostTestRunner types. + /// A structure which states particular features of interest in the manufactured product. + /// An IBoostTestRunner instance or null if one cannot be provided. + IBoostTestRunner GetRunner(string identifier, BoostTestRunnerFactoryOptions options); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/ITestVisitable.cs b/BoostTestAdapter/Boost/Test/ITestVisitable.cs new file mode 100644 index 0000000..8d8415d --- /dev/null +++ b/BoostTestAdapter/Boost/Test/ITestVisitable.cs @@ -0,0 +1,15 @@ +namespace BoostTestAdapter.Boost.Test +{ + /// + /// Visitor design pattern interface intended for Boost.Test.TestUnit concrete implementations. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Visitable")] + public interface ITestVisitable + { + /// + /// Applies the test visitor over this instance. + /// + /// The visitor which will be visiting this instance. + void Apply(ITestVisitor visitor); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/ITestVisitor.cs b/BoostTestAdapter/Boost/Test/ITestVisitor.cs new file mode 100644 index 0000000..2bb1daa --- /dev/null +++ b/BoostTestAdapter/Boost/Test/ITestVisitor.cs @@ -0,0 +1,20 @@ +namespace BoostTestAdapter.Boost.Test +{ + /// + /// Visitor design pattern interface for Boost.Test.TestUnit visitor implementations. + /// + public interface ITestVisitor + { + /// + /// Visits the provided TestCase + /// + /// The TestCase which is to be visited + void Visit(TestCase testCase); + + /// + /// Visits the provided TestSuite + /// + /// The TestSuite which is to be visited + void Visit(TestSuite testSuite); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/TestCase.cs b/BoostTestAdapter/Boost/Test/TestCase.cs new file mode 100644 index 0000000..d250bf5 --- /dev/null +++ b/BoostTestAdapter/Boost/Test/TestCase.cs @@ -0,0 +1,106 @@ +using System.Globalization; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Test +{ + [XmlRoot(Xml.TestCase)] + public class TestCase : TestUnit, IXmlSerializable + { + #region Constructors + + /// + /// Constructor. Required as per IXmlSerializable requirements. + /// + public TestCase() : + this(null, null) + { + } + + /// + /// Constructor + /// + /// Test Unit (local) name. + /// Parent/Owner Test Unit of this instance. + public TestCase(string name, TestSuite parent) + : base(name, parent) + { + } + + #endregion Constructors + + #region Properties + + /// + /// Optional source file information related to this test. + /// + public SourceFileInfo Source { get; set; } + + #endregion Properties + + #region IXmlSerializable + + /// + /// Xml Tag/Attribute Constants + /// + internal static class Xml + { + public const string TestCase = "TestCase"; + public const string File = "file"; + public const string Line = "line"; + } + + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + base.ReadXmlAttributes(reader); + + string file = reader.GetAttribute(Xml.File); + + if (!string.IsNullOrEmpty(file)) + { + this.Source = new SourceFileInfo(file); + this.Source.LineNumber = int.Parse(reader.GetAttribute(Xml.Line), CultureInfo.InvariantCulture); + } + + reader.MoveToElement(); + bool empty = reader.IsEmptyElement; + reader.ReadStartElement(Xml.TestCase); + + if (!empty) + { + reader.ReadEndElement(); + } + } + + public void WriteXml(XmlWriter writer) + { + base.WriteXmlAttributes(writer); + + if (this.Source != null) + { + writer.WriteAttributeString(Xml.File, this.Source.File); + writer.WriteAttributeString(Xml.Line, this.Source.LineNumber.ToString(CultureInfo.InvariantCulture)); + } + } + + #endregion IXmlSerializable + + #region ITestVisitable + + public override void Apply(ITestVisitor visitor) + { + Utility.Code.Require(visitor, "visitor"); + + visitor.Visit(this); + } + + #endregion ITestVisitable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/TestFramework.cs b/BoostTestAdapter/Boost/Test/TestFramework.cs new file mode 100644 index 0000000..ed584a4 --- /dev/null +++ b/BoostTestAdapter/Boost/Test/TestFramework.cs @@ -0,0 +1,90 @@ +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace BoostTestAdapter.Boost.Test +{ + [XmlRoot(Xml.BoostTestFramework)] + public class TestFramework : IXmlSerializable + { + #region Constructors + + public TestFramework() : + this(null, null) + { + } + + public TestFramework(string source, TestSuite master) + { + this.Source = source; + this.MasterTestSuite = master; + } + + #endregion Constructors + + #region Properties + + /// + /// Fully qualified path detailing the source Dll/EXE which contains these tests + /// + public string Source { get; private set; } + + /// + /// Boost Test Master Test Suite + /// + public TestSuite MasterTestSuite { get; private set; } + + #endregion Properties + + #region IXmlSerializable + + /// + /// Xml Tag/Attribute Constants + /// + private static class Xml + { + public const string BoostTestFramework = "BoostTestFramework"; + public const string Source = "source"; + } + + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + Utility.Code.Require(reader, "reader"); + + reader.MoveToElement(); + + this.Source = reader.GetAttribute(Xml.Source); + + bool empty = reader.IsEmptyElement; + reader.ReadStartElement(Xml.BoostTestFramework); + + if (!empty) + { + XmlSerializer deserialiser = new XmlSerializer(typeof(TestSuite)); + this.MasterTestSuite = deserialiser.Deserialize(reader) as TestSuite; + + reader.ReadEndElement(); + } + } + + public void WriteXml(XmlWriter writer) + { + Utility.Code.Require(writer, "writer"); + + writer.WriteAttributeString(Xml.Source, this.Source); + + if (this.MasterTestSuite != null) + { + XmlSerializer serializer = new XmlSerializer(typeof(TestSuite)); + serializer.Serialize(writer, this.MasterTestSuite); + } + } + + #endregion IXmlSerializable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/TestFrameworkBuilder.cs b/BoostTestAdapter/Boost/Test/TestFrameworkBuilder.cs new file mode 100644 index 0000000..f3250a7 --- /dev/null +++ b/BoostTestAdapter/Boost/Test/TestFrameworkBuilder.cs @@ -0,0 +1,144 @@ +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Test +{ + /// + /// Allows building TestFrameworks with ease using the Builder pattern. + /// + public class TestFrameworkBuilder + { + #region Constructors + + /// + /// Constructor + /// + /// Boost Test EXE/Dll file path + /// Name of Master Test Suite + public TestFrameworkBuilder(string source, string name) : + this(source, name, null) + { + } + + /// + /// Constructor + /// + /// Boost Test EXE/Dll file path + /// Name of Master Test Suite + /// Id of Master Test Suite + public TestFrameworkBuilder(string source, string name, int? id) + { + this.Source = source; + + this.MasterTestSuite = new TestSuite(name, null); + this.MasterTestSuite.Id = id; + + this.Parent = this.MasterTestSuite; + } + + #endregion Constructors + + #region Properties + + /// + /// Boost Test EXE/Dll file path + /// + private string Source { get; set; } + + /// + /// Master Test Suite + /// + private TestSuite MasterTestSuite { get; set; } + + /// + /// Current TestSuite Parent + /// + private TestSuite Parent { get; set; } + + #endregion Properties + + /// + /// Builds a new TestSuite. Starts a new context in which + /// newly created TestUnits will be parented to this TestSuite. + /// + /// Test Suite Name + /// this + public TestFrameworkBuilder TestSuite(string name) + { + return this.TestSuite(name, null); + } + + /// + /// Builds a new TestSuite. Starts a new context in which + /// newly created TestUnits will be parented to this TestSuite. + /// + /// Test Suite Name + /// Test Suite Id + /// this + public TestFrameworkBuilder TestSuite(string name, int? id) + { + TestSuite testSuite = new TestSuite(name, this.Parent); + testSuite.Id = id; + + this.Parent = testSuite; + + return this; + } + + /// + /// Builds a new TestCase. + /// + /// Test Case Name + /// this + public TestFrameworkBuilder TestCase(string name) + { + return this.TestCase(name, null, null); + } + + /// + /// Builds a new TestCase. + /// + /// Test Case Name + /// Test Case Id + /// this + public TestFrameworkBuilder TestCase(string name, int? id) + { + return this.TestCase(name, id, null); + } + + /// + /// Builds a new TestCase. + /// + /// Test Case Name + /// Test Case Id + /// Test Case source file debug information + /// this + public TestFrameworkBuilder TestCase(string name, int? id, SourceFileInfo source) + { + TestCase testCase = new TestCase(name, this.Parent); + testCase.Id = id; + testCase.Source = source; + + return this; + } + + /// + /// Ends the current TestSuite context and moves up one level in the hierarchy. + /// + /// this + public TestFrameworkBuilder EndSuite() + { + this.Parent = (TestSuite)this.Parent.Parent; + + return this; + } + + /// + /// Builds the TestFramework. + /// + /// The TestFramework + public TestFramework Build() + { + return new TestFramework(this.Source, this.MasterTestSuite); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/TestSuite.cs b/BoostTestAdapter/Boost/Test/TestSuite.cs new file mode 100644 index 0000000..e90953a --- /dev/null +++ b/BoostTestAdapter/Boost/Test/TestSuite.cs @@ -0,0 +1,162 @@ +using System.Collections.Generic; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Test +{ + [XmlRoot(Xml.TestSuite)] + public class TestSuite : TestUnit, IXmlSerializable + { + #region Members + + private List _children = null; + + #endregion Members + + #region Constructors + + /// + /// Constructor. Required as per IXmlSerializable requirements. + /// + public TestSuite() : + this(null) + { + } + + /// + /// Constructor + /// + /// Test Unit (local) name. + public TestSuite(string name) + : this(name, null) + { + } + + /// + /// Constructor + /// + /// Test Unit (local) name. + /// Parent/Owner Test Unit of this instance. + public TestSuite(string name, TestSuite parent) + : base(name, parent) + { + this._children = new List(); + } + + #endregion Constructors + + #region Properties + + public override IEnumerable Children + { + get + { + return this._children; + } + } + + #endregion Properties + + public override void AddChild(TestUnit unit) + { + this._children.Add(unit); + } + + #region IXmlSerializable + + /// + /// Xml Tag/Attribute Constants + /// + internal static class Xml + { + public const string TestSuite = "TestSuite"; + } + + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + base.ReadXmlAttributes(reader); + + reader.MoveToElement(); + bool empty = reader.IsEmptyElement; + reader.ReadStartElement(Xml.TestSuite); + + if (!empty) + { + reader.ConsumeUntilFirst(XmlReaderHelper.ElementFilter); + + while (reader.NodeType == XmlNodeType.Element) + { + if (reader.Name == Xml.TestSuite) + { + new TestSuite(null, this).ReadXml(reader); + } + else if (reader.Name == TestCase.Xml.TestCase) + { + new TestCase(null, this).ReadXml(reader); + } + + reader.ConsumeUntilFirst(XmlReaderHelper.ElementFilter); + } + + reader.ReadEndElement(); + } + } + + public void WriteXml(XmlWriter writer) + { + base.WriteXmlAttributes(writer); + + foreach (TestUnit child in this.Children) + { + child.Apply(new BoostTestXmlVisitor(writer)); + } + } + + private class BoostTestXmlVisitor : ITestVisitor + { + private XmlSerializer SuiteSerializer { get; set; } + + private XmlSerializer CaseSerializer { get; set; } + + private XmlWriter Writer { get; set; } + + public BoostTestXmlVisitor(XmlWriter writer) + { + this.SuiteSerializer = new XmlSerializer(typeof(TestSuite)); + this.CaseSerializer = new XmlSerializer(typeof(TestCase)); + + this.Writer = writer; + } + + public void Visit(TestCase testCase) + { + this.CaseSerializer.Serialize(this.Writer, testCase); + } + + public void Visit(TestSuite testSuite) + { + this.SuiteSerializer.Serialize(this.Writer, testSuite); + } + } + + #endregion IXmlSerializable + + #region ITestVisitable + + public override void Apply(ITestVisitor visitor) + { + Utility.Code.Require(visitor, "visitor"); + + visitor.Visit(this); + } + + #endregion ITestVisitable + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Boost/Test/TestUnit.cs b/BoostTestAdapter/Boost/Test/TestUnit.cs new file mode 100644 index 0000000..f5eb1e7 --- /dev/null +++ b/BoostTestAdapter/Boost/Test/TestUnit.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Xml; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Boost.Test +{ + /// + /// Base class for Boost Test test components. Follows the composite design pattern. + /// + public abstract class TestUnit : ITestVisitable + { + #region Constructors + + /// + /// Constructor + /// + /// Test Unit (local) name. + /// Parent/Owner Test Unit of this instance. + protected TestUnit(string name, TestUnit parent) + { + this.Id = null; + this.Name = name; + this.Parent = parent; + + if (parent != null) + { + parent.AddChild(this); + } + } + + #endregion Constructors + + #region Properties + + /// + /// Test Unit Id. Optional. + /// + public int? Id { get; set; } + + /// + /// Test Unit (local) Name. + /// + public string Name { get; private set; } + + /// + /// Parent/Owner Test Unit of this instance. + /// + public TestUnit Parent { get; private set; } + + /// + /// Child Test Units of this instance. + /// + public virtual IEnumerable Children + { + get + { + return Enumerable.Empty(); + } + } + + /// + /// Identifies the fully qualified name of this TestUnit + /// + public string FullyQualifiedName + { + get + { + return new QualifiedNameBuilder(this).ToString(); + } + } + + #endregion Properties + + /// + /// Adds a child to this TestUnit + /// + /// The unit to add as a child + public virtual void AddChild(TestUnit unit) + { + throw new InvalidOperationException(); + } + + #region IXmlSerializable Helpers + + /// + /// Xml Tag/Attribute Constants + /// + private static class Xml + { + public const string Id = "id"; + public const string Name = "name"; + } + + /// + /// Reads common Xml attributes from a TestUnit Xml node. + /// + /// XmlReader + protected void ReadXmlAttributes(XmlReader reader) + { + Utility.Code.Require(reader, "reader"); + + this.Name = reader.GetAttribute(Xml.Name); + + string id = reader.GetAttribute(Xml.Id); + if (!string.IsNullOrEmpty(id)) + { + this.Id = int.Parse(id, CultureInfo.InvariantCulture); + } + } + + /// + /// Writes common Xml attributes from a TestUnit Xml node. + /// + /// XmlWriter + protected void WriteXmlAttributes(XmlWriter writer) + { + Utility.Code.Require(writer, "writer"); + + if (this.Id.HasValue) + { + writer.WriteAttributeString(Xml.Id, this.Id.Value.ToString(CultureInfo.InvariantCulture)); + } + + writer.WriteAttributeString(Xml.Name, this.Name); + } + + #endregion IXmlSerializable Helpers + + #region ITestVisitable + + public abstract void Apply(ITestVisitor visitor); + + #endregion ITestVisitable + + #region object overrides + + public override string ToString() + { + return this.FullyQualifiedName; + } + + #endregion object overrides + } +} \ No newline at end of file diff --git a/BoostTestAdapter/BoostTestAdapter.csproj b/BoostTestAdapter/BoostTestAdapter.csproj new file mode 100644 index 0000000..1b1516d --- /dev/null +++ b/BoostTestAdapter/BoostTestAdapter.csproj @@ -0,0 +1,219 @@ + + + + + Debug + AnyCPU + {BC4B3BED-9241-4DD6-8070-A9B66DFC08C1} + Library + Properties + BoostTestAdapter + BoostTestAdapter + v4.5 + 512 + + + + true + full + false + bin\Debug\ + TRACE;DEBUG; + prompt + 4 + false + AnyCPU + AllRules.ruleset + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + false + + + false + + + + + + + + $(MSBuildProgramFiles32) + + $(ProgramFiles%28x86%29) + + $(ProgramFiles) (x86) + + $(ProgramFiles) + + + + ..\packages\log4net.2.0.3\lib\net40-full\log4net.dll + + + $(ProgramFiles32)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll + + + ..\packages\NCalc.1.3.8\NCalc.dll + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {30ecc867-ce89-425f-b452-7a8a320f727d} + VisualStudio2012Adapter + + + {82df0aeb-582a-4b38-96fc-aaee773beafe} + VisualStudio2013Adapter + + + {eb0051e3-1dda-418c-abaf-c1da5339114c} + VisualStudio2015Adapter + + + {62347cc7-c839-413d-a7ce-598409f6f15b} + VisualStudioAdapter + + + + + {80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2} + 8 + 0 + 0 + primary + False + False + + + {1A31287A-4D7D-413E-8E32-3B374931BD89} + 8 + 0 + 0 + primary + False + False + + + + + + + + + + REM required for the BoostTestPlugin so that the log4net config file is inlcuded as part of the vsix installation +xcopy /c /i /y $(TargetFileName).config ..\..\..\BoostTestPlugin +REM required by some unit tests in LoggerTest.cs so as to have a certain degree of confidence that log4net is actually logging to file +xcopy /c /i /y $(TargetFileName).config ..\..\..\BoostTestAdapterNunit + + + + \ No newline at end of file diff --git a/BoostTestAdapter/BoostTestDiscoverer.cs b/BoostTestAdapter/BoostTestDiscoverer.cs new file mode 100644 index 0000000..bc899b2 --- /dev/null +++ b/BoostTestAdapter/BoostTestDiscoverer.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BoostTestAdapter.Settings; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter +{ + [FileExtension(DllExtension)] + [FileExtension(ExeExtension)] + [DefaultExecutorUri(BoostTestExecutor.ExecutorUriString)] + public class BoostTestDiscoverer : ITestDiscoverer + { + #region Constants + + public const string DllExtension = ".dll"; + public const string ExeExtension = ".exe"; + + #endregion Constants + + #region Constructors + + /// + /// Default constructor (the one that is called off by Visual Studio before being able to call method DiscoverTests) + /// + public BoostTestDiscoverer() + :this(new DefaultBoostTestDiscovererFactory()) + { + } + + /// + /// Constructor accepting an object of type IBoostTestDiscovererFactory (for mocking) + /// + /// + public BoostTestDiscoverer(IBoostTestDiscovererFactory newTestDiscovererFactory) + { + this.TestDiscovererFactory = newTestDiscovererFactory; + } + + #endregion Constructors + + #region Properties + + private IBoostTestDiscovererFactory TestDiscovererFactory { get; set; } + + #endregion Properties + + #region ITestDiscoverer + + /// + /// Method call by Visual studio ("discovered via reflection") for test enumeration + /// + /// path, target name and target extensions to discover + /// discovery context settings + /// + /// Unit test framework Sink + /// Entry point of the discovery procedure + public void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, IMessageLogger logger, + ITestCaseDiscoverySink discoverySink) + { +#if DEBUG && LAUNCH_DEBUGGER + System.Diagnostics.Debugger.Launch(); +#endif + + BoostTestAdapterSettings settings = BoostTestAdapterSettingsProvider.GetSettings(discoveryContext); + + BoostTestDiscovererFactoryOptions options = new BoostTestDiscovererFactoryOptions(); + options.ExternalTestRunnerSettings = settings.ExternalTestRunner; + + try + { + Logger.Initialize(logger); + + var sourceGroups = sources.GroupBy(Path.GetExtension); + + foreach (IGrouping sourceGroup in sourceGroups) + { + IBoostTestDiscoverer discoverer = TestDiscovererFactory.GetTestDiscoverer(sourceGroup.Key, options); + + if (discoverer != null) + { + discoverer.DiscoverTests(sourceGroup, discoveryContext, logger, discoverySink); + } + } + } + catch (Exception ex) + { + Logger.Error("Exception caught while discovering tests: {0} ({1})", ex.Message, ex.HResult); + Logger.Error(ex.StackTrace); + } + finally + { + Logger.Shutdown(); + } + } + + #endregion ITestDiscoverer + + } +} diff --git a/BoostTestAdapter/BoostTestDiscovererFactoryOptions.cs b/BoostTestAdapter/BoostTestDiscovererFactoryOptions.cs new file mode 100644 index 0000000..ca6c737 --- /dev/null +++ b/BoostTestAdapter/BoostTestDiscovererFactoryOptions.cs @@ -0,0 +1,12 @@ +using BoostTestAdapter.Settings; + +namespace BoostTestAdapter +{ + /// + /// Options for Boost Test discoverer provisioning + /// + public class BoostTestDiscovererFactoryOptions + { + public ExternalBoostTestRunnerSettings ExternalTestRunnerSettings { get; set; } + } +} diff --git a/BoostTestAdapter/BoostTestDiscovererInternal.cs b/BoostTestAdapter/BoostTestDiscovererInternal.cs new file mode 100644 index 0000000..11b9cd3 --- /dev/null +++ b/BoostTestAdapter/BoostTestDiscovererInternal.cs @@ -0,0 +1,357 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BoostTestAdapter.SourceFilter; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using VisualStudioAdapter; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; + +namespace BoostTestAdapter +{ + /// + /// Contains method to find boost test cases from list of files + /// + public class BoostTestDiscovererInternal + { + #region Constants + + /// + /// Constants identifying Boost Test tokens. + /// + private static class Constants + { + public const string TypedefListIdentifier = "typedef list"; + public const string TypedefMplListIdentifier = "typedef mpl::list"; + public const string TypedefBoostMplListIdentifier = "typedef boost::mpl::list"; + public const string AutoTestCaseIdentifier = "BOOST_AUTO_TEST_CASE"; + public const string FixtureTestCaseIdentifier = "BOOST_FIXTURE_TEST_CASE"; + public const string AutoTestSuiteIdentifier = "BOOST_AUTO_TEST_SUITE"; + public const string FixtureTestSuiteIdentifier = "BOOST_FIXTURE_TEST_SUITE"; + public const string AutoTestSuiteEndIdentifier = "BOOST_AUTO_TEST_SUITE_END"; + public const string TestCaseTemplateIdentifier = "BOOST_AUTO_TEST_CASE_TEMPLATE"; + } + + #endregion Constants + + /// + /// Constructor + /// + /// The Visual Studio instance provider + /// source filters object that will be used to filter inactive code + public BoostTestDiscovererInternal(IVisualStudioInstanceProvider provider, ISourceFilter[] newSourceFilters) + { + this.VSProvider = provider; + this._sourceFilters = newSourceFilters; + } + + #region Members + + /// + /// Collection of source filters which are applied to sources for correct test extraction + /// + private readonly ISourceFilter[] _sourceFilters; + + #endregion Members + + #region Properties + + /// + /// Visual Studio Instance provider + /// + public IVisualStudioInstanceProvider VSProvider { get; private set; } + + #endregion Properties + + #region Public methods + + /// + /// gets (parses) all testcases from cpp files checking for + /// BOOST_AUTO_TEST_CASE and BOOST_AUTO_TEST_SUITE parameter + /// + /// mapping between projectexe and the corresponding .cpp files + /// UTF component for collecting testcases + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] + public void GetBoostTests(IDictionary solutionInfo, ITestCaseDiscoverySink discoverySink) + { + if (solutionInfo != null) + { + foreach (KeyValuePair info in solutionInfo) + { + string source = info.Key; + ProjectInfo projectInfo = info.Value; + + foreach(var sourceFile in projectInfo.CppSourceFiles) + { + try + { + using (var sr = new StreamReader(sourceFile)) + { + try + { + var cppSourceFile = new CppSourceFile() + { + FileName = sourceFile, + SourceCode = sr.ReadToEnd() + }; + + /* + * it is important that the pre-processor defines at project level are not modified + * because every source file in the project has to have the same starting point. + */ + + ApplySourceFilter(cppSourceFile, new Defines(projectInfo.DefinesHandler)); + //call to cpy ctor + DiscoverBoostTests(cppSourceFile, source, discoverySink); + } + catch (Exception ex) + { + Logger.Error( + "Exception raised while discovering tests from \"{0}\" of project \"{1}\", ({2})", + sourceFile, projectInfo.ProjectExe, ex.Message); + Logger.Error(ex.StackTrace); + } + } + } + catch + { + Logger.Error("Unable to open file \"{0}\" of project \"{1}\".", sourceFile, projectInfo.ProjectExe); + } + } + } + } + else + { + Logger.Error("the solutionInfo object was found to be null whilst"); + } + } + + /// + /// Discovers Boost Test from the provided C++ source file. Notifies test discovery via the provided discoverySink. + /// + /// The C++ source file to scan for Boost Tests + /// The associated test source EXE + /// The discoverySink to which identified tests will be notified to + private static void DiscoverBoostTests(CppSourceFile cppSourceFile, string source, ITestCaseDiscoverySink discoverySink) + { + string[] code = cppSourceFile.SourceCode.TrimEnd(new[] { ' ', '\n', '\r' }).Split('\n'); + + SourceFileInfo sourceInfo = new SourceFileInfo(cppSourceFile.FileName, 0); + + QualifiedNameBuilder suite = new QualifiedNameBuilder(); + // Push the equivalent of the Master Test Suite + suite.Push(QualifiedNameBuilder.DefaultMasterTestSuiteName); + + var templateLists = new Dictionary>(); + + foreach (string line in code) + { + ++sourceInfo.LineNumber; + + string[] splitMacro = line.Split(new[] { '<', '>', '(', ',', ')', ';' }); + string desiredMacro = splitMacro[0].Trim(); + + /* + * Currently the below is not able to handle BOOST UTF signatures spread over multiple lines. + */ + switch (desiredMacro) + { + case Constants.TypedefListIdentifier: + case Constants.TypedefMplListIdentifier: + case Constants.TypedefBoostMplListIdentifier: + { + var dataTypes = new List(); + int i; + + for (i = 1; i < splitMacro.Length - 2; ++i) + { + dataTypes.Add(splitMacro[i].Trim()); + } + + templateLists.Add(splitMacro[i].Trim(), dataTypes); + break; + } + + case Constants.TestCaseTemplateIdentifier: + { + string listName = splitMacro[3].Trim(); + //third parameter is the corresponding boost::mpl::list name + + if (templateLists.ContainsKey(listName)) + { + foreach (var dataType in templateLists[listName]) + { + string testCaseName = splitMacro[1].Trim(); + //first parameter is the test case name + string testCaseNameWithDataType = testCaseName + "<" + dataType + ">"; + + var testCase = CreateTestCase(source, sourceInfo, + suite, testCaseNameWithDataType); + + AddTestCase(testCase, discoverySink); + } + } + break; + } + + case Constants.FixtureTestSuiteIdentifier: + case Constants.AutoTestSuiteIdentifier: + { + suite.Push(splitMacro[1].Trim()); + break; + } + + case Constants.FixtureTestCaseIdentifier: + case Constants.AutoTestCaseIdentifier: + { + string testCaseName = splitMacro[1].Trim(); + + var testCase = CreateTestCase(source, sourceInfo, suite, + testCaseName); + + AddTestCase(testCase, discoverySink); + break; + } + + case Constants.AutoTestSuiteEndIdentifier: + { + suite.Pop(); + break; + } + default: + break; + } + } + } + + /// + /// Applies the filter actions created in the _sourceFilters object onto the source code + /// + /// source code related information + /// reference to the defines instances handling the pre-processor defines + private void ApplySourceFilter(CppSourceFile cppSourceFile, Defines definesHandler) + { + foreach (var sourceFilter in _sourceFilters) + { + sourceFilter.Filter(cppSourceFile, definesHandler); + } + } + + /// + /// Prepares the test case data. Maps each source to a project within the currently loaded solution. + /// + /// List of exe files present in the solution. + /// Dictionary mapping each source to a ProjectInfo that will be populated with the project information + public IDictionary PrepareTestCaseData(IEnumerable sources) + { + Dictionary solutionInfo = new Dictionary(); + + // Get the currently loaded VisualStudio instance + IVisualStudio vs = this.VSProvider.Instance; + + if (vs != null) + { + // Copy the enumerable to a list so that we can maintain/modify this local copy + List sourcesCopy = sources.ToList(); + + foreach (IProject project in vs.Solution.Projects) + { + IProjectConfiguration configuration = project.ActiveConfiguration; + + //Iterating over projects and then the sources for improved performance + int index = sourcesCopy.FindIndex(source => string.Equals(source, configuration.PrimaryOutput, StringComparison.Ordinal)); + if (index != -1) + { + ProjectInfo projectInfo = new ProjectInfo(sourcesCopy[index]); + + // Maintain (copied) list of sources so that we may exit early if possible + sourcesCopy.RemoveAt(index); + + projectInfo.DefinesHandler = configuration.CppCompilerOptions.PreprocessorDefinitions; + foreach (string sourceFile in project.SourceFiles) + { + projectInfo.CppSourceFiles.Add(sourceFile); + } + + solutionInfo.Add(projectInfo.ProjectExe, projectInfo); + + if (sourcesCopy.Count == 0) + { + break; + } + } + } + } + + return solutionInfo; + } + + #endregion Public methods + + #region Private helper methods + + /// + /// Creates a new TestCase object. + /// + /// Name of the project executable + /// .cpp file path and TestCase line number + /// The suite in which testcase is present + /// Name of the testcase + /// The created TestCase object + private static VSTestCase CreateTestCase(string sourceExe, SourceFileInfo sourceInfo, QualifiedNameBuilder suite, string testCaseName) + { + suite.Push(testCaseName); + + string qualifiedName = suite.ToString(); + + suite.Pop(); + + var testCase = new VSTestCase(qualifiedName, BoostTestExecutor.ExecutorUri, sourceExe) + { + CodeFilePath = sourceInfo.File, + LineNumber = sourceInfo.LineNumber, + DisplayName = testCaseName, + }; + + GroupViaTraits(suite.ToString(), testCase); + + return testCase; + } + + /// + /// Sets the Traits property for the testcase object. + /// + /// Name of the test suite to which the testcase belongs + /// [ref] The testcase object + private static void GroupViaTraits(string suiteName, VSTestCase testCase) + { + string traitName = suiteName; + + if (string.IsNullOrEmpty(suiteName)) + { + traitName = QualifiedNameBuilder.DefaultMasterTestSuiteName; + } + + testCase.Traits.Add(VSTestModel.TestSuiteTrait, traitName); + } + + /// + /// Helper methods which adds a test case to an internal list and sends the test to the discovery sink + /// + /// the test case to be added + /// the discovery sink where the test case is sent to + private static void AddTestCase(VSTestCase testCase, ITestCaseDiscoverySink discoverySink) + { + //send to discovery sink + if (null != discoverySink) + { + Logger.Info("Found test: {0}", testCase.FullyQualifiedName); + discoverySink.SendTestCase(testCase); + } + } + + #endregion Private helper methods + } +} \ No newline at end of file diff --git a/BoostTestAdapter/BoostTestExeDiscoverer.cs b/BoostTestAdapter/BoostTestExeDiscoverer.cs new file mode 100644 index 0000000..fc707ca --- /dev/null +++ b/BoostTestAdapter/BoostTestExeDiscoverer.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using System.Runtime.InteropServices; +using BoostTestAdapter.Settings; +using BoostTestAdapter.SourceFilter; +using BoostTestAdapter.Utility.VisualStudio; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; + +namespace BoostTestAdapter +{ + /// + /// Implementation of ITestDiscoverer for Boost Tests contained within .exe files + /// + public class BoostTestExeDiscoverer : IBoostTestDiscoverer + { + #region Constructors + + /// + /// Default constructor + /// + public BoostTestExeDiscoverer() + : this(new DefaultVisualStudioInstanceProvider()) + { + } + + /// + /// Constructor + /// + /// + public BoostTestExeDiscoverer(IVisualStudioInstanceProvider provider) + { + this.VSProvider = provider; + } + + #endregion Constructors + + #region Properties + + public IVisualStudioInstanceProvider VSProvider { get; private set; } + + #endregion Properties + + #region ITestDiscoverer + + /// + /// Find and pass all the testcases to discovery sink. + /// + /// Test files containing testcases + /// discovery context settings + /// + /// Unit test framework Sink + public void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, + IMessageLogger logger, ITestCaseDiscoverySink discoverySink) + { + + BoostTestAdapterSettings settings = BoostTestAdapterSettingsProvider.GetSettings(discoveryContext); + var testDiscovererInternal = new BoostTestDiscovererInternal(this.VSProvider, SourceFilterFactory.Get(settings)); + IDictionary solutioninfo = null; + + var numberOfAttempts = 100; + + // try several times to overcome "Application is Busy" COMException + while (numberOfAttempts > 0) + { + try + { + solutioninfo = testDiscovererInternal.PrepareTestCaseData(sources); + // set numberOfAttempts = 0, because there is no need to try again, + // since obviously no exception was thrown at this point + numberOfAttempts = 0; + } + catch (COMException) + { + --numberOfAttempts; + + // re-throw after all attempts have failed + if (numberOfAttempts == 0) + { + throw; + } + } + } + + testDiscovererInternal.GetBoostTests(solutioninfo, discoverySink); + } + + #endregion ITestDiscoverer + } +} \ No newline at end of file diff --git a/BoostTestAdapter/BoostTestExecutor.cs b/BoostTestAdapter/BoostTestExecutor.cs new file mode 100644 index 0000000..0d8ce33 --- /dev/null +++ b/BoostTestAdapter/BoostTestExecutor.cs @@ -0,0 +1,707 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; +using BoostTestAdapter.Boost.Results; +using BoostTestAdapter.Boost.Runner; +using BoostTestAdapter.Settings; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; +using VSTestResult = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult; + +namespace BoostTestAdapter +{ + /// + /// Implementation of ITestExecutor interface for Boost Tests. + /// + [ExtensionUri(ExecutorUriString)] + public class BoostTestExecutor : ITestExecutor + { + #region Constants + + public const string ExecutorUriString = "executor://BoostTestExecutor/v1"; + public static readonly Uri ExecutorUri = new Uri(ExecutorUriString); + + // Error issued by Boost Test when a test cannot be executed. + private const string TestNotFound = "Test setup error: no test cases matching filter"; + + /// + /// Static class aggregating constant file extensions. + /// + private static class FileExtensions + { + public const string LogFile = ".test.log.xml"; + public const string ReportFile = ".test.report.xml"; + public const string StdOutFile = ".test.stdout.log"; + public const string StdErrFile = ".test.stderr.log"; + } + + #endregion Constants + + #region Constructors + + /// + /// Default constructor + /// + public BoostTestExecutor() + : this(new DefaultBoostTestDiscovererFactory(), new DefaultBoostTestRunnerFactory()) + { + } + + /// + /// Constructor + /// + /// The ITestDiscovererFactory which is to be used + /// The IBoostTestRunnerFactory which is to be used + public BoostTestExecutor(IBoostTestDiscovererFactory discovererFactory, IBoostTestRunnerFactory testRunnerFactory) + { + this.DiscovererFactory = discovererFactory; + this.TestRunnerFactory = testRunnerFactory; + + this._cancelled = false; + } + + #endregion Constructors + + #region Member variables + + private volatile bool _cancelled = false; + + #endregion Member variables + + #region Properties + + private IBoostTestDiscovererFactory DiscovererFactory { get; set; } + + private IBoostTestRunnerFactory TestRunnerFactory { get; set; } + + #endregion Properties + + #region Delegates + + private delegate BoostTestRunnerCommandLineArgs CommandLineArgsBuilder(string source, BoostTestAdapterSettings settings); + + #endregion Delegates + + /// + /// Factory function which returns an appropriate ITestDiscoverer + /// for the provided source or null if not applicable. + /// + /// The source module which requires test discovery + /// An IBoostTestDiscoverer valid for the provided source or null if none are available + private IBoostTestDiscoverer GetTestDiscoverer(string source, BoostTestAdapterSettings settings) + { + Utility.Code.Require(settings, "settings"); + + BoostTestDiscovererFactoryOptions options = new BoostTestDiscovererFactoryOptions(); + options.ExternalTestRunnerSettings = settings.ExternalTestRunner; + + return this.DiscovererFactory.GetTestDiscoverer(source, options); + } + + /// + /// Factory function which returns an appropriate IBoostTestRunner + /// for the provided source or null if not applicable. + /// + /// The test for which to retrieve the IBoostTestRunner + /// An IBoostTestRunner valid for the provided source or null if none are available + private IBoostTestRunner GetTestRunner(VSTestCase testCase, BoostTestAdapterSettings settings) + { + BoostTestRunnerFactoryOptions options = new BoostTestRunnerFactoryOptions(); + options.ExternalTestRunnerSettings = (settings == null) ? null : settings.ExternalTestRunner; + + IBoostTestRunner runner = this.TestRunnerFactory.GetRunner(testCase.Source, options); + + // Using null instance pattern to avoid null reference exceptions raised with use of Linq GroupBy statements + return (runner == null) ? NullTestRunner.Instance : runner; + } + + /// + /// Initialization routine for running tests + /// + /// The logger which will be used to emit log messages + private void SetUp(IMessageLogger logger) + { +#if DEBUG && LAUNCH_DEBUGGER + System.Diagnostics.Debugger.Launch(); +#endif + + this._cancelled = false; + Logger.Initialize(logger); + } + + /// + /// Termination/Cleanup routine for running tests + /// + private static void TearDown() + { + Logger.Shutdown(); + } + + #region ITestExecutor + + /// + /// Execute the tests one by one. Run All. + /// + /// Collection of test modules (exe/dll) + /// Solution properties + /// Unit test framework handle + /// Entry point of the execution procedure whenever the user requests to run all the tests + public void RunTests(IEnumerable sources, + IRunContext runContext, + IFrameworkHandle frameworkHandle) + { + Utility.Code.Require(sources, "sources"); + Utility.Code.Require(runContext, "runContext"); + Utility.Code.Require(frameworkHandle, "frameworkHandle"); + + SetUp(frameworkHandle); + + BoostTestAdapterSettings settings = BoostTestAdapterSettingsProvider.GetSettings(runContext); + + foreach (string source in sources) + { + if (this._cancelled) + { + break; + } + + IBoostTestDiscoverer discoverer = GetTestDiscoverer(source, settings); + + if (discoverer != null) + { + try + { + DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); + + // NOTE IRunContext implements IDiscoveryContext + // NOTE IFrameworkHandle implements IMessageLogger + + // Re-discover tests so that we could make use of the RunTests overload which takes an enumeration of test cases. + // This is necessary since we need to run tests one by one in order to have the test adapter remain responsive + // and have a list of tests over which we can generate test results for. + discoverer.DiscoverTests(new string[] { source }, runContext, frameworkHandle, sink); + + IEnumerable batches = null; + if (runContext.IsDataCollectionEnabled) + { + // Batch tests into grouped runs based by source so that we avoid reloading symbols per test run + // NOTE For code-coverage speed is given preference over adapter responsiveness. + batches = BatchTestsPerSource(sink.Tests, settings, GetCodeCoverageArguments); + } + else + { + batches = BatchTestsIndividually(sink.Tests, settings, GetDefaultArguments); + } + + // Delegate to the RunBoostTests overload which takes an enumeration of test batches + RunBoostTests(batches, runContext, frameworkHandle); + } + catch (Exception ex) + { + Logger.Error("Exception caught while running tests from {0} ({1})", source, ex.Message); + } + } + else + { + Logger.Error("No suitable discoverer found for {0}.", source); + } + } + + TearDown(); + } + + /// + /// Execute the tests one by one. Run Selected + /// + /// Testcases object + /// Solution properties + /// Unit test framework handle + /// Entry point of the execution procedure whenever the user requests to run one or a specific lists of tests + public void RunTests(IEnumerable tests, IRunContext runContext, IFrameworkHandle frameworkHandle) + { + Utility.Code.Require(tests, "tests"); + Utility.Code.Require(runContext, "runContext"); + Utility.Code.Require(frameworkHandle, "frameworkHandle"); + + SetUp(frameworkHandle); + + BoostTestAdapterSettings settings = BoostTestAdapterSettingsProvider.GetSettings(runContext); + + IEnumerable batches = null; + if (runContext.IsDataCollectionEnabled) + { + // Batch tests into grouped runs based on test source and test suite so that we minimize symbol reloading + // + // NOTE Required batching at test suite level since Boost Unit Test Framework command-line arguments only allow + // multiple test name specification for tests which reside in the same test suite + // + // NOTE For code-coverage speed is given preference over adapter responsiveness. + batches = BatchTestsPerTestSuite(tests, settings, GetCodeCoverageArguments); + } + else + { + batches = BatchTestsIndividually(tests, settings, GetDefaultArguments); + } + + RunBoostTests(batches, runContext, frameworkHandle); + + TearDown(); + } + + /// + /// Cancel the execution of tests + /// + public void Cancel() + { + _cancelled = true; + } + + #endregion ITestExecutor + + #region Test Batching + + /// + /// Produces test runs, one per test source + /// + /// The tests to prepare in batches + /// Adapter settings which are currently in use + /// A builder which produces an appropriate BoostTestRunnerCommandLineArgs structure for a given test and settings pair + /// An enumeration of batched test runs, one per distinct test source + private IEnumerable BatchTestsPerSource(IEnumerable tests, BoostTestAdapterSettings settings, CommandLineArgsBuilder argsBuilder) + { + BoostTestRunnerSettings adaptedSettings = settings.TestRunnerSettings.Clone(); + adaptedSettings.Timeout = -1; + + return tests. + GroupBy((source) => GetTestRunner(source, settings), new BoostTestRunnerComparer()). + Where((group) => (group.Key != NullTestRunner.Instance)). + // Project IGrouping into TestRun instances + Select(group => + { + BoostTestRunnerCommandLineArgs args = argsBuilder(group.Key.Source, settings); + + // NOTE the --run_test command-line arg is left empty so that all tests are executed + + return new TestRun(group.Key, group, args, adaptedSettings); + }); + } + + /// + /// Produces batched test runs grouped by source and test suite + /// + /// The tests to prepare in batches + /// Adapter settings which are currently in use + /// A builder which produces an appropriate BoostTestRunnerCommandLineArgs structure for a given test and settings pair + /// An enumeration of groups of tests batched into test runs + private IEnumerable BatchTestsPerTestSuite(IEnumerable tests, BoostTestAdapterSettings settings, CommandLineArgsBuilder argsBuilder) + { + BoostTestRunnerSettings adaptedSettings = settings.TestRunnerSettings.Clone(); + adaptedSettings.Timeout = -1; + + // Group by test runner + IEnumerable> sourceGroups = + tests.GroupBy((source) => GetTestRunner(source, settings), new BoostTestRunnerComparer()). + Where((group) => (group.Key != NullTestRunner.Instance)); + + foreach (IGrouping sourceGroup in sourceGroups) + { + // Group by test suite + IEnumerable> suiteGroups = sourceGroup.GroupBy(test => test.Traits.First(trait => (trait.Name == VSTestModel.TestSuiteTrait)).Value); + foreach (IGrouping suiteGroup in suiteGroups) + { + BoostTestRunnerCommandLineArgs args = argsBuilder(sourceGroup.Key.Source, settings); + + foreach (VSTestCase test in suiteGroup) + { + // List all tests by display name + // but ensure that the first test is fully qualified so that remaining tests are taken relative to this test suite + args.Tests.Add((args.Tests.Count == 0) ? test.FullyQualifiedName : test.DisplayName); + } + + yield return new TestRun(sourceGroup.Key, suiteGroup, args, adaptedSettings); + } + } + } + + /// + /// Produces test runs, one per test case provided + /// + /// The tests to prepare in batches + /// Adapter settings which are currently in use + /// A builder which produces an appropriate BoostTestRunnerCommandLineArgs structure for a given test and settings pair + /// An enumeration of batched test runs, one per test + private IEnumerable BatchTestsIndividually(IEnumerable tests, BoostTestAdapterSettings settings, CommandLineArgsBuilder argsBuilder) + { + return tests.Select(test => + { + IBoostTestRunner runner = GetTestRunner(test, settings); + + if (runner == NullTestRunner.Instance) + { + return null; + } + + BoostTestRunnerCommandLineArgs args = argsBuilder(runner.Source, settings); + args.Tests.Add(test.FullyQualifiedName); + + return new TestRun(runner, new VSTestCase[] { test }, args, settings.TestRunnerSettings); + }).Where((testRun) => (testRun != null)); + } + + /// + /// An equality comparer useful for grouping equivalent BoostTestRunners + /// + private class BoostTestRunnerComparer : IEqualityComparer + { + #region IEqualityComparer + + public bool Equals(IBoostTestRunner x, IBoostTestRunner y) + { + Utility.Code.Require(x, "x"); + Utility.Code.Require(y, "y"); + + return x.Source == y.Source; + } + + public int GetHashCode(IBoostTestRunner obj) + { + Utility.Code.Require(obj, "obj"); + + return obj.Source.GetHashCode(); + } + + #endregion IEqualityComparer + } + + #endregion Test Batching + + #region Helper methods + + /// + /// Run tests one test at a time and update results back to framework. + /// + /// List of test batches to run + /// Solution properties + /// Unit test framework handle + private void RunBoostTests(IEnumerable testBatches, IRunContext runContext, IFrameworkHandle frameworkHandle) + { + BoostTestAdapterSettings settings = BoostTestAdapterSettingsProvider.GetSettings(runContext); + + foreach (TestRun batch in testBatches) + { + if (_cancelled) + { + break; + } + + DateTimeOffset start = new DateTimeOffset(DateTime.Now); + + try + { + Logger.Info("{0}: -> [{1}]", ((runContext.IsBeingDebugged) ? "Debugging" : "Executing"), string.Join(", ", batch.Tests)); + + CleanOutput(batch.Arguments); + + // Execute the tests + if (ExecuteTests(batch, runContext, frameworkHandle)) + { + foreach (VSTestResult result in GenerateTestResults(batch, start, settings)) + { + // Identify test result to Visual Studio Test framework + frameworkHandle.RecordResult(result); + } + } + } + catch (BoostTestAdapter.Boost.Runner.TimeoutException ex) + { + foreach (VSTestCase testCase in batch.Tests) + { + VSTestResult testResult = GenerateTimeoutResult(testCase, ex); + testResult.StartTime = start; + + frameworkHandle.RecordResult(testResult); + } + } + catch (Exception ex) + { + Logger.Error("Exception caught while running test batch {0} [{1}] ({2})", batch.Source, string.Join(", ", batch.Tests), ex.Message); + } + } + } + + /// + /// Delete output files. + /// + /// The BoostTestRunnerCommandLineArgs which contains references to output files. + private static void CleanOutput(BoostTestRunnerCommandLineArgs args) + { + DeleteFile(args.LogFile); + DeleteFile(args.ReportFile); + DeleteFile(args.StandardOutFile); + DeleteFile(args.StandardErrorFile); + } + + /// + /// Checks to see if the file is available and deletes it. + /// + /// The file to delete. + /// true if the file is deleted; false otherwise. + private static bool DeleteFile(string file) + { + if (!string.IsNullOrEmpty(file) && File.Exists(file)) + { + File.Delete(file); + return true; + } + + return false; + } + + /// + /// Executes the provided test batch + /// + /// The test batch which will be executed. + /// The RunContext for this TestCase. Determines whether the test should be debugged or not. + /// The FrameworkHandle for this test execution instance. + /// + private static bool ExecuteTests(TestRun run, IRunContext runContext, IFrameworkHandle frameworkHandle) + { + if (run.Runner != null) + { + if (runContext.IsBeingDebugged) + { + run.Debug(frameworkHandle); + } + else + { + run.Run(); + } + } + else + { + Logger.Error("No suitable executor found for [{0}].", string.Join(", ", run.Tests)); + } + + return run.Runner != null; + } + + /// + /// Factory function which returns an appropriate BoostTestRunnerCommandLineArgs structure + /// + /// The TestCases source + /// The Boost Test adapter settings currently in use + /// A BoostTestRunnerCommandLineArgs structure for the provided source + private BoostTestRunnerCommandLineArgs GetDefaultArguments(string source, BoostTestAdapterSettings settings) + { + BoostTestRunnerCommandLineArgs args = new BoostTestRunnerCommandLineArgs(); + + args.WorkingDirectory = Path.GetDirectoryName(source); + + string filename = Path.GetFileName(source); + + // Specify log and report file information + args.LogFormat = OutputFormat.XML; + args.LogLevel = settings.LogLevel; + args.LogFile = SanitizeFileName(filename + FileExtensions.LogFile); + + args.ReportFormat = OutputFormat.XML; + args.ReportLevel = ReportLevel.Detailed; + args.ReportFile = SanitizeFileName(filename + FileExtensions.ReportFile); + + args.StandardOutFile = SanitizeFileName(filename + FileExtensions.StdOutFile); + args.StandardErrorFile = SanitizeFileName(filename + FileExtensions.StdErrFile); + + return args; + } + + /// + /// Factory function which returns an appropriate BoostTestRunnerCommandLineArgs structure for code coverage + /// + /// The TestCases source + /// The Boost Test adapter settings currently in use + /// A BoostTestRunnerCommandLineArgs structure for the provided source + private BoostTestRunnerCommandLineArgs GetCodeCoverageArguments(string source, BoostTestAdapterSettings settings) + { + BoostTestRunnerCommandLineArgs args = GetDefaultArguments(source, settings); + + // Disable standard error/standard output capture + args.StandardOutFile = null; + args.StandardErrorFile = null; + + // Disable memory leak detection + args.DetectMemoryLeaks = 0; + + return args; + } + + /// + /// Sanitizes a file name suitable for Boost Test command line argument values + /// + /// The filename to sanitize. + /// The sanitized filename. + private static string SanitizeFileName(string file) + { + return file.Replace(' ', '_'); + } + + /// + /// Generates TestResults based on Boost Test result output. + /// + /// The tests which have been executed in the prior test run. + /// The test execution start time. + /// boost test adapter settings + /// A Visual Studio TestResult related to the executed test. + private static IEnumerable GenerateTestResults(TestRun testRun, DateTimeOffset start, BoostTestAdapterSettings settings) + { + return GenerateTestResults(testRun, start, DateTimeOffset.Now, settings); + } + + /// + /// Generates TestResults based on Boost Test result output. + /// + /// The tests which have been executed in the prior test run. + /// The test execution start time. + /// The test execution end time. + /// boost test adapter settings + /// A Visual Studio TestResult related to the executed test. + private static IEnumerable GenerateTestResults(TestRun testRun, DateTimeOffset start, DateTimeOffset end, BoostTestAdapterSettings settings) + { + TestResultCollection results = new TestResultCollection(); + + try + { + results.Parse(testRun.Arguments, settings); + } + catch (XmlException) + { + string text = File.ReadAllText(testRun.Arguments.ReportFile); + + if (text.Trim() == TestNotFound) + { + return testRun.Tests.Select(GenerateNotFoundResult); + } + else + { + // Re-throw the exception + throw; + } + } + + return testRun.Tests. + Select(test => + { + // Locate the test result associated to the current test + BoostTestAdapter.Boost.Results.TestResult result = results[test.FullyQualifiedName]; + + if (result != null) + { + // Convert the Boost.Test.Result data structure into an equivalent Visual Studio model + VSTestResult vsResult = result.AsVSTestResult(test); + vsResult.StartTime = start; + vsResult.EndTime = end; + + return vsResult; + } + + return null; + }). + Where(result => (result != null)); + } + + /// + /// Generates a default TestResult for a timeout exception. + /// + /// The test which failed due to a timeout. + /// The exception related to this timeout. + /// A timed-out, failed TestResult related to the provided test. + private static VSTestResult GenerateTimeoutResult(VSTestCase test, BoostTestAdapter.Boost.Runner.TimeoutException ex) + { + VSTestResult result = new VSTestResult(test); + + result.ComputerName = Environment.MachineName; + + result.Outcome = TestOutcome.Failed; + result.Duration = TimeSpan.FromMilliseconds(ex.Timeout); + result.ErrorMessage = "Timeout exceeded. Test ran for more than " + ex.Timeout + " ms."; + + if (!string.IsNullOrEmpty(test.CodeFilePath)) + { + result.ErrorStackTrace = new SourceFileInfo(test.CodeFilePath, test.LineNumber).ToString(); + } + + return result; + } + + /// + /// Generates a default TestResult for a 'test not found' exception. + /// + /// The test which failed due to a timeout. + /// A timed-out, failed TestResult related to the provided test. + private static VSTestResult GenerateNotFoundResult(VSTestCase test) + { + VSTestResult result = new VSTestResult(test); + + result.ComputerName = Environment.MachineName; + + result.Outcome = TestOutcome.Skipped; + result.ErrorMessage = GetNotFoundErrorMessage(test); + + return result; + } + + /// + /// Provides a suitable message in case the provided test is not found. + /// + /// The test which was not found. + /// A suitable 'not-found' for the provided test case. + private static string GetNotFoundErrorMessage(VSTestCase test) + { + if (test.FullyQualifiedName.Contains(' ')) + { + return TestNotFound + " (Test name contains spaces)"; + } + else if (test.FullyQualifiedName.Contains(',')) + { + return TestNotFound + " (Test name contains commas)"; + } + + return TestNotFound; + } + + #endregion Helper methods + + #region Helper classes + + private class NullTestRunner : IBoostTestRunner + { + #region IBoostTestRunner + + public void Debug(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings, IFrameworkHandle framework) + { + // NO OP + } + + public void Run(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + // NO OP + } + + public string Source + { + get { return string.Empty; } + } + + #endregion IBoostTestRunner + + public static readonly IBoostTestRunner Instance = new NullTestRunner(); + } + + #endregion Helper classes + } +} \ No newline at end of file diff --git a/BoostTestAdapter/DefaultBoostTestDiscovererFactory.cs b/BoostTestAdapter/DefaultBoostTestDiscovererFactory.cs new file mode 100644 index 0000000..a857922 --- /dev/null +++ b/BoostTestAdapter/DefaultBoostTestDiscovererFactory.cs @@ -0,0 +1,61 @@ +using System.IO; +using BoostTestAdapter.Settings; + +namespace BoostTestAdapter +{ + /// + /// Default implementation for IBoostTestDiscovererFactory. + /// + public class DefaultBoostTestDiscovererFactory : IBoostTestDiscovererFactory + { + #region IBoostTestDiscovererFactory + + /// + /// Provides a test discoverer based on the extension type of the identifier. + /// + /// The output path and name of the target name along with its extension + /// A structure which states particular features of interest in the manufactured product. + /// An IBoostTestDiscoverer instance or null if one cannot be provided. + public IBoostTestDiscoverer GetTestDiscoverer(string identifier, BoostTestDiscovererFactoryOptions options) + { + IBoostTestDiscoverer discoverer = null; + + // Prefer external test discoverers over internal ones + if ((options != null) && (options.ExternalTestRunnerSettings != null)) + { + discoverer = GetExternalTestDiscoverer(identifier, options.ExternalTestRunnerSettings); + } + + if (discoverer == null) + { + discoverer = GetInternalTestDiscoverer(identifier); + } + + return discoverer; + } + + private static IBoostTestDiscoverer GetInternalTestDiscoverer(string source) + { + switch (Path.GetExtension(source)) + { + case ".exe": return new BoostTestExeDiscoverer(); + } + + return null; + } + + private static IBoostTestDiscoverer GetExternalTestDiscoverer(string source, ExternalBoostTestRunnerSettings settings) + { + Utility.Code.Require(settings, "settings"); + + if (settings.ExtensionType == Path.GetExtension(source)) + { + return new ExternalBoostTestDiscoverer(settings); + } + + return null; + } + + #endregion IBoostTestDiscovererFactory + } +} \ No newline at end of file diff --git a/BoostTestAdapter/ExternalBoostTestDiscoverer.cs b/BoostTestAdapter/ExternalBoostTestDiscoverer.cs new file mode 100644 index 0000000..3b58805 --- /dev/null +++ b/BoostTestAdapter/ExternalBoostTestDiscoverer.cs @@ -0,0 +1,298 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Xml.Serialization; +using BoostTestAdapter.Boost.Test; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; +using TestCase = BoostTestAdapter.Boost.Test.TestCase; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; + +namespace BoostTestAdapter +{ + /// + /// A Boost Test Discoverer which discovers tests based on configuration. + /// + public class ExternalBoostTestDiscoverer : IBoostTestDiscoverer + { + #region Constants + + private const string ListFileSuffix = ".test.list.xml"; + + #endregion Constants + + public ExternalBoostTestDiscoverer(ExternalBoostTestRunnerSettings settings) + { + this.Settings = settings; + } + + public ExternalBoostTestRunnerSettings Settings { get; private set; } + + #region IBoostTestDiscoverer + + public void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink) + { + Utility.Code.Require(sources, "sources"); + Utility.Code.Require(discoverySink, "discoverySink"); + + foreach (string source in sources) + { + TestFramework framework = DiscoverTestFramework(source); + + if ((framework != null) && (framework.MasterTestSuite != null)) + { + BoostTestCaseDiscoverer frameworkDiscoverer = new BoostTestCaseDiscoverer(source, discoverySink); + framework.MasterTestSuite.Apply(frameworkDiscoverer); + } + } + } + + #endregion IBoostTestDiscoverer + + /// + /// Based on the establishsed configuration, discovers the tests within the provided test source module. + /// + /// The test source module + /// The test framework describing all tests contained within the test source or null if one cannot be provided. + private TestFramework DiscoverTestFramework(string source) + { + if (this.Settings.DiscoveryMethodType == DiscoveryMethodType.DiscoveryFileMap) + { + return ParseStaticTestList(source); + } + else if (this.Settings.DiscoveryMethodType == DiscoveryMethodType.DiscoveryCommandLine) + { + return ExecuteExternalDiscoveryCommand(source); + } + + return null; + } + + /// + /// Executes the discovery command as specified in the configuration for the requested test source. + /// + /// The test source module + /// The test framework describing all tests contained within the test source or null if one cannot be provided. + private TestFramework ExecuteExternalDiscoveryCommand(string source) + { + // Use a temporary file to host the result of the external discovery process + string path = Path.Combine(Path.GetDirectoryName(source), Path.GetFileName(source) + ListFileSuffix); + + // Perform cleanup to avoid inconsistent listing + if (File.Exists(path)) + { + File.Delete(path); + } + + CommandEvaluator evaluator = new CommandEvaluator(); + + evaluator.SetVariable("source", source); + evaluator.SetVariable("out", path); + + // Evaluate the discovery command + CommandLine commandLine = new CommandLine + { + FileName = evaluator.Evaluate(this.Settings.DiscoveryCommandLine.FileName).Result, + Arguments = evaluator.Evaluate(this.Settings.DiscoveryCommandLine.Arguments).Result + }; + + // Execute the discovery command via an external process + if (ExecuteCommand(commandLine)) + { + // Parse the generate TestFramework from the temporary file + return ParseTestFramework(path); + } + + return null; + } + + /// + /// Executes the provided command line as an external process. + /// + /// The process command line + /// true if the process terminated successfully (exit code = 0); false otherwise. + private static bool ExecuteCommand(CommandLine commandLine) + { + ProcessStartInfo info = new ProcessStartInfo + { + CreateNoWindow = false, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden, + WorkingDirectory = Path.GetTempPath(), + FileName = commandLine.FileName, + Arguments = commandLine.Arguments, + RedirectStandardError = false, + RedirectStandardInput = false + }; + + Process process = Process.Start(ProcessStartInfoEx.StartThroughCmdShell(info)); + if (process != null) + { + process.WaitForExit(); + + return (process.ExitCode == 0); + } + + return false; + } + + /// + /// Parses a static file containing the test lising for the requested test source as specified in the configuration. + /// + /// The test source module + /// The test framework describing all tests contained within the test source or null if one cannot be provided. + private TestFramework ParseStaticTestList(string source) + { + string path = null; + if (this.Settings.DiscoveryFileMap.TryGetValue(Path.GetFileName(source), out path)) + { + return ParseTestFramework(path); + } + + return null; + } + + /// + /// Deserializes a TestFramework from the Xml file path provided. + /// + /// A valid path to a TestFramework Xml file. + /// The deserialized TestFramework + private static TestFramework ParseTestFramework(string path) + { + using (FileStream stream = File.OpenRead(path)) + { + XmlSerializer deserializer = new XmlSerializer(typeof(TestFramework)); + return deserializer.Deserialize(stream) as TestFramework; + } + } + + /// + /// ITestVisitor implementation. Visits TestCases and registers them + /// with the supplied ITestCaseDiscoverySink. + /// + private class BoostTestCaseDiscoverer : ITestVisitor + { + #region Constructors + + /// + /// Constructor + /// + /// The source test module which contains the discovered tests + /// The ITestCaseDiscoverySink which will have tests registered with + public BoostTestCaseDiscoverer(string source, ITestCaseDiscoverySink sink) + { + this.Source = source; + this.Sink = sink; + + this.TestSuite = new QualifiedNameBuilder(); + } + + #endregion Constructors + + #region Properties + + public ITestCaseDiscoverySink Sink { get; private set; } + + private QualifiedNameBuilder TestSuite { get; set; } + + public uint Count { get; private set; } + + private TestSuite MasterTestSuite { get; set; } + + public string Source { get; private set; } + + #endregion Properties + + public void Visit(Boost.Test.TestCase testCase) + { + Utility.Code.Require(testCase, "testCase"); + + // Convert from Boost.Test.TestCase to a Visual Studio TestCase object + VSTestCase test = GenerateTestCase(testCase); + + if (test != null) + { + Logger.Info("Found test: {0}", testCase.FullyQualifiedName); + + ++this.Count; + + // Register test case + this.Sink.SendTestCase(test); + } + } + + public void Visit(TestSuite testSuite) + { + Utility.Code.Require(testSuite, "testSuite"); + + this.TestSuite.Push(testSuite); + + // Identify Master Test Suite + if ((this.MasterTestSuite == null) && (testSuite.Parent == null)) + { + this.MasterTestSuite = testSuite; + } + + foreach (TestUnit child in testSuite.Children) + { + child.Apply(this); + } + + this.TestSuite.Pop(); + } + + /// + /// Generates a Visual Studio equivalent test case structure. + /// + /// The Boost.Test.TestCase to convert. + /// An equivalent Visual Studio TestCase structure to the one provided. + private VSTestCase GenerateTestCase(TestCase testCase) + { + // Temporarily push TestCase on TestSuite name builder to acquire the fully qualified name of the TestCase + this.TestSuite.Push(testCase); + + VSTestCase test = new VSTestCase( + this.TestSuite.ToString(), + BoostTestExecutor.ExecutorUri, + this.Source + ); + + // Reset TestSuite QualifiedNameBuilder to original value + this.TestSuite.Pop(); + + if (testCase.Source != null) + { + test.CodeFilePath = testCase.Source.File; + test.LineNumber = testCase.Source.LineNumber; + } + + test.DisplayName = testCase.Name; + + // Register the test suite as a trait + test.Traits.Add(new Trait(VSTestModel.TestSuiteTrait, GetCurrentTestSuite())); + + return test; + } + + /// + /// Provides the fully qualified name of the current TestSuite + /// + /// The fully qualified name of the current TestSuite + private string GetCurrentTestSuite() + { + // Since the master test suite name is not included in the fully qualified name, identify + // this edge case and explicitly return the master test suite name in such cases. + if (this.TestSuite.Level == QualifiedNameBuilder.MasterTestSuiteLevel) + { + return (this.MasterTestSuite == null) ? QualifiedNameBuilder.DefaultMasterTestSuiteName : this.MasterTestSuite.Name; + } + + return this.TestSuite.ToString(); + } + } + } +} diff --git a/BoostTestAdapter/GlobalSuppressions.cs b/BoostTestAdapter/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..a4154c8bc93469078e43b62b16153cebc8bc8dbc GIT binary patch literal 7554 zcmeI1U2juI5QgWvQvZYH-cSk5*F{xSDkYG#Q3)WNQczW?COL83ICkW74EWEteV>^u z=PM3K!30_>O6+rXclMo`cV=fc|NMQ^Zd%9o?8ruz>)W9|$Cl|^JkRwuvjaW9vW5OW zu&JIH->``dGNiq_N`cvtxam+o^tLT9@l*_v~|ELzncmeI*p&7-&_Y zc_ZyM*Ei;O^m*hXj3a|jr&`x>T?p(p;j_?qLC8CKu@_e0N==MzTc8F&>HNX zYtGc?@)Vk~9_yb-0&)hLli772U-(?UGkPLRf|}<{tM@C`DDmvM9s}*i9)Ygzv#>?l zzqEAX3-a;XP}V8zhW5cb`*y7NVY$GA|C8TgNjX}gxrk%Ip}C|NlEkj3!XA7}=(;V& zbsC)O`pRVCD%KK3*LECVlfB6j+uD^#=~gV-v6n(K7peodDExpE6V0nKHCcK&U(Xb)nK=nHm(`**#=zTtJo?rHD7M<}s$qPY)+8vBDR7dCv9>wU6$Gpc(nTh^oZ zn)KgwDMVbZ-$O}dAD9UrCYphty4qvIZrd%pqu+b_{#vs~veaWCsxvva-!uYmwk79{ z@>8%nKaWGPs-FMmTXoy|+B)g2wn7gU9q5YntEQIAi^G>xRv4YNcai(1|A;8aR z1UnIzpbIA82bcnj$d)NJdE2sY1r9Ti~&DE#BE7avN0*XD{^>C*q;6 zeY-Rt6Q9&KmtkC)r+fBHvWWCJ_j~q87>Bmydd##}c|x?uw(PBEa`Jm*=g-r37oC}R z-FFYAb$I82*hw{aWIxF=)E6`7Yg^aSGU1E%*;%ah#g@hYVH zKF!bVn%G50!Ffx)!g))b6U<9zYpUg;MeSA}`U8#QzbvALKTn z*|jXYWv#Ee-sntrgr~5(x~W*7-m76iJ4&hGsAZ{c`L9v`UZUQma+8(%o)_w1A6?mP VRQvp>-d6>-C*C=o`roo={TD(mP=5db literal 0 HcmV?d00001 diff --git a/BoostTestAdapter/IBoostTestDiscoverer.cs b/BoostTestAdapter/IBoostTestDiscoverer.cs new file mode 100644 index 0000000..38aff16 --- /dev/null +++ b/BoostTestAdapter/IBoostTestDiscoverer.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; + +namespace BoostTestAdapter +{ + public interface IBoostTestDiscoverer + { + void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, IMessageLogger logger, + ITestCaseDiscoverySink discoverySink); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/IBoostTestDiscovererFactory.cs b/BoostTestAdapter/IBoostTestDiscovererFactory.cs new file mode 100644 index 0000000..9e00c42 --- /dev/null +++ b/BoostTestAdapter/IBoostTestDiscovererFactory.cs @@ -0,0 +1,16 @@ +namespace BoostTestAdapter +{ + /// + /// Abstract Factory which provides ITestDiscoverer instances. + /// + public interface IBoostTestDiscovererFactory + { + /// + /// Returns an IBoostTestDiscoverer based on the provided identifier. + /// + /// A unique identifier able to distinguish different ITestDiscoverer types. + /// A structure which states particular features of interest in the manufactured product. + /// An IBoostTestDiscoverer instance or null if one cannot be provided. + IBoostTestDiscoverer GetTestDiscoverer(string identifier, BoostTestDiscovererFactoryOptions options); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/ProjectInfo.cs b/BoostTestAdapter/ProjectInfo.cs new file mode 100644 index 0000000..20a9eda --- /dev/null +++ b/BoostTestAdapter/ProjectInfo.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using VisualStudioAdapter; + +namespace BoostTestAdapter +{ + /// + /// Aggregates necessary project information for EXE Boost test discovery. + /// + public class ProjectInfo + { + /// + /// Constructor + /// + /// The EXE test source path + public ProjectInfo(string projectExe) + { + ProjectExe = projectExe; + CppSourceFiles = new List(); + } + + /// + /// Preprocessor definitions in use by the test source + /// + public Defines DefinesHandler { get; set; } + + /// + /// Collection of C++ source files related to the test source + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp")] + public IList CppSourceFiles { get; private set; } + + /// + /// Boost Test EXE source path + /// + public string ProjectExe { get; private set; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Properties/AssemblyInfo.cs b/BoostTestAdapter/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..52ef303 --- /dev/null +++ b/BoostTestAdapter/Properties/AssemblyInfo.cs @@ -0,0 +1,42 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("BoostTestAdapter")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BoostTestAdapter")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(false)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the Id of the typelib if this project is exposed to COM + +[assembly: Guid("28c1228a-afc5-4bf9-9cc7-fa3d2e81a8ff")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: InternalsVisibleTo("BoostTestAdaptorNUnit")] \ No newline at end of file diff --git a/BoostTestAdapter/Settings/BoostTestAdapterSettings.cs b/BoostTestAdapter/Settings/BoostTestAdapterSettings.cs new file mode 100644 index 0000000..a0640c6 --- /dev/null +++ b/BoostTestAdapter/Settings/BoostTestAdapterSettings.cs @@ -0,0 +1,94 @@ +using System.ComponentModel; +using System.Xml; +using System.Xml.Serialization; +using BoostTestAdapter.Boost.Runner; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; + +namespace BoostTestAdapter.Settings +{ + /// + /// Settings relating to the Boost Test Visual Studio Adapter. + /// + /// + /// Distinguish between BoostTestAdapterSettings and BoostTestRunnerSettings. + /// BoostTestAdapterSettings aggregate both adapter specific settings and + /// BoostTestRunner settings as required. + /// + [XmlRoot(XmlRootName)] + public class BoostTestAdapterSettings : TestRunSettings + { + public const string XmlRootName = "BoostTest"; + + public BoostTestAdapterSettings() : + base(XmlRootName) + { + this.TestRunnerSettings = new BoostTestRunnerSettings(); + + // Set default configuration values + + this.FailTestOnMemoryLeak = false; + + this.ConditionalInclusionsFilteringEnabled = true; + + this.LogLevel = LogLevel.TestSuite; + + this.ExternalTestRunner = null; + } + + #region Properties + + #region Serialisable Fields + + [DefaultValue(-1)] + public int TimeoutMilliseconds + { + get + { + return this.TestRunnerSettings.Timeout; + } + + set + { + this.TestRunnerSettings.Timeout = value; + } + } + + [DefaultValue(false)] + public bool FailTestOnMemoryLeak { get; set; } + + [DefaultValue(true)] + public bool ConditionalInclusionsFilteringEnabled { get; set; } + + [DefaultValue(LogLevel.TestSuite)] + public LogLevel LogLevel { get; set; } + + public ExternalBoostTestRunnerSettings ExternalTestRunner { get; set; } + + #endregion Serialisable Fields + + [XmlIgnore] + public BoostTestRunnerSettings TestRunnerSettings { get; private set; } + + #endregion Properties + + #region TestRunSettings + + public override XmlElement ToXml() + { + XmlDocument doc = new XmlDocument(); + + using (XmlWriter writer = doc.CreateNavigator().AppendChild()) + { + XmlSerializer serializer = new XmlSerializer(typeof(BoostTestAdapterSettings)); + serializer.Serialize(writer, this); + } + + // Remove any namespace related attributes + doc.DocumentElement.RemoveAllAttributes(); + + return doc.DocumentElement; + } + + #endregion TestRunSettings + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Settings/BoostTestAdapterSettingsProvider.cs b/BoostTestAdapter/Settings/BoostTestAdapterSettingsProvider.cs new file mode 100644 index 0000000..f664c22 --- /dev/null +++ b/BoostTestAdapter/Settings/BoostTestAdapterSettingsProvider.cs @@ -0,0 +1,72 @@ +using System.ComponentModel.Composition; +using System.Xml; +using System.Xml.Serialization; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; + +namespace BoostTestAdapter.Settings +{ + /// + /// A Visual Studio ISettingsProvider implementation. Provisions BoostTestAdapterSettings. + /// + [Export(typeof(ISettingsProvider))] + [SettingsName(BoostTestAdapterSettings.XmlRootName)] + public class BoostTestAdapterSettingsProvider : ISettingsProvider + { + #region Constructors + + public BoostTestAdapterSettingsProvider() + { + this.Settings = new BoostTestAdapterSettings(); + } + + #endregion Constructors + + #region Properties + + /// + /// Reference to the recently loaded settings. May be null if no settings were specified or the settings failed to load. + /// + public BoostTestAdapterSettings Settings { get; private set; } + + #endregion Properties + + #region ISettingsProvider + + public void Load(XmlReader reader) + { + Utility.Code.Require(reader, "reader"); + + // NOTE This method gets called if the settings name matches the node name as expected. + + if (reader.Read() && reader.Name.Equals(BoostTestAdapterSettings.XmlRootName)) + { + XmlSerializer deserializer = new XmlSerializer(typeof(BoostTestAdapterSettings)); + this.Settings = deserializer.Deserialize(reader) as BoostTestAdapterSettings; + } + } + + #endregion ISettingsProvider + + /// + /// Builds a BoostTestAdapterSettings structure based on the information located within the IDiscoveryContext instance. + /// + /// The discovery context instance + /// A BoostTestRunnerSettings instance based on the information identified via the provided IDiscoveryContext instance. + public static BoostTestAdapterSettings GetSettings(IDiscoveryContext context) + { + Utility.Code.Require(context, "context"); + + BoostTestAdapterSettings settings = new BoostTestAdapterSettings(); + + BoostTestAdapterSettingsProvider provider = (context.RunSettings == null) ? null : context.RunSettings.GetSettings(BoostTestAdapterSettings.XmlRootName) as BoostTestAdapterSettingsProvider; + if (provider != null) + { + settings = provider.Settings; + } + + // Return defaults + return settings; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Settings/ExternalBoostTestRunnerSettings.cs b/BoostTestAdapter/Settings/ExternalBoostTestRunnerSettings.cs new file mode 100644 index 0000000..ca235c4 --- /dev/null +++ b/BoostTestAdapter/Settings/ExternalBoostTestRunnerSettings.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.Settings +{ + [Serializable] + public enum DiscoveryMethodType + { + DiscoveryCommandLine, + DiscoveryFileMap + } + + /// + /// Identifies the external test runner configuration block and its configuration options. + /// + [XmlRoot(Xml.ExternalTestRunner)] + public class ExternalBoostTestRunnerSettings : IXmlSerializable + { + #region Constants + + public const string DefaultExtensionType = ".dll"; + + #endregion Constants + + #region Constructors + + public ExternalBoostTestRunnerSettings() + { + this.ExtensionType = DefaultExtensionType; + this.DiscoveryFileMap = new Dictionary(); + + this.DiscoveryCommandLine = new CommandLine(); + this.ExecutionCommandLine = new CommandLine(); + } + + #endregion Constructors + + #region Properties + + /// + /// Specifies the file extension for which this test runner applies to + /// + public string ExtensionType { get; set; } + + /// + /// Specifies the discovery method i.e. either via a file map or via an external command + /// + public DiscoveryMethodType DiscoveryMethodType { get; set; } + + /// + /// Maps a source to a test discover Xml file path + /// + public IDictionary DiscoveryFileMap { get; private set; } + + public CommandLine DiscoveryCommandLine { get; set; } + + public CommandLine ExecutionCommandLine { get; set; } + + #endregion Properties + + #region IXmlSerializable + + private static class Xml + { + public const string ExternalTestRunner = "ExternalTestRunner"; + public const string Type = "type"; + + public const string DiscoveryCommandLine = "DiscoveryCommandLine"; + + public const string DiscoveryFileMap = "DiscoveryFileMap"; + public const string DiscoveryFileMapEntry = "File"; + public const string DiscoveryFileMapSource = "source"; + + public const string ExecutionCommandLine = "ExecutionCommandLine"; + } + + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + Utility.Code.Require(reader, "reader"); + + this.ExtensionType = reader.GetAttribute(Xml.Type); + if (string.IsNullOrEmpty(this.ExtensionType)) + { + this.ExtensionType = DefaultExtensionType; + } + + reader.ReadStartElement(); + + reader.ConsumeUntilFirst(XmlReaderHelper.ElementFilter); + + bool empty = reader.IsEmptyElement; + string name = reader.Name; + + this.DiscoveryMethodType = (DiscoveryMethodType)Enum.Parse(typeof(DiscoveryMethodType), name); + + reader.ReadStartElement(); + if (name == Xml.DiscoveryCommandLine) + { + empty = false; + this.DiscoveryCommandLine = CommandLine.FromString(reader.ReadString()); + } + else if (name == Xml.DiscoveryFileMap) + { + reader.ConsumeUntilFirst(XmlReaderHelper.ElementFilter); + while (reader.NodeType == XmlNodeType.Element) + { + string key = reader.GetAttribute(Xml.DiscoveryFileMapSource); + + reader.MoveToElement(); + empty = reader.IsEmptyElement; + reader.ReadStartElement(); + + this.DiscoveryFileMap[key] = (empty) ? string.Empty : reader.ReadString(); + + if (!empty) + { + reader.ReadEndElement(); + } + + reader.ConsumeUntilFirst(XmlReaderHelper.ElementFilter); + } + } + + if (!empty) + { + reader.ReadEndElement(); + } + + reader.ConsumeUntilFirst(XmlReaderHelper.ElementFilter); + this.ExecutionCommandLine = CommandLine.FromString(reader.ReadElementString(Xml.ExecutionCommandLine)); + + reader.ReadEndElement(); + } + + public void WriteXml(XmlWriter writer) + { + Utility.Code.Require(writer, "writer"); + + writer.WriteAttributeString(Xml.Type, this.ExtensionType); + + if (DiscoveryMethodType == DiscoveryMethodType.DiscoveryCommandLine) + { + writer.WriteElementString(Xml.DiscoveryCommandLine, this.DiscoveryCommandLine.ToString()); + } + else if (DiscoveryMethodType == DiscoveryMethodType.DiscoveryFileMap) + { + if (this.DiscoveryFileMap.Count > 0) + { + writer.WriteStartElement(Xml.DiscoveryFileMap); + + foreach (KeyValuePair entry in this.DiscoveryFileMap) + { + writer.WriteStartElement(Xml.DiscoveryFileMapEntry); + + writer.WriteAttributeString(Xml.DiscoveryFileMapSource, entry.Key); + writer.WriteString(entry.Value); + + writer.WriteEndElement(); + } + + writer.WriteEndElement(); + } + } + + writer.WriteElementString(Xml.ExecutionCommandLine, this.ExecutionCommandLine.ToString()); + } + + #endregion IXmlSerializable + + } +} diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/ConditionalInclusionsMachine.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/ConditionalInclusionsMachine.cs new file mode 100644 index 0000000..49077e0 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/ConditionalInclusionsMachine.cs @@ -0,0 +1,287 @@ +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using BoostTestAdapter.Utility; +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + internal enum SourceLineType + { + Other = 1, + Ifclause, + Elifclause, + Elseclause, + Endifclause, + Defineclause, + MultiLineDefineclause, + Undefineclause, + Ifdefclause, + Ifndefclause + } + + internal enum ParserState + { + NormalState = 1, + IncludingDueToIf, + DiscardingDueToSuccessfullIf, + DiscardingDueToFailedIf, + DiscardingDueToMultilineDefine + } + + /// + /// Filters source code that is controlled via the preprocessor directives such as: + /// #if, #elif, #else, #endif, #ifdef, #ifndef, #undef, #define, #if defined and if !defined + /// + public class ConditionalInclusionsMachine + { + private static readonly Regex LinefeedRegex = new Regex(@"[ \t]*?\r??\n", RegexOptions.Singleline | RegexOptions.Multiline); + private static readonly Regex UndefineRegex = new Regex(@"#undef\s{1,}(\w{1,})"); + private static readonly Regex IfdefRegex = new Regex(@"#if(?:(?:\s{1,}defined)|(?:def))\s{1,}(\w{1,})"); + private static readonly Regex IfndefRegex = new Regex(@"#if(?:(?:\s{1,}!(?:\s{0,})defined)|(?:ndef))\s{1,}(\w{1,})"); + private static readonly Regex IfRegex = new Regex(@"#if\s+?(.+)"); + private static readonly Regex ElifRegex = new Regex(@"#elif\s+?(.+)"); + private static readonly Regex ElseRegex = new Regex(@"#else"); + private static readonly Regex EndifRegex = new Regex(@"#endif"); + private static readonly Regex DefineRegex = new Regex(@"#define\s+(\w{1,})(.*)"); + private static readonly Regex DefineRegexMacro = new Regex(@"#define\s{1,}(\w{1,})\("); + private static readonly Regex DefineRegexMultiline = new Regex(@"#define\s{1,}(\w{1,}).*\\\s{0,}$", RegexOptions.Multiline); + + private readonly IConditionalInclusionsState _normalState; + private readonly IConditionalInclusionsState _includingDueToIf; + private readonly IConditionalInclusionsState _discardingDueToSuccessfullIf; + private readonly IConditionalInclusionsState _discardingDueToFailedIf; + private readonly IConditionalInclusionsState _discardingDueToMultilineDefine; + + private IConditionalInclusionsState _conditionalInclusionsMachineState; + + private readonly Stack _parserState; + + /// + /// + /// + internal IEvaluation Evaluator { get; private set; } + + internal Defines DefinesHandler { get; private set; } + + #region Constructors + + /// + /// Constructor accepting an expression evaluator object + /// + public ConditionalInclusionsMachine(IEvaluation evaluator) + { + this.Evaluator = evaluator; + this._parserState = new Stack(); + + _normalState = new NormalState(this); + _includingDueToIf = new IncludingDueToIf(this); + _discardingDueToSuccessfullIf = new DiscardingDueToSuccessfullIf(this); + _discardingDueToFailedIf = new DiscardingDueToFailedIf(this); + _discardingDueToMultilineDefine = new DiscardingDueToMultilineDefine(this); + } + + #endregion Constructors + + /// + /// Updates the state machine according to the state indicated by the top most element of the stack + /// + private void UpdateStateMachine() + { + switch (_parserState.Peek()) + { + case ParserState.NormalState: + _conditionalInclusionsMachineState = _normalState; + break; + + case ParserState.IncludingDueToIf: + _conditionalInclusionsMachineState = _includingDueToIf; + break; + + case ParserState.DiscardingDueToSuccessfullIf: + _conditionalInclusionsMachineState = _discardingDueToSuccessfullIf; + break; + + case ParserState.DiscardingDueToFailedIf: + _conditionalInclusionsMachineState = _discardingDueToFailedIf; + break; + + case ParserState.DiscardingDueToMultilineDefine: + _conditionalInclusionsMachineState = _discardingDueToMultilineDefine; + break; + + default: + throw new SourceDiscoveryException("Programming error. Found un-catered machine state (" + _parserState.Peek() + ")"); + } + } + + /// + /// Adds a new state to the stack and updates the state machine according to the new state + /// + /// new state + internal void AddState(ParserState newParserState) + { + _parserState.Push(newParserState); + UpdateStateMachine(); + } + + /// + /// Updates the current state of the state machine with a newly defined state. + /// + /// new state + internal void UpdateCurrentState(ParserState newParserState) + { + _parserState.Pop(); + _parserState.Push(newParserState); + UpdateStateMachine(); + } + + /// + /// Called whenever we are done with the current state and therefore we can continue with + /// the previous state before wed branched off in handling another state + /// + internal void FinishWithCurrentState() + { + _parserState.Pop(); + UpdateStateMachine(); + } + + /// + /// Driver method for the management of the state machine + /// + /// source file information + /// pre-processor defines + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "cpp")] + public void Apply(CppSourceFile cppSourceFile, Defines definesHandler) + { + Utility.Code.Require(cppSourceFile, "cppSourceFile"); + + DefinesHandler = definesHandler; + + string[] sourceLines = LinefeedRegex.Split(cppSourceFile.SourceCode); + + _parserState.Clear(); + AddState(ParserState.NormalState); //initial state + + SourceLineType sourceLineType; + string expression; + string subtitutionText; + int lineNumber = 0; + + try + { + for (; lineNumber < sourceLines.Length; lineNumber++) + { + Inspect(sourceLines[lineNumber], out sourceLineType, out expression, out subtitutionText); + + _conditionalInclusionsMachineState.Process(ref sourceLines[lineNumber], sourceLineType, expression, + subtitutionText); + } + + /* + * Once the parsing is complete we just check that the parserState is back to Normal State. + * If not it is either because we parsed bad code (i.e. the code structure was not consistent to start with) + * or we've got a problem (programmatically) with our state engine + */ + + //sanity check + if (_parserState.Peek() != ParserState.NormalState) + { + Logger.Error("The conditionals filter state machine failed to return to normal state. The source file \"{0}\" will not be filtered for conditionals.", cppSourceFile.FileName); + + //the source code for the specific file is left unfiltered in case the state machine did not return to a normal state. + } + else + { + //State machine returned to normal state so we can apply the filtering done by the conditional inclusions machine + cppSourceFile.SourceCode = string.Join(Environment.NewLine, sourceLines); + } + } + catch (Exception ex) + { + Logger.Error( + "The conditionals filter encountered error: {0} whilst processing line number {1} of source file \"{2}\". The source file will not be filtered for conditionals", + ex.Message, lineNumber + 1, cppSourceFile.FileName); + } + } + + /// + /// Inspects the source line and sets the sourceLineType (byref) according to detected code syntax + /// and sets also the expression variable (byref) to the matched identifier statement/expression where applicable + /// + /// source line to inspect + /// match type + /// extracted expression or identifier respective to the source type + /// extracted substitution text (applicable only to a define match) + private static void Inspect(string sourceLine, out SourceLineType sourceLineType, out string token, out string substitutiontext) + { + if (ElifRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Elifclause; + token = ElifRegex.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else if (ElseRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Elseclause; + token = ""; + substitutiontext = ""; + } + else if (EndifRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Endifclause; + token = ""; + substitutiontext = ""; + } + else if (IfdefRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Ifdefclause; + token = IfdefRegex.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else if (IfndefRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Ifndefclause; + token = IfndefRegex.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else if (IfRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Ifclause; + token = IfRegex.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else if (DefineRegexMultiline.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.MultiLineDefineclause; + token = DefineRegexMultiline.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else if (DefineRegexMacro.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Defineclause; + token = DefineRegexMacro.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else if (DefineRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Defineclause; + token = DefineRegex.Match(sourceLine).Groups[1].Value; + substitutiontext = DefineRegex.Match(sourceLine).Groups[2].Value.Trim(); + } + else if (UndefineRegex.IsMatch(sourceLine)) + { + sourceLineType = SourceLineType.Undefineclause; + token = UndefineRegex.Match(sourceLine).Groups[1].Value; + substitutiontext = ""; + } + else + { + //any other type of source code that is an unrelated to the conditional inclusions + sourceLineType = SourceLineType.Other; + token = ""; + substitutiontext = ""; + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToFailedIf.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToFailedIf.cs new file mode 100644 index 0000000..07bec63 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToFailedIf.cs @@ -0,0 +1,83 @@ +using System.Globalization; + +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + /// + /// Class handling the state when the Conditional Inclusions Machine is discarding code when an if statement evaluated to false + /// + internal class DiscardingDueToFailedIf : IConditionalInclusionsState + { + private readonly ConditionalInclusionsMachine _conditionalInclusionsMachine; + + #region Constructor + + /// + /// Constructor + /// + /// reference to the state machine + internal DiscardingDueToFailedIf(ConditionalInclusionsMachine conditionalInclusionsMachine) + { + _conditionalInclusionsMachine = conditionalInclusionsMachine; + } + + #endregion Constructor + + /// + /// Called so as to make the necessary decision making whilst the state machine is discarding code during a failed if + /// + /// source line under analysis + /// source code type as inspected by the Inspect function in the conditional inclusions machine + /// expression to be evaluated in case the source Line type is an elif + /// + public void Process(ref string sourceLine, SourceLineType sourceLineType, string expression, string subtitutionText) + { + sourceLine = ""; + switch (sourceLineType) + { + case SourceLineType.Ifclause: + case SourceLineType.Ifdefclause: + case SourceLineType.Ifndefclause: + /* + * In case we encounter an other if whilst discarding we add an other layer + * so as to keep the matching endif clauses. + * + * The reason why we push DiscardingDueToSuccessfullIf is to suppress any + * attempt any elif and else at this level. + */ + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToSuccessfullIf); + break; + + case SourceLineType.Elifclause: + switch (_conditionalInclusionsMachine.Evaluator.EvaluateExpression(expression, _conditionalInclusionsMachine.DefinesHandler)) + { + case EvaluationResult.IsFalse: + /* + * in case the evaluation failed the state remains the same. We just + * continue discarding. + */ + break; + + case EvaluationResult.IsTrue: + /* + * in case the evaluation is successfull we just change the state of + * the current level + */ + _conditionalInclusionsMachine.UpdateCurrentState(ParserState.IncludingDueToIf); + break; + + case EvaluationResult.UnDetermined: + throw new SourceDiscoveryException(string.Format(CultureInfo.InvariantCulture, "Unable to evaluate expression \"{0}\"", expression)); + } + break; + + case SourceLineType.Elseclause: + _conditionalInclusionsMachine.UpdateCurrentState(ParserState.IncludingDueToIf); + break; + + case SourceLineType.Endifclause: + _conditionalInclusionsMachine.FinishWithCurrentState(); + break; + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToMultilineDefine.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToMultilineDefine.cs new file mode 100644 index 0000000..b6331fd --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToMultilineDefine.cs @@ -0,0 +1,47 @@ +using System.Text.RegularExpressions; + +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + /// + /// Class handling the state when the Conditional Inclusions Machine is discarding code due to a multiline define. + /// + /// Multiline defines are not supported by the current implementation and so any substitution text is just being discarded + internal class DiscardingDueToMultilineDefine : IConditionalInclusionsState + { + private static readonly Regex defineRegexMultilineContinuation = new Regex(@"\\\s*$"); + private readonly ConditionalInclusionsMachine _conditionalInclusionsMachine; + + #region Constructor + + /// + /// Constructor + /// + /// reference to the state machine + internal DiscardingDueToMultilineDefine(ConditionalInclusionsMachine conditionalInclusionsMachine) + { + _conditionalInclusionsMachine = conditionalInclusionsMachine; + } + + #endregion Constructor + + /// + /// Called so as to make the necessary decision making whilst the state machine is discarding code during a multiline define + /// + /// source line under analysis + /// source code type as inspected by the Inspect function in the conditional inclusions machine + /// not used + /// not used + public void Process(ref string sourceLine, SourceLineType sourceLineType, string expression, string subtitutionText) + { + if (!(defineRegexMultilineContinuation.IsMatch(sourceLine))) + { + //last line of the multiline define met (which should be discarded as well) + _conditionalInclusionsMachine.FinishWithCurrentState(); + } + { + //still in the multiline define + } + sourceLine = ""; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToSuccessfullIf.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToSuccessfullIf.cs new file mode 100644 index 0000000..c941187 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/DiscardingDueToSuccessfullIf.cs @@ -0,0 +1,52 @@ +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + /// + /// Class handling the state when the Conditional Inclusions Machine is discarding code due to a previously successfull if statement + /// + internal class DiscardingDueToSuccessfullIf : IConditionalInclusionsState + { + private readonly ConditionalInclusionsMachine _conditionalInclusionsMachine; + + #region Constructor + + /// + /// Constructor + /// + /// reference to the state machine + internal DiscardingDueToSuccessfullIf(ConditionalInclusionsMachine conditionalInclusionsMachine) + { + _conditionalInclusionsMachine = conditionalInclusionsMachine; + } + + #endregion Constructor + + /// + /// Called so as to make the necessary decision making whilst the state machine is discarding code due to a previously + /// successful if statement (i.e. we are currently in some elif or else statement) + /// + /// source line under analysis + /// source code type as inspected by the Inspect function in the conditional inclusions machine + /// not used + /// not used + public void Process(ref string sourceLine, SourceLineType sourceLineType, string expression, string subtitutionText) + { + sourceLine = ""; + switch (sourceLineType) + { + case SourceLineType.Ifclause: + case SourceLineType.Ifndefclause: + case SourceLineType.Ifdefclause: + /* + * In case we encounter an other if whilst discarding we add an other layer + * so as to keep the matching endif clauses + */ + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToSuccessfullIf); + break; + + case SourceLineType.Endifclause: + _conditionalInclusionsMachine.FinishWithCurrentState(); + break; + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/IConditionalInclusionsState.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/IConditionalInclusionsState.cs new file mode 100644 index 0000000..9922532 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/IConditionalInclusionsState.cs @@ -0,0 +1,18 @@ +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + /// + /// Interface for any of the expected states of the conditional inclusions machine. + /// + /// The different states expected are: + /// NormalState, + /// IncludingDueToIf, + /// DiscardingDueToSuccessfullIf, + /// DiscardingDueToFailedIf, + /// DiscardingDueToMultilineDefine + /// + /// + internal interface IConditionalInclusionsState + { + void Process(ref string sourceLine, SourceLineType sourceLineType, string expression, string subtitutionText); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/IncludingDueToIf.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/IncludingDueToIf.cs new file mode 100644 index 0000000..1183a69 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/IncludingDueToIf.cs @@ -0,0 +1,119 @@ +using System.Globalization; + +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + /// + /// Class handling the state of the Conditional inclusions machine when source is not being discarded to a positively evaluated conditional + /// + internal class IncludingDueToIf : IConditionalInclusionsState + { + private readonly ConditionalInclusionsMachine _conditionalInclusionsMachine; + + #region Constructor + + /// + /// Constructor + /// + /// reference to the state machine + internal IncludingDueToIf(ConditionalInclusionsMachine conditionalInclusionsMachine) + { + _conditionalInclusionsMachine = conditionalInclusionsMachine; + } + + #endregion Constructor + + /// + /// Called so as to make the necessary decision making when a positively evaluated conditional has been met + /// + /// source line under analysis that may or may not be filtered + /// source code type as inspected by the Inspect function in the conditional inclusions machine + /// expression to be evaluated in case the source Line type is a conditional based on an expression + /// substitution text in case of a define + public void Process(ref string sourceLine, SourceLineType sourceLineType, string expression, string subtitutionText) + { + switch (sourceLineType) + { + case SourceLineType.Other: + //Encountered source code NOT related to the conditional inclusions. + break; + + case SourceLineType.Elifclause: + //since we were in successfull if inclusion and now we met an elif we have to discard anything in the elif + _conditionalInclusionsMachine.UpdateCurrentState(ParserState.DiscardingDueToSuccessfullIf); + sourceLine = ""; + break; + + case SourceLineType.Elseclause: + _conditionalInclusionsMachine.UpdateCurrentState(ParserState.DiscardingDueToSuccessfullIf); + sourceLine = ""; + break; + + case SourceLineType.Endifclause: + _conditionalInclusionsMachine.FinishWithCurrentState(); + sourceLine = ""; + break; + + case SourceLineType.Ifclause: + switch (_conditionalInclusionsMachine.Evaluator.EvaluateExpression(expression, _conditionalInclusionsMachine.DefinesHandler)) + { + case EvaluationResult.IsFalse: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToFailedIf); + break; + + case EvaluationResult.IsTrue: + _conditionalInclusionsMachine.AddState(ParserState.IncludingDueToIf); + break; + + case EvaluationResult.UnDetermined: + throw new SourceDiscoveryException(string.Format(CultureInfo.InvariantCulture, "Unable to evaluate expression \"{0}\"", expression)); + } + sourceLine = ""; + break; + + case SourceLineType.MultiLineDefineclause: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToMultilineDefine); + _conditionalInclusionsMachine.DefinesHandler.Define(expression, ""); + sourceLine = ""; + break; + + case SourceLineType.Defineclause: + _conditionalInclusionsMachine.DefinesHandler.Define(expression, subtitutionText); + sourceLine = ""; + break; + + case SourceLineType.Undefineclause: + _conditionalInclusionsMachine.DefinesHandler.UnDefine(expression); + sourceLine = ""; + break; + + case SourceLineType.Ifdefclause: + switch (_conditionalInclusionsMachine.DefinesHandler.IsDefined(expression)) + { + case true: + _conditionalInclusionsMachine.AddState(ParserState.IncludingDueToIf); + break; + + case false: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToFailedIf); + break; + } + sourceLine = ""; + break; + + case SourceLineType.Ifndefclause: + switch (_conditionalInclusionsMachine.DefinesHandler.IsDefined(expression)) + { + case true: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToFailedIf); + break; + + case false: + _conditionalInclusionsMachine.AddState(ParserState.IncludingDueToIf); + break; + } + sourceLine = ""; + break; + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusions/NormalState.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusions/NormalState.cs new file mode 100644 index 0000000..a078000 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusions/NormalState.cs @@ -0,0 +1,115 @@ +using System.Globalization; + +namespace BoostTestAdapter.SourceFilter.ConditionalInclusions +{ + /// + /// Class handling the state of the Conditional Inclusions machine when the machine is no under particular state (i.e. not under the influence + /// of some type of conditional) + /// + internal class NormalState : IConditionalInclusionsState + { + private readonly ConditionalInclusionsMachine _conditionalInclusionsMachine; + + #region Constructor + + /// + /// Constructor + /// + /// reference to the state machine + internal NormalState(ConditionalInclusionsMachine conditionalInclusionsMachine) + { + _conditionalInclusionsMachine = conditionalInclusionsMachine; + } + + #endregion Constructor + + /// + /// Called so as to make the necessary decision making whilst the state machine is in normal sate + /// + /// source line under analysis that may or may not be filtered + /// source code type as inspected by the Inspect function in the conditional inclusions machine + /// expression to be evaluated in case the source Line type is a conditional based on an expression + /// substitution text in case of a define + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "endif"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "elif")] + public void Process(ref string sourceLine, SourceLineType sourceLineType, string expression, string subtitutionText) + { + switch (sourceLineType) + { + case SourceLineType.Ifdefclause: + switch (_conditionalInclusionsMachine.DefinesHandler.IsDefined(expression)) + { + case true: + _conditionalInclusionsMachine.AddState(ParserState.IncludingDueToIf); + break; + + case false: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToFailedIf); + break; + } + sourceLine = ""; + break; + + case SourceLineType.Ifndefclause: + switch (_conditionalInclusionsMachine.DefinesHandler.IsDefined(expression)) + { + case true: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToFailedIf); + break; + + case false: + _conditionalInclusionsMachine.AddState(ParserState.IncludingDueToIf); + break; + } + sourceLine = ""; + break; + + case SourceLineType.Ifclause: + switch (_conditionalInclusionsMachine.Evaluator.EvaluateExpression(expression, _conditionalInclusionsMachine.DefinesHandler)) + { + case EvaluationResult.IsFalse: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToFailedIf); + break; + + case EvaluationResult.IsTrue: + _conditionalInclusionsMachine.AddState(ParserState.IncludingDueToIf); + break; + + case EvaluationResult.UnDetermined: + throw new SourceDiscoveryException(string.Format(CultureInfo.InvariantCulture, "Unable to evaluate expression \"{0}\"", expression)); + } + sourceLine = ""; + break; + + case SourceLineType.MultiLineDefineclause: + _conditionalInclusionsMachine.AddState(ParserState.DiscardingDueToMultilineDefine); + _conditionalInclusionsMachine.DefinesHandler.Define(expression, ""); + sourceLine = ""; + break; + + case SourceLineType.Defineclause: + _conditionalInclusionsMachine.DefinesHandler.Define(expression, subtitutionText); + sourceLine = ""; + break; + + case SourceLineType.Undefineclause: + _conditionalInclusionsMachine.DefinesHandler.UnDefine(expression); + sourceLine = ""; + break; + + case SourceLineType.Other: + //Encountered source code NOT related to the conditional inclusions. + break; + + case SourceLineType.Elifclause: + // ReSharper disable once StringLiteralTypo + throw new SourceDiscoveryException("unexpected #elif found."); + case SourceLineType.Elseclause: + throw new SourceDiscoveryException("unexpected #else found."); + case SourceLineType.Endifclause: + throw new SourceDiscoveryException("unexpected #endif found."); + default: + throw new SourceDiscoveryException("unexpected conditional found. code " + sourceLineType); + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ConditionalInclusionsFilter.cs b/BoostTestAdapter/SourceFilter/ConditionalInclusionsFilter.cs new file mode 100644 index 0000000..9c4c0ec --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ConditionalInclusionsFilter.cs @@ -0,0 +1,45 @@ +using BoostTestAdapter.SourceFilter.ConditionalInclusions; +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// An ISourceFilter implementation which filters out source + /// code based on preprocessor conditionals. + /// + public class ConditionalInclusionsFilter : ISourceFilter + { + #region Members + + private readonly ConditionalInclusionsMachine _conditionalInclusionsMachine; + + #endregion Members + + #region Constructor + + /// + /// Constructor accepting an expression evaluator + /// + /// expression evaluator + public ConditionalInclusionsFilter(IEvaluation evaluator) + { + _conditionalInclusionsMachine = new ConditionalInclusionsMachine(evaluator); + } + + #endregion Constructor + + #region ISourceFilter + + /// + /// Applies the filter action onto the source code + /// + /// source file information + /// pre-processor defines + public void Filter(CppSourceFile cppSourceFile, Defines definesHandler) + { + _conditionalInclusionsMachine.Apply(cppSourceFile, definesHandler); + } + + #endregion ISourceFilter + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/CppSourceFile.cs b/BoostTestAdapter/SourceFilter/CppSourceFile.cs new file mode 100644 index 0000000..65f874a --- /dev/null +++ b/BoostTestAdapter/SourceFilter/CppSourceFile.cs @@ -0,0 +1,19 @@ +namespace BoostTestAdapter.SourceFilter +{ + /// + /// Aggregates a C++ source file path and its content. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp")] + public class CppSourceFile + { + /// + /// Source code content of the C++ source file. + /// + public string SourceCode { get; set; } + + /// + /// C++ source file path. + /// + public string FileName { get; set; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ExpressionEvaluation.cs b/BoostTestAdapter/SourceFilter/ExpressionEvaluation.cs new file mode 100644 index 0000000..4052492 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ExpressionEvaluation.cs @@ -0,0 +1,97 @@ +using System; +using System.Globalization; +using NCalc; +using NCalc.Domain; +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// Evaluates an expression using NCalc + /// + /// + public class ExpressionEvaluation : IEvaluation + { + #region Members + + private Defines _definesHandler; + + #endregion Members + + #region IEvaluation + + /// + /// Evaluates an expression + /// + /// expression to be evaluated + /// reference to the defines handler + /// + public EvaluationResult EvaluateExpression(string expression, Defines definesHandler) + { + this._definesHandler = definesHandler; + + Expression e = new Expression(expression, EvaluateOptions.NoCache); + e.EvaluateParameter += EvaluateParam; + e.EvaluateFunction += EvaluateFunction; + + EvaluationResult evaluationResult = EvaluationResult.UnDetermined; + + try + { + object result = e.Evaluate(); + + evaluationResult = Convert.ToBoolean(result, CultureInfo.InvariantCulture) ? EvaluationResult.IsTrue : EvaluationResult.IsFalse; + } + catch + { + evaluationResult = EvaluationResult.UnDetermined; + } + + return evaluationResult; + } + + #endregion IEvaluation + + /// + /// Parameter evaluator called off by function EvaluateExpression so as to elimiate the need of trying to cast the expression parameters to a more defined type. + /// Additionally it adds the possibility that an expression parameter itself can be of complex type. + /// + /// name of the parameter + /// ParameterArgs object where to store the evaluation result + private void EvaluateParam(string name, ParameterArgs args) + { + if (this._definesHandler.SubstitutionTokens.ContainsKey(name)) + { + object substituionText; + this._definesHandler.SubstitutionTokens.TryGetValue(name, out substituionText); + Expression parameterExpression = new Expression((string)substituionText); + parameterExpression.EvaluateParameter += EvaluateParam; + + try + { + args.Result = parameterExpression.Evaluate(); + } + catch (EvaluationException) + { + //in case an exception occurred we do not set args and hence the evaluation will be undefined + } + } + //in case the key is not found we do not set args and hence the evaluation will be undefined + } + + /// + /// NCalc custom function evaluator + /// + /// name of the function to be evaluated + /// FunctionArgs object from where the function arguments will be read and the function evaluation result will be stored + private void EvaluateFunction(string name, FunctionArgs args) + { + if (name == "defined") + { + //it is here assumed that defined always takes one argument and is of type identifier + Identifier identifier = (Identifier)args.Parameters[0].ParsedExpression; + args.Result = _definesHandler.IsDefined(identifier.Name); + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/IEvaluation.cs b/BoostTestAdapter/SourceFilter/IEvaluation.cs new file mode 100644 index 0000000..a83c6f1 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/IEvaluation.cs @@ -0,0 +1,30 @@ +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// Identifies the state of an evaluation result + /// + public enum EvaluationResult + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Un")] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "UnDetermined")] + UnDetermined = -1, + IsFalse = 0, + IsTrue + } + + /// + /// IEvaluation implementations evaluate boolean expressions. + /// + public interface IEvaluation + { + /// + /// Given an expression encoded as a string, parses and evaluates the encoded boolean expression. + /// + /// The string expression to evaluate + /// A collection of identifiers (named constants/variables) which may be referenced during evaluation + /// The result of the boolean expression evaluation. May return Undetermined if the statement cannot be parsed or evaluated. + EvaluationResult EvaluateExpression(string expression, Defines definesHandler); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/ISourceFilter.cs b/BoostTestAdapter/SourceFilter/ISourceFilter.cs new file mode 100644 index 0000000..b8b4909 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/ISourceFilter.cs @@ -0,0 +1,18 @@ +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// An ISourceFilter filters out redundant information from source code. + /// + public interface ISourceFilter + { + /// + /// Filters the provided C++ source file's source code. + /// + /// The C++ source file to filter + /// C++ preprocessor definitions + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "cpp")] + void Filter(CppSourceFile cppSourceFile, Defines definesHandler); + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/MultilineCommentFilter.cs b/BoostTestAdapter/SourceFilter/MultilineCommentFilter.cs new file mode 100644 index 0000000..1cc27b7 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/MultilineCommentFilter.cs @@ -0,0 +1,75 @@ +using System.Text.RegularExpressions; +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// Filters any multiline comments from the source code + /// + public class MultilineCommentFilter : ISourceFilter + { + //regex used to extract the line breaks off a multiLine commented section + private static readonly Regex lineBreakRegex = new Regex(@"(\r\n?|\n)", RegexOptions.Singleline | RegexOptions.Multiline); + + // (\r\n?|\n) + // + // Options: Case insensitive; Exact spacing; Dot matches line breaks; ^$ don't match at line breaks; Numbered capture + // + // Match the regex below and capture its match into backreference number 1 «(\r\n?|\n)» + // Match this alternative (attempting the next alternative only if this one fails) «\r\n?» + // Match the carriage return character «\r» + // Match the line feed character «\n?» + // Between zero and one times, as many times as possible, giving back as needed (greedy) «?» + // Or match this alternative (the entire group fails if this one fails to match) «\n» + // Match the line feed character «\n» + + private static readonly Regex multiLineCommentRegex = new Regex(@"(/\*(?:.+?)\*/)", RegexOptions.Singleline | RegexOptions.Multiline); + // (/\*(?:.+?)\*/) + // + // Options: Case insensitive; Exact spacing; Dot matches line breaks; ^$ don't match at line breaks; Numbered capture + // + // Match the regex below and capture its match into backreference number 1 «(/\*(?:.+?)\*/)» + // Match the character “/” literally «/» + // Match the character “*” literally «\*» + // Match the regular expression below «(?:.+?)» + // Match any single character «.+?» + // Between one and unlimited times, as few times as possible, expanding as needed (lazy) «+?» + // Match the character “*” literally «\*» + // Match the character “/” literally «/» + + #region ISourceFilter + + /// + /// Filters any multiline comments from the source code. + /// + /// CppSourceFile object containing the source file information + /// not used for this filter + public void Filter(CppSourceFile cppSourceFile, Defines definesHandler) + { + Utility.Code.Require(cppSourceFile, "cppSourceFile"); + cppSourceFile.SourceCode = multiLineCommentRegex.Replace(cppSourceFile.SourceCode, ComputeMultiLineCommentReplacement); + } + + #endregion ISourceFilter + + /// + /// Provides the replacement string for a multiline commented section. The replacement string will just contain line breaks. + /// + /// comment section for which a replacement string needs to be provided + /// replacement string containing only the line breaks off the section to be replace. It is important to note that line breaks of + /// unix types or dos types present in the source are preserved + private static string ComputeMultiLineCommentReplacement(Match multiLineCommentMatch) + { + string replacementString = ""; + + Match matchLineBreak = lineBreakRegex.Match(multiLineCommentMatch.Groups[0].ToString()); + while (matchLineBreak.Success) + { + replacementString = replacementString + matchLineBreak.Groups[0]; //line break types are preserved + matchLineBreak = matchLineBreak.NextMatch(); + } + + return replacementString; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/QuotedStringsFilter.cs b/BoostTestAdapter/SourceFilter/QuotedStringsFilter.cs new file mode 100644 index 0000000..8ee89d1 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/QuotedStringsFilter.cs @@ -0,0 +1,102 @@ +using System.Text.RegularExpressions; +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// Filters any quoted strings from the sourcecode. This filtering process is required so as to simplyfy the subsequent filtering operations + /// + public class QuotedStringsFilter : ISourceFilter + { + private static readonly Regex quotedStringsRegex = new Regex(@"(?""", RegexOptions.Singleline); + /* + * Options: Case sensitive; Exact spacing; Dot matches line breaks; ^$ don't match at line breaks; Numbered capture + * + * Match the character “L” literally (case sensitive) «L?» + * Between zero and one times, as many times as possible, giving back as needed (greedy) «?» + * Match the character string “R"” literally (case sensitive) «R"» + * Match the regex below and capture its match into backreference number 1 «(.*)» + * Match any single character «.*» + * Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» + * Match the character “(” literally «\(» + * Match the regular expression below «(?:.*?)» + * Match any single character «.*?» + * Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» + * Match the character “)” literally «\)» + * Match the same text that was most recently matched by capturing group number 1 (case sensitive; fail if the group did not participate in the match so far) «\k<1>» + * Match the character “"” literally «"» + */ + + private static readonly Regex lineBreakRegex = new Regex(@"(\r\n?|\n)", RegexOptions.Singleline | RegexOptions.Multiline); + // (\r\n?|\n) + // + // Options: Case insensitive; Exact spacing; Dot matches line breaks; ^$ don't match at line breaks; Numbered capture + // + // Match the regex below and capture its match into backreference number 1 «(\r\n?|\n)» + // Match this alternative (attempting the next alternative only if this one fails) «\r\n?» + // Match the carriage return character «\r» + // Match the line feed character «\n?» + // Between zero and one times, as many times as possible, giving back as needed (greedy) «?» + // Or match this alternative (the entire group fails if this one fails to match) «\n» + // Match the line feed character «\n» + + #region ISourceFilter + + /// + /// Applies the quoted strings filter action on the supplied sourceCode string + /// + /// CppSourceFile object containing the source file information + /// not used for this filter + public void Filter(CppSourceFile cppSourceFile, Defines definesHandler) + { + Utility.Code.Require(cppSourceFile, "cppSourceFile"); + + /* + * It is important not to the change order of the filters. + */ + cppSourceFile.SourceCode = stringLiteralsRegex.Replace(cppSourceFile.SourceCode, new MatchEvaluator(ComputeReplacement)); + + cppSourceFile.SourceCode = quotedStringsRegex.Replace(cppSourceFile.SourceCode, ""); + } + + #endregion ISourceFilter + + /// + /// The string literal syntax can span over multiple lines so when generating the replacement string we need to make sure that the number of + /// line breaks and their types are preserved + /// + /// section of the source code to be replaced + /// the replacement string + private string ComputeReplacement(Match m) + { + string replacementString = ""; + + Match matchLineBreak = lineBreakRegex.Match(m.Value); + while (matchLineBreak.Success) + { + replacementString = replacementString + matchLineBreak.Groups[0]; //line break types are preserved + matchLineBreak = matchLineBreak.NextMatch(); + } + + return replacementString; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/SingleLineCommentFilter.cs b/BoostTestAdapter/SourceFilter/SingleLineCommentFilter.cs new file mode 100644 index 0000000..7bfa3d7 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/SingleLineCommentFilter.cs @@ -0,0 +1,29 @@ +using System.Text.RegularExpressions; +using VisualStudioAdapter; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// ISourceFilter implementation. Filters single line comments. + /// + public class SingleLineCommentFilter : ISourceFilter + { + private static readonly Regex singleLineCommentRegex = new Regex(@"(?://(?:.*))", RegexOptions.IgnoreCase | RegexOptions.Multiline); + + #region ISourceFilter + + /// + /// Filters any single line comments from the source code + /// + /// CppSourceFile object containing the source file information + /// not used for this filter + public void Filter(CppSourceFile cppSourceFile, Defines definesHandler) + { + Utility.Code.Require(cppSourceFile, "cppSourceFile"); + + cppSourceFile.SourceCode = singleLineCommentRegex.Replace(cppSourceFile.SourceCode, ""); + } + + #endregion ISourceFilter + } +} \ No newline at end of file diff --git a/BoostTestAdapter/SourceFilter/SourceDiscoveryException.cs b/BoostTestAdapter/SourceFilter/SourceDiscoveryException.cs new file mode 100644 index 0000000..0bc2d93 --- /dev/null +++ b/BoostTestAdapter/SourceFilter/SourceDiscoveryException.cs @@ -0,0 +1,32 @@ +using System; +using System.Runtime.Serialization; + +namespace BoostTestAdapter.SourceFilter +{ + [Serializable] + public class SourceDiscoveryException : Exception + { + #region Standard Exception Constructors + + public SourceDiscoveryException() + { + } + + public SourceDiscoveryException(string message) : + base(message) + { + } + + public SourceDiscoveryException(string message, Exception innerException) : + base(message, innerException) + { + } + + protected SourceDiscoveryException(SerializationInfo info, StreamingContext context) : + base(info, context) + { + } + + #endregion Standard Exception Constructors + } +} diff --git a/BoostTestAdapter/SourceFilter/SourceFilterFactory.cs b/BoostTestAdapter/SourceFilter/SourceFilterFactory.cs new file mode 100644 index 0000000..5f839ea --- /dev/null +++ b/BoostTestAdapter/SourceFilter/SourceFilterFactory.cs @@ -0,0 +1,46 @@ +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; + +namespace BoostTestAdapter.SourceFilter +{ + /// + /// Factory class responsible to create the right set of filters to apply onto a sourcefile + /// + public static class SourceFilterFactory + { + /// + /// Provides a collection of ISourceFilters based on the provided BoostTestAdapterSettings. + /// + /// The BoostTestAdapterSettings + /// An collection of ISourceFilters based on the provided settings. + public static ISourceFilter[] Get(BoostTestAdapterSettings settings) + { + Utility.Code.Require(settings, "settings"); + + if (settings.ConditionalInclusionsFilteringEnabled) + { + return new ISourceFilter[] + { + new QuotedStringsFilter(), + new MultilineCommentFilter(), + new SingleLineCommentFilter(), + new ConditionalInclusionsFilter( + new ExpressionEvaluation() + ) + }; + } + else + { + Logger.Warn("Conditional inclusions filtering is disabled."); + + return new ISourceFilter[] + { + new QuotedStringsFilter(), + new MultilineCommentFilter(), + new SingleLineCommentFilter(), + //conditional inclusions filter omitted + }; + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/Code.cs b/BoostTestAdapter/Utility/Code.cs new file mode 100644 index 0000000..84e2c47 --- /dev/null +++ b/BoostTestAdapter/Utility/Code.cs @@ -0,0 +1,22 @@ +using System; + +namespace BoostTestAdapter.Utility +{ + /// + /// Utility class to reduce boilerplate code + /// and to comply with code analysis. + /// + internal static class Code + { + /// + /// Asserts that an object is not null. + /// + /// The argument to test + /// The name of arg + /// Thrown if arg is null + public static void Require(object arg, string argName) + { + if (arg == null) throw new ArgumentNullException(argName); + } + } +} diff --git a/BoostTestAdapter/Utility/CommandEvaluator.cs b/BoostTestAdapter/Utility/CommandEvaluator.cs new file mode 100644 index 0000000..c52f093 --- /dev/null +++ b/BoostTestAdapter/Utility/CommandEvaluator.cs @@ -0,0 +1,117 @@ +using System.Collections.Generic; +using System.Text.RegularExpressions; + +namespace BoostTestAdapter.Utility +{ + /// + /// Result structure for command evaluation. + /// + public class CommandEvaluationResult + { + public CommandEvaluationResult(string result, IEnumerable variables) + { + this.Result = result; + this.MappedVariables = variables; + } + + /// + /// The resulting string after command evaluation. + /// + public string Result { get; private set; } + + /// + /// A listing of all variables which were successfully mapped during command evaluation. + /// + public IEnumerable MappedVariables { get; private set; } + } + + /// + /// Allows for string substution following a format similar to: A {variable} to be substituted. + /// + public class CommandEvaluator + { + #region Members + + private IDictionary _variables = null; + + #endregion Members + + #region Constructors + + public CommandEvaluator() + { + this._variables = new Dictionary(); + } + + #endregion Constructors + + /// + /// Specifies a value for the given variable placeholder. + /// + /// The variable placeholder label. + /// The respective variable value. + public void SetVariable(string variable, string value) + { + this[variable] = value; + } + + /// + /// Removes the mapped variable. + /// + /// The variable placeholder label to remove. + public void ResetVariable(string variable) + { + _variables.Remove(variable); + } + + public string this[string variable] + { + get + { + string value = null; + return (_variables.TryGetValue(variable, out value)) ? value : null; + } + + set + { + _variables[variable] = value; + } + } + + /// + /// Evaluates the given string for any and all variable placeholders. + /// + /// The string to evaluate containing variable placeholders + /// A CommandEvaluationResult detailing the result of the evaluation process + public CommandEvaluationResult Evaluate(string input) + { + string evaluation = input; + + ISet mappedVariables = new HashSet(); + + foreach (KeyValuePair entry in this._variables) + { + KeyValuePair entryRef = entry; + + Regex variable = GetVariablePlaceholderRegex(entry.Key); + evaluation = variable.Replace(evaluation, (match) => + { + mappedVariables.Add(entryRef.Key); + return (entryRef.Value ?? "null"); + }); + } + + return new CommandEvaluationResult(evaluation, mappedVariables); + } + + /// + /// Provides a Regex which can identify the provided variable placeholder + /// + /// The variable placeholder to capture + /// A Regex which can identify the provided variable placeholder + private static Regex GetVariablePlaceholderRegex(string variable) + { + return new Regex('{' + Regex.Escape(variable) + '}'); + } + } +} diff --git a/BoostTestAdapter/Utility/CommandLine.cs b/BoostTestAdapter/Utility/CommandLine.cs new file mode 100644 index 0000000..2bb5302 --- /dev/null +++ b/BoostTestAdapter/Utility/CommandLine.cs @@ -0,0 +1,41 @@ +using System; + +namespace BoostTestAdapter.Utility +{ + /// + /// 2-tuple defining the FileName and Arguments of a command line string + /// + public class CommandLine + { + public CommandLine() : + this(string.Empty, string.Empty) + { + } + + public CommandLine(string fileName, string arguments) + { + FileName = fileName; + Arguments = arguments; + } + + public string FileName { get; set; } + public string Arguments { get; set; } + + public override string ToString() + { + return FileName + ' ' + Arguments; + } + + public static CommandLine FromString(string cmdLine) + { + cmdLine = (cmdLine == null) ? string.Empty : cmdLine; + int index = cmdLine.IndexOf(' '); + + return new CommandLine + { + FileName = cmdLine.Substring(0, Math.Max(0, index)), + Arguments = cmdLine.Substring(index + 1) + }; + } + } +} diff --git a/BoostTestAdapter/Utility/Logger.cs b/BoostTestAdapter/Utility/Logger.cs new file mode 100644 index 0000000..94646b7 --- /dev/null +++ b/BoostTestAdapter/Utility/Logger.cs @@ -0,0 +1,140 @@ +using System; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Reflection; +using log4net; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; + +namespace BoostTestAdapter.Utility +{ + /// + /// Logger static class that provides the utility to print messages to the Tests output window. + /// + public static class Logger + { + private static IMessageLogger _loggerInstance = null; + + private static readonly ILog log4netLogger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + /// + /// Accepts a handle to the logger instance so that subsequently, textual messages can be sent to it. + /// + /// Reference to the logger. + public static void Initialize(IMessageLogger logger) + { + _loggerInstance = logger; //VS sink handle + + ConfigureLog4Net(); + + Info("Logger initialized. Logging to {0}", log4net.GlobalContext.Properties["LogFilePath"]); + } + + /// + /// Configures the Log4Net module + /// + private static void ConfigureLog4Net() + { + string pathOfExecutingAssembly = GetPathOfExecutingAssembly(); + string assemblyName = Assembly.GetExecutingAssembly().GetName().Name; + + string logFilePath = Path.Combine(pathOfExecutingAssembly, (assemblyName + ".dll.log")); + string configFilePath = Path.Combine(pathOfExecutingAssembly, (assemblyName + ".dll.config")); + + log4net.GlobalContext.Properties["pid"] = Process.GetCurrentProcess().Id; + log4net.GlobalContext.Properties["LogFilePath"] = logFilePath; + log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath)); + } + + /// + /// Method that accepts a message along with the severity level so as to be printed onto the tests output tab + /// + /// level parameter used to indicate the severity of the message + /// text message that needs to be printed + /// In case the Logger is not properly initialized then any messages are simply discared without raising any exceptions + public static void SendMessage(TestMessageLevel testMessageLevel, string message) + { + if (_loggerInstance != null) + { + _loggerInstance.SendMessage(testMessageLevel, message); + } + + switch (testMessageLevel) + { + case TestMessageLevel.Informational: + log4netLogger.Info(message); + break; + + case TestMessageLevel.Warning: + log4netLogger.Warn(message); + break; + + case TestMessageLevel.Error: + log4netLogger.Error(message); + break; + } + } + + /// + /// Logs the provided message at the requested severity level. Uses a format, args pair to construct the log message. + /// + /// level parameter used to indicate the severity of the message + /// Format string + /// Arguments for the format string + public static void SendMessage(TestMessageLevel testMessageLevel, string format, params object[] args) + { + SendMessage(testMessageLevel, string.Format(CultureInfo.InvariantCulture, format, args)); + } + + /// + /// Logs the provided message at the 'Informational' severity level. Uses a format, args pair to construct the log message. + /// + /// Format string + /// Arguments for the format string + public static void Info(string format, params object[] args) + { + SendMessage(TestMessageLevel.Informational, format, args); + } + + /// + /// Logs the provided message at the 'Warning' severity level. Uses a format, args pair to construct the log message. + /// + /// Format string + /// Arguments for the format string + public static void Warn(string format, params object[] args) + { + SendMessage(TestMessageLevel.Warning, format, args); + } + + /// + /// Logs the provided message at the 'Error' severity level. Uses a format, args pair to construct the log message. + /// + /// Format string + /// Arguments for the format string + public static void Error(string format, params object[] args) + { + SendMessage(TestMessageLevel.Error, format, args); + } + + /// + /// Disposes the underlying log module + /// + public static void Shutdown() + { + if (log4netLogger != null) + { + log4netLogger.Logger.Repository.Shutdown(); + } + } + + /// + /// Gets the path of the executing assembly + /// + /// returns the path of the executing assembly + private static string GetPathOfExecutingAssembly() + { + Uri codeBase = new Uri(Assembly.GetExecutingAssembly().CodeBase); + return Path.GetDirectoryName(codeBase.LocalPath); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/NativeMethods.cs b/BoostTestAdapter/Utility/NativeMethods.cs new file mode 100644 index 0000000..b6f77f3 --- /dev/null +++ b/BoostTestAdapter/Utility/NativeMethods.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +namespace BoostTestAdapter.Utility +{ + public static class NativeMethods + { + private const int S_OK = 0; + + [DllImport("ole32.dll")] + private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot); + + [DllImport("ole32.dll")] + private static extern int CreateBindCtx(int reserved, out IBindCtx ppbc); + + /// + /// Get a snapshot of the running object table (ROT). + /// + /// + /// A hashtable mapping the name of the object + /// in the ROT to the corresponding object + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "GetObject"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "GetRunningObjectTable"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "IRunningObjectTable")] + public static IDictionary RunningObjectTable + { + get + { + var result = new Dictionary(); + + var numFetched = new IntPtr(); + IRunningObjectTable runningObjectTable; + IEnumMoniker monikerEnumerator; + var monikers = new IMoniker[1]; + + var runningObjectTableReturnCode = GetRunningObjectTable(0, out runningObjectTable); //This function can return the standard return values E_UNEXPECTED and S_OK. + + if (runningObjectTableReturnCode != S_OK) + { + throw new ROTException("GetRunningObjectTable returned with code:" + runningObjectTableReturnCode); + } + + runningObjectTable.EnumRunning(out monikerEnumerator); + monikerEnumerator.Reset(); + + while (monikerEnumerator.Next(1, monikers, numFetched) == 0) + { + IBindCtx ctx; + + var createBindCtxReturnCode = CreateBindCtx(0, out ctx); //This function can return the standard return values E_OUTOFMEMORY and S_OK + + if (createBindCtxReturnCode != S_OK) + { + throw new ROTException("GetRunningObjectTable returned with code:" + createBindCtxReturnCode); + } + + string runningObjectName; + monikers[0].GetDisplayName(ctx, null, out runningObjectName); + + object runningObjectVal; + //usage is described at https://msdn.microsoft.com/en-us/library/windows/desktop/ms683841(v=vs.85).aspx + var getObjectReturnValue = runningObjectTable.GetObject(monikers[0], out runningObjectVal); //This function call can return the standard return values S_FALSE and S_OK + + if (getObjectReturnValue != S_OK) + { + throw new ROTException("IRunningObjectTable::GetObject returned with code:" + getObjectReturnValue); + } + + result[runningObjectName] = runningObjectVal; + } + + return result; + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/ProcessStartInfoEx.cs b/BoostTestAdapter/Utility/ProcessStartInfoEx.cs new file mode 100644 index 0000000..6a00b2c --- /dev/null +++ b/BoostTestAdapter/Utility/ProcessStartInfoEx.cs @@ -0,0 +1,64 @@ +using System.Collections; +using System.Diagnostics; + +namespace BoostTestAdapter.Utility +{ + /// + /// Utility class containing utility methods for ProcessStartInfo + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")] + public static class ProcessStartInfoEx + { + public static ProcessStartInfo Clone(this ProcessStartInfo info) + { + Utility.Code.Require(info, "info"); + + ProcessStartInfo clone = new ProcessStartInfo + { + FileName = info.FileName, + Arguments = info.Arguments, + CreateNoWindow = info.CreateNoWindow, + WindowStyle = info.WindowStyle, + WorkingDirectory = info.WorkingDirectory, + Domain = info.Domain, + LoadUserProfile = info.LoadUserProfile, + UserName = info.UserName, + Password = info.Password, + ErrorDialog = info.ErrorDialog, + ErrorDialogParentHandle = info.ErrorDialogParentHandle, + Verb = info.Verb, + UseShellExecute = info.UseShellExecute, + RedirectStandardError = info.RedirectStandardError, + RedirectStandardInput = info.RedirectStandardInput, + RedirectStandardOutput = info.RedirectStandardOutput, + StandardErrorEncoding = info.StandardErrorEncoding, + StandardOutputEncoding = info.StandardOutputEncoding + }; + + foreach (DictionaryEntry entry in info.EnvironmentVariables) + { + string variable = entry.Key.ToString(); + + if (!clone.EnvironmentVariables.ContainsKey(variable)) + { + clone.EnvironmentVariables.Add(variable, entry.Value.ToString()); + } + } + + return clone; + } + + public static ProcessStartInfo StartThroughCmdShell(ProcessStartInfo info) + { + Utility.Code.Require(info, "info"); + + string fileName = info.FileName; + string arguments = info.Arguments; + + info.FileName = "cmd.exe"; + info.Arguments = "/S /C \"\"" + fileName + "\" " + arguments + '"'; + + return info; + } + } +} diff --git a/BoostTestAdapter/Utility/QualifiedNameBuilder.cs b/BoostTestAdapter/Utility/QualifiedNameBuilder.cs new file mode 100644 index 0000000..9165b90 --- /dev/null +++ b/BoostTestAdapter/Utility/QualifiedNameBuilder.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BoostTestAdapter.Boost.Test; + +namespace BoostTestAdapter.Utility +{ + /// + /// Builds qualified names for Boost Test Test Units. + /// + public class QualifiedNameBuilder + { + #region Constants + + private const string Separator = "/"; + + #endregion Constants + + #region Constructors + + /// + /// Default constructor. + /// + public QualifiedNameBuilder() + { + this.Path = new List(); + } + + /// + /// Constructor. Initializes this qualified name based on the provided TestUnit. + /// + /// The TestUnit from which this qualified name is to be initialized. + public QualifiedNameBuilder(TestUnit root) : + this() + { + Initialize(root); + } + + #endregion Constructors + + #region Helper Methods + + /// + /// Helper function which aids in the implementation of QualifiedNameBuilder(TestUnit) constructor + /// + /// The test unit which is to be listed + private void Initialize(TestUnit root) + { + if (root == null) + { + return; + } + + Initialize(root.Parent); + + this.Push(root); + } + + #endregion Helper Methods + + #region Properties + + /// + /// The Master Test Suite local name. + /// + public string MasterTestSuite + { + get { return this.Path.FirstOrDefault(); } + } + + /// + /// Stack which contains the entries for this qualified name. + /// + private List Path { get; set; } + + /// + /// The depth of this fully qualified name. + /// A depth of 0 implies an empty object. + /// + public int Level { get { return this.Path.Count; } } + + #endregion Properties + + #region Constant Properties + + /// + /// Identifies the standard depth level at which the MasterTestSuite is located. + /// + public static uint MasterTestSuiteLevel { get { return 1; } } + + /// + /// Identifies the default MasterTestSuite test suite name. + /// + public static string DefaultMasterTestSuiteName { get { return "Master Test Suite"; } } + + #endregion Constant Properties + + /// + /// Pushes the test unit on this structure. + /// + /// The test unit to push + /// this + public QualifiedNameBuilder Push(TestUnit unit) + { + Utility.Code.Require(unit, "unit"); + + return this.Push(unit.Name); + } + + /// + /// Pushes the (local) name of a test unit on this structure. + /// + /// The test unit (local) name to push + /// this + public QualifiedNameBuilder Push(string name) + { + this.Path.Add(name); + + return this; + } + + /// + /// Peeks at the last (local) name pushed on this builder. + /// + /// The last (local) name pushed on this builder. + public string Peek() + { + return (this.Path.Count > 0) ? this.Path[this.Path.Count - 1] : null; + } + + /// + /// Pops the last test unit from this instance. + /// + /// this + public QualifiedNameBuilder Pop() + { + if (this.Path.Count > 0) + { + this.Path.RemoveAt(this.Path.Count - 1); + } + + return this; + } + + #region object overrides + + /// + /// Provides a string representation of this fully qualified name as expected by Boost Test standards. + /// + /// A string representation of this fully qualified name as expected by Boost Test standards. + public override string ToString() + { + // Skip the Master Test Suite. Master Test Suite is omitted in qualified name. + return string.Join(Separator, this.Path.Skip(1)); + } + + #endregion object overrides + + /// + /// Factory method which creates a QualifiedNameBuilder + /// from an already existing qualified name string. + /// + /// The qualified name + /// A QualifiedNameBuilder from the provided string. + public static QualifiedNameBuilder FromString(string name) + { + // Assume Master Test Suite name + return FromString(DefaultMasterTestSuiteName, name); + } + + /// + /// Factory method which creates a QualifiedNameBuilder + /// from an already existing qualified name string. + /// + /// The local name of the master test suite + /// The qualified name + /// A QualifiedNameBuilder from the provided string. + public static QualifiedNameBuilder FromString(string masterSuite, string name) + { + Utility.Code.Require(masterSuite, "masterSuite"); + Utility.Code.Require(name, "name"); + + QualifiedNameBuilder builder = new QualifiedNameBuilder(); + + builder.Push(masterSuite); + + foreach (string part in name.Split(new string[] { Separator }, StringSplitOptions.RemoveEmptyEntries)) + { + builder.Push(part); + } + + return builder; + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/ROTException.cs b/BoostTestAdapter/Utility/ROTException.cs new file mode 100644 index 0000000..1260802 --- /dev/null +++ b/BoostTestAdapter/Utility/ROTException.cs @@ -0,0 +1,36 @@ +using System; +using System.Runtime.Serialization; + +namespace BoostTestAdapter.Utility +{ + /// + /// Exception class used to raised exceptions when dealing with the Running Object Table (ROT) + /// + [Serializable] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ROT")] + public class ROTException : Exception + { + #region Standard Exception Constructors + + public ROTException() + { + + } + public ROTException(string message) : + base(message) + { + } + + public ROTException(string message, Exception innerException) : + base(message, innerException) + { + } + + protected ROTException(SerializationInfo info, StreamingContext context) : + base(info, context) + { + } + + #endregion Standard Exception Constructors + } +} diff --git a/BoostTestAdapter/Utility/SourceFileInfo.cs b/BoostTestAdapter/Utility/SourceFileInfo.cs new file mode 100644 index 0000000..b419e55 --- /dev/null +++ b/BoostTestAdapter/Utility/SourceFileInfo.cs @@ -0,0 +1,63 @@ +using System.IO; + +namespace BoostTestAdapter.Utility +{ + /// + /// Identifies a source file and a respective line of interest. + /// + public class SourceFileInfo + { + #region Constructors + + /// + /// Constructor + /// + /// The source file path. + public SourceFileInfo(string file) : + this(file, -1) + { + } + + /// + /// Constructor + /// + /// The source file path. + /// The associated line number of interest or -1 if not available. + public SourceFileInfo(string file, int lineNumber) + { + this.File = file; + this.LineNumber = lineNumber; + } + + #endregion Constructors + + #region Properties + + /// + /// Source file path. + /// + public string File { get; private set; } + + /// + /// Line number within File. Defaults to -1 meaning no line number information is available. + /// + public int LineNumber { get; set; } + + #endregion Properties + + #region object overrides + + public override string ToString() + { + string file = Path.GetFileName(this.File); + if ((string.IsNullOrEmpty(file)) && (this.LineNumber > -1)) + { + file = "unknown location"; + } + + return file + ((this.LineNumber > -1) ? (" line " + this.LineNumber) : string.Empty); + } + + #endregion object overrides + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/TestRun.cs b/BoostTestAdapter/Utility/TestRun.cs new file mode 100644 index 0000000..4b8d065 --- /dev/null +++ b/BoostTestAdapter/Utility/TestRun.cs @@ -0,0 +1,59 @@ +using System.Collections.Generic; +using BoostTestAdapter.Boost.Runner; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; + +namespace BoostTestAdapter.Utility +{ + /// + /// Abstraction for a Boost Test execution run. + /// Aggregates the necessary data structures in one convenient location. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] + public class TestRun + { + /// + /// Constructor + /// + /// The IBoostTestRunner which will be used to run the tests + /// The Visual Studio test cases which will be executed + /// The command-line arguments for the IBoostTestRunner representing the Visual Studio test cases + /// Additional settings required for correct configuration of the test runner + public TestRun(IBoostTestRunner runner, IEnumerable tests, BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + this.Runner = runner; + this.Tests = tests; + this.Arguments = args; + this.Settings = settings; + } + + public IBoostTestRunner Runner { get; private set; } + + public string Source + { + get { return this.Runner.Source; } + } + + public IEnumerable Tests { get; private set; } + + public BoostTestRunnerCommandLineArgs Arguments { get; private set; } + public BoostTestRunnerSettings Settings { get; private set; } + + /// + /// Executes the contained IBoostTestRunner with the contained arguments and settings + /// + public void Run() + { + this.Runner.Run(this.Arguments, this.Settings); + } + + /// + /// Executes the contained IBoostTestRunner in debug mode with the contained arguments and settings + /// + /// The Visual Studio framework handle which allows for program attaching + public void Debug(IFrameworkHandle frameworkHandle) + { + this.Runner.Debug(this.Arguments, this.Settings, frameworkHandle); + } + } +} diff --git a/BoostTestAdapter/Utility/VisualStudio/DefaultDiscoverySink.cs b/BoostTestAdapter/Utility/VisualStudio/DefaultDiscoverySink.cs new file mode 100644 index 0000000..31fc922 --- /dev/null +++ b/BoostTestAdapter/Utility/VisualStudio/DefaultDiscoverySink.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; + +namespace BoostTestAdapter.Utility.VisualStudio +{ + /// + /// An ITestCaseDiscoverySink implementation. Aggregates all tests + /// within an internal collection which is publicly accessible. + /// + public class DefaultTestCaseDiscoverySink : ITestCaseDiscoverySink + { + private ICollection _tests = new HashSet(new TestCaseComparer()); + + /// + /// The collection of discovered TestCases + /// + public IEnumerable Tests + { + get + { + return _tests; + } + } + + #region ITestCaseDiscoverySink + + public void SendTestCase(TestCase discoveredTest) + { + this._tests.Add(discoveredTest); + } + + #endregion ITestCaseDiscoverySink + + /// + /// TestCase equality comparer which defines equality based on the TestCase's + /// Fully Qualified Name. + /// + private class TestCaseComparer : IEqualityComparer + { + #region IEqualityComparer + + public bool Equals(TestCase x, TestCase y) + { + Utility.Code.Require(x, "x"); + Utility.Code.Require(y, "y"); + + return x.FullyQualifiedName == y.FullyQualifiedName; + } + + public int GetHashCode(TestCase obj) + { + Utility.Code.Require(obj, "obj"); + + return obj.FullyQualifiedName.GetHashCode(); + } + + #endregion IEqualityComparer + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/VisualStudio/DefaultVisualStudioInstanceProvider.cs b/BoostTestAdapter/Utility/VisualStudio/DefaultVisualStudioInstanceProvider.cs new file mode 100644 index 0000000..a8378c4 --- /dev/null +++ b/BoostTestAdapter/Utility/VisualStudio/DefaultVisualStudioInstanceProvider.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Management; +using System.Text.RegularExpressions; +using EnvDTE80; + +namespace BoostTestAdapter.Utility.VisualStudio +{ + /// + /// Default implementation of an IVisualStudioInstanceProvider. Provides an IVisualStudio instance based on currently running Visual Studio IDE instances. + /// + public class DefaultVisualStudioInstanceProvider : IVisualStudioInstanceProvider + { + /// + /// Default prefix for VisualStudio DTE monickers + /// + private const string VisualStudioDTEPrefix = "!VisualStudio.DTE."; + + /// + /// Regex to extract Visual Studio version Id + /// + private static readonly Regex VisualStudioDTEVersionRegex = new Regex("^" + Regex.Escape(VisualStudioDTEPrefix) + @"(\d+)", RegexOptions.IgnoreCase); + + #region IVisualStudioInstanceProvider + + public VisualStudioAdapter.IVisualStudio Instance + { + get + { + string processId = Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture); + string parentProcessId = GetParentProcessId(processId); + + DTEInstance dte = GetSolutionObject(parentProcessId); + + if (dte.DTE != null) + { + switch (dte.Version) + { + case "11": + return new VisualStudio2012Adapter.VisualStudio(dte.DTE); + case "12": + return new VisualStudio2013Adapter.VisualStudio(dte.DTE); + case "14": + return new VisualStudio2015Adapter.VisualStudio(dte.DTE); + } + } + + return null; + } + } + + #endregion IVisualStudioInstanceProvider + + /// + /// Get a table of the currently running instances of the Visual Studio .NET IDE. + /// + /// + /// Only return instances + /// that have opened a solution + /// + /// + /// The DTE object corresponding to the name of the IDE + /// in the running object table + /// + private static DTEInstance GetSolutionObject(string processId) + { + foreach (KeyValuePair entry in NativeMethods.RunningObjectTable) + { + var candidateName = entry.Key; + + if (candidateName.StartsWith(VisualStudioDTEPrefix, StringComparison.OrdinalIgnoreCase) && + candidateName.EndsWith(processId, StringComparison.OrdinalIgnoreCase)) + { + return new DTEInstance + { + DTE = entry.Value as DTE2, + Version = GetVersion(candidateName) + }; + } + } + + return null; + } + + /// + /// Gets the process id of the parent process. + /// + /// The process id of the child process. + /// + private static string GetParentProcessId(string processId) + { + string query = "SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = " + processId; + uint parentId; + + using (ManagementObjectSearcher search = new ManagementObjectSearcher("root\\CIMV2", query)) + { + ManagementObjectCollection.ManagementObjectEnumerator results = search.Get().GetEnumerator(); + results.MoveNext(); + ManagementBaseObject queryObj = results.Current; + parentId = (uint)queryObj["ParentProcessId"]; + } + + return parentId.ToString(CultureInfo.InvariantCulture); + } + + /// + /// Given a Visual Studio DTE monicker, extracts the version Id from the name + /// + /// The Visual Studio COM object display name + /// The Visual Studio COM Object version or an empty string if the version cannot be located + private static string GetVersion(string candidateName) + { + Match match = VisualStudioDTEVersionRegex.Match(candidateName); + if (match.Success) + { + return match.Groups[1].Value; + } + + return string.Empty; + } + + /// + /// Minor class used to aggregate version information + /// and the respective Visual Studio DTE2 instance. + /// + private class DTEInstance + { + public string Version { get; set; } + + public DTE2 DTE { get; set; } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/VisualStudio/IVisualStudioInstanceProvider.cs b/BoostTestAdapter/Utility/VisualStudio/IVisualStudioInstanceProvider.cs new file mode 100644 index 0000000..1f89792 --- /dev/null +++ b/BoostTestAdapter/Utility/VisualStudio/IVisualStudioInstanceProvider.cs @@ -0,0 +1,16 @@ +using VisualStudioAdapter; + +namespace BoostTestAdapter.Utility.VisualStudio +{ + /// + /// Abstract factory which provides IVisualStudio instances. + /// + public interface IVisualStudioInstanceProvider + { + /// + /// Provides an IVisualStudio instance. + /// + /// An IVisualStudio instance or null if provisioning is not possible. + IVisualStudio Instance { get; } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/VisualStudio/VSTestModel.cs b/BoostTestAdapter/Utility/VisualStudio/VSTestModel.cs new file mode 100644 index 0000000..045a881 --- /dev/null +++ b/BoostTestAdapter/Utility/VisualStudio/VSTestModel.cs @@ -0,0 +1,287 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BoostTestAdapter.Boost.Results; +using BoostTestAdapter.Boost.Results.LogEntryTypes; +using BoostTestAdapter.Boost.Test; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; +using VSTestOutcome = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestOutcome; +using VSTestResult = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult; + +namespace BoostTestAdapter.Utility.VisualStudio +{ + /// + /// Static class hosting utility methods related to the + /// Visual Studio Test object model. + /// + public static class VSTestModel + { + /// + /// TestSuite trait name + /// + public static string TestSuiteTrait + { + get + { + return "TestSuite"; + } + } + + /// + /// Converts a Boost.Test.Result.TestResult model into an equivalent + /// Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult model. + /// + /// The Boost.Test.Result.TestResult model to convert. + /// The Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase model which is related to the result. + /// The Boost.Test.Result.TestResult model converted into its Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult counterpart. + public static VSTestResult AsVSTestResult(this BoostTestAdapter.Boost.Results.TestResult result, VSTestCase test) + { + Utility.Code.Require(result, "result"); + Utility.Code.Require(test, "test"); + + VSTestResult vsResult = new VSTestResult(test); + + vsResult.ComputerName = Environment.MachineName; + + vsResult.Outcome = GetTestOutcome(result.Result); + + // Boost.Test.Result.TestResult.Duration is in microseconds + vsResult.Duration = TimeSpan.FromMilliseconds(result.Duration / 1000); + + if (result.LogEntries.Count > 0) + { + foreach (TestResultMessage message in GetTestMessages(result)) + { + vsResult.Messages.Add(message); + } + + // Test using the TestOutcome type since elements from the + // Boost Result type may be collapsed into a particular value + if (vsResult.Outcome == VSTestOutcome.Failed) + { + LogEntry error = GetLastError(result); + + if (error != null) + { + vsResult.ErrorMessage = GetErrorMessage(result); + vsResult.ErrorStackTrace = ((error.Source == null) ? null : error.Source.ToString()); + } + } + } + + return vsResult; + } + + /// + /// Converts a Boost.Test.Result.Result enumeration into an equivalent + /// Microsoft.VisualStudio.TestPlatform.ObjectModel.TestOutcome. + /// + /// The Boost.Test.Result.Result value to convert. + /// The Boost.Test.Result.Result enumeration converted into Microsoft.VisualStudio.TestPlatform.ObjectModel.TestOutcome. + private static VSTestOutcome GetTestOutcome(TestResultType result) + { + switch (result) + { + case TestResultType.Passed: return VSTestOutcome.Passed; + case TestResultType.Skipped: return VSTestOutcome.Skipped; + + case TestResultType.Failed: + case TestResultType.Aborted: + default: return VSTestOutcome.Failed; + } + } + + /// + /// Converts the log entries stored within the provided test result into equivalent + /// Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResultMessages + /// + /// The Boost.Test.Result.TestResult whose LogEntries are to be converted. + /// An enumeration of TestResultMessage equivalent to the Boost log entries stored within the provided TestResult. + private static IEnumerable GetTestMessages(BoostTestAdapter.Boost.Results.TestResult result) + { + foreach (LogEntry entry in result.LogEntries) + { + string category = null; + + if ( + (entry is LogEntryInfo) || + (entry is LogEntryMessage) || + (entry is LogEntryStandardOutputMessage) + ) + { + category = TestResultMessage.StandardOutCategory; + } + else if ( + (entry is LogEntryWarning) || + (entry is LogEntryError) || + (entry is LogEntryFatalError) || + (entry is LogEntryMemoryLeak) || + (entry is LogEntryException) || + (entry is LogEntryStandardErrorMessage) + ) + { + category = TestResultMessage.StandardErrorCategory; + } + else + { + // Skip unknown message types + continue; + } + + yield return new TestResultMessage(category, GetTestResultMessageText(result.Unit, entry)); + } + } + + /// + /// Given a log entry and its respective test unit, retuns a string + /// formatted similar to the compiler_log_formatter.ipp in the Boost Test framework. + /// + /// The test unit related to this log entry + /// The log entry + /// A string message using a similar format as specified within compiler_log_formatter.ipp in the Boost Test framework + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase")] + private static string GetTestResultMessageText(TestUnit unit, LogEntry entry) + { + if ((entry is LogEntryStandardOutputMessage) || (entry is LogEntryStandardErrorMessage)) + { + return entry.Detail.TrimEnd() + Environment.NewLine; + } + + StringBuilder sb = new StringBuilder(); + + if (entry.Source != null) + { + AppendSourceInfo(entry.Source, sb); + } + + sb.Append(entry.ToString().ToLowerInvariant()). + Append(" in \""). + Append(unit.Name). + Append("\""); + + LogEntryMemoryLeak memoryLeak = entry as LogEntryMemoryLeak; + if (memoryLeak == null) + { + sb.Append(": ").Append(entry.Detail.TrimEnd()); + } + + LogEntryException exception = entry as LogEntryException; + if (exception != null) + { + if (exception.LastCheckpoint != null) + { + sb.Append(Environment.NewLine); + AppendSourceInfo(exception.LastCheckpoint, sb); + sb.Append("last checkpoint: ").Append(exception.CheckpointDetail); + } + } + + if (memoryLeak != null) + { + if ((memoryLeak.LeakSourceFilePath != null) && (memoryLeak.LeakSourceFileName != null)) + { + sb.Append("source file path leak detected at :"). + Append(memoryLeak.LeakSourceFilePath). + Append(memoryLeak.LeakSourceFileName); + } + + if (memoryLeak.LeakLineNumber != null) + { + sb.Append(", "). + Append("Line number: "). + Append(memoryLeak.LeakLineNumber); + } + + sb.Append(", "). + Append("Memory allocation number: "). + Append(memoryLeak.LeakMemoryAllocationNumber); + + sb.Append(", "). + Append("Leak size: "). + Append(memoryLeak.LeakSizeInBytes). + Append(" byte"); + + if (memoryLeak.LeakSizeInBytes > 0) + { + sb.Append('s'); + } + + sb.Append(Environment.NewLine). + Append(memoryLeak.LeakLeakedDataContents); + } + + // Append NewLine so that log entries are listed one per line + return sb.Append(Environment.NewLine).ToString(); + } + + /// + /// Compresses a message so that it is suitable for the UI. + /// + /// The erroneous LogEntry whose message is to be displayed. + /// A compressed message suitable for UI. + private static string GetErrorMessage(BoostTestAdapter.Boost.Results.TestResult result) + { + StringBuilder sb = new StringBuilder(); + + foreach (LogEntry error in GetErrors(result)) + { + sb.Append(error.Detail).Append(Environment.NewLine); + } + + // Remove redundant NewLine at the end + sb.Remove((sb.Length - Environment.NewLine.Length), Environment.NewLine.Length); + + return sb.ToString(); + } + + /// + /// Appends the SourceInfo instance information to the provided StringBuilder. + /// + /// The SourceInfo instance to stringify. + /// The StringBuilder which will host the result. + /// sb + private static StringBuilder AppendSourceInfo(SourceFileInfo info, StringBuilder sb) + { + sb.Append((string.IsNullOrEmpty(info.File) ? "unknown location" : info.File)); + if (info.LineNumber > -1) + { + sb.Append('(').Append(info.LineNumber).Append(')'); + } + + sb.Append(": "); + + return sb; + } + + /// + /// Given a TestResult returns the last error type log entry. + /// + /// The TestResult which hosts the necessary log entries + /// The last error type log entry or null if none are available. + private static LogEntry GetLastError(BoostTestAdapter.Boost.Results.TestResult result) + { + // Select the last error issued within a Boost Test report + return GetErrors(result).LastOrDefault(); + } + + /// + /// Enumerates all log entries which are deemed to be an error (i.e. Warning, Error, Fatal Error and Exception). + /// + /// The TestResult which hosts the log entries. + /// An enumeration of error flagging log entries. + private static IEnumerable GetErrors(BoostTestAdapter.Boost.Results.TestResult result) + { + IEnumerable errors = result.LogEntries.Where((e) => + (e is LogEntryWarning) || + (e is LogEntryError) || + (e is LogEntryFatalError) || + (e is LogEntryException) + ); + + // Only provide a single memory leak error if the test succeeded successfully (i.e. all asserts passed) + return (errors.Any() ? errors : result.LogEntries.Where((e) => (e is LogEntryMemoryLeak)).Take(1)); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/Utility/XmlReaderHelper.cs b/BoostTestAdapter/Utility/XmlReaderHelper.cs new file mode 100644 index 0000000..c0b6f71 --- /dev/null +++ b/BoostTestAdapter/Utility/XmlReaderHelper.cs @@ -0,0 +1,29 @@ +using System; +using System.Xml; + +namespace BoostTestAdapter.Utility +{ + /// + /// Helper functionality related to System.Xml.XmlReader + /// + internal static class XmlReaderHelper + { + /// + /// Default filter for Xml Elements + /// + public static readonly XmlNodeType[] ElementFilter = new XmlNodeType[] { XmlNodeType.Element, XmlNodeType.EndElement }; + + /// + /// Consumes nodes from the reader until the first ocurance of the XmlNodeType identified within types. + /// + /// The reader from which to consume Xml nodes + /// The XmlNodeType types of interest which will halt consumption + public static void ConsumeUntilFirst(this XmlReader reader, XmlNodeType[] types) + { + while (Array.IndexOf(types, reader.NodeType) < 0) + { + reader.Read(); + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapter/packages.config b/BoostTestAdapter/packages.config new file mode 100644 index 0000000..2fe6773 --- /dev/null +++ b/BoostTestAdapter/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestAdapter.dll.config b/BoostTestAdapterNunit/BoostTestAdapter.dll.config new file mode 100644 index 0000000..400ca7b --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestAdapter.dll.config @@ -0,0 +1,27 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestAdapterNunit.csproj b/BoostTestAdapterNunit/BoostTestAdapterNunit.csproj new file mode 100644 index 0000000..236c9f6 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestAdapterNunit.csproj @@ -0,0 +1,179 @@ + + + + + Debug + AnyCPU + {FE58A67C-D313-46FD-B8F3-F80383EE5FD1} + Library + Properties + BoostTestAdapterNunit + BoostTestAdapterNunit + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + $(MSBuildProgramFiles32) + + $(ProgramFiles%28x86%29) + + $(ProgramFiles) (x86) + + $(ProgramFiles) + + + + False + + + ..\packages\FakeItEasy.1.13.1\lib\net40\FakeItEasy.dll + + + ..\packages\log4net.2.0.3\lib\net40-full\log4net.dll + + + $(ProgramFiles32)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll + + + False + + + ..\packages\NUnit.2.6.4\lib\nunit.framework.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {bc4b3bed-9241-4dd6-8070-a9b66dfc08c1} + BoostTestAdapter + + + {30ecc867-ce89-425f-b452-7a8a320f727d} + VisualStudio2012Adapter + + + {62347cc7-c839-413d-a7ce-598409f6f15b} + VisualStudioAdapter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestAdaptorNunitTestRunner.nunit b/BoostTestAdapterNunit/BoostTestAdaptorNunitTestRunner.nunit new file mode 100644 index 0000000..e715531 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestAdaptorNunitTestRunner.nunit @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestDiscovererTest.cs b/BoostTestAdapterNunit/BoostTestDiscovererTest.cs new file mode 100644 index 0000000..633d403 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestDiscovererTest.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using BoostTestAdapter; +using BoostTestAdapter.Utility.VisualStudio; +using BoostTestAdapterNunit.Fakes; +using FakeItEasy; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + internal class BoostTestDiscovererTest + { + /// + /// The scope of this test is to check that if the Discoverer is given multiple project, + /// method DiscoverTests splits appropiately the sources of type exe and of type dll in exe sources and dll sources + /// and dispatches the discovery accordingly. + /// + [Test] + public void CorrectBoostTestDiscovererDispatching() + { + var bootTestDiscovererFactory = A.Fake(); + var boostDllTestDiscoverer = A.Fake(); + var boostExeTestDiscoverer = A.Fake(); + var defaultTestContext = new DefaultTestContext(); + var consoleMessageLogger = new ConsoleMessageLogger(); + var defaultTestCaseDiscoverySink = new DefaultTestCaseDiscoverySink(); + + ITestDiscoverer boostTestDiscoverer = new BoostTestDiscoverer(bootTestDiscovererFactory); + + var projects = new string[] + { + "project1" + BoostTestDiscoverer.DllExtension, + "project2" + BoostTestDiscoverer.ExeExtension, + "project3" + BoostTestDiscoverer.ExeExtension, + "project4" + BoostTestDiscoverer.DllExtension, + "project5" + BoostTestDiscoverer.DllExtension, + }; + + var dllProjectsExpected = new string[] + { + "project1" + BoostTestDiscoverer.DllExtension, + "project4" + BoostTestDiscoverer.DllExtension, + "project5" + BoostTestDiscoverer.DllExtension, + }; + + var exeProjectsExpected = new string[] + { + "project2" + BoostTestDiscoverer.ExeExtension, + "project3" + BoostTestDiscoverer.ExeExtension, + }; + + IEnumerable dllProjectsActual = null; + IEnumerable exeProjectsActual = null; + + A.CallTo(() => bootTestDiscovererFactory.GetTestDiscoverer(BoostTestDiscoverer.DllExtension, A.Ignored)) + .Returns(boostDllTestDiscoverer); + A.CallTo(() => bootTestDiscovererFactory.GetTestDiscoverer(BoostTestDiscoverer.ExeExtension, A.Ignored)) + .Returns(boostExeTestDiscoverer); + + A.CallTo( + () => + boostDllTestDiscoverer.DiscoverTests(A>.Ignored, defaultTestContext, + consoleMessageLogger, defaultTestCaseDiscoverySink)) + .Invokes(call => dllProjectsActual = call.GetArgument>(0)); + + A.CallTo( + () => + boostExeTestDiscoverer.DiscoverTests(A>.Ignored, defaultTestContext, + consoleMessageLogger, defaultTestCaseDiscoverySink)) + .Invokes(call => exeProjectsActual = call.GetArgument>(0)); + + boostTestDiscoverer.DiscoverTests(projects, defaultTestContext, consoleMessageLogger, defaultTestCaseDiscoverySink); + + Assert.AreEqual(dllProjectsExpected, dllProjectsActual); + Assert.AreEqual(exeProjectsExpected, exeProjectsActual); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestExeDiscovererTest.cs b/BoostTestAdapterNunit/BoostTestExeDiscovererTest.cs new file mode 100644 index 0000000..53a3bd2 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestExeDiscovererTest.cs @@ -0,0 +1,412 @@ +using System.Collections.Generic; +using System.Linq; +using BoostTestAdapter; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using BoostTestAdapterNunit.Fakes; +using BoostTestAdapterNunit.Utility; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using NUnit.Framework; +using VisualStudioAdapter; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + internal class BoostTestExeDiscovererTest + { + #region Test Data + + private const string Source = "test.boostd.exe"; + + private const string BoostUnitTestSample = "BoostUnitTestSample.cpp"; + private const string BoostFixtureTestSuite = "BoostFixtureTestSuite.cpp"; + private const string BoostFixtureTestCase = "BoostFixtureTestCase.cpp"; + private const string BoostUnitTestSampleRequiringUseOfFilters = "BoostUnitTestSampleRequiringUseOfFilters.cpp"; + + #endregion Test Data + + #region Helper Methods + + /// + /// Applies the discovery procedure over the dummy solution + /// + /// A dummy solution from which to discover tests from + /// An enumeration of discovered test cases + private IEnumerable Discover(DummySolution solution) + { + return Discover(solution.Provider, new string[] { solution.Source }); + } + + /// + /// Applies the discovery procedure over the dummy solution + /// + /// A dummy solution from which to discover tests from + /// The IDiscoveryContext to use + /// An enumeration of discovered test cases + private IEnumerable Discover(DummySolution solution, IDiscoveryContext context) + { + return Discover(solution.Provider, new string[] { solution.Source }, context); + } + + /// + /// Applies the discovery procedure over the provided sources + /// + /// An IVisualStudioInstanceProvider instance + /// The sources which to discover tests from + /// An enumeration of discovered test cases + private IEnumerable Discover(IVisualStudioInstanceProvider provider, IEnumerable sources) + { + return Discover(provider, sources, new DefaultTestContext()); + } + + /// + /// Applies the discovery procedure over the provided sources + /// + /// An IVisualStudioInstanceProvider instance + /// The sources which to discover tests from + /// The IDiscoveryContext to use + /// An enumeration of discovered test cases + private IEnumerable Discover(IVisualStudioInstanceProvider provider, IEnumerable sources, IDiscoveryContext context) + { + ConsoleMessageLogger logger = new ConsoleMessageLogger(); + DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); + + IBoostTestDiscoverer discoverer = new BoostTestExeDiscoverer(provider); + discoverer.DiscoverTests(sources, context, logger, sink); + + return sink.Tests; + } + + /// + /// Asserts general test details for the test with the requested fully qualified name + /// + /// The discovered test case enumeration + /// The fully qualified name of the test case to test + /// The expected test case source + /// The test case which has been tested + private VSTestCase AssertTestDetails(IEnumerable tests, QualifiedNameBuilder fqn, string source) + { + VSTestCase vsTest = tests.FirstOrDefault(test => test.FullyQualifiedName == fqn.ToString()); + + Assert.That(vsTest, Is.Not.Null); + AssertTestDetails(vsTest, fqn, source); + + return vsTest; + } + + /// + /// Asserts general test details for the provided test case + /// + /// The test case to test + /// The expected test case fully qualified name + /// The expected test case source + private void AssertTestDetails(VSTestCase vsTest, QualifiedNameBuilder fqn, string source) + { + Assert.That(vsTest, Is.Not.Null); + Assert.That(vsTest.DisplayName, Is.EqualTo(fqn.Peek())); + Assert.That(vsTest.ExecutorUri, Is.EqualTo(BoostTestExecutor.ExecutorUri)); + Assert.That(vsTest.Source, Is.EqualTo(source)); + + string suite = fqn.Pop().ToString(); + if (string.IsNullOrEmpty(suite)) + { + suite = QualifiedNameBuilder.DefaultMasterTestSuiteName; + } + + Assert.That(vsTest.Traits.Where((trait) => (trait.Name == VSTestModel.TestSuiteTrait) && (trait.Value == suite)).Count(), Is.EqualTo(1)); + } + + /// + /// Asserts source file details for the provided test case + /// + /// The test case to test + /// The expected source file qualified path + /// The expected line number for the test case + private void AssertSourceDetails(VSTestCase vsTest, string codeFilePath, int lineNumber) + { + if (vsTest.CodeFilePath != null) + { + Assert.That(vsTest.CodeFilePath, Is.EqualTo(codeFilePath)); + } + + if (lineNumber != -1) + { + Assert.That(vsTest.LineNumber, Is.EqualTo(lineNumber)); + } + } + + /// + /// Asserts test details for tests contained within the "BoostFixtureTestSuite.cpp" source file + /// + /// The discovered test case enumeration + /// The dummy solution which contains a project referencing "BoostFixtureTestSuite.cpp" + private void AssertBoostFixtureTestSuiteTestDetails(IEnumerable tests, DummySolution solution) + { + DummySourceFile codeFile = solution.SourceFileResourcePaths.First((source) => source.TempSourcePath.EndsWith(BoostFixtureTestSuite)); + AssertBoostFixtureTestSuiteTestDetails(tests, solution.Source, codeFile.TempSourcePath); + } + + /// + /// Asserts test details for tests contained within the "BoostFixtureTestSuite.cpp" source file + /// + /// The discovered test case enumeration + /// The source for which "BoostFixtureTestSuite.cpp" was compiled to + /// The fully qualified path for the on-disk version of "BoostFixtureTestSuite.cpp" + private void AssertBoostFixtureTestSuiteTestDetails(IEnumerable tests, string source, string codeFilePath) + { + VSTestCase test1 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("FixtureSuite1/BoostTest1"), source); + AssertSourceDetails(test1, codeFilePath, 30); + + VSTestCase test2 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("FixtureSuite1/BoostTest2"), source); + AssertSourceDetails(test2, codeFilePath, 35); + + VSTestCase test3 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("BoostTest3"), source); + AssertSourceDetails(test3, codeFilePath, 43); + + VSTestCase test4 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("FixtureSuite2/Fixturetest_case1"), source); + AssertSourceDetails(test4, codeFilePath, 50); + + VSTestCase testint = AssertTestDetails(tests, QualifiedNameBuilder.FromString("FixtureSuite2/TemplatedTest"), source); + AssertSourceDetails(testint, codeFilePath, 57); + + VSTestCase testlong = AssertTestDetails(tests, QualifiedNameBuilder.FromString("FixtureSuite2/TemplatedTest"), source); + AssertSourceDetails(testlong, codeFilePath, 57); + + VSTestCase testchar = AssertTestDetails(tests, QualifiedNameBuilder.FromString("FixtureSuite2/TemplatedTest"), source); + AssertSourceDetails(testchar, codeFilePath, 57); + } + + /// + /// Asserts test details for tests contained within the "BoostUnitTestSample.cpp" source file + /// + /// The discovered test case enumeration + /// The dummy solution which contains a project referencing "BoostUnitTestSample.cpp" + private void AssertBoostUnitTestSampleTestDetails(IEnumerable tests, DummySolution solution) + { + DummySourceFile codeFile = solution.SourceFileResourcePaths.First((source) => source.TempSourcePath.EndsWith(BoostUnitTestSample)); + AssertBoostUnitTestSampleTestDetails(tests, solution.Source, codeFile.TempSourcePath); + } + + /// + /// Asserts test details for tests contained within the "BoostUnitTestSample.cpp" source file + /// + /// The discovered test case enumeration + /// The source for which "BoostUnitTestSample.cpp" was compiled to + /// The fully qualified path for the on-disk version of "BoostUnitTestSample.cpp" + private void AssertBoostUnitTestSampleTestDetails(IEnumerable tests, string source, string codeFilePath) + { + VSTestCase test123 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suite1/BoostUnitTest123"), source); + AssertSourceDetails(test123, codeFilePath, 16); + + VSTestCase test1234 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suite1/BoostUnitTest1234"), source); + AssertSourceDetails(test1234, codeFilePath, 20); + + VSTestCase test12345 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("BoostUnitTest12345"), source); + AssertSourceDetails(test12345, codeFilePath, 26); + + VSTestCase testint = AssertTestDetails(tests, QualifiedNameBuilder.FromString("my_test"), source); + AssertSourceDetails(testint, codeFilePath, 33); + + VSTestCase testlong = AssertTestDetails(tests, QualifiedNameBuilder.FromString("my_test"), source); + AssertSourceDetails(testlong, codeFilePath, 33); + + VSTestCase testchar = AssertTestDetails(tests, QualifiedNameBuilder.FromString("my_test"), source); + AssertSourceDetails(testchar, codeFilePath, 33); + } + + /// + /// Asserts test details for tests contained within the "BoostFixtureTestCase.cpp" source file + /// + /// The discovered test case enumeration + /// The source for which "BoostFixtureTestCase.cpp" was compiled to + /// The fully qualified path for the on-disk version of "BoostFixtureTestCase.cpp" + private void AssertBoostFixtureTestCaseTestDetails(IEnumerable tests, string source, string codeFilePath) + { + VSTestCase test1 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suit1/BoostUnitTest1"), source); + AssertSourceDetails(test1, codeFilePath, 19); + + VSTestCase test2 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suit1/Fixturetest_case1"), source); + AssertSourceDetails(test2, codeFilePath, 24); + + VSTestCase test3 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suit1/Fixturetest_case2"), source); + AssertSourceDetails(test3, codeFilePath, 30); + + VSTestCase test4 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Fixturetest_case3"), source); + AssertSourceDetails(test4, codeFilePath, 37); + } + + private void AssertBoostUnitTestSampleRequiringUseOfFilters(IEnumerable tests, DummySolution solution) + { + DummySourceFile codeFile = solution.SourceFileResourcePaths.First((source) => source.TempSourcePath.EndsWith(BoostUnitTestSampleRequiringUseOfFilters)); + AssertBoostUnitTestSampleRequiringUseOfFilters(tests, solution.Source, codeFile.TempSourcePath); + } + + private void AssertBoostUnitTestSampleRequiringUseOfFilters(IEnumerable tests, string source, + string codeFilePath) + { + VSTestCase test1 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suite1/BoostUnitTest123"), source); + AssertSourceDetails(test1, codeFilePath, 16); + + VSTestCase test2 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("Suite1/BoostUnitTest1234"), source); + AssertSourceDetails(test2, codeFilePath, 20); + + VSTestCase test3 = AssertTestDetails(tests, QualifiedNameBuilder.FromString("BoostUnitTest12345"), source); + AssertSourceDetails(test3, codeFilePath, 26); + + VSTestCase testint = AssertTestDetails(tests, QualifiedNameBuilder.FromString("my_test"), source); + AssertSourceDetails(testint, codeFilePath, 40); + + VSTestCase testlong = AssertTestDetails(tests, QualifiedNameBuilder.FromString("my_test"), source); + AssertSourceDetails(testlong, codeFilePath, 40); + + VSTestCase testchar = AssertTestDetails(tests, QualifiedNameBuilder.FromString("my_test"), source); + AssertSourceDetails(testchar, codeFilePath, 40); + + VSTestCase testConditional = AssertTestDetails(tests, QualifiedNameBuilder.FromString("BoostUnitTestConditional"), source); + AssertSourceDetails(testConditional, codeFilePath, 54); + } + + #endregion Helper Methods + + #region Tests + + /// + /// Given an valid source compiled from a single test source file, the discovery process reports the found tests accordingly. + /// + /// Test aims: + /// - Ensure that tests can be discovered from a valid .cpp file. + /// + [Test] + public void DiscoverTests() + { + using (DummySolution solution = new DummySolution(Source, new string[] { BoostUnitTestSample })) + { + IEnumerable tests = Discover(solution); + Assert.That(tests.Count(), Is.EqualTo(6)); + + AssertBoostUnitTestSampleTestDetails(tests, solution); + + // NOTE BoostUnitTest123 should not be available since it is commented out + Assert.That(tests.Any((test) => test.FullyQualifiedName == "BoostUnitTest123"), Is.False); + } + } + + /// + /// Given an valid source compiled from multiple test source files, the discovery process reports the found tests accordingly. + /// + /// Test aims: + /// - Ensure that tests can be discovered from multiple valid .cpp files. + /// + [Test] + public void DiscoverTestsFromMultipleFiles() + { + using (DummySolution solution = new DummySolution(Source, new string[] { BoostFixtureTestSuite, BoostUnitTestSample })) + { + IEnumerable tests = Discover(solution); + Assert.That(tests.Count(), Is.EqualTo(13)); + + AssertBoostFixtureTestSuiteTestDetails(tests, solution); + AssertBoostUnitTestSampleTestDetails(tests, solution); + } + } + + /// + /// Given valid sources compiled from multiple test source files, the discovery process reports the found tests accordingly. + /// + /// Test aims: + /// - Ensure that tests can be discovered from multiple sources. + /// - Ensure that tests can be discovered from 'complex' project structures which include folders and other source file types. + /// + [Test] + public void DiscoverTestsFromMultipleSources() + { + const string boostFixtureTestSuiteSource = "BoostFixtureTestSuite.boostd.exe"; + const string boostUnitTestSampleSource = "BoostUnitTestSample.boostd.exe"; + + using (DummySourceFile boostFixtureTestSuiteCodeFile = new DummySourceFile(BoostFixtureTestSuite)) + using (DummySourceFile boostFixtureTestCaseCodeFile = new DummySourceFile(BoostFixtureTestCase)) + using (DummySourceFile boostUnitTestSampleSourceCodeFile = new DummySourceFile(BoostUnitTestSample)) + { + IVisualStudio vs = new FakeVisualStudioInstanceBuilder(). + Solution( + new FakeSolutionBuilder(). + Name("SampleSolution"). + Project( + new FakeProjectBuilder(). + Name("FixtureSampleProject"). + PrimaryOutput(boostFixtureTestSuiteSource). + Sources( + new List() + { + boostFixtureTestSuiteCodeFile.TempSourcePath, + boostFixtureTestCaseCodeFile.TempSourcePath + }) + ). + Project( + new FakeProjectBuilder(). + Name("SampleProject"). + PrimaryOutput(boostUnitTestSampleSource). + Sources( + new List() + { + boostUnitTestSampleSourceCodeFile.TempSourcePath, + }) + ) + ).Build(); + + IEnumerable vsTests = Discover(new DummyVSProvider(vs), new string[] { boostFixtureTestSuiteSource, boostUnitTestSampleSource }); + Assert.That(vsTests.Count(), Is.EqualTo(17)); + + AssertBoostFixtureTestSuiteTestDetails(vsTests, boostFixtureTestSuiteSource, boostFixtureTestSuiteCodeFile.TempSourcePath); + AssertBoostFixtureTestCaseTestDetails(vsTests, boostFixtureTestSuiteSource, boostFixtureTestCaseCodeFile.TempSourcePath); + AssertBoostUnitTestSampleTestDetails(vsTests, boostUnitTestSampleSource, boostUnitTestSampleSourceCodeFile.TempSourcePath); + } + } + + /// + /// The scope of this test is to check the correct discovery of tests when the source file contains: + /// 1) Code that is commented (both single and multiline) + /// 2) Boost UTF macros that might be as part of literal strings (and that hence should be filtered out) + /// 3) Code that its inclusion is controlled by some type of conditional inclusion + /// + [Test] + public void DiscoverTestsFromSourceFileRequiringUseOfFilters() + { + using (DummySolution solution = new DummySolution(Source, new string[] { BoostUnitTestSampleRequiringUseOfFilters })) + { + IEnumerable vsTests = Discover(solution); + Assert.That(vsTests.Count(), Is.EqualTo(7)); + AssertBoostUnitTestSampleRequiringUseOfFilters(vsTests, solution); + } + } + + /// + /// Given valid sources containing conditionally compiled tests, based on the .runsettings configuration, tests may still be discovered. + /// + /// Test aims: + /// - Ensure that conditionally compiled tests are still discovered if configured to do so via the .runsettings configuration. + /// + [Test] + public void DiscoverTestsUsingRunSettings() + { + using (DummySolution solution = new DummySolution(Source, new string[] { BoostUnitTestSampleRequiringUseOfFilters })) + { + DefaultTestContext context = new DefaultTestContext(); + context.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, new BoostTestAdapterSettingsProvider()); + context.LoadEmbeddedSettings("BoostTestAdapterNunit.Resources.Settings.conditionalIncludesDisabled.runsettings"); + + IEnumerable vsTests = Discover(solution, context); + + Assert.That(vsTests.Count(), Is.EqualTo(8)); + AssertBoostUnitTestSampleRequiringUseOfFilters(vsTests, solution); + + VSTestCase testConditional = AssertTestDetails(vsTests, QualifiedNameBuilder.FromString("BoostUnitTestShouldNotAppear3"), Source); + AssertSourceDetails(testConditional, solution.SourceFileResourcePaths.First().TempSourcePath, 47); + } + } + + #endregion Tests + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestExecutorTest.cs b/BoostTestAdapterNunit/BoostTestExecutorTest.cs new file mode 100644 index 0000000..6a411a2 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestExecutorTest.cs @@ -0,0 +1,689 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BoostTestAdapter; +using BoostTestAdapter.Boost.Runner; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using BoostTestAdapterNunit.Fakes; +using BoostTestAdapterNunit.Utility; +using FakeItEasy; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; +using NUnit.Framework; +using TimeoutException = BoostTestAdapter.Boost.Runner.TimeoutException; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; +using VSTestResult = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class BoostTestExecutorTest + { + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + this.TempDir = null; + + this.RunnerFactory = new StubBoostTestRunnerFactory(this); + + this.Executor = new BoostTestExecutor( + new StubBoostTestDiscovererFactory(this), + this.RunnerFactory + ); + + this.FrameworkHandle = new StubFrameworkHandle(); + + this.RunContext = new DefaultTestContext(); + } + + #endregion Test Setup/Teardown + + #region Test Data + + /// + /// Test case fully qualified name which should generate a timeout exception. + /// + private const string TimeoutTestCase = "Timeout"; + + /// + /// Timeout threshold. + /// + private const int Timeout = 10; + + /// + /// Default test case fully qualified name. + /// + private string DefaultTestCase + { + get + { + return "XmlDomInterfaceTestSuite/ParseXmlFileWithoutValidationTest"; + } + } + + /// + /// Fully qualified path to the default test source. + /// + private string DefaultSource + { + get + { + // Use temporary file path in order to allow NUnit + // tests to execute within different environments... + // + // And to be able to access test result output + // since test results are placed relative to the + // test source file. + return Path.Combine(TempDir, "default"); + } + } + + private string _tempdir = null; + + private string TempDir + { + get + { + if (_tempdir == null) + { + _tempdir = Path.GetDirectoryName(Path.GetTempPath()); + } + + return _tempdir; + } + + set + { + this._tempdir = value; + } + } + + /// + /// Empty test source fully qualified path. + /// + private string EmptySource + { + get + { + return "empty"; + } + } + + private StubBoostTestRunnerFactory RunnerFactory { get; set; } + private BoostTestExecutor Executor { get; set; } + private StubFrameworkHandle FrameworkHandle { get; set; } + private DefaultTestContext RunContext { get; set; } + + #endregion Test Data + + #region Stubs/Mocks + + /// + /// Utility base class allowing access to the parent class. + /// + /// + private abstract class InnerClass + { + protected InnerClass(T parent) + { + this.Parent = parent; + } + + /// + /// Parent class hosting this inner class. + /// + protected T Parent { get; private set; } + } + + /// + /// Stub ITestDiscovererFactory implementation. Generates StubBoostTestDiscoverer instances. + /// + private class StubBoostTestDiscovererFactory : InnerClass, IBoostTestDiscovererFactory + { + public StubBoostTestDiscovererFactory(BoostTestExecutorTest parent) : + base(parent) + { + } + + #region ITestDiscovererFactory + + public IBoostTestDiscoverer GetTestDiscoverer(string identifier, BoostTestDiscovererFactoryOptions options) + { + return new StubBoostTestDiscoverer(this.Parent); + } + + #endregion ITestDiscovererFactory + } + + /// + /// Stub ITestDiscoverer implementation. Based on the requested source, generates fake discovery results. + /// + private class StubBoostTestDiscoverer : InnerClass, IBoostTestDiscoverer + { + public StubBoostTestDiscoverer(BoostTestExecutorTest parent) : + base(parent) + { + } + + #region ITestDiscoverer + + public void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink) + { + foreach (string source in sources) + { + foreach (VSTestCase test in this.Parent.GetTests(source)) + { + discoverySink.SendTestCase(test); + } + } + } + + #endregion ITestDiscoverer + } + + /// + /// Stub IBoostTestRunnerFactory implementation. Provisions fake IBoostTestRunner instances + /// which simulate certain conditions based on the requested source. + /// + private class StubBoostTestRunnerFactory : InnerClass, IBoostTestRunnerFactory + { + public StubBoostTestRunnerFactory(BoostTestExecutorTest parent) : + base(parent) + { + this.ProvisionedRunners = new List(); + } + + public IList ProvisionedRunners { get; private set; } + + /// + /// Reference to the latest IBoostTestRunner which was provisioned by this factory. + /// + public IBoostTestRunner LastTestRunner + { + get { return this.ProvisionedRunners.LastOrDefault(); } + } + + #region IBoostTestRunnerFactory + + public IBoostTestRunner GetRunner(string identifier, BoostTestRunnerFactoryOptions options) + { + switch (identifier) + { + case TimeoutTestCase: + { + IBoostTestRunner timeoutRunner = A.Fake(); + A.CallTo(() => timeoutRunner.Source).Returns(identifier); + A.CallTo(() => timeoutRunner.Run(A._, A._)).Throws(new TimeoutException(Timeout)); + A.CallTo(() => timeoutRunner.Debug(A._, A._, A._)).Throws(new TimeoutException(Timeout)); + + return Provision(timeoutRunner); + } + } + + return Provision(new MockBoostTestRunner(this.Parent, identifier)); + } + + #endregion IBoostTestRunnerFactory + + private IBoostTestRunner Provision(IBoostTestRunner runner) + { + this.ProvisionedRunners.Add(runner); + return runner; + } + } + + /// + /// Mock IBoostTestRunner implementation. + /// + /// - Provides access to the latest call information for post-request checking. + /// - Allows for mocking test results by using temporary files which can be accessed by the rest of the system. + /// + private class MockBoostTestRunner : InnerClass, IBoostTestRunner + { + #region Constructors + + public MockBoostTestRunner(BoostTestExecutorTest parent, string source) : + base(parent) + { + this.Source = source; + this.DebugExecution = false; + this.RunCount = 0; + } + + #endregion Constructors + + #region Properties + + public bool DebugExecution { get; private set; } + public BoostTestRunnerCommandLineArgs Args { get; private set; } + public BoostTestRunnerSettings Settings { get; private set; } + public uint RunCount { get; private set; } + + #endregion Properties + + #region IBoostTestRunner + + public void Debug(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings, IFrameworkHandle framework) + { + this.DebugExecution = true; + + Execute(args, settings); + } + + public void Run(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + Execute(args, settings); + } + + public string Source { get; private set; } + + #endregion IBoostTestRunner + + private void Execute(BoostTestRunnerCommandLineArgs args, BoostTestRunnerSettings settings) + { + ++this.RunCount; + + this.Args = args; + this.Settings = settings; + + Assert.That(args.ReportFile, Is.Not.Null); + Assert.That(args.ReportFormat, Is.EqualTo(OutputFormat.XML)); + + Assert.That(args.LogFile, Is.Not.Null); + Assert.That(args.LogFormat, Is.EqualTo(OutputFormat.XML)); + + Assert.That(Path.GetDirectoryName(args.ReportFile), Is.EqualTo(this.Parent.TempDir)); + Assert.That(Path.GetDirectoryName(args.LogFile), Is.EqualTo(this.Parent.TempDir)); + + if (!string.IsNullOrEmpty(args.StandardOutFile)) + { + Assert.That(Path.GetDirectoryName(args.StandardOutFile), Is.EqualTo(this.Parent.TempDir)); + } + + // Copy the default result files to a temporary location so that they can eventually be read as a TestResultCollection + + foreach (string test in args.Tests) + { + if (ShouldSkipTest(test)) + { + Copy("BoostTestAdapterNunit.Resources.ReportsLogs.NoMatchingTests.sample.test.report.xml", args.ReportFile); + Copy("BoostTestAdapterNunit.Resources.ReportsLogs.NoMatchingTests.sample.test.log.xml", args.LogFile); + } + else + { + Copy("BoostTestAdapterNunit.Resources.ReportsLogs.PassedTest.sample.test.report.xml", args.ReportFile); + Copy("BoostTestAdapterNunit.Resources.ReportsLogs.PassedTest.sample.test.log.xml", args.LogFile); + } + } + } + + private bool ShouldSkipTest(string test) + { + return test.Contains(' ') || test.Contains(','); + } + + private void Copy(string embeddedResource, string path) + { + using (Stream inStream = TestHelper.LoadEmbeddedResource(embeddedResource)) + using (FileStream outStream = File.Create(path)) + { + inStream.CopyTo(outStream); + } + } + } + + /// + /// Stub IFrameworkHandle implementation. Allows access to recorded TestResults. + /// + private class StubFrameworkHandle : ConsoleMessageLogger, IFrameworkHandle + { + public StubFrameworkHandle() + { + this.Results = new List(); + } + + public ICollection Results { get; private set; } + + #region IFrameworkHandle + + public bool EnableShutdownAfterTestRun + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + + public int LaunchProcessWithDebuggerAttached(string filePath, string workingDirectory, string arguments, IDictionary environmentVariables) + { + throw new NotImplementedException(); + } + + #endregion IFrameworkHandle + + #region ITestExecutionRecorder + + public void RecordAttachments(IList attachmentSets) + { + throw new NotImplementedException(); + } + + public void RecordEnd(VSTestCase testCase, TestOutcome outcome) + { + throw new NotImplementedException(); + } + + public void RecordResult(VSTestResult testResult) + { + this.Results.Add(testResult); + } + + public void RecordStart(VSTestCase testCase) + { + throw new NotImplementedException(); + } + + #endregion ITestExecutionRecorder + } + + #endregion Stubs/Mocks + + #region Helper Methods + + /// + /// Factory function which returns an enumeration of tests based on the provided test source + /// + /// The test source + /// An enumeration of tests related to the requested source + private IEnumerable GetTests(string source) + { + if (source == DefaultSource) + { + return GetDefaultTests(); + } + + return Enumerable.Empty(); + } + + /// + /// Enumerates a sample collection of tests. + /// + /// An enumeration of sample test cases + private IEnumerable GetDefaultTests() + { + VSTestCase test = CreateTestCase( + DefaultTestCase, + DefaultSource + ); + + return new VSTestCase[] { test }; + } + + /// + /// Creates a Visual Studio TestCase based on the provided information + /// + /// The fully qualified name of the test case + /// The test case source + /// A Visual Studio TestCase intended for BoostTestExecutor execution + private VSTestCase CreateTestCase(string fullyQualifiedName, string source) + { + VSTestCase test = new VSTestCase(fullyQualifiedName, BoostTestExecutor.ExecutorUri, source); + + test.Traits.Add(VSTestModel.TestSuiteTrait, QualifiedNameBuilder.FromString(fullyQualifiedName).Pop().ToString()); + + return test; + } + + /// + /// Asserts test properties for the DefaultTestCase + /// + /// + private void AssertDefaultTestResultProperties(ICollection results) + { + Assert.That(this.FrameworkHandle.Results.Count(), Is.EqualTo(1)); + + VSTestResult result = results.First(); + + Assert.That(result.ComputerName, Is.EqualTo(Environment.MachineName)); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Passed)); + + Assert.That(result.TestCase.Source, Is.EqualTo(DefaultSource)); + Assert.That(result.TestCase.FullyQualifiedName, Is.EqualTo(DefaultTestCase)); + } + + #endregion Helper Methods + + #region Tests + + /// + /// Test execution via the 'Run All' command. + /// + /// Test aims: + /// - Ensure that all tests within a source are executed and reported. + /// + [Test] + public void RunTestsFromSource() + { + this.Executor.RunTests( + new string[] { DefaultSource }, + this.RunContext, + this.FrameworkHandle + ); + + AssertDefaultTestResultProperties(this.FrameworkHandle.Results); + } + + /// + /// A 'Run All' command on an empty source does not fail. + /// + /// Test aims: + /// - Ensure that a request for running no tests operates correctly. + /// + [Test] + public void RunTestsFromEmptySource() + { + this.Executor.RunTests( + new string[] { EmptySource }, + this.RunContext, + this.FrameworkHandle + ); + + Assert.That(this.FrameworkHandle.Results.Count(), Is.EqualTo(0)); + } + + /// + /// A selection of tests can be executed. + /// + /// Test aims: + /// - Ensure that when users select a test selection, only those tests are executed. + /// + [Test] + public void RunTestSelection() + { + this.Executor.RunTests( + GetDefaultTests(), + this.RunContext, + this.FrameworkHandle + ); + + AssertDefaultTestResultProperties(this.FrameworkHandle.Results); + } + + /// + /// Debug test runs are available when selecting 'Debug Tests' for a test selection from the test adapter. + /// + /// Test aims: + /// - Ensure that when users select to perform a debug test run, a debug run is actually performed. + /// + [Test] + public void DebugTestSelection() + { + this.RunContext.IsBeingDebugged = true; + + this.Executor.RunTests( + GetDefaultTests(), + this.RunContext, + this.FrameworkHandle + ); + + MockBoostTestRunner runner = this.RunnerFactory.LastTestRunner as MockBoostTestRunner; + + Assert.That(runner, Is.Not.Null); + Assert.That(runner.DebugExecution, Is.True); + + AssertDefaultTestResultProperties(this.FrameworkHandle.Results); + } + + /// + /// Given a valid .runsettings, test execution should respect the configuration. + /// + /// Test aims: + /// - Ensure that test execution is able to interpret valid .runsettings. + /// + [Test] + public void RunTestsWithTestSettings() + { + this.RunContext.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, new BoostTestAdapterSettingsProvider()); + this.RunContext.LoadEmbeddedSettings("BoostTestAdapterNunit.Resources.Settings.sample.runsettings"); + + this.Executor.RunTests( + GetDefaultTests(), + this.RunContext, + this.FrameworkHandle + ); + + AssertDefaultTestResultProperties(this.FrameworkHandle.Results); + + MockBoostTestRunner runner = this.RunnerFactory.LastTestRunner as MockBoostTestRunner; + + Assert.That(runner, Is.Not.Null); + + Assert.That(runner.Settings.Timeout, Is.EqualTo(600000)); + } + + /// + /// Given a test fully-qualified names which contain characters which are not compatible with the Boost Test + /// command-line, generate a 'test not found' notification to the user. + /// + /// Test aims: + /// - Ensure that tests which cannot be individually referenced from Boost Test command line are identified + /// and marked as skipped. + /// + [Test] + public void TestSkipEdgeCases() + { + this.Executor.RunTests( + new VSTestCase[] { + CreateTestCase("my_test", DefaultSource), + CreateTestCase("boost::bind(my_other_test,3)", DefaultSource) + }, + this.RunContext, + this.FrameworkHandle + ); + + Assert.That(this.FrameworkHandle.Results.Count(), Is.EqualTo(2)); + + foreach (VSTestResult result in this.FrameworkHandle.Results) + { + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Skipped)); + } + } + + /// + /// Given a long running test, test execution should stop after a pre-determined timeout threshold and inform the user accordingly. + /// + /// Test aims: + /// - Ensure that with proper configuration, long running tests generate a timeout test failure. + /// + [Test] + public void TestTimeoutException() + { + this.Executor.RunTests( + new VSTestCase[] { CreateTestCase("test", TimeoutTestCase) }, + this.RunContext, + this.FrameworkHandle + ); + + Assert.That(this.FrameworkHandle.Results.Count(), Is.EqualTo(1)); + + VSTestResult result = this.FrameworkHandle.Results.First(); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Failed)); + Assert.That(result.Duration, Is.EqualTo(TimeSpan.FromMilliseconds(Timeout))); + Assert.That(result.ErrorMessage.ToLowerInvariant().Contains("timeout"), Is.True); + } + + /// + /// Given a request for code coverage on all tests, tests should execute as usual, possibly in an optimized manner. + /// + /// Test aims: + /// - Ensure that it is possible to run code coverage on a tests of a particular source. + /// + [Test] + public void TestCodeCoverage() + { + this.RunContext.IsDataCollectionEnabled = true; + + this.Executor.RunTests( + new string[] { DefaultSource }, + this.RunContext, + this.FrameworkHandle + ); + + IList runners = this.RunnerFactory.ProvisionedRunners.OfType().ToList(); + + // Although multiple runners (one per testcase) will be provisioned, only one type of runner (specific to DefaultSource) is used + Assert.That(runners.GroupBy(runner => runner.Source).Count(), Is.EqualTo(1)); + + // Only one runner is executed and that runner is only executed once + MockBoostTestRunner testRunner = runners.FirstOrDefault(runner => runner.RunCount == 1); + + Assert.That(testRunner, Is.Not.Null); + + // All tests are executed + Assert.That(testRunner.Args.Tests, Is.Empty); + } + + /// + /// Given a request for code coverage on selected tests, tests should execute as usual, possibly in an optimized manner. + /// + /// Test aims: + /// - Ensure that it is possible to run code coverage on a selection of tests. + /// + [Test] + public void TestCodeCoverageSelection() + { + this.RunContext.IsDataCollectionEnabled = true; + + this.Executor.RunTests( + new VSTestCase[] { CreateTestCase("Test1", DefaultSource), CreateTestCase("Test2", DefaultSource) }, + this.RunContext, + this.FrameworkHandle + ); + + IList runners = this.RunnerFactory.ProvisionedRunners.OfType().ToList(); + + Assert.That(runners.GroupBy(runner => runner.Source).Count(), Is.EqualTo(1)); + + MockBoostTestRunner testRunner = runners.FirstOrDefault(runner => runner.RunCount == 1); + + Assert.That(testRunner, Is.Not.Null); + + // All selected tests are executed + Assert.That(testRunner.Args.Tests.Count(), Is.EqualTo(2)); + } + + #endregion Tests + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestResultTest.cs b/BoostTestAdapterNunit/BoostTestResultTest.cs new file mode 100644 index 0000000..2f37688 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestResultTest.cs @@ -0,0 +1,709 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Xml; +using BoostTestAdapter.Boost.Results; +using BoostTestAdapter.Boost.Results.LogEntryTypes; +using BoostTestAdapter.Utility; +using BoostTestAdapterNunit.Utility; +using NUnit.Framework; +using BoostTestResult = BoostTestAdapter.Boost.Results.TestResult; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + internal class BoostTestResultTest + { + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + this.TestResultCollection = new TestResultCollection(); + } + + #endregion Test Setup/Teardown + + #region Test Data + + private TestResultCollection TestResultCollection { get; set; } + + #endregion Test Data + + #region Helper Methods + + /// + /// Asserts BoostTestResult against the expected details + /// + /// The BoostTestResult to test + /// The expected parent BoostTestResult of testResult + /// The expected TestCase display name + /// The expected TestCase execution result + /// The expected number of passed assertions (e.g. BOOST_CHECKS) + /// The expected number of failed assertions (e.g. BOOST_CHECKS, BOOST_REQUIRE, BOOST_FAIL etc.) + /// The expected number of expected test failures + private void AssertReportDetails( + BoostTestResult testResult, + BoostTestResult parentTestResult, + string name, + TestResultType result, + uint assertionsPassed, + uint assertionsFailed, + uint expectedFailures + ) + { + Assert.That(testResult.Unit.Name, Is.EqualTo(name)); + + if (parentTestResult == null) + { + Assert.That(testResult.Unit.Parent, Is.Null); + } + else + { + Assert.That(parentTestResult.Unit, Is.EqualTo(testResult.Unit.Parent)); + } + + Assert.That(testResult.Result, Is.EqualTo(result)); + + Assert.That(testResult.AssertionsPassed, Is.EqualTo(assertionsPassed)); + Assert.That(testResult.AssertionsFailed, Is.EqualTo(assertionsFailed)); + Assert.That(testResult.ExpectedFailures, Is.EqualTo(expectedFailures)); + } + + /// + /// Asserts BoostTestResult against the expected details + /// + /// The BoostTestResult to test + /// The expected parent BoostTestResult of testResult + /// The expected TestCase display name + /// The expected TestCase execution result + /// The expected number of passed assertions (e.g. BOOST_CHECKS) + /// The expected number of failed assertions (e.g. BOOST_CHECKS, BOOST_REQUIRE, BOOST_FAIL etc.) + /// The expected number of expected test failures + /// The expected number of passed child TestCases + /// The expected number of failed child TestCases + /// The expected number of skipped child TestCases + /// The expected number of aborted child TestCases + private void AssertReportDetails( + BoostTestResult testResult, + BoostTestResult parentTestResult, + string name, + TestResultType result, + uint assertionsPassed, + uint assertionsFailed, + uint expectedFailures, + uint testCasesPassed, + uint testCasesFailed, + uint testCasesSkipped, + uint testCasesAborted + ) + { + AssertReportDetails(testResult, parentTestResult, name, result, assertionsPassed, assertionsFailed, + expectedFailures); + + Assert.That(testResult.TestCasesPassed, Is.EqualTo(testCasesPassed)); + Assert.That(testResult.TestCasesFailed, Is.EqualTo(testCasesFailed)); + Assert.That(testResult.TestCasesSkipped, Is.EqualTo(testCasesSkipped)); + Assert.That(testResult.TestCasesAborted, Is.EqualTo(testCasesAborted)); + } + + /// + /// Asserts general log details contained within a BoostTestResult + /// + /// The BoostTestResult to test + /// The expected test case execution duration + private void AssertLogDetails(BoostTestResult testResult, uint duration) + { + AssertLogDetails(testResult, duration, new List()); + } + + /// + /// Asserts general log details contained within a BoostTestResult + /// + /// The BoostTestResult to test + /// The expected test case execution duration + /// The expected list of log entries generated from test case execution + private void AssertLogDetails(BoostTestResult testResult, uint duration, IList entries) + { + Assert.That(testResult.LogEntries.Count, Is.EqualTo(expected: entries.Count)); + + Assert.That(testResult.Duration, Is.EqualTo(duration)); + + foreach (LogEntry entry in entries) + { + LogEntry found = + testResult.LogEntries.Where( + (e) => + { + return (e.ToString() == entry.ToString()) && (e.Detail == entry.Detail); + }) + .FirstOrDefault(); + Assert.That(found, Is.Not.Null); + + AssertSourceInfoDetails(found.Source, entry.Source); + } + + var entriesMemLeaks = entries.Where((e) => e is LogEntryMemoryLeak).GetEnumerator(); + var testResultMemleaks = testResult.LogEntries.Where((e) => e is LogEntryMemoryLeak).GetEnumerator(); + + while (testResultMemleaks.MoveNext() && entriesMemLeaks.MoveNext()) + { + AssertMemoryLeakDetails((LogEntryMemoryLeak) testResultMemleaks.Current, + (LogEntryMemoryLeak) entriesMemLeaks.Current); + } + } + + /// + /// Compares 2 LogEntryMemoryLeak for equivalence. Issues an assertion failure if leak information is not equivalent. + /// + /// The left-hand side LogEntryMemoryLeak instance + /// The right-hand side LogEntryMemoryLeak instance + private void AssertMemoryLeakDetails(LogEntryMemoryLeak lhs, LogEntryMemoryLeak rhs) + { + Assert.AreEqual(lhs.LeakLineNumber, rhs.LeakLineNumber); + Assert.AreEqual(lhs.LeakLeakedDataContents, rhs.LeakLeakedDataContents); + Assert.AreEqual(lhs.LeakMemoryAllocationNumber, rhs.LeakMemoryAllocationNumber); + Assert.AreEqual(lhs.LeakSizeInBytes, rhs.LeakSizeInBytes); + Assert.AreEqual(lhs.LeakSourceFileAndLineNumberReportingActive, + rhs.LeakSourceFileAndLineNumberReportingActive); + Assert.AreEqual(lhs.LeakSourceFileName, rhs.LeakSourceFileName); + Assert.AreEqual(lhs.LeakSourceFilePath, rhs.LeakSourceFilePath); + } + + /// + /// Tests the provided LogEntryException's properties against the expected values + /// + /// The LogEntryException to test + /// The expected source file information for the exception + /// The expected checkpoint message + private void AssertLogEntryExceptionDetails(LogEntryException entry, SourceFileInfo checkpointInfo, + string checkpointMessage) + { + AssertSourceInfoDetails(checkpointInfo, entry.LastCheckpoint); + Assert.That(entry.CheckpointDetail, Is.EqualTo(checkpointMessage)); + } + + /// + /// Tests the provided LogEntry's general properties against the expected values + /// + /// The LogEntryException to test + /// The expected log entry type + /// The expected log message + /// The expected source file information for the log entry + private void AssertLogEntryDetails(LogEntry entry, string entryType, string message, SourceFileInfo info) + { + Assert.That(entry.ToString(), Is.EqualTo(entryType)); + Assert.That(entry.Detail, Is.EqualTo(message)); + + AssertSourceInfoDetails(entry.Source, info); + } + + /// + /// Compares 2 SourceFileInfo for equivalence. Issues an assertion failure if leak information is not equivalent. + /// + /// The left-hand side SourceFileInfo instance + /// The right-hand side SourceFileInfo instance + private void AssertSourceInfoDetails(SourceFileInfo lhs, SourceFileInfo rhs) + { + if (lhs == null) + { + Assert.That(rhs, Is.Null); + } + else + { + Assert.That(lhs.File, Is.EqualTo(rhs.File)); + Assert.That(lhs.LineNumber, Is.EqualTo(rhs.LineNumber)); + } + } + + /// + /// Tests TestResultCollection for the expected contents when populated from 'PassedTest.sample.test.report.xml' + /// + /// The BoostTestResult for the sole test case present in the 'PassedTest.sample.test.report.xml' report + private BoostTestResult AssertPassedReportDetails() + { + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "CnvrtTest", TestResultType.Passed, 3, 0, 0, 1, 0, 0, 0); + + BoostTestResult testSuiteResult = this.TestResultCollection["XmlDomInterfaceTestSuite"]; + Assert.That(testSuiteResult, Is.Not.Null); + + AssertReportDetails(testSuiteResult, masterSuiteResult, "XmlDomInterfaceTestSuite", TestResultType.Passed, 3, + 0, 0, 1, 0, 0, 0); + + BoostTestResult testCaseResult = + this.TestResultCollection["XmlDomInterfaceTestSuite/ParseXmlFileWithoutValidationTest"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, testSuiteResult, "ParseXmlFileWithoutValidationTest", + TestResultType.Passed, 3, 0, 0); + + return testCaseResult; + } + + /// + /// Parses the *Xml* report stream and the *Xml* log stream into the contained TestResultCollection. + /// Additionally, the standard output and standard error can also be parsed. + /// + /// The Xml report stream to parse. + /// The Xml log stream to parse. + /// The text standard output stream to parse. + /// The text standard error stream to parse. + private void Parse(Stream report, Stream log, Stream stdout = null, Stream stderr = null) + { + this.TestResultCollection.Parse(new IBoostTestResultOutput[] + { + ((report == null) ? null : new BoostXmlReport(report)), + ((log == null) ? null : new BoostXmlLog(log)), + ((stdout == null) ? null : new BoostStandardOutput(stdout) {FailTestOnMemoryLeak = true}), + ((stderr == null) ? null : new BoostStandardError(stderr)) + }); + } + + /// + /// Parses the *Xml* report stream and the *Xml* log stream into the contained TestResultCollection. + /// Additionally, the standard output and standard error can also be parsed. + /// + /// the path of the XML file report to parse. + /// the path of the log file that is to be parsed + /// The text standard output stream to parse. + /// The text standard error stream to parse. + private void Parse(string reportFilePath, string logFilePath, Stream stdout = null, Stream stderr = null) + { + this.TestResultCollection.Parse(new IBoostTestResultOutput[] + { + ((string.IsNullOrEmpty(reportFilePath)) ? null : new BoostXmlReport(reportFilePath)), + ((string.IsNullOrEmpty(logFilePath)) ? null : new BoostXmlLog(logFilePath)), + ((stdout == null) ? null : new BoostStandardOutput(stdout) {FailTestOnMemoryLeak = true}), + ((stderr == null) ? null : new BoostStandardError(stderr)) + }); + } + + #endregion Helper Methods + + /// + /// Boost Test XML log containing special characters. + /// + /// Test aims: + /// - The aim of the test is to make sure that we are able to handle Boost xml logs that contain special characters. Boost UTF does + /// not technically generate a valid xml document so we need to add the encoding declaration ourselves (this is done in class BoostTestXMLOutput) + [Test] + public void ParseBoostReportLogContainingGermanCharacters() + { + + string reportFilePath = TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.ReportsLogs.SpecialCharacters", "sample.test.report.xml", Path.GetTempPath()); + string logFilePath = TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.ReportsLogs.SpecialCharacters", "sample.test.log.xml", Path.GetTempPath()); + + Parse(reportFilePath, logFilePath); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "MyTest", TestResultType.Failed, 0, 4, 0, 0, 1, 0, 0); + + BoostTestResult testCaseResult = this.TestResultCollection["SpecialCharactersInStringAndIdentifier"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, masterSuiteResult, "SpecialCharactersInStringAndIdentifier", TestResultType.Failed, 0, 4, 0); + AssertLogDetails(testCaseResult + , 2000 + , new[] + { + new LogEntryError("check germanSpecialCharacterString == \"NotTheSameString\" failed [Hello my name is Rüdiger != NotTheSameString]",new SourceFileInfo("boostunittest.cpp", 8)), + new LogEntryError("check germanSpecialCharacterString == \"\" failed [üöä != ]",new SourceFileInfo("boostunittest.cpp", 12)), + new LogEntryError("check anzahlDerÄnderungen == 1 failed [2 != 1]",new SourceFileInfo("boostunittest.cpp", 17)), + new LogEntryError("check üöä == 1 failed [2 != 1]",new SourceFileInfo("boostunittest.cpp", 18)), + + }); + + Assert.That(testCaseResult.LogEntries.Count, Is.EqualTo(4)); + + } + + + /// + /// Boost Test Xml report + log detailing an exception. + /// + /// Test aims: + /// - Boost Test results for a test case execution resulting in an exception are parsed accordingly. + /// + [Test] + public void ParseExceptionThrownReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.AbortedTest.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.AbortedTest.sample.test.log.xml")) + { + Parse(report, log); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "MyTest", TestResultType.Failed, 0, 1, 0, 0, 1, 0, 1); + + BoostTestResult testCaseResult = this.TestResultCollection["BoostUnitTest123"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, masterSuiteResult, "BoostUnitTest123", TestResultType.Aborted, 0, 1, 0); + AssertLogDetails(testCaseResult, 0, new[] { new LogEntryException("C string: some error", new SourceFileInfo("unknown location", 0)) }); + + Assert.That(testCaseResult.LogEntries.Count, Is.EqualTo(1)); + + LogEntry entry = testCaseResult.LogEntries.First(); + AssertLogEntryDetails(entry, "Exception", "C string: some error", new SourceFileInfo("unknown location", 0)); + AssertLogEntryExceptionDetails((LogEntryException) entry, new SourceFileInfo("boostunittestsample.cpp", 13), "Going to throw an exception"); + } + } + + /// + /// Boost Test Xml report + log detailing a test case failure due to BOOST_REQUIRE. + /// + /// Test aims: + /// - Boost Test results for a test case execution resulting in failure are parsed accordingly. + /// + [Test] + public void ParseRequireFailedReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.FailedRequireTest.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.FailedRequireTest.sample.test.log.xml")) + { + Parse(report, log); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "Test runner test", TestResultType.Failed, 0, 2, 0, 0, 1, 0, 1); + + BoostTestResult testCaseResult = this.TestResultCollection["test1"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, masterSuiteResult, "test1", TestResultType.Aborted, 0, 2, 0); + AssertLogDetails(testCaseResult, 0, new LogEntry[] { + new LogEntryError("check i == 2 failed [0 != 2]", new SourceFileInfo("test_runner_test.cpp", 26)), + new LogEntryFatalError("critical check i == 2 failed [0 != 2]", new SourceFileInfo("test_runner_test.cpp", 28)), + }); + } + } + + /// + /// Boost Test Xml report + log detailing a test case failure due to BOOST_CHECK. + /// + /// Test aims: + /// - Boost Test results for a test case execution resulting in failure are parsed accordingly. + /// + [Test] + public void ParseBoostFailReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.BoostFailTest.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.BoostFailTest.sample.test.log.xml")) + { + Parse(report, log); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "Test runner test", TestResultType.Failed, 0, 1, 0, 0, 1, 0, 1); + + BoostTestResult testCaseResult = this.TestResultCollection["test3"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, masterSuiteResult, "test3", TestResultType.Aborted, 0, 1, 0); + + Assert.That(testCaseResult.LogEntries.Count, Is.EqualTo(1)); + + LogEntry entry = testCaseResult.LogEntries.First(); + AssertLogDetails(testCaseResult, 1000, new LogEntry[] { + new LogEntryFatalError("Failure", new SourceFileInfo("test_runner_test.cpp", 93)), + }); + } + } + + /// + /// Boost Test Xml report + log detailing a passed test case. + /// + /// Test aims: + /// - Boost Test results for a positive test case execution are parsed accordingly. + /// + [Test] + public void ParsePassedReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.PassedTest.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.PassedTest.sample.test.log.xml")) + { + + Parse(report, log); + + BoostTestResult testCaseResult = AssertPassedReportDetails(); + AssertLogDetails(testCaseResult, 18457000); + } + } + + /// + /// Boost Test Xml report (only) detailing a passed test case. + /// + /// Test aims: + /// - Boost Test results for a positive test case execution are parsed accordingly. + /// - Boost Test results can be built from an Xml report without the need of the Xml log. + /// + [Test] + public void ParsePassedReportOnly() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.PassedTest.sample.test.report.xml")) + { + Parse(report, null); + + BoostTestResult testCaseResult = AssertPassedReportDetails(); + AssertLogDetails(testCaseResult, 0); + } + } + + /// + /// Boost Test Xml report + log detailing a passed test case nested within test suites. + /// + /// Test aims: + /// - Boost Test results for a positive test case execution are parsed accordingly. + /// + [Test] + public void ParseNestedTestSuiteReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.NestedTestSuite.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.NestedTestSuite.sample.test.log.xml")) + { + Parse(report, log); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "Test runner test", TestResultType.Passed, 2, 0, 0, 1, 0, 0, 0); + + BoostTestResult testSuiteResult = this.TestResultCollection["SampleSuite"]; + Assert.That(testSuiteResult, Is.Not.Null); + + AssertReportDetails(testSuiteResult, masterSuiteResult, "SampleSuite", TestResultType.Passed, 2, 0, 0, 1, 0, 0, 0); + + BoostTestResult nestedTestSuiteResult = this.TestResultCollection["SampleSuite/SampleNestedSuite"]; + Assert.That(nestedTestSuiteResult, Is.Not.Null); + + AssertReportDetails(nestedTestSuiteResult, testSuiteResult, "SampleNestedSuite", TestResultType.Passed, 2, 0, 0, 1, 0, 0, 0); + + BoostTestResult testCaseResult = this.TestResultCollection["SampleSuite/SampleNestedSuite/test3"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, nestedTestSuiteResult, "test3", TestResultType.Passed, 2, 0, 0); + AssertLogDetails(testCaseResult, 1000, new LogEntry[] { + new LogEntryMessage("Message from test3", new SourceFileInfo("test_runner_test.cpp", 48)), + new LogEntryWarning("condition false == true is not satisfied", new SourceFileInfo("test_runner_test.cpp", 50)), + }); + } + } + + /// + /// Boost Test Xml report + log detailing multiple passed test cases. + /// + /// Test aims: + /// - Boost Test results for positive test case execution are parsed accordingly. + /// + [Test] + public void ParseMultipleTestResultsReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MultipleTests.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MultipleTests.sample.test.log.xml")) + { + Parse(report, log); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "CnvrtTest", TestResultType.Passed, 50, 0, 0, 4, 0, 0, 0); + + BoostTestResult testSuiteResult = this.TestResultCollection["CCRootSerialiserTestSuite"]; + Assert.That(testSuiteResult, Is.Not.Null); + + AssertReportDetails(testSuiteResult, masterSuiteResult, "CCRootSerialiserTestSuite", TestResultType.Passed, 2, 0, 0, 2, 0, 0, 0); + + ICollection results = new HashSet(); + + { + BoostTestResult testCaseResult = this.TestResultCollection["CCRootSerialiserTestSuite/DeserialiseInvalidFile"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, testSuiteResult, "DeserialiseInvalidFile", TestResultType.Passed, 1, 0, 0); + AssertLogDetails(testCaseResult, 5000); + + results.Add(testCaseResult); + + BoostTestResult testCase2Result = this.TestResultCollection["CCRootSerialiserTestSuite/DeserialiseNonExistingFile"]; + Assert.That(testCase2Result, Is.Not.Null); + + AssertReportDetails(testCase2Result, testSuiteResult, "DeserialiseNonExistingFile", TestResultType.Passed, 1, 0, 0); + AssertLogDetails(testCase2Result, 0); + + results.Add(testCase2Result); + } + + BoostTestResult testSuite2Result = this.TestResultCollection["DET108781TestSuite"]; + Assert.That(testSuite2Result, Is.Not.Null); + + AssertReportDetails(testSuite2Result, masterSuiteResult, "DET108781TestSuite", TestResultType.Passed, 48, 0, 0, 2, 0, 0, 0); + + { + BoostTestResult testCaseResult = this.TestResultCollection["DET108781TestSuite/ExtendedMultiplexingTest"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, testSuite2Result, "ExtendedMultiplexingTest", TestResultType.Passed, 26, 0, 0); + AssertLogDetails(testCaseResult, 792000); + + results.Add(testCaseResult); + + BoostTestResult testCase2Result = this.TestResultCollection["DET108781TestSuite/QPGroupingTest"]; + Assert.That(testCase2Result, Is.Not.Null); + + AssertReportDetails(testCase2Result, testSuite2Result, "QPGroupingTest", TestResultType.Passed, 22, 0, 0); + AssertLogDetails(testCase2Result, 941000); + + results.Add(testCase2Result); + } + + // Only *TestCase* results should be enumerated. + Assert.That(results.Intersect(this.TestResultCollection).Count(), Is.EqualTo(results.Count)); + } + } + + /// + /// Boost Test ''Xml'' report detailing that no tests could be found with the given name. + /// + /// Test aims: + /// - Boost Test results in a non-Xml format throw a parse exception. + /// + [Test] + [ExpectedException(typeof(XmlException))] + public void ParseNoMatchingTestsReportLog() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.NoMatchingTests.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.NoMatchingTests.sample.test.log.xml")) + { + Parse(report, log); + } + } + + /// + /// Tests the correct memory leak discovery for an output that does not contain the source file and the line numbers available + /// + [Test] + public void MemoryLeakNoSourceFileAndLineNumbersAvailable() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MemoryLeakTest.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MemoryLeakTest.sample.test.log.xml")) + using (Stream stdout = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MemoryLeakTest.sample.NoSourceFileAndLineNumbersAvailable.test.stdout.log")) + { + Parse(report, log, stdout); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + // NOTE The values here do not match the Xml report file since the attributes: + // 'test_cases_passed', 'test_cases_failed', 'test_cases_skipped' and 'test_cases_aborted' + // are computed in case test results are modified from the Xml output + // (which in the case of memory leaks, passing tests may be changed to failed). + AssertReportDetails(masterSuiteResult, null, "MyTest", TestResultType.Passed, 0, 0, 0, 0, 1, 0, 0); + + BoostTestResult testSuiteResult = this.TestResultCollection["LeakingSuite"]; + Assert.That(testSuiteResult, Is.Not.Null); + + AssertReportDetails(testSuiteResult, masterSuiteResult, "LeakingSuite", TestResultType.Passed, 0, 0, 0, 0, 1, 0, 0); + + BoostTestResult testCaseResult = this.TestResultCollection["LeakingSuite/LeakingTestCase"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, testSuiteResult, "LeakingTestCase", TestResultType.Failed, 0, 0, 0); + AssertLogDetails(testCaseResult, 0, new LogEntry[] { + new LogEntryMessage("Test case LeakingTestCase did not check any assertions", new SourceFileInfo("./boost/test/impl/results_collector.ipp", 220)), + new LogEntryMemoryLeak(null, null, null, 8, 837, " Data: < > 98 D5 D9 00 00 00 00 00 \n"), + new LogEntryMemoryLeak(null, null, null, 32, 836, " Data: <`- Leak... > 60 2D BD 00 4C 65 61 6B 2E 2E 2E 00 CD CD CD CD ") + }); + } + } + + /// + /// Tests the correct leak discovery for an output that does contain the source file and the line numbers available + /// + [Test] + public void MemoryLeakSourceFileAndLineNumbersAvailable() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MemoryLeakTest.sample.test.report.xml")) + using (Stream log = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MemoryLeakTest.sample.test.log.xml")) + using (Stream stdout = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.MemoryLeakTest.sample.SourceFileAndLineNumbersAvailable.test.stdout.log")) + { + Assert.IsNotNull(report); + Assert.IsNotNull(log); + Assert.IsNotNull(stdout); + + Parse(report, log, stdout); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + // NOTE The values here do not match the Xml report file since the attributes: + // 'test_cases_passed', 'test_cases_failed', 'test_cases_skipped' and 'test_cases_aborted' + // are computed in case test results are modified from the Xml output + // (which in the case of memory leaks, passing tests may be changed to failed). + AssertReportDetails(masterSuiteResult, null, "MyTest", TestResultType.Passed, 0, 0, 0, 0, 1, 0, 0); + + BoostTestResult testSuiteResult = this.TestResultCollection["LeakingSuite"]; + Assert.That(testSuiteResult, Is.Not.Null); + + AssertReportDetails(testSuiteResult, masterSuiteResult, "LeakingSuite", TestResultType.Passed, 0, 0, 0, 0, 1, 0, 0); + + BoostTestResult testCaseResult = this.TestResultCollection["LeakingSuite/LeakingTestCase"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, testSuiteResult, "LeakingTestCase", TestResultType.Failed, 0, 0, 0); + AssertLogDetails(testCaseResult, 0, new LogEntry[] { + new LogEntryMessage("Test case LeakingTestCase did not check any assertions", new SourceFileInfo("./boost/test/impl/results_collector.ipp", 220)), + new LogEntryMemoryLeak(@"d:\hwa\dev\svn\boostunittestadapterdev\branches\tempbugfixing\sample\boostunittest\boostunittest2\",@"adapterbugs.cpp", 60, 4, 935, " Data: < > CD CD CD CD \n") + { + LeakSourceFileAndLineNumberReportingActive = true + }, + new LogEntryMemoryLeak(@"d:\hwa\dev\svn\boostunittestadapterdev\branches\tempbugfixing\sample\boostunittest\boostunittest2\",@"adapterbugs.cpp", 57, 4, 934, " Data: < > F5 01 00 00 ") + { + LeakSourceFileAndLineNumberReportingActive = true + } + }); + } + } + + /// + /// Boost Test Xml report + standard out and standard error detailing positive test execution. + /// + /// Test aims: + /// - Boost Test results in can parse and record standard output and standard error text output. + /// + [Test] + public void ParseOutputTestReportLogStdOutStdErr() + { + using (Stream report = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.OutputTest.sample.test.report.xml")) + using (Stream stdout = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.OutputTest.sample.test.stdout.log")) + using (Stream stderr = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.ReportsLogs.OutputTest.sample.test.stderr.log")) + { + Parse(report, null, stdout, stderr); + + BoostTestResult masterSuiteResult = this.TestResultCollection[string.Empty]; + Assert.That(masterSuiteResult, Is.Not.Null); + + AssertReportDetails(masterSuiteResult, null, "MyTest", TestResultType.Passed, 1, 0, 0, 1, 0, 0, 0); + + BoostTestResult testCaseResult = this.TestResultCollection["MyTestCase"]; + Assert.That(testCaseResult, Is.Not.Null); + + AssertReportDetails(testCaseResult, masterSuiteResult, "MyTestCase", TestResultType.Passed, 1, 0, 0); + AssertLogDetails(testCaseResult, 0, new LogEntry[] { + new LogEntryStandardOutputMessage("Hello Standard Output World"), + new LogEntryStandardErrorMessage("Hello Standard Error World") + }); + } + } + } +} diff --git a/BoostTestAdapterNunit/BoostTestRunnerCommandLineArgsTest.cs b/BoostTestAdapterNunit/BoostTestRunnerCommandLineArgsTest.cs new file mode 100644 index 0000000..4d18b94 --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestRunnerCommandLineArgsTest.cs @@ -0,0 +1,56 @@ +using BoostTestAdapter.Boost.Runner; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class BoostTestRunnerCommandLineArgsTest + { + #region Tests + + /// + /// Default configuration of a command-line arguments structure. + /// + /// Test aims: + /// - Ensure that a default command-line arguments structure does not generate a command-line string. + /// + [Test] + public void DefaultCommandLineArgs() + { + BoostTestRunnerCommandLineArgs args = new BoostTestRunnerCommandLineArgs(); + Assert.That(args.ToString(), Is.Empty); + } + + /// + /// Non-default configuration of a command-line arguments structure. + /// + /// Test aims: + /// - Ensure that all non-default command-line arguments are listed accordingly. + /// + [Test] + public void SampleCommandLineArgs() + { + BoostTestRunnerCommandLineArgs args = new BoostTestRunnerCommandLineArgs(); + + args.Tests.Add("test"); + args.Tests.Add("suite/*"); + + args.LogFormat = OutputFormat.XML; + args.LogLevel = LogLevel.TestSuite; + args.LogFile = "log.xml"; + + args.ReportFormat = OutputFormat.XML; + args.ReportLevel = ReportLevel.Detailed; + args.ReportFile = "report.xml"; + + args.DetectMemoryLeaks = 0; + + args.StandardOutFile = "stdout.log"; + args.StandardErrorFile = "stderr.log"; + + Assert.That(args.ToString(), Is.EqualTo("\"--run_test=test,suite/*\" \"--log_format=xml\" \"--log_level=test_suite\" \"--log_sink=log.xml\" \"--report_format=xml\" \"--report_level=detailed\" \"--report_sink=report.xml\" \"--detect_memory_leak=0\" > \"stdout.log\" 2> \"stderr.log\"")); + } + + #endregion Tests + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/BoostTestSettingsTest.cs b/BoostTestAdapterNunit/BoostTestSettingsTest.cs new file mode 100644 index 0000000..94aa2dd --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestSettingsTest.cs @@ -0,0 +1,228 @@ +using System.Collections.Generic; +using System.IO; +using System.Xml; +using BoostTestAdapter.Boost.Runner; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; +using BoostTestAdapterNunit.Fakes; +using BoostTestAdapterNunit.Utility; +using BoostTestAdapterNunit.Utility.Xml; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class BoostTestSettingsTest + { + #region Helper Methods + + /// + /// Deserialises a BoostTestAdapterSettings instance from the provided embedded resource. + /// + /// Fully qualified path to a .runsettings Xml embedded resource + /// The deserialised BoostTestAdapterSettings + private BoostTestAdapterSettings Parse(string path) + { + BoostTestAdapterSettingsProvider provider = new BoostTestAdapterSettingsProvider(); + + DefaultTestContext context = new DefaultTestContext(); + context.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, provider); + context.LoadEmbeddedSettings(path); + + return provider.Settings; + } + + /// + /// Tests the contents of a BoostTestAdapterSettings instance, making sure they comply to the default expected values. + /// + /// The BoostTestAdapterSettings instance to test + private void AssertDefaultSettings(BoostTestAdapterSettings settings) + { + Assert.That(settings.TimeoutMilliseconds, Is.EqualTo(-1)); + Assert.That(settings.FailTestOnMemoryLeak, Is.False); + Assert.That(settings.ConditionalInclusionsFilteringEnabled, Is.True); + Assert.That(settings.LogLevel, Is.EqualTo(LogLevel.TestSuite)); + Assert.That(settings.ExternalTestRunner, Is.Null); + } + + /// + /// Compares the serialized content of the settings structure against an Xml embedded resource string. + /// + /// The settings structure whose serialization is to be compared + /// The path to an embedded resource which contains the serialized Xml content to compare against + private void Compare(BoostTestAdapterSettings settings, string resource) + { + XmlElement element = settings.ToXml(); + + using (Stream stream = TestHelper.LoadEmbeddedResource(resource)) + { + XmlDocument doc = new XmlDocument(); + doc.Load(stream); + + XmlNode root = doc.DocumentElement.SelectSingleNode("/RunSettings/BoostTest"); + + XmlComparer comparer = new XmlComparer(); + comparer.CompareXML(element, root, XmlNodeTypeFilter.DefaultFilter); + } + } + + #endregion Helper Methods + + #region Tests + + /// + /// Default BoostTestAdapterSettings instance. + /// + /// Test aims: + /// - Ensure that the default state of a BoostTestAdapterSettings complies with requirements. + /// + [Test] + public void DefaultSettings() + { + BoostTestAdapterSettings settings = new BoostTestAdapterSettings(); + AssertDefaultSettings(settings); + } + + /// + /// Deserializing a BoostTestAdapterSettings instance from a .runsettings Xml document. + /// + /// Test aims: + /// - Ensure that BoostTestAdapterSettings can be deserialised from .runsettings files. + /// + [Test] + public void ParseSampleSettings() + { + BoostTestAdapterSettings settings = Parse("BoostTestAdapterNunit.Resources.Settings.sample.runsettings"); + + Assert.That(settings.TimeoutMilliseconds, Is.EqualTo(600000)); + Assert.That(settings.FailTestOnMemoryLeak, Is.True); + + Assert.That(settings.ExternalTestRunner, Is.Not.Null); + Assert.That(settings.ExternalTestRunner.ExtensionType, Is.EqualTo(".dll")); + Assert.That(settings.ExternalTestRunner.DiscoveryMethodType, Is.EqualTo(DiscoveryMethodType.DiscoveryCommandLine)); + Assert.That(settings.ExternalTestRunner.DiscoveryCommandLine.ToString(), Is.EqualTo("C:\\ExternalTestRunner.exe --test \"{source}\" --list-debug \"{out}\"")); + Assert.That(settings.ExternalTestRunner.ExecutionCommandLine.ToString(), Is.EqualTo("C:\\ExternalTestRunner.exe --test \"{source}\"")); + } + + /// + /// Deserializing a semantically empty .runsettings Xml document provides a default BoostTestAdapterSettings instance. + /// + /// Test aims: + /// - Ensure that empty .runsettings files do not hinder BoostTestAdapterSettings deserialization. + /// + [Test] + public void ParseEmptySettings() + { + BoostTestAdapterSettings settings = Parse("BoostTestAdapterNunit.Resources.Settings.empty.runsettings"); + AssertDefaultSettings(settings); + } + + /// + /// BoostTestAdapterSettings can be deserialised from a simple .runsettings Xml document. + /// + /// Test aims: + /// - Ensure that BoostTestAdapterSettings instances can be deserialised from a .runsettings file. + /// + [Test] + public void ParseDefaultSettings() + { + BoostTestAdapterSettings settings = Parse("BoostTestAdapterNunit.Resources.Settings.default.runsettings"); + AssertDefaultSettings(settings); + } + + /// + /// BoostTestAdapterSettings can be deserialised from a 'complex' .runsettings Xml document. + /// + /// Test aims: + /// - Ensure that BoostTestAdapterSettings instances can be deserialised from a relatively 'complex' .runsettings file. + /// + [Test] + public void ParseComplexSettings() + { + BoostTestAdapterSettings settings = Parse("BoostTestAdapterNunit.Resources.Settings.sample.2.runsettings"); + Assert.That(settings.TimeoutMilliseconds, Is.EqualTo(100)); + } + + /// + /// BoostTestAdapterSettings can be serialized as an Xml fragment. + /// + /// Test aims: + /// - Ensure that BoostTestAdapterSettings instances can be serialized to an Xml fragment. + /// - Ensure that the generated Xml fragment contains all of the necessary information to deserialize for later use. + /// + [Test] + public void SerializeSettings() + { + BoostTestAdapterSettings settings = new BoostTestAdapterSettings(); + + settings.TimeoutMilliseconds = 600000; + settings.FailTestOnMemoryLeak = true; + + settings.ExternalTestRunner = new ExternalBoostTestRunnerSettings() + { + ExtensionType = ".dll", + DiscoveryMethodType = DiscoveryMethodType.DiscoveryCommandLine, + DiscoveryCommandLine = new CommandLine("C:\\ExternalTestRunner.exe", "--test \"{source}\" --list-debug \"{out}\""), + ExecutionCommandLine = new CommandLine("C:\\ExternalTestRunner.exe", "--test \"{source}\"") + }; + + Compare(settings, "BoostTestAdapterNunit.Resources.Settings.sample.runsettings"); + } + + /// + /// Ensure that external test runner settings utilitsing a file map can be deserialised from a .runsettings Xml document. + /// + /// Test aims: + /// - Ensure that external test runner settings utilitsing a file map can be deserialised from a .runsettings Xml document. + /// + [Test] + public void ParseExternalTestRunnerDiscoveryMapSettings() + { + BoostTestAdapterSettings settings = Parse("BoostTestAdapterNunit.Resources.Settings.externalTestRunner.runsettings"); + + Assert.That(settings.TimeoutMilliseconds, Is.EqualTo(-1)); + Assert.That(settings.FailTestOnMemoryLeak, Is.False); + Assert.That(settings.ConditionalInclusionsFilteringEnabled, Is.True); + Assert.That(settings.LogLevel, Is.EqualTo(LogLevel.TestSuite)); + Assert.That(settings.ExternalTestRunner, Is.Not.Null); + + Assert.That(settings.ExternalTestRunner.ExtensionType, Is.EqualTo(".dll")); + Assert.That(settings.ExternalTestRunner.DiscoveryMethodType, Is.EqualTo(DiscoveryMethodType.DiscoveryFileMap)); + + IDictionary fileMap = new Dictionary + { + {"test_1.dll", "C:\\tests\\test_1.xml"}, + {"test_2.dll", "C:\\tests\\test_2.xml"} + }; + + Assert.That(settings.ExternalTestRunner.DiscoveryFileMap, Is.EqualTo(fileMap)); + Assert.That(settings.ExternalTestRunner.ExecutionCommandLine.ToString(), Is.EqualTo("C:\\ExternalTestRunner.exe --test \"{source}\"")); + } + + /// + /// Ensure that external test runner settings utilitsing a file map can be deserialised from a .runsettings Xml document. + /// + /// Test aims: + /// - Ensure that external test runner settings utilitsing a file map can be deserialised from a .runsettings Xml document. + /// + [Test] + public void SerialiseExternalTestRunnerDiscoveryMapSettings() + { + BoostTestAdapterSettings settings = new BoostTestAdapterSettings(); + + settings.ExternalTestRunner = new ExternalBoostTestRunnerSettings + { + ExtensionType = ".dll", + DiscoveryMethodType = DiscoveryMethodType.DiscoveryFileMap, + ExecutionCommandLine = new CommandLine("C:\\ExternalTestRunner.exe", "--test \"{source}\"") + }; + + settings.ExternalTestRunner.DiscoveryFileMap.Add("test_1.dll", "C:\\tests\\test_1.xml"); + settings.ExternalTestRunner.DiscoveryFileMap.Add("test_2.dll", "C:\\tests\\test_2.xml"); + + Compare(settings, "BoostTestAdapterNunit.Resources.Settings.externalTestRunner.runsettings"); + } + + #endregion Tests + } +} diff --git a/BoostTestAdapterNunit/BoostTestTest.cs b/BoostTestAdapterNunit/BoostTestTest.cs new file mode 100644 index 0000000..47f9b4c --- /dev/null +++ b/BoostTestAdapterNunit/BoostTestTest.cs @@ -0,0 +1,446 @@ +using System; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using BoostTestAdapter.Boost.Test; +using BoostTestAdapter.Utility; +using BoostTestAdapterNunit.Utility; +using BoostTestAdapterNunit.Utility.Xml; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class BoostTestTest + { + #region Test Data + + /// + /// Default test source + /// + private const string Source = @"C:\tests.dll"; + + #endregion Test Data + + #region Helper Classes + + /// + /// Base implementation of ITestVisitor which visits children accordingly. + /// + private class DefaultTestVisitor : ITestVisitor + { + public virtual void Visit(TestCase testCase) + { + } + + public virtual void Visit(TestSuite testSuite) + { + foreach (TestUnit child in testSuite.Children) + { + child.Apply(this); + } + } + } + + /// + /// ITestVisitor implementation which counts the number of test cases. + /// + private class TestCaseCounter : DefaultTestVisitor + { + public uint Count { get; private set; } + + public override void Visit(TestCase testCase) + { + ++this.Count; + } + } + + /// + /// ITestVisitor implementation which counts the number of test suites. + /// + private class TestSuiteCounter : DefaultTestVisitor + { + public uint Count { get; private set; } + + public override void Visit(TestSuite testSuite) + { + ++this.Count; + + base.Visit(testSuite); + } + } + + /// + /// ITestVisitor implementation which looks up test units based on their qualified name. + /// + private class TestUnitLookup : ITestVisitor + { + public TestUnitLookup(string fullyQualifiedName) + { + this.FullyQualifiedName = fullyQualifiedName; + } + + public string FullyQualifiedName { get; private set; } + public TestUnit Unit { get; private set; } + + public void Visit(TestCase testCase) + { + Check(testCase); + } + + public void Visit(TestSuite testSuite) + { + if (!Check(testSuite)) + { + foreach (TestUnit child in testSuite.Children) + { + child.Apply(this); + if (this.Unit != null) + { + break; + } + } + } + } + + private bool Check(TestUnit unit) + { + bool match = (unit.FullyQualifiedName == this.FullyQualifiedName); + + if (match) + { + this.Unit = unit; + } + + return match; + } + } + + #endregion Helper Classes + + #region Helper Methods + + /// + /// States the number of test suites for the provided test unit (including itself) + /// + /// The root test unit from which to start enumerating test suites + /// The number of test suites for the provided test unit + private uint GetTestSuiteCount(TestUnit root) + { + TestSuiteCounter counter = new TestSuiteCounter(); + root.Apply(counter); + return counter.Count; + } + + /// + /// States the number of test cases for the provided test unit (including itself) + /// + /// The root test unit from which to start enumerating test cases + /// The number of test cases for the provided test unit + private uint GetTestCaseCount(TestUnit root) + { + TestCaseCounter counter = new TestCaseCounter(); + root.Apply(counter); + return counter.Count; + } + + /// + /// Looks up a test unit by fully qualified name + /// + /// The root test unit from which to start searching + /// The fully qualified name of the test unit to look for + /// The test unit with the requested fully qualified name or null if it cannot be found + private TestUnit Lookup(TestUnit root, string fullyQualifiedName) + { + TestUnitLookup lookup = new TestUnitLookup(fullyQualifiedName); + root.Apply(lookup); + return lookup.Unit; + } + + /// + /// Deserialises an embedded resource as a TestFramework + /// + /// The fully qualified path to the embedded resource + /// The TestFramework deserialised from the embedded resource + private TestFramework Deserialize(string path) + { + using (Stream stream = TestHelper.LoadEmbeddedResource(path)) + { + XmlSerializer deserializer = new XmlSerializer(typeof(TestFramework)); + return deserializer.Deserialize(stream) as TestFramework; + } + } + + /// + /// Serializes the provided TestFramework as an XmlDocument + /// + /// The TestFramework to serialize + /// The serialized Xml for the provided TestFramework + private static XmlDocument Serialize(TestFramework framework) + { + XmlDocument doc = new XmlDocument(); + + using (XmlWriter writer = doc.CreateNavigator().AppendChild()) + { + XmlSerializer serializer = new XmlSerializer(typeof(TestFramework)); + serializer.Serialize(writer, framework); + } + + return doc; + } + + /// + /// Asserts test unit details + /// + /// The test unit to test + /// The expected type of the test unit + /// The expected Id of the test unit + /// The expected parent of the test unit + private void AssertTestUnit(TestUnit unit, Type type, int id, TestUnit parent) + { + Assert.That(unit, Is.Not.Null); + Assert.That(unit, Is.TypeOf(type)); + Assert.That(unit.Id, Is.EqualTo(id)); + Assert.That(unit.Parent, Is.EqualTo(parent)); + } + + /// + /// Asserts test suite details + /// + /// The test suite to test + /// The expected Id of the test suite + /// The expected parent of the test suite + private void AssertTestSuite(TestUnit unit, int id, TestUnit parent) + { + AssertTestUnit(unit, typeof(TestSuite), id, parent); + } + + /// + /// Asserts test case details + /// + /// The test case to test + /// The expected Id of the test case + /// The expected source file information of the test case + /// The expected parent of the test case + private void AssertTestCase(TestUnit unit, int id, SourceFileInfo info, TestUnit parent) + { + AssertTestUnit(unit, typeof(TestCase), id, parent); + + TestCase test = ((TestCase) unit); + + Assert.That(test.Children, Is.Empty); + + SourceFileInfo unitInfo = test.Source; + + if (info == null) + { + Assert.That(unitInfo, Is.Null); + } + else + { + Assert.That(unitInfo.File, Is.EqualTo(info.File)); + Assert.That(unitInfo.LineNumber, Is.EqualTo(info.LineNumber)); + } + } + + #endregion Helper Methods + + #region Tests + + /// + /// Test cases cannot be parents of other test units. + /// + /// Test aims: + /// - Ensure that TestCases cannot accept other test units as children. + /// + [Test] + [ExpectedException(typeof(InvalidOperationException))] + public void AddChildToTestCase() + { + TestSuite master = new TestSuite("master", null); + TestCase test = new TestCase("test", master); + + test.AddChild(new TestCase()); + } + + /// + /// Tests can be uniquely identified via their qualified name. + /// + /// Test aims: + /// - Tests with similar names can still be distinctly identified based on their fully qualified name. + /// + [Test] + public void TestQualifiedNamingScheme() + { + TestFramework framework = new TestFrameworkBuilder(Source, "Master Test Suite", 1). + TestCase("test", 2). + TestSuite("suite", 3). + TestSuite("suite", 4). + TestCase("test", 5). + EndSuite(). + EndSuite(). + Build(); + + // Master Test Suite fully qualified name is equivalent to the empty string + Assert.That(framework.MasterTestSuite.FullyQualifiedName, Is.Empty); + + // Test Units which fall directly under the Master Test Suite will + // have their (local) name equivalent to their fully qualified name + foreach (TestUnit child in framework.MasterTestSuite.Children) + { + Assert.That(child.FullyQualifiedName, Is.EqualTo(child.Name)); + } + + // Test Fully Qualified Name scheme via lookup + + TestUnit test = Lookup(framework.MasterTestSuite, "test"); + AssertTestCase(test, 2, null, framework.MasterTestSuite); + + TestUnit suite = Lookup(framework.MasterTestSuite, "suite"); + AssertTestSuite(suite, 3, framework.MasterTestSuite); + + TestUnit suiteSuite = Lookup(framework.MasterTestSuite, "suite/suite"); + AssertTestSuite(suiteSuite, 4, suite); + + TestUnit suiteSuiteTest = Lookup(framework.MasterTestSuite, "suite/suite/test"); + AssertTestCase(suiteSuiteTest, 5, null, suiteSuite); + } + + /// + /// TestFramework instances can be deserialised from Xml listings. + /// + /// Test aims: + /// - Given a valid Xml fragment, a TestFramework can be deserialised from the contained information. + /// + [Test] + public void ParseTestList() + { + TestFramework framework = Deserialize("BoostTestAdapterNunit.Resources.TestLists.sample.test.list.xml"); + + Assert.That(framework.Source, Is.EqualTo(Source)); + + Assert.That(framework.MasterTestSuite, Is.Not.Null); + Assert.That(framework.MasterTestSuite.Name, Is.EqualTo("Test runner test")); + Assert.That(framework.MasterTestSuite.Id, Is.EqualTo(1)); + + Assert.That(GetTestSuiteCount(framework.MasterTestSuite), Is.EqualTo(4)); + Assert.That(GetTestCaseCount(framework.MasterTestSuite), Is.EqualTo(7)); + + string sourceFile = "test_runner_test.cpp"; + + AssertTestCase( + Lookup(framework.MasterTestSuite, "test1"), + 65536, + new SourceFileInfo(sourceFile, 26), + framework.MasterTestSuite + ); + + AssertTestCase( + Lookup(framework.MasterTestSuite, "test2"), + 65537, + new SourceFileInfo(sourceFile, 35), + framework.MasterTestSuite + ); + + TestUnit sampleSuite = Lookup(framework.MasterTestSuite, "SampleSuite"); + AssertTestSuite(sampleSuite, 2, framework.MasterTestSuite); + + TestUnit sampleNestedSuite = Lookup(framework.MasterTestSuite, "SampleSuite/SampleNestedSuite"); + AssertTestSuite(sampleNestedSuite, 3, sampleSuite); + + AssertTestCase( + Lookup(framework.MasterTestSuite, "SampleSuite/SampleNestedSuite/test3"), + 65538, + new SourceFileInfo(sourceFile, 48), + sampleNestedSuite + ); + + TestUnit templateSuite = Lookup(framework.MasterTestSuite, "TemplateSuite"); + AssertTestSuite(templateSuite, 4, framework.MasterTestSuite); + + AssertTestCase( + Lookup(framework.MasterTestSuite, "TemplateSuite/my_test"), + 65539, + new SourceFileInfo(sourceFile, 79), + templateSuite + ); + + AssertTestCase( + Lookup(framework.MasterTestSuite, "TemplateSuite/my_test"), + 65540, + new SourceFileInfo(sourceFile, 79), + templateSuite + ); + + AssertTestCase( + Lookup(framework.MasterTestSuite, "TemplateSuite/my_test"), + 65541, + new SourceFileInfo(sourceFile, 79), + templateSuite + ); + + AssertTestCase( + Lookup(framework.MasterTestSuite, "TemplateSuite/my_test"), + 65542, + new SourceFileInfo(sourceFile, 79), + templateSuite + ); + } + + /// + /// TestFramework instances can be deserialised from semantically empty Xml listings. + /// + /// Test aims: + /// - Given a valid Xml fragment describing an empty framework, a TestFramework can be deserialised from the contained information. + /// + [Test] + public void ParseEmptyTestList() + { + TestFramework framework = Deserialize("BoostTestAdapterNunit.Resources.TestLists.empty.test.list.xml"); + + Assert.That(framework.MasterTestSuite, Is.Not.Null); + Assert.That(framework.Source, Is.Empty); + Assert.That(GetTestSuiteCount(framework.MasterTestSuite), Is.EqualTo(1)); + Assert.That(GetTestCaseCount(framework.MasterTestSuite), Is.EqualTo(0)); + } + + /// + /// TestFramework can be serialized as an Xml listing. + /// + /// Test aims: + /// - A TestFramework can be serialized to Xml successfully. + /// + [Test] + public void SerializeTestFramework() + { + string sourceFile = "test_runner_test.cpp"; + + TestFramework framework = new TestFrameworkBuilder(Source, "Test runner test", 1). + TestCase("test1", 65536, new SourceFileInfo(sourceFile, 26)). + TestCase("test2", 65537, new SourceFileInfo(sourceFile, 35)). + TestSuite("SampleSuite", 2). + TestSuite("SampleNestedSuite", 3). + TestCase("test3", 65538, new SourceFileInfo(sourceFile, 48)). + EndSuite(). + EndSuite(). + TestSuite("TemplateSuite", 4). + TestCase("my_test", 65539, new SourceFileInfo(sourceFile, 79)). + TestCase("my_test", 65540, new SourceFileInfo(sourceFile, 79)). + TestCase("my_test", 65541, new SourceFileInfo(sourceFile, 79)). + TestCase("my_test", 65542, new SourceFileInfo(sourceFile, 79)). + EndSuite(). + Build(); + + using (Stream stream = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.TestLists.sample.test.list.xml")) + { + XmlDocument baseXml = new XmlDocument(); + baseXml.Load(stream); + + XmlComparer comparer = new XmlComparer(); + comparer.CompareXML(baseXml, Serialize(framework), XmlNodeTypeFilter.DefaultFilter); + } + } + + #endregion Tests + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/CommandEvaluatorTest.cs b/BoostTestAdapterNunit/CommandEvaluatorTest.cs new file mode 100644 index 0000000..bd4581b --- /dev/null +++ b/BoostTestAdapterNunit/CommandEvaluatorTest.cs @@ -0,0 +1,45 @@ +using BoostTestAdapter.Utility; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + public class CommandEvaluatorTest + { + [SetUp] + public void SetUp() + { + CommandEvaluator = new CommandEvaluator(); + } + + private CommandEvaluator CommandEvaluator { get; set; } + + /// + /// Variable placeholder string substition + /// + /// Test aims: + /// - Ensure that variable placholders are properly substituted using their pre-defined value + /// + /// The un-evaluated string which is to be evaluated + /// A list of string pairs consisting of the variable placeholder label and its respective value + /// The evaluated string + [TestCase("Hello {World}!", "World", "Welt", Result = "Hello Welt!")] + [TestCase("Hello {World}!", "World", null, Result = "Hello null!")] + [TestCase("C:\\ExternalTestRunner.exe --test \"{source}\" --discover", "source", "boost.test.dll", "timeout", "10", Result = "C:\\ExternalTestRunner.exe --test \"boost.test.dll\" --discover")] + [TestCase("{source} \"--run_test={test}\" {boost-args}", "source", "test.boostd.exe", "test", "TestSuite/TestCase", "timeout", "10", "boost-args", "--log_level=all", Result = "test.boostd.exe \"--run_test=TestSuite/TestCase\" --log_level=all")] + [TestCase("{$}", "$", "jQuery", Result = "jQuery")] + [TestCase("{MyVariable} {Is} {Not} {Available}", "MyVariable", "Cikku", Result = "Cikku {Is} {Not} {Available}")] + [TestCase("{A}{B}{A}", "A", "1", "B", "2", Result = "121")] + public string Evaluate(string input, params string[] variables) + { + Assert.That(variables.Length % 2, Is.EqualTo(0)); + + for (int i = 0; i < variables.Length; i += 2) + { + CommandEvaluator.SetVariable(variables[i], variables[i + 1]); + } + + return CommandEvaluator.Evaluate(input).Result; + } + } +} diff --git a/BoostTestAdapterNunit/ConditionalInclusionsFilterTest.cs b/BoostTestAdapterNunit/ConditionalInclusionsFilterTest.cs new file mode 100644 index 0000000..22f4672 --- /dev/null +++ b/BoostTestAdapterNunit/ConditionalInclusionsFilterTest.cs @@ -0,0 +1,273 @@ +using System.Collections.Generic; +using BoostTestAdapter.SourceFilter; +using BoostTestAdapterNunit.Utility; +using NUnit.Framework; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class ConditionalInclusionsFilterTest + { + /// + /// The scope of this test is to make sure of the proper handling of the if conditionals of the conditional inclusions filter. The filter is supplied with a fairly + /// complex nested if structure and the result generated is compared against the expected filtered output. For this test the expression complexity of the conditional + /// is kept to a fairly low level. + /// + [Test] + public void ConditionalInclusionsIfTests() + { + #region setup + + var definesHandler = new Defines(); + + definesHandler.Define("DEBUG", ""); + definesHandler.Define("NDEBUG", ""); + definesHandler.Define("DEBUGGER", ""); + + var expectedPreprocessorDefines = new HashSet() + { + "DEBUG", + "NDEBUG", + "DEBUGGER", + "DLEVEL" + }; + + var filter = new ConditionalInclusionsFilter( new ExpressionEvaluation() ); + + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "ConditionalInclusionsIfTests_UnFilteredSourceCode.cpp"; + const string filteredSourceCodeResourceName = "ConditionalInclusionsIfTests_FilteredSourceCode.cpp"; + + string sourceCodeOriginal = TestHelper.ReadEmbeddedResource(nameSpace + unfilteredSourceCodeResourceName); + string sourceCodeExpected = TestHelper.ReadEmbeddedResource(nameSpace + filteredSourceCodeResourceName); + + var cppSourceFile = new CppSourceFile() + { + FileName = nameSpace + unfilteredSourceCodeResourceName, + SourceCode = sourceCodeOriginal + }; + + #endregion + + #region excercise + + filter.Filter(cppSourceFile, definesHandler); + + #endregion + + #region verify + + Assert.AreEqual(sourceCodeExpected, cppSourceFile.SourceCode); + Assert.AreEqual(expectedPreprocessorDefines, definesHandler.NonSubstitutionTokens); + Assert.AreEqual(0, definesHandler.SubstitutionTokens.Count); + + #endregion + + } + + /// + /// The scope of this test is to test the proper handling of the #define, #undef, #if, #else, #elif and #endif...with particular focus on the #define. + /// This test limits itself on checking that the ConditionalInclusionsFilter handles properly the presence of the tokens, so text substitutions and + /// and parametrized macro are out of scope. + /// + [Test] + public void ConditionalInclusionsIfdefTests() + { + + #region setup + + var definesHandler = new Defines(); + + definesHandler.Define("DEBUG", ""); + definesHandler.Define("NDEBUG", ""); + definesHandler.Define("DEBUGGER", ""); + + var expectedPreprocessorDefines = new HashSet() + { + "NDEBUG", + "DEBUGGER" + }; + + var filter = new ConditionalInclusionsFilter( new ExpressionEvaluation()); + + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "ConditionalInclusionsIfdefTests_UnFilteredSourceCode.cpp"; + const string filteredSourceCodeResourceName = "ConditionalInclusionsIfdefTests_FilteredSourceCode.cpp"; + + string sourceCodeOriginal = TestHelper.ReadEmbeddedResource(nameSpace + unfilteredSourceCodeResourceName); + string sourceCodeExpected = TestHelper.ReadEmbeddedResource(nameSpace + filteredSourceCodeResourceName); + + var cppSourceFile = new CppSourceFile() + { + FileName = nameSpace + unfilteredSourceCodeResourceName, + SourceCode = sourceCodeOriginal + }; + + #endregion + + #region excercise + + filter.Filter(cppSourceFile, definesHandler); + + #endregion + + #region verify + + Assert.AreEqual(sourceCodeExpected, cppSourceFile.SourceCode); + Assert.AreEqual(expectedPreprocessorDefines, definesHandler.NonSubstitutionTokens); + Assert.AreEqual(0, definesHandler.SubstitutionTokens.Count); + + #endregion + + } + + /// + /// The scope of this test is to make sure that if the state machine does not return to the "normal state", we bypass all filtering + /// done on the file and return the source code unfiltered + /// + [Test] + public void ConditionalInclusionsBadSourceFileNesting() + { + #region setup + + var definesHandler = new Defines(); //no defines supplied + + var filter = new ConditionalInclusionsFilter(new ExpressionEvaluation()); + + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "ConditionalInclusionsBadSourceFileNesting.cpp"; + + string sourceCodeOriginal = TestHelper.ReadEmbeddedResource(nameSpace + unfilteredSourceCodeResourceName); + string sourceCodeExpected = sourceCodeOriginal; + + var cppSourceFile = new CppSourceFile() + { + FileName = nameSpace + unfilteredSourceCodeResourceName, + SourceCode = sourceCodeOriginal + }; + + #endregion + + #region excercise + + filter.Filter(cppSourceFile, definesHandler); + + #endregion + + #region verify + + Assert.AreEqual(sourceCodeExpected, cppSourceFile.SourceCode); //no filtering should be done due to missing #endif + + #endregion + + } + + /// + /// The scope of this test is to supply the filter with expressions that is not able to handle, so as to make sure + /// that in case the filter is not able to handle the expression complexity we abort any filtering on the entire sourcecode + /// and return back the source code unfiltered + /// + [Test] + public void ConditionalInclusionsComplexExpressionEvaluationFail() + { + #region setup + + var definesHandler = new Defines(); //no defines supplied + + var filter = new ConditionalInclusionsFilter(new ExpressionEvaluation()); + + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "ConditionalInclusionsComplexEvaluationFail.cpp"; + + string sourceCodeOriginal = TestHelper.ReadEmbeddedResource(nameSpace + unfilteredSourceCodeResourceName); + string sourceCodeExpected = sourceCodeOriginal; + + var cppSourceFile = new CppSourceFile() + { + FileName = nameSpace + unfilteredSourceCodeResourceName, + SourceCode = sourceCodeOriginal + }; + + #endregion + + #region excercise + + filter.Filter(cppSourceFile, definesHandler); + + #endregion + + #region verify + + Assert.AreEqual(sourceCodeExpected, cppSourceFile.SourceCode); //no filtering should be done due to inability to evaluate an expression + + #endregion + } + + /// + /// The scope of this test is to supply the filter with expressions that it can handle and to make sure that it filters in and + /// out the source code in a correct fashion. + /// + [Test] + public void ConditionalInclusionsComplexExpressionEvaluationSuccess() + { + #region setup + + var definesHandler = new Defines(); + + var expectedNonSubstitutionTokens = new HashSet() + { + "VERSION", + "HALF", + "THIRD", + "DEBUG", + "SIN", + "MAX", + "CUBE", + "fPRINT", + "ASSERT", + }; + + var expectedSubtitutionTokens = new Dictionary() + { + {"LEVEL", "19"}, + {"EVER", ";;"}, + {"BIG", "(512)"}, + {"PRINT", "cout << #x"}, + }; + + var filter = new ConditionalInclusionsFilter(new ExpressionEvaluation()); + + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "ConditionalInclusionsComplexEvaluationSuccess_UnfilteredSourceCode.cpp"; + const string filteredSourceCodeResourceName = "ConditionalInclusionsComplexEvaluationSuccess_FilteredSourceCode.cpp"; + + string sourceCodeOriginal = TestHelper.ReadEmbeddedResource(nameSpace + unfilteredSourceCodeResourceName); + + string sourceCodeExpected = TestHelper.ReadEmbeddedResource(nameSpace + filteredSourceCodeResourceName); + + var cppSourceFile = new CppSourceFile() + { + FileName = nameSpace + unfilteredSourceCodeResourceName, + SourceCode = sourceCodeOriginal + }; + + #endregion + + #region excercise + + filter.Filter(cppSourceFile, definesHandler); + + #endregion + + #region verify + + Assert.AreEqual(sourceCodeExpected, cppSourceFile.SourceCode); + Assert.AreEqual(expectedNonSubstitutionTokens, definesHandler.NonSubstitutionTokens); + Assert.AreEqual(expectedSubtitutionTokens, definesHandler.SubstitutionTokens); + + #endregion + } + + } +} diff --git a/BoostTestAdapterNunit/CorrectReferencedAssembliesTest.cs b/BoostTestAdapterNunit/CorrectReferencedAssembliesTest.cs new file mode 100644 index 0000000..099631c --- /dev/null +++ b/BoostTestAdapterNunit/CorrectReferencedAssembliesTest.cs @@ -0,0 +1,31 @@ +using System.Linq; +using System.Reflection; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + internal class CorrectReferencesAssembliesTest + { + /// + /// It is critical that assemblies are compiled with the correct references. The scope of these tests are to ensure that a user + /// is referencing the correct Microsoft.VisualStudio.TestPlatform.ObjectModel and the correct Microsoft.VisualStudio.VCProjectEngine + /// in all the complied assemblies. The idea is taken off the Nunit tests of NUnit nunit3-vs-adapter/src/NUnitTestAdapterTests/ProjectTests.cs on GitHub + /// + /// the dll name + /// the assembly that we are going to check that is properly referenced + /// version number that assembly must have + [TestCase("BoostTestAdapter.dll", "Microsoft.VisualStudio.TestPlatform.ObjectModel", 11, TestName = "CorrectlyReferencedBoostTestAdapter", Description = "Microsoft.VisualStudio.TestPlatform.ObjectModel in BoostTestAdapter must point to the VS2012 version")] + [TestCase("VisualStudio2012Adapter.dll", "Microsoft.VisualStudio.VCProjectEngine", 11, TestName = "CorrectlyReferencedVisualStudio2012Adapter", Description = "Microsoft.VisualStudio.VCProjectEngine in VisualStudio2012Adapter must point to the VS2012 version")] + [TestCase("VisualStudio2013Adapter.dll", "Microsoft.VisualStudio.VCProjectEngine", 12, TestName = "CorrectlyReferencedVisualStudio2013Adapter", Description = "Microsoft.VisualStudio.VCProjectEngine in VisualStudio2013Adapter must point to the VS2013 version")] + [TestCase("VisualStudio2015Adapter.dll", "Microsoft.VisualStudio.VCProjectEngine", 14, TestName = "CorrectlyReferencedVisualStudio2015Adapter", Description = "Microsoft.VisualStudio.VCProjectEngine in VisualStudio2015Adapter must point to the VS2015 version")] + public void CorrectReferences(string dll, string assemblyReferenceName, int versionMajor) + { + var assembly = Assembly.LoadFrom(TestContext.CurrentContext.TestDirectory + "/" + dll); + var referencedAssemblies = assembly.GetReferencedAssemblies().Where(ass => ass.Name == assemblyReferenceName).ToList(); + Assert.IsTrue(referencedAssemblies != null && referencedAssemblies.Count() == 1, "No reference to " + assemblyReferenceName + " found"); + Assert.IsTrue(referencedAssemblies[0].Version.Major == versionMajor, + assemblyReferenceName + " in " + dll + " is referenced to an incorrect version"); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/DefaultBoostTestRunnerFactoryTest.cs b/BoostTestAdapterNunit/DefaultBoostTestRunnerFactoryTest.cs new file mode 100644 index 0000000..f9e1c71 --- /dev/null +++ b/BoostTestAdapterNunit/DefaultBoostTestRunnerFactoryTest.cs @@ -0,0 +1,72 @@ +using System; +using BoostTestAdapter.Boost.Runner; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class DefaultBoostTestRunnerFactoryTest + { + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + this.Factory = new DefaultBoostTestRunnerFactory(); + } + + #endregion Test Setup/Teardown + + #region Test Data + + private DefaultBoostTestRunnerFactory Factory { get; set; } + + #endregion Test Data + + #region Tests + + /// + /// Provisions internal and external IBoostTestRunner instances based on the requested source and settings. + /// + /// Test aims: + /// - Ensure that the proper IBoostTestRunner type is provided for the requested source. + /// + // Exe types + [TestCase("test.exe", null, typeof(BoostTestRunner))] + [TestCase("test.exe", ".dll", typeof(BoostTestRunner))] + [TestCase("test.exe", ".exe", typeof(ExternalBoostTestRunner))] + // Dll types + [TestCase("test.dll", null, null)] + [TestCase("test.dll", ".dll", typeof(ExternalBoostTestRunner))] + [TestCase("test.dll", ".exe", null)] + // Invalid extension types + [TestCase("test.txt", null, null)] + [TestCase("test.txt", ".dll", null)] + [TestCase("test.txt", ".exe", null)] + public void ExternalBoostTestRunnerProvisioning(string source, string externalExtension, Type type) + { + BoostTestRunnerFactoryOptions options = new BoostTestRunnerFactoryOptions(); + options.ExternalTestRunnerSettings = new ExternalBoostTestRunnerSettings + { + ExtensionType = externalExtension, + DiscoveryCommandLine = new CommandLine(), + ExecutionCommandLine = new CommandLine() + }; + + IBoostTestRunner runner = this.Factory.GetRunner(source, options); + + if (runner == null) + { + Assert.That(type, Is.Null); + } + else + { + Assert.That(runner, Is.AssignableTo(type)); + } + } + + #endregion Tests + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/DefaultTestDiscovererFactoryTest.cs b/BoostTestAdapterNunit/DefaultTestDiscovererFactoryTest.cs new file mode 100644 index 0000000..bff9642 --- /dev/null +++ b/BoostTestAdapterNunit/DefaultTestDiscovererFactoryTest.cs @@ -0,0 +1,68 @@ +using System; +using BoostTestAdapter; +using BoostTestAdapter.Settings; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class DefaultTestDiscovererFactoryTest + { + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + this.Factory = new DefaultBoostTestDiscovererFactory(); + } + + #endregion Test Setup/Teardown + + #region Test Data + + private DefaultBoostTestDiscovererFactory Factory { get; set; } + + #endregion Test Data + + #region Tests + + /// + /// Provisions internal and external TestDiscoverer instances ones based on the requested source and settings. + /// + /// Test aims: + /// - Ensure that the proper ITestDiscoverer type is provided for the requested source. + /// + // Exe types + [TestCase("test.exe", null, Result = typeof(BoostTestExeDiscoverer))] + [TestCase("test.exe", ".dll", Result = typeof(BoostTestExeDiscoverer))] + [TestCase("test.exe", ".exe", Result = typeof(ExternalBoostTestDiscoverer))] + // Dll types + [TestCase("test.dll", null, Result = null)] + [TestCase("test.dll", ".dll", Result = typeof(ExternalBoostTestDiscoverer))] + [TestCase("test.dll", ".exe", Result = null)] + // Invalid extension types + [TestCase("test.txt", null, Result = null)] + [TestCase("test.txt", ".dll", Result = null)] + [TestCase("test.txt", ".exe", Result = null)] + public Type TestDiscovererProvisioning(string source, string externalExtension) + { + ExternalBoostTestRunnerSettings settings = null; + + if (!string.IsNullOrEmpty(externalExtension)) + { + settings = new ExternalBoostTestRunnerSettings { ExtensionType = externalExtension }; + } + + BoostTestDiscovererFactoryOptions options = new BoostTestDiscovererFactoryOptions + { + ExternalTestRunnerSettings = settings + }; + + IBoostTestDiscoverer discoverer = this.Factory.GetTestDiscoverer(source, options); + + return (discoverer == null) ? null : discoverer.GetType(); + } + + #endregion Tests + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/ExpressionEvaluationTest.cs b/BoostTestAdapterNunit/ExpressionEvaluationTest.cs new file mode 100644 index 0000000..6dd9b84 --- /dev/null +++ b/BoostTestAdapterNunit/ExpressionEvaluationTest.cs @@ -0,0 +1,64 @@ +using BoostTestAdapter.SourceFilter; +using NUnit.Framework; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class ExpressionEvaluationTest + { + /// + /// Tests the expression evaluator with different expressions of varying complexities + /// + [TestCase("0", Result = EvaluationResult.IsFalse)] + [TestCase("1", Result = EvaluationResult.IsTrue)] + [TestCase("1+1", Result = EvaluationResult.IsTrue)] + [TestCase("1+1-0", Result = EvaluationResult.IsTrue)] + [TestCase("1+(1)", Result = EvaluationResult.IsTrue)] + [TestCase("(1)", Result = EvaluationResult.IsTrue)] + [TestCase("1.0", Result = EvaluationResult.IsTrue)] + [TestCase("VERSION > 0", "VERSION", "5", Result = EvaluationResult.IsTrue)] + [TestCase("VERSION > 0", "VERSION", "0", Result = EvaluationResult.IsFalse)] + [TestCase("0 || 2", Result = EvaluationResult.IsTrue)] + [TestCase("1 && 2", Result = EvaluationResult.IsTrue)] + [TestCase("0 && 1", Result = EvaluationResult.IsFalse)] + [TestCase("VERSION > 0", Result = EvaluationResult.UnDetermined)] + [TestCase("(1", Result = EvaluationResult.UnDetermined)] + [TestCase("1/0", Result = EvaluationResult.IsTrue)] + [TestCase("version > 0", "VERSION", "1", Result = EvaluationResult.UnDetermined)] /* case sensitivity test */ + [TestCase("VALUE1 > VALUE2", "VALUE1", "10", "VALUE2", "9", Result = EvaluationResult.IsTrue)] + [TestCase("-1", Result = EvaluationResult.IsTrue)] + [TestCase("BIG == 512", "BIG", "(512)", Result = EvaluationResult.IsTrue)] + [TestCase("BIG == 512", "BIG", "(SMO + 1)", "SMO", "(511)", Result = EvaluationResult.IsTrue)] + [TestCase("BIG == 512", "BIG", "(SMO + 1)", Result = EvaluationResult.UnDetermined)] + [TestCase("BIGA == 512", Result = EvaluationResult.UnDetermined)] + [TestCase("defined(TEST1) && !defined(TEST2)", Result = EvaluationResult.IsFalse)] + [TestCase("defined(TEST1) && !defined(TEST2)", "TEST1", "", "TEST2", "", Result = EvaluationResult.IsFalse)] + [TestCase("defined(TEST1) && !defined(TEST2)", "TEST1", "", Result = EvaluationResult.IsTrue)] + public EvaluationResult ExpressionEvaluation(string expression, params string[] definitions) + { + ExpressionEvaluation e = new ExpressionEvaluation(); + return e.EvaluateExpression(expression, GenerateDefines(definitions)); + } + + /// + /// Given a parameter list of strings, generates a Defines structure + /// where pairs of strings are treated as a definition and its value. + /// + /// The string pair definitions array from which to generate the Defines structue + /// A Defines structure built out of string pairs available in the definitions array + private Defines GenerateDefines(string[] definitions) + { + Assert.That(definitions.Length % 2, Is.EqualTo(0)); + + Defines definesHandler = new Defines(); + + for (int i = 1; i < definitions.Length; i += 2) + { + definesHandler.Define(definitions[i - 1], definitions[i]); + } + + return definesHandler; + } + } +} diff --git a/BoostTestAdapterNunit/ExternalBoostTestDiscovererTest.cs b/BoostTestAdapterNunit/ExternalBoostTestDiscovererTest.cs new file mode 100644 index 0000000..da3bb79 --- /dev/null +++ b/BoostTestAdapterNunit/ExternalBoostTestDiscovererTest.cs @@ -0,0 +1,121 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BoostTestAdapter; +using BoostTestAdapter.Settings; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using BoostTestAdapterNunit.Fakes; +using BoostTestAdapterNunit.Utility; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using NUnit.Framework; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + public class ExternalBoostTestDiscovererTest + { + #region Helper Methods + + /// + /// Asserts general test properties + /// + /// The enumeration of discovered tests + /// The qualified test name which is to be tested + /// The source from which the test should have been discovered + /// Optional source file information related to the test under question + private void AssertVSTestCaseProperties(IEnumerable tests, QualifiedNameBuilder qualifiedName, string source, SourceFileInfo info) + { + VSTestCase test = tests.FirstOrDefault((_test) => (_test.FullyQualifiedName == qualifiedName.ToString())); + + Assert.That(test, Is.Not.Null); + Assert.That(test.DisplayName, Is.EqualTo(qualifiedName.Peek())); + Assert.That(test.Source, Is.EqualTo(source)); + Assert.That(test.ExecutorUri, Is.EqualTo(BoostTestExecutor.ExecutorUri)); + + if (info != null) + { + Assert.That(test.CodeFilePath, Is.EqualTo(info.File)); + Assert.That(test.LineNumber, Is.EqualTo(info.LineNumber)); + } + + Assert.That(test.Traits.Count(), Is.EqualTo(1)); + + Trait trait = test.Traits.First(); + Assert.That(trait.Name, Is.EqualTo(VSTestModel.TestSuiteTrait)); + + string suite = qualifiedName.Pop().ToString(); + if (string.IsNullOrEmpty(suite)) + { + suite = qualifiedName.MasterTestSuite; + } + + Assert.That(trait.Value, Is.EqualTo(suite)); + } + + #endregion Helper Methods + + #region Tests + + /// + /// External test discovery based on static test listings + /// + /// Test aims: + /// - Ensure that if configured to use static test listing, test discovery lists only the tests which can be mapped to a valid test source. + /// + [Test] + public void DiscoveryFileMapDiscovery() + { + string listing = TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.TestLists", "sample.test.list.xml", Path.GetTempPath()); + + try + { + ExternalBoostTestRunnerSettings settings = new ExternalBoostTestRunnerSettings + { + ExtensionType = ".dll", + DiscoveryMethodType = DiscoveryMethodType.DiscoveryFileMap + }; + + settings.DiscoveryFileMap["test_1.dll"] = listing; + + ExternalBoostTestDiscoverer discoverer = new ExternalBoostTestDiscoverer(settings); + + DefaultTestContext context = new DefaultTestContext(); + ConsoleMessageLogger logger = new ConsoleMessageLogger(); + DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); + + const string mappedSource = "C:\\test_1.dll"; + const string unmappedSource = "C:\\test_2.dll"; + + discoverer.DiscoverTests(new string[] { mappedSource, unmappedSource }, context, logger, sink); + + // A total of 7 tests should be discovered as described in the Xml descriptor + Assert.That(sink.Tests.Count(), Is.EqualTo(7)); + + // All of the discovered tests should originate from C:\test_1.dll. + // No mapping to C:\test_2.dll exist so no tests should be discovered from that source. + Assert.That(sink.Tests.Count((test) => test.Source == mappedSource), Is.EqualTo(7)); + + const string masterTestSuite = "Test runner test"; + + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "test1"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 26)); + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "test2"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 35)); + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "SampleSuite/SampleNestedSuite/test3"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 48)); + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79)); + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79)); + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79)); + AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79)); + } + finally + { + if (File.Exists(listing)) + { + File.Delete(listing); + } + } + } + + #endregion Tests + } +} diff --git a/BoostTestAdapterNunit/Fakes/ConsoleMessageLogger.cs b/BoostTestAdapterNunit/Fakes/ConsoleMessageLogger.cs new file mode 100644 index 0000000..2339c77 --- /dev/null +++ b/BoostTestAdapterNunit/Fakes/ConsoleMessageLogger.cs @@ -0,0 +1,20 @@ +using System; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; + +namespace BoostTestAdapterNunit.Fakes +{ + /// + /// IMessageLogger implementation. Writes all logged messages to standard output. + /// + public class ConsoleMessageLogger : IMessageLogger + { + #region IMessageLogger + + public void SendMessage(TestMessageLevel testMessageLevel, string message) + { + Console.WriteLine("{0}: {1}", testMessageLevel, message); + } + + #endregion IMessageLogger + } +} diff --git a/BoostTestAdapterNunit/Fakes/DefaultTestContext.cs b/BoostTestAdapterNunit/Fakes/DefaultTestContext.cs new file mode 100644 index 0000000..a45d6da --- /dev/null +++ b/BoostTestAdapterNunit/Fakes/DefaultTestContext.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Xml.XPath; +using BoostTestAdapterNunit.Utility; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; + +namespace BoostTestAdapterNunit.Fakes +{ + /// + /// Default implementation of IRunContext/IDiscoveryContext/IRunSettings for testing purposes. + /// + public class DefaultTestContext : IRunContext, IRunSettings + { + /// + /// Default constructor + /// + public DefaultTestContext() : + this(false, string.Empty) + { + } + + /// + /// Constructor + /// + /// Flag which identifies whether or not this RunContext is a debug run context or not. + public DefaultTestContext(bool debug) : + this(debug, string.Empty) + { + } + + /// + /// Constructor + /// + /// Flag which identifies whether or not this RunContext is a debug run context or not. + /// An Xml string which identifies the runsettings in use. + public DefaultTestContext(bool debug, string settings) + { + this.IsBeingDebugged = debug; + this.SettingsXml = settings; + + this.IsDataCollectionEnabled = false; + + this.SettingProviders = new Dictionary(); + } + + /// + /// Map of SettingProvider name to a respective SettingProvider instance. + /// + private IDictionary SettingProviders { get; set; } + + #region IRunContext + + public ITestCaseFilterExpression GetTestCaseFilter(IEnumerable supportedProperties, Func propertyProvider) + { + throw new NotImplementedException(); + } + + public bool InIsolation { get; set; } + + public bool IsBeingDebugged { get; set; } + + public bool IsDataCollectionEnabled { get; set; } + + public bool KeepAlive { get; set; } + + public string SolutionDirectory { get; set; } + + public string TestRunDirectory { get; set; } + + #region IDiscoveryContext + + public IRunSettings RunSettings + { + get { return this; } + } + + #endregion IDiscoveryContext + #endregion IRunContext + + #region IRunSettings + + public ISettingsProvider GetSettings(string settingsName) + { + SettingProviderContext context = null; + if (this.SettingProviders.TryGetValue(settingsName, out context)) + { + // If no Xml fragment is found for a particular provider, return null + return (context.IsSet) ? context.Provider : null; + } + + return null; + } + + public string SettingsXml + { + get; + set; + } + + #endregion IRunSettings + + /// + /// An attempt to emulate the C# MEF export. + /// + /// The settings name + /// The settings provider to register under the provided name + public void RegisterSettingProvider(string name, ISettingsProvider provider) + { + this.SettingProviders[name] = new SettingProviderContext(provider); + } + + /// + /// Loads the embedded resource path and populates the registered providers accordingly. + /// + /// The path to the embedded resource + public void LoadEmbeddedSettings(string path) + { + this.SettingsXml = TestHelper.ReadEmbeddedResource(path); + + // Populate SettingProviders + using (StringReader reader = new StringReader(this.SettingsXml)) + { + XPathDocument doc = new XPathDocument(reader); + XPathNavigator nav = doc.CreateNavigator(); + + foreach (XPathNavigator child in nav.Select("/RunSettings/*")) + { + if (this.SettingProviders.ContainsKey(child.LocalName)) + { + this.SettingProviders[child.LocalName].Load(child.ReadSubtree()); + } + } + } + } + + /// + /// An internal class used to aggregate a SettingsProvider + /// and a flag which states the result of the loading attempt. + /// + private class SettingProviderContext + { + public SettingProviderContext(ISettingsProvider provider) + { + this.Provider = provider; + this.IsSet = false; + } + + public ISettingsProvider Provider { get; set; } + public bool IsSet { get; set; } + + public void Load(XmlReader reader) + { + this.Provider.Load(reader); + this.IsSet = true; + } + } + } +} diff --git a/BoostTestAdapterNunit/LoggerTest.cs b/BoostTestAdapterNunit/LoggerTest.cs new file mode 100644 index 0000000..5c19f21 --- /dev/null +++ b/BoostTestAdapterNunit/LoggerTest.cs @@ -0,0 +1,166 @@ +using System.IO; +using System.Text.RegularExpressions; +using BoostTestAdapter.Utility; +using BoostTestAdapterNunit.Utility; +using FakeItEasy; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + /// + /// Tests which cover the Logger class + /// + [TestFixture] + class LoggerTest + { + + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + } + + [TearDown] + public void TearDown() + { + } + + #endregion + + /// + /// The scope of this test is to make sure that in case a message is sent to an initalized loggerInstance, the loggerInstance SendMessage methods are called + /// with the right type of message severity and message text + /// + [Test] + public void InitializedLogger_loggerInstanceSendMessageCalled() + { + var messageLogger = A.Fake(); + Logger.Initialize(messageLogger); + Logger.SendMessage(TestMessageLevel.Informational, "This is an informational type test message"); + A.CallTo(() => messageLogger.SendMessage(TestMessageLevel.Informational, "This is an informational type test message")).MustHaveHappened(); + Logger.SendMessage(TestMessageLevel.Warning, "This is an warning type test message"); + A.CallTo(() => messageLogger.SendMessage(TestMessageLevel.Warning, "This is an warning type test message")).MustHaveHappened(); + Logger.SendMessage(TestMessageLevel.Error, "This is an error type test message"); + A.CallTo(() => messageLogger.SendMessage(TestMessageLevel.Error, "This is an error type test message")).MustHaveHappened(); + } + + /// + /// The scope of this test is to make sure that in case a logger is left uninitialized, the loggerInstance related functions are never called + /// + [Test] + public void UninitializedLoggerNeverCalled() + { + var messageLogger = A.Fake(); + //Logger is never initialized + Logger.SendMessage(TestMessageLevel.Informational, "test"); + A.CallTo(() => messageLogger.SendMessage(A.Ignored, A.Ignored)).MustNotHaveHappened(); + } + + /// + /// The scope of this test is to test that the logging to file is working + /// + [Test] + public void Log4NetCorrectLoggingToFileVerification() + { + string resourceFileName = "BoostTestAdapter.dll.config"; + string logFileName = "BoostTestAdapter.dll.log"; + + string resourceFilePath = Path.Combine(Directory.GetCurrentDirectory(), resourceFileName); + string logFilePath = Path.Combine(Directory.GetCurrentDirectory(), logFileName); + + #region cleanup from possible previous test executions + //deletion of the log4net config file + DeleteFileIfExists(resourceFilePath); + //deletion of the log4net log file + DeleteFileIfExists(logFilePath); + #endregion + + /*the config file is copied over to the working directory of the assembly. To please note that in case of unit tests this path is different + * from the executing assembly directory (due to the shadow copying) so that cannot be used. Additionally the executing assembly directory + * of the NUnit project will be different from the executing assembly directory of code/project under test + */ + + #region test setup + CopyLog4NetConfigFileFromAssemblyToWorkingDirectory(resourceFileName); + string path = Directory.GetCurrentDirectory(); + Assert.That(File.Exists(resourceFilePath), Is.True); + #endregion + + #region test + var messageLogger = A.Fake(); + Logger.Initialize(messageLogger); + Logger.SendMessage(TestMessageLevel.Informational, "This is an informational type test message"); + Logger.SendMessage(TestMessageLevel.Warning, "This is a warning type test message"); + Logger.SendMessage(TestMessageLevel.Error, "This is an error type test message"); + Logger.Shutdown(); + #endregion + + #region results verification + + Assert.That(File.Exists(logFilePath), Is.True); + string logFileContents = File.ReadAllText(logFilePath); + //check that the logger initialization message exists in file and is of type informational + if ( + !Regex.IsMatch(logFileContents, @"INFO(.+)Logger initialized", + RegexOptions.IgnoreCase)) + { + Assert.Fail("Failed to find logger initialization message in log file"); + } + //check that the informational test message exists and has the expected contents + if ( + !Regex.IsMatch(logFileContents, @"INFO(.+)This is an informational type test message", + RegexOptions.IgnoreCase)) + { + Assert.Fail("Failed to find informational type test message in log file"); + } + //check that the warning test message exists and has the expected contents + if ( + !Regex.IsMatch(logFileContents, @"WARN(.+)This is a warning type test message", + RegexOptions.IgnoreCase)) + { + Assert.Fail("Failed to find warning type test message in log file"); + } + //check that the error test message exists and has the expected contents + if ( + !Regex.IsMatch(logFileContents, @"ERROR(.+)This is an error type test message", + RegexOptions.IgnoreCase)) + { + Assert.Fail("Failed to find error type test message in log file"); + } + + #endregion + } + + /// + /// Helper method so as to copy the log4net config file from the assembly (because it is included as an embedded resource) to + /// the working directory (and not the executing directory!) of the assembly + /// + /// the filename of the embedded resource that needs to copied over + static private void CopyLog4NetConfigFileFromAssemblyToWorkingDirectory(string resourceName) + { + using (Stream stream = TestHelper.LoadEmbeddedResource("BoostTestAdapterNunit.Resources.Log4NetConfigFile." + resourceName)) + using (FileStream fileStream = new FileStream(Path.Combine(Directory.GetCurrentDirectory(), resourceName), FileMode.Create, FileAccess.Write)) + { + if (stream == null) + { + Assert.Fail("Failed to load the requested embedded resource. Please check that the resource exists and the fully qualified name is correct"); + } + stream.CopyTo(fileStream); + } + } + + /// + /// Helper method that deletes file if exists + /// + /// complete file path of the file to be deleted + static private void DeleteFileIfExists(string filePath) + { + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + } + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/MultiLineCommentFilterTest.cs b/BoostTestAdapterNunit/MultiLineCommentFilterTest.cs new file mode 100644 index 0000000..5cfdb13 --- /dev/null +++ b/BoostTestAdapterNunit/MultiLineCommentFilterTest.cs @@ -0,0 +1,29 @@ +using BoostTestAdapter.SourceFilter; +using BoostTestAdapterNunit.Utility; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class MultiLineCommentFilterTest : SourceFilterTestBase + { + /// + /// Tests the correct operation (greediness wise) of the multiline comment filter + /// + [Test] + public void MultiLineComment() + { + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "MultiLineCommentTest_UnFilteredSourceCode.cpp"; + const string filteredSourceCodeResourceName = "MultiLineCommentTest_FilteredSourceCode.cpp"; + + FilterAndCompareResources( + new MultilineCommentFilter(), + null, + nameSpace + unfilteredSourceCodeResourceName, + nameSpace + filteredSourceCodeResourceName + ); + } + + } +} diff --git a/BoostTestAdapterNunit/ProjectOutPutCheckerVs12Nunit.cs b/BoostTestAdapterNunit/ProjectOutPutCheckerVs12Nunit.cs new file mode 100644 index 0000000..752d8ac --- /dev/null +++ b/BoostTestAdapterNunit/ProjectOutPutCheckerVs12Nunit.cs @@ -0,0 +1,93 @@ +using CheckForProjectOutPut_VS12; +using CheckForprojectOutPut_VS13; +using FakeItEasy; +using NUnit.Framework; +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; + +namespace BoostTestAdaptorNunit +{ + [TestFixture] + class ProjectOutPutCheckerVs12Nunit + { + Project _fackProjObj; + ConfigurationManager _fakeConfigurationManager; + Configuration _fakeActiveConfiguration; + VCProject _fackVcProject; + IVCCollection _fakeCollection; + VCConfiguration _fakeVcConfiguration; + + /** + * Bellow test cases uses faked object for testing IsProjectOutputSame method + * Faked objects are created using FakeItEasy and configured in testcases + * If any method or property is not configured on fake object created it will try to call the actual implementation + * call to actual implementation from fake object causes exception + */ + [TestFixtureSetUp] + public void FakeTheProjectInterface() + { + _fackProjObj = A.Fake(); + _fakeConfigurationManager = A.Fake(); + _fakeActiveConfiguration = A.Fake(); + _fackVcProject = A.Fake(); + _fakeCollection = A.Fake(); + _fakeVcConfiguration = A.Fake(); + } + + [Test] + public void CheckOutputForVsProj2012_OutputPathMatchTrue() + { + A.CallTo(() => _fackProjObj.ConfigurationManager).Returns(_fakeConfigurationManager); + A.CallTo(() => _fakeConfigurationManager.ActiveConfiguration).Returns(_fakeActiveConfiguration); + A.CallTo(() => _fakeActiveConfiguration.ConfigurationName).Returns("Debug"); + A.CallTo(() => _fakeActiveConfiguration.PlatformName).Returns("Win32"); + A.CallTo(() => _fackProjObj.Object).Returns(_fackVcProject); + A.CallTo(() => _fackVcProject.Configurations).Returns(_fakeCollection); + A.CallTo(() => _fakeCollection.Item("Debug|Win32")).Returns(_fakeVcConfiguration); + A.CallTo(() => _fakeVcConfiguration.PrimaryOutput).Returns("exePath"); + + Assert.AreEqual(true, ProjectOutputCheckerVs12.IsProjectOutputSame(_fackProjObj, "exePath")); + } + + [Test] + public void CheckOutputForVsProj2012_OutputPathMatchFalse() + { + A.CallTo(() => _fackProjObj.ConfigurationManager).Returns(_fakeConfigurationManager); + A.CallTo(() => _fakeConfigurationManager.ActiveConfiguration).Returns(_fakeActiveConfiguration); + A.CallTo(() => _fakeActiveConfiguration.ConfigurationName).Returns("Release"); + A.CallTo(() => _fakeActiveConfiguration.PlatformName).Returns("Win32"); + A.CallTo(() => _fackProjObj.Object).Returns(_fackVcProject); + A.CallTo(() => _fackVcProject.Configurations).Returns(_fakeCollection); + A.CallTo(() => _fakeCollection.Item("Release|Win32")).Returns(_fakeVcConfiguration); + A.CallTo(() => _fakeVcConfiguration.PrimaryOutput).Returns("exePathDiff"); + + Assert.AreEqual(false, ProjectOutputCheckerVs12.IsProjectOutputSame(_fackProjObj, "exePath")); + } + + [Test] + public void CheckOutputForVsProj2013_OutputPathMatchFalse() + { + + A.CallTo(() => _fackProjObj.ConfigurationManager).Returns(_fakeConfigurationManager); + A.CallTo(() => _fakeConfigurationManager.ActiveConfiguration).Returns(_fakeActiveConfiguration); + A.CallTo(() => _fakeActiveConfiguration.ConfigurationName).Returns("Release"); + A.CallTo(() => _fakeActiveConfiguration.PlatformName).Returns("Win32"); + A.CallTo(() => _fackProjObj.Object).Returns(_fackVcProject); + A.CallTo(() => _fackVcProject.Configurations).Returns(_fakeCollection); + A.CallTo(() => _fakeCollection.Item("Release|Win32")).Returns(_fakeVcConfiguration); + A.CallTo(() => _fakeVcConfiguration.PrimaryOutput).Returns("exePathDiff"); + + Assert.AreEqual(false, ProjectOutputCheckerVs13.IsProjectOutputSame(_fackProjObj, "exePath")); + } + + [TestFixtureTearDown] + public void ClearTheFakeObject() + { + _fackProjObj = null; + _fakeActiveConfiguration = null; + _fakeConfigurationManager = null; + _fakeCollection = null; + _fakeVcConfiguration = null; + } + } +} diff --git a/BoostTestAdapterNunit/Properties/AssemblyInfo.cs b/BoostTestAdapterNunit/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2961920 --- /dev/null +++ b/BoostTestAdapterNunit/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("BoostTestAdaptorNunit")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("BoostTestAdaptorNunit")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(false)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2cf57374-a6f8-4410-a9a2-41dfc0ccd7d6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/BoostTestAdapterNunit/QuotedStringsFilterTest.cs b/BoostTestAdapterNunit/QuotedStringsFilterTest.cs new file mode 100644 index 0000000..3aca613 --- /dev/null +++ b/BoostTestAdapterNunit/QuotedStringsFilterTest.cs @@ -0,0 +1,28 @@ +using BoostTestAdapter.SourceFilter; +using BoostTestAdapterNunit.Utility; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class QuotedStringsFilterTest : SourceFilterTestBase + { + /// + /// Tests the correct operation of the quoted strings filter on C++ source files + /// + [Test] + public void QuotedStringsFilter() + { + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "QuotedStringsFilterTest_UnFilteredSourceCode.cpp"; + const string filteredSourceCodeResourceName = "QuotedStringsFilterTest_FilteredSourceCode.cpp"; + + FilterAndCompareResources( + new QuotedStringsFilter(), + null, + nameSpace + unfilteredSourceCodeResourceName, + nameSpace + filteredSourceCodeResourceName + ); + } + } +} diff --git a/BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestCase.cpp b/BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestCase.cpp new file mode 100644 index 0000000..9bc6b4d --- /dev/null +++ b/BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestCase.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" + +struct F +{ + F() : i(0) + { + BOOST_TEST_MESSAGE("setup fixture"); + } + ~F() + { + BOOST_TEST_MESSAGE("teardown fixture"); + } + + int i; +}; + +BOOST_AUTO_TEST_SUITE(Suit1) + +BOOST_AUTO_TEST_CASE(BoostUnitTest1) +{ + BOOST_CHECK(1 == 1); +} + +BOOST_FIXTURE_TEST_CASE(Fixturetest_case1, F) +{ + BOOST_CHECK(i == 1); + ++i; +} + +BOOST_FIXTURE_TEST_CASE(Fixturetest_case2, F) +{ + BOOST_CHECK_EQUAL(i, 1); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_FIXTURE_TEST_CASE(Fixturetest_case3, F) +{ + BOOST_CHECK_EQUAL(i, 1); +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestSuite.cpp b/BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestSuite.cpp new file mode 100644 index 0000000..ceefa9e --- /dev/null +++ b/BoostTestAdapterNunit/Resources/CppSources/BoostFixtureTestSuite.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" +#include +#include + +class TestClassA +{ +public: + TestClassA() + { + m_testVar = 999; + } + ~TestClassA() + {} + + int m_testVar; +}; + +class TestClassB +{ +public: + TestClassB() + { + } + ~TestClassB() + {} +}; + +BOOST_FIXTURE_TEST_SUITE(FixtureSuite1, TestClassA); + +BOOST_AUTO_TEST_CASE(BoostTest1) +{ + BOOST_CHECK(m_testVar == 999); +} + +BOOST_AUTO_TEST_CASE(BoostTest2) +{ + m_testVar = 0; + BOOST_CHECK(m_testVar == 999); +} + +BOOST_AUTO_TEST_SUITE_END(); + +BOOST_AUTO_TEST_CASE(BoostTest3) +{ + BOOST_TEST_MESSAGE("Outside the Fixture test Suite"); +} + +BOOST_FIXTURE_TEST_SUITE(FixtureSuite2, TestClassA); + +BOOST_FIXTURE_TEST_CASE(Fixturetest_case1, TestClassB) +{ + BOOST_CHECK_EQUAL(1, 1); +} + +typedef boost::mpl::list type_list; + +BOOST_AUTO_TEST_CASE_TEMPLATE(TemplatedTest, T, type_list) +{ + BOOST_CHECK_EQUAL(sizeof(T), (unsigned)4); +} +BOOST_AUTO_TEST_SUITE_END(); \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSample.cpp b/BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSample.cpp new file mode 100644 index 0000000..a61477e --- /dev/null +++ b/BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSample.cpp @@ -0,0 +1,42 @@ +// +// Distributed under the Boost Software License, Version 1.0. +// (See copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#include "stdafx.h" +#include +#include + +int add(int i, int j) +{ + return i + j; +} + +BOOST_AUTO_TEST_SUITE(Suite1) +BOOST_AUTO_TEST_CASE(BoostUnitTest123) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} +BOOST_AUTO_TEST_CASE(BoostUnitTest1234) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_CASE(BoostUnitTest12345) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} + +typedef boost::mpl::list test_types; + +BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types) +{ + BOOST_CHECK_EQUAL(sizeof(T), (unsigned)4) +} +/* +BOOST_AUTO_TEST_CASE( BoostUnitTest123 ) +{ + BOOST_WARN( sizeof(int) == sizeof(short) ); +} +*/ \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSampleRequiringUseOfFilters.cpp b/BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSampleRequiringUseOfFilters.cpp new file mode 100644 index 0000000..48628a2 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/CppSources/BoostUnitTestSampleRequiringUseOfFilters.cpp @@ -0,0 +1,66 @@ +// +// Distributed under the Boost Software License, Version 1.0. +// (See copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#include "stdafx.h" +#include +#include + +int add(int i, int j) +{ + return i + j; +} + +BOOST_AUTO_TEST_SUITE(Suite1) + BOOST_AUTO_TEST_CASE(BoostUnitTest123) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} +BOOST_AUTO_TEST_CASE(BoostUnitTest1234) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} +BOOST_AUTO_TEST_SUITE_END() + + BOOST_AUTO_TEST_CASE(BoostUnitTest12345) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} + +std::cout << "BOOST_AUTO_TEST_CASE(BoostUnitTestShouldNotAppear1) " << std::endl; + +//BOOST_AUTO_TEST_CASE(BoostUnitTestShouldNotAppear2) +//{ +// BOOST_WARN(sizeof(int) == sizeof(short)); +//} + +typedef boost::mpl::list test_types; + +BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types) +{ + BOOST_CHECK_EQUAL(sizeof(T), (unsigned)4) +} + +#if defined(WINNT) + +BOOST_AUTO_TEST_CASE(BoostUnitTestShouldNotAppear3) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} + +#else + +BOOST_AUTO_TEST_CASE(BoostUnitTestConditional) +{ + BOOST_WARN(sizeof(int) == sizeof(short)); +} + +#endif + +/* +BOOST_AUTO_TEST_CASE( BoostUnitTestShouldNotAppear4 ) +{ +BOOST_WARN( sizeof(int) == sizeof(short) ); +} +*/ \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/Log4NetConfigFile/BoostTestAdapter.dll.config b/BoostTestAdapterNunit/Resources/Log4NetConfigFile/BoostTestAdapter.dll.config new file mode 100644 index 0000000..400ca7b --- /dev/null +++ b/BoostTestAdapterNunit/Resources/Log4NetConfigFile/BoostTestAdapter.dll.config @@ -0,0 +1,27 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.log.xml new file mode 100644 index 0000000..b275209 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.log.xml @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.report.xml new file mode 100644 index 0000000..c3190b0 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/AbortedTest/sample.test.report.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.log.xml new file mode 100644 index 0000000..9291efa --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.log.xml @@ -0,0 +1 @@ +1000 \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.report.xml new file mode 100644 index 0000000..59ebaa1 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/BoostFailTest/sample.test.report.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.log.xml new file mode 100644 index 0000000..0525e7d --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.log.xml @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.report.xml new file mode 100644 index 0000000..e74d3d9 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/FailedRequireTest/sample.test.report.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.log.xml new file mode 100644 index 0000000..b718dd8 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.log.xml @@ -0,0 +1,12 @@ + + + + + + + + 0 + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.report.xml new file mode 100644 index 0000000..3a45c7d --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/MemoryLeakTest/sample.test.report.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.log.xml new file mode 100644 index 0000000..1e9f406 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.log.xml @@ -0,0 +1,20 @@ + + + + + 5000 + + + 0 + + + + + 792000 + + + 941000 + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.report.xml new file mode 100644 index 0000000..ce9b8c9 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/MultipleTests/sample.test.report.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.log.xml new file mode 100644 index 0000000..5e460c7 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.log.xml @@ -0,0 +1 @@ +1000 \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.report.xml new file mode 100644 index 0000000..f85b880 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/NestedTestSuite/sample.test.report.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.log.xml new file mode 100644 index 0000000..e69de29 diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.report.xml new file mode 100644 index 0000000..7a23c44 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/NoMatchingTests/sample.test.report.xml @@ -0,0 +1 @@ +Test setup error: no test cases matching filter diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/OutputTest/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/OutputTest/sample.test.report.xml new file mode 100644 index 0000000..0a60f92 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/OutputTest/sample.test.report.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.log.xml new file mode 100644 index 0000000..fe55c41 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.log.xml @@ -0,0 +1 @@ +18457000 diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.report.xml new file mode 100644 index 0000000..3585b6e --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/PassedTest/sample.test.report.xml @@ -0,0 +1 @@ + diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.log.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.log.xml new file mode 100644 index 0000000..3ee4f2f --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.log.xml @@ -0,0 +1 @@ +2000 \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.report.xml b/BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.report.xml new file mode 100644 index 0000000..8285af1 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/ReportsLogs/SpecialCharacters/sample.test.report.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/Settings/conditionalIncludesDisabled.runsettings b/BoostTestAdapterNunit/Resources/Settings/conditionalIncludesDisabled.runsettings new file mode 100644 index 0000000..0968355 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/Settings/conditionalIncludesDisabled.runsettings @@ -0,0 +1,11 @@ + + + + + + + + false + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/Settings/default.runsettings b/BoostTestAdapterNunit/Resources/Settings/default.runsettings new file mode 100644 index 0000000000000000000000000000000000000000..acbb0429929a380ca7d6863e0f8240679021005b GIT binary patch literal 1102 zcmd^;OHTqp5QOV&;(s9CeI;s)Ss@B~@?ZpwhfNHufW&1m%i`nDt6$H6tSq8;GlzL} zb@g<0_s4srnqDR=hb>3DB|OYk51Jd7jue4T}yW1WH=Vawri_~&ZjWA_tsZ|jMZMF{-H zp6J0NV%<#jy3-k&2Asnu{o)A9xG6&u+YrW-`>MzdU9jQ;OHqwT+bCXqS*DLwX0B(G z98>hL>X_ckJpO~Crrlq(_^w`yx@GjN_4g$@THp52F{7GQ-Rh8eFy_^`pE=KAvd-x0 k#j`%rS;fh$s*Kpveko=dwa7F3L+Bx!+TUh!jx5jjCt+R5`2YX_ literal 0 HcmV?d00001 diff --git a/BoostTestAdapterNunit/Resources/Settings/empty.runsettings b/BoostTestAdapterNunit/Resources/Settings/empty.runsettings new file mode 100644 index 0000000..48f1ec5 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/Settings/empty.runsettings @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/Settings/externalTestRunner.runsettings b/BoostTestAdapterNunit/Resources/Settings/externalTestRunner.runsettings new file mode 100644 index 0000000..0d0aba1 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/Settings/externalTestRunner.runsettings @@ -0,0 +1,15 @@ + + + + + + + + + C:\tests\test_1.xml + C:\tests\test_2.xml + + C:\ExternalTestRunner.exe --test "{source}" + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/Settings/sample.2.runsettings b/BoostTestAdapterNunit/Resources/Settings/sample.2.runsettings new file mode 100644 index 0000000..aea874c --- /dev/null +++ b/BoostTestAdapterNunit/Resources/Settings/sample.2.runsettings @@ -0,0 +1,42 @@ + + + + + + + + .\TestResults + + + x86 + + + Framework40 + + + + + + + + + + + .*CPPUnitTestFramework.* + + + + + + + + + + + + + + 100 + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/Settings/sample.runsettings b/BoostTestAdapterNunit/Resources/Settings/sample.runsettings new file mode 100644 index 0000000..65666d8 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/Settings/sample.runsettings @@ -0,0 +1,19 @@ + + + + + + + + 600000 + + true + + + + C:\ExternalTestRunner.exe --test "{source}" --list-debug "{out}" + C:\ExternalTestRunner.exe --test "{source}" + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsBadSourceFileNesting.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsBadSourceFileNesting.cpp new file mode 100644 index 0000000..7c5d134 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsBadSourceFileNesting.cpp @@ -0,0 +1,156 @@ + + +#ifdef DEBUG + std:cout << "Hello 01\n"; + #undef DEBUG + std:cout << "Hello 02\n"; +#endif + +#ifndef DEBUG + std:cout << "Hello 03\n"; +#elif 0 + std:cout << "Hello 04\n"; +#endif + +#define DEBUG +#undef DEBUG +#define VER + +#ifdef DEBUG + #define CLIENT1 + std:cout << "Hello 05\n"; + #ifdef VER + std:cout << "Hello 06\n"; + #undef VER + std:cout << "Hello 07\n"; + #endif + + #ifndef VER + std:cout << "Hello 08\n"; + #elif 0 + std:cout << "Hello 09\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 10\n"; + #elif 1 + std:cout << "Hello 12\n"; + #elif 1 + std:cout << "Hello 13\n"; + #endif +#elif 1 + std:cout << "Hello 14\n"; + #ifdef VER + std:cout << "Hello 15\n"; + #undef VER + std:cout << "Hello 16\n"; + #endif + + #ifndef VER + std:cout << "Hello 17\n"; + #elif 0 + std:cout << "Hello 18\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 19\n"; + #elif 0 + std:cout << "Hello 20\n"; + #elif 1 + #define VER + std:cout << "Hello 21\n"; + #if 0 + std:cout << "Hello 22\n"; + #else + std:cout << "Hello 23\n"; + #endif + + #if 1 + std:cout << "Hello 24\n"; + #else + std:cout << "Hello 25\n"; + #endif + + #if 0 + std:cout << "Hello 26\n"; + #elif 0 + std:cout << "Hello 27\n"; + #elif 0 + std:cout << "Hello 28\n"; + #elif 0 + std:cout << "Hello 29\n"; + #elif 0 + std:cout << "Hello 30\n"; + #elif 1 + std:cout << "Hello 31\n"; + #else + std:cout << "Hello 32\n"; + #endif + + #if 0 + std:cout << "Hello 33\n"; + #elif 0 + std:cout << "Hello 34\n"; + #else + std:cout << "Hello 35\n"; + #ifdef VER + std:cout << "Hello 36\n"; + #undef VER + std:cout << "Hello 37\n"; + #endif + + #ifndef VER + std:cout << "Hello 38\n"; + #elif 0 + std:cout << "Hello 39\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 40\n"; + #elif 1 + std:cout << "Hello 41\n"; + #elif 1 + std:cout << "Hello 42\n"; + #endif + + #define VER + + #if defined VER + std:cout << "Hello 42\n"; + #undef VER + std:cout << "Hello 43\n"; + #endif + + #if !defined VER + std:cout << "Hello 44\n"; + #elif 0 + std:cout << "Hello 45\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 46\n"; + #elif 1 + std:cout << "Hello 47\n"; + #elif 1 + std:cout << "Hello 48\n"; + #endif + + #endif + #elif 1 + std:cout << "Hello 49\n"; + #endif +#elif 1 + std:cout << "Hello 50\n"; +//missing endif \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationFail.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationFail.cpp new file mode 100644 index 0000000..518f467 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationFail.cpp @@ -0,0 +1,6 @@ + +#if LEVEL > 18 + cout << "correct evaluation"; +#else + cout << "incorrect evaluation"; +#endif \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_FilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_FilteredSourceCode.cpp new file mode 100644 index 0000000..6ab032a --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_FilteredSourceCode.cpp @@ -0,0 +1,112 @@ +//all defines are expected to be read and filtered + + + + + + + + + + + + + +//multiline defines are expected to be filtered + + + + + + + + +#pragma region testing whether the tokens are defined + + + cout << "VERSION defined"; + + + + cout << "LEVEL defined"; + + + + cout << "EVER defined"; + + + + cout << "HALF defined"; + + + + cout << "THIRD defined"; + + + + cout << "BIG defined"; + + + + cout << "DEBUG defined"; + + + + cout << "SIN defined"; + + + + cout << "SIN defined"; + + + + cout << "CUBE defined"; + + + + cout << "PRINT defined"; + + + + cout << "fPRINT defined"; + + + + cout << "ASSERT defined"; + + +#pragma endregion testing whether the tokens are defined + +#pragma region correct evaluation testing + + + cout << "correct evaluation"; + + + + + + cout << "correct evaluation"; + + + + + + cout << "correct evaluation"; + + + + + + cout << "correct evaluation"; + + + + + + cout << "correct evaluation"; + + + + +#pragma endregion correct evaluation testing \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_UnfilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_UnfilteredSourceCode.cpp new file mode 100644 index 0000000..a511899 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsComplexEvaluationSuccess_UnfilteredSourceCode.cpp @@ -0,0 +1,112 @@ +//all defines are expected to be read and filtered +#define VERSION +#define LEVEL 19 +#define EVER ;; +#define HALF(x) x/2 +#define THIRD(x) ((x)/(3)) +#define BIG (512) +#define DEBUG +#define SIN(x) sin(x) +#define MAX(x,y) ( (x) > (y) ? (x) : (y) ) +#define CUBE(a) ( (a) * (a) * (a) ) +#define PRINT cout << #x +#define fPRINT(x) f ## x ## Print + +//multiline defines are expected to be filtered +#define ASSERT(x) \ +if (! (x)) \ +{ \ + cout << "ERROR!! Assert " << #x << " failed << endl; \ + cout << " on line " << __LINE__ << endl; \ + cout << " in file " << __FILE__ << endl; \ +} + +#pragma region testing whether the tokens are defined + +#if defined VERSION + cout << "VERSION defined"; +#endif + +#if defined LEVEL + cout << "LEVEL defined"; +#endif + +#if defined EVER + cout << "EVER defined"; +#endif + +#if defined HALF + cout << "HALF defined"; +#endif + +#if defined THIRD + cout << "THIRD defined"; +#endif + +#if defined BIG + cout << "BIG defined"; +#endif + +#if defined DEBUG + cout << "DEBUG defined"; +#endif + +#if defined SIN + cout << "SIN defined"; +#endif + +#if defined MAX + cout << "SIN defined"; +#endif + +#if defined CUBE + cout << "CUBE defined"; +#endif + +#if defined PRINT + cout << "PRINT defined"; +#endif + +#if defined fPRINT + cout << "fPRINT defined"; +#endif + +#if defined ASSERT + cout << "ASSERT defined"; +#endif + +#pragma endregion testing whether the tokens are defined + +#pragma region correct evaluation testing + +#if LEVEL > 18 + cout << "correct evaluation"; +#else + cout << "incorrect evaluation"; +#endif + +#if LEVEL > (18) + cout << "correct evaluation"; +#else + cout << "incorrect evaluation"; +#endif + +#if LEVEL > LEVEL/2 + cout << "correct evaluation"; +#else + cout << "incorrect evaluation"; +#endif + +#if LEVEL > (LEVEL/2) + cout << "correct evaluation"; +#else + cout << "incorrect evaluation"; +#endif + +#if BIG == 512 + cout << "correct evaluation"; +#else + cout << "incorrect evaluation"; +#endif + +#pragma endregion correct evaluation testing \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_FilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_FilteredSourceCode.cpp new file mode 100644 index 0000000..87aae9f --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_FilteredSourceCode.cpp @@ -0,0 +1,518 @@ + + + +//std:cout' that are commented "should not filtered" should not be filtered. The others we assume that have to be filtered + +int _tmain(int argc, _TCHAR* argv[]) +{ + +#region testing positive if along with an else statement. The "Hello 02" is expected to be left unfiltered + + + std:cout << "Hello 01\n"; //should not be filtered + + + + +#endregion + + +#region testing negative if along with an else statement. The "Hello 04" is expected to be left unfiltered + + + + + std:cout << "Hello 04\n"; //should not be filtered + + +#endregion + +#region testing simple elif. The "Hello 06" is expected to be left unfiltered + + + + + std:cout << "Hello 06\n"; //should not be filtered + + + + +#endregion testing a more complex elif. The "Hello 10" is expected to be left unfiltered + + + + + + + std:cout << "Hello 10\n"; //should not be filtered + + + + +#endregion + +#region testing a case where if and elif failed, The "Hello 15" is expected to be left unfiltered + + + + + + + + + std:cout << "Hello 15\n"; //should not be filtered + + +#endregion + +#region testing of medium complexity nesting with only if, elif and endif + + + std:cout << "Hello 16\n"; //should not be filtered + //--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + std:cout << "Hello 48\n"; //should not be filtered + + + + + std:cout << "Hello 50\n"; //should not be filtered + + + + std:cout << "Hello 51\n"; //should not be filtered + + + + + + + + std:cout << "Hello 54\n"; //should not be filtered + + + + + + + + + + //--> + std:cout << "Hello 58\n"; //should not be filtered + + + + + std:cout << "Hello 60\n"; //should not be filtered + + + + std:cout << "Hello 61\n"; //should not be filtered + + + + + + + + std:cout << "Hello 64\n"; //should not be filtered + + + + + + + + + + std:cout << "Hello 68\n"; //should not be filtered + + + + + std:cout << "Hello 69\n"; //should not be filtered + + + + std:cout << "Hello 71\n"; //should not be filtered + + + std:cout << "Hello 72\n"; //should not be filtered + + + + + + + std:cout << "Hello 75\n"; //should not be filtered + + + + + + + + + std:cout << "Hello 79\n"; //should not be filtered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + std:cout << "Hello 102\n"; //should not be filtered + + + + std:cout << "Hello 104\n"; //should not be filtered + + + std:cout << "Hello 105\n"; //should not be filtered + + + + + + + std:cout << "Hello 108\n"; //should not be filtered + + + + + + + + + std:cout << "Hello 112\n"; //should not be filtered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + std:cout << "Hello 146\n"; //should not be filtered + + + + std:cout << "Hello 148\n"; //should not be filtered + + + std:cout << "Hello 149\n"; //should not be filtered + + + + + + + std:cout << "Hello 152\n"; //should not be filtered + + + + + + + + + std:cout << "Hello 156\n"; //should not be filtered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + std:cout << "Hello 179\n"; //should not be filtered + + + + std:cout << "Hello 181\n"; //should not be filtered + + + std:cout << "Hello 182\n"; //should not be filtered + + + + + + + std:cout << "Hello 185\n"; //should not be filtered + + + + + + + + + std:cout << "Hello 189\n"; //should not be filtered + + + + +#endregion + +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_UnFilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_UnFilteredSourceCode.cpp new file mode 100644 index 0000000..255b825 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfTests_UnFilteredSourceCode.cpp @@ -0,0 +1,518 @@ +#define DLEVEL +#define NDEBUG + +//std:cout' that are commented "should not filtered" should not be filtered. The others we assume that have to be filtered + +int _tmain(int argc, _TCHAR* argv[]) +{ + +#region testing positive if along with an else statement. The "Hello 02" is expected to be left unfiltered + +#if 1 + std:cout << "Hello 01\n"; //should not be filtered +#else + std:cout << "Hello 02\n"; +#endif + +#endregion + + +#region testing negative if along with an else statement. The "Hello 04" is expected to be left unfiltered + +#if 0 + std:cout << "Hello 03\n"; +#else + std:cout << "Hello 04\n"; //should not be filtered +#endif + +#endregion + +#region testing simple elif. The "Hello 06" is expected to be left unfiltered + +#if 0 + std:cout << "Hello 05\n"; +#elif 1 + std:cout << "Hello 06\n"; //should not be filtered +#else + std:cout << "Hello 07\n"; +#endif + +#endregion testing a more complex elif. The "Hello 10" is expected to be left unfiltered + +#if 0 + std:cout << "Hello 08\n"; +#elif 0 + std:cout << "Hello 09\n"; +#elif 1 + std:cout << "Hello 10\n"; //should not be filtered +#else + std:cout << "Hello 11\n"; +#endif + +#endregion + +#region testing a case where if and elif failed, The "Hello 15" is expected to be left unfiltered + +#if 0 + std:cout << "Hello 12\n"; +#elif 0 + std:cout << "Hello 13\n"; +#elif 0 + std:cout << "Hello 14\n"; +#else + std:cout << "Hello 15\n"; //should not be filtered +#endif + +#endregion + +#region testing of medium complexity nesting with only if, elif and endif + +#if 1 + std:cout << "Hello 16\n"; //should not be filtered + //--> + #if 0 + //--> + std:cout << "Hello 17\n"; + #if 0 + //--> + std:cout << "Hello 18\n"; + #if 0 + std:cout << "Hello 19\n"; + #else + std:cout << "Hello 20\n"; + #endif + + #if 1 + std:cout << "Hello 21\n"; + #else + std:cout << "Hello 22\n"; + #endif + + #if 0 + std:cout << "Hello 23\n"; + #elif 1 + std:cout << "Hello 24\n"; + #else + std:cout << "Hello 25\n"; + #endif + + #if 0 + std:cout << "Hello 26\n"; + #elif 0 + std:cout << "Hello 27\n"; + #else + std:cout << "Hello 28\n"; + #endif + + #else + + std:cout << "Hello 29\n"; + + #if 0 + std:cout << "Hello 30\n"; + #else + std:cout << "Hello 31\n"; + #endif + + #if 1 + std:cout << "Hello 32\n"; + #else + std:cout << "Hello 33\n"; + #endif + + #if 0 + std:cout << "Hello 34\n"; + #elif 1 + std:cout << "Hello 35\n"; + #else + std:cout << "Hello 36\n"; + #endif + + #if 0 + std:cout << "Hello 37\n"; + #elif 0 + std:cout << "Hello 38\n"; + #else + std:cout << "Hello 39\n"; + #endif + + #endif + + #if 1 + std:cout << "Hello 40\n"; + #else + std:cout << "Hello 41\n"; + #endif + #if 0 + std:cout << "Hello 42\n"; + #elif 1 + std:cout << "Hello 43\n"; + #else + std:cout << "Hello 44\n"; + #endif + #if 0 + std:cout << "Hello 45\n"; + #elif 0 + std:cout << "Hello 46\n"; + #else + std:cout << "Hello 47\n"; + #endif + #else + std:cout << "Hello 48\n"; //should not be filtered + + #if 0 + std:cout << "Hello 49\n"; + #else + std:cout << "Hello 50\n"; //should not be filtered + #endif + + #if 1 + std:cout << "Hello 51\n"; //should not be filtered + #else + std:cout << "Hello 52\n"; + #endif + + #if 0 + std:cout << "Hello 53\n"; + #elif 1 + std:cout << "Hello 54\n"; //should not be filtered + #else + std:cout << "Hello 55\n"; + #endif + + #if 0 + std:cout << "Hello 56\n"; + #elif 0 + std:cout << "Hello 57\n"; + #else + //--> + std:cout << "Hello 58\n"; //should not be filtered + + #if 0 + std:cout << "Hello 59\n"; + #else + std:cout << "Hello 60\n"; //should not be filtered + #endif + + #if 1 + std:cout << "Hello 61\n"; //should not be filtered + #else + std:cout << "Hello 62\n"; + #endif + + #if 0 + std:cout << "Hello 63\n"; + #elif 1 + std:cout << "Hello 64\n"; //should not be filtered + #else + std:cout << "Hello 65\n"; + #endif + + #if 0 + std:cout << "Hello 66\n"; + #elif 0 + std:cout << "Hello 67\n"; + #else + std:cout << "Hello 68\n"; //should not be filtered + #endif + #endif + + #if 1 + std:cout << "Hello 69\n"; //should not be filtered + #if 0 + std:cout << "Hello 70\n"; + #else + std:cout << "Hello 71\n"; //should not be filtered + #endif + #if 1 + std:cout << "Hello 72\n"; //should not be filtered + #else + std:cout << "Hello 73\n"; + #endif + #if 0 + std:cout << "Hello 74\n"; + #elif 1 + std:cout << "Hello 75\n"; //should not be filtered + #else + std:cout << "Hello 76\n"; + #endif + #if 0 + std:cout << "Hello 77\n"; + #elif 0 + std:cout << "Hello 78\n"; + #else + std:cout << "Hello 79\n"; //should not be filtered + #endif + #else + std:cout << "Hello 80\n"; + #if 0 + std:cout << "Hello 81\n"; + #else + std:cout << "Hello 82\n"; + #endif + #if 1 + std:cout << "Hello 83\n"; + #else + std:cout << "Hello 84\n"; + #endif + #if 0 + std:cout << "Hello 85\n"; + #elif 1 + std:cout << "Hello 86\n"; + #else + std:cout << "Hello 87\n"; + #endif + #if 0 + std:cout << "Hello 88\n"; + #elif 0 + std:cout << "Hello 89\n"; + #else + std:cout << "Hello 90\n"; + #endif + #endif + + #if 0 + std:cout << "Hello 91\n"; + #if 0 + std:cout << "Hello 92\n"; + #else + std:cout << "Hello 93\n"; + #endif + #if 1 + std:cout << "Hello 94\n"; + #else + std:cout << "Hello 95\n"; + #endif + #if 0 + std:cout << "Hello 96\n"; + #elif 1 + std:cout << "Hello 97\n"; + #else + std:cout << "Hello 98\n"; + #endif + #if 0 + std:cout << "Hello 99\n"; + #elif 0 + std:cout << "Hello 100\n"; + #else + std:cout << "Hello 101\n"; + #endif + #elif 1 + std:cout << "Hello 102\n"; //should not be filtered + #if 0 + std:cout << "Hello 103\n"; + #else + std:cout << "Hello 104\n"; //should not be filtered + #endif + #if 1 + std:cout << "Hello 105\n"; //should not be filtered + #else + std:cout << "Hello 106\n"; + #endif + #if 0 + std:cout << "Hello 107\n"; //should be filtered + #elif 1 + std:cout << "Hello 108\n"; //should not be filtered + #else + std:cout << "Hello 109\n"; + #endif + #if 0 + std:cout << "Hello 110\n"; + #elif 0 + std:cout << "Hello 111\n"; + #else + std:cout << "Hello 112\n"; //should not be filtered + #endif + #else + std:cout << "Hello 113\n"; + #if 0 + std:cout << "Hello 114\n"; + #else + std:cout << "Hello 115\n"; + #endif + #if 1 + std:cout << "Hello 116\n"; + #else + std:cout << "Hello 117\n"; + #endif + #if 0 + std:cout << "Hello 118\n"; + #elif 1 + std:cout << "Hello 119\n"; + #else + std:cout << "Hello 120\n"; + #endif + #if 0 + std:cout << "Hello 121\n"; + #elif 0 + std:cout << "Hello 122\n"; + #else + std:cout << "Hello 123\n"; + #endif + #endif + #if 0 + std:cout << "Hello 124\n"; + #if 0 + std:cout << "Hello 125\n"; + #else + std:cout << "Hello 126\n"; + #endif + #if 1 + std:cout << "Hello 127\n"; + #else + std:cout << "Hello 128\n"; + #endif + #if 0 + std:cout << "Hello 129\n"; + #elif 1 + std:cout << "Hello 130\n"; + #else + std:cout << "Hello 131\n"; + #endif + #if 0 + std:cout << "Hello 132\n"; + #elif 0 + std:cout << "Hello 133\n"; + #else + std:cout << "Hello 134\n"; + #endif + #elif 0 + std:cout << "Hello 135\n"; + #if 0 + std:cout << "Hello 136\n"; + #else + std:cout << "Hello 137\n"; + #endif + #if 1 + std:cout << "Hello 138\n"; + #else + std:cout << "Hello 139\n"; + #endif + #if 0 + std:cout << "Hello 140\n"; + #elif 1 + std:cout << "Hello 141\n"; + #else + std:cout << "Hello 142\n"; + #endif + #if 0 + std:cout << "Hello 143\n"; + #elif 0 + std:cout << "Hello 144\n"; + #else + std:cout << "Hello 145\n"; + #endif + #else + std:cout << "Hello 146\n"; //should not be filtered + #if 0 + std:cout << "Hello 147\n"; + #else + std:cout << "Hello 148\n"; //should not be filtered + #endif + #if 1 + std:cout << "Hello 149\n"; //should not be filtered + #else + std:cout << "Hello 150\n"; + #endif + #if 0 + std:cout << "Hello 151\n"; + #elif 1 + std:cout << "Hello 152\n"; //should not be filtered + #else + std:cout << "Hello 153\n"; + #endif + #if 0 + std:cout << "Hello 154\n"; + #elif 0 + std:cout << "Hello 155\n"; + #else + std:cout << "Hello 156\n"; //should not be filtered + #endif + #endif + #endif + + #if 0 + #elif 0 + std:cout << "Hello 157\n"; + #if 0 + std:cout << "Hello 158\n"; + #else + std:cout << "Hello 159\n"; + #endif + #if 1 + std:cout << "Hello 160\n"; + #else + std:cout << "Hello 161\n"; + #endif + #if 0 + std:cout << "Hello 162\n"; + #elif 1 + std:cout << "Hello 163\n"; + #else + std:cout << "Hello 164\n"; + #endif + #if 0 + std:cout << "Hello 165\n"; + #elif 0 + std:cout << "Hello 166\n"; + #else + std:cout << "Hello 167\n"; + #endif + #elif 0 + std:cout << "Hello 168\n"; + #if 0 + std:cout << "Hello 169\n"; + #else + std:cout << "Hello 170\n"; + #endif + #if 1 + std:cout << "Hello 171\n"; + #else + std:cout << "Hello 172\n"; + #endif + #if 0 + std:cout << "Hello 173\n"; + #elif 1 + std:cout << "Hello 174\n"; + #else + std:cout << "Hello 175\n"; + #endif + #if 0 + std:cout << "Hello 176\n"; + #elif 0 + std:cout << "Hello 177\n"; + #else + std:cout << "Hello 178\n"; + #endif + #else + std:cout << "Hello 179\n"; //should not be filtered + #if 0 + std:cout << "Hello 180\n"; + #else + std:cout << "Hello 181\n"; //should not be filtered + #endif + #if 1 + std:cout << "Hello 182\n"; //should not be filtered + #else + std:cout << "Hello 183\n"; + #endif + #if 0 + std:cout << "Hello 184\n"; + #elif 1 + std:cout << "Hello 185\n"; //should not be filtered + #else + std:cout << "Hello 186\n"; + #endif + #if 0 + std:cout << "Hello 187\n"; + #elif 0 + std:cout << "Hello 188\n"; + #else + std:cout << "Hello 189\n"; //should not be filtered + #endif + #endif +#endif + +#endregion + +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_FilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_FilteredSourceCode.cpp new file mode 100644 index 0000000..f25a568 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_FilteredSourceCode.cpp @@ -0,0 +1,155 @@ +//std:cout' that are commented "should not be filtered" should not be filtered. The others we assume that have to be filtered + + + std:cout << "Hello 01\n"; //should not be filtered + + std:cout << "Hello 02\n"; //should not be filtered + + + + std:cout << "Hello 03\n"; //should not be filtered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + std:cout << "Hello 14\n"; //should not be filtered + + std:cout << "Hello 15\n"; //should not be filtered + + std:cout << "Hello 16\n"; //should not be filtered + + + + std:cout << "Hello 17\n"; //should not be filtered + + + + + + + + + + + + + + std:cout << "Hello 21\n"; //should not be filtered + + + + std:cout << "Hello 23\n"; //should not be filtered + + + + std:cout << "Hello 24\n"; //should not be filtered + + + + + + + + + + + + + + + + std:cout << "Hello 31\n"; //should not be filtered + + + + + + + + + + std:cout << "Hello 35\n"; //should not be filtered + + std:cout << "Hello 36\n"; //should not be filtered + + std:cout << "Hello 37\n"; //should not be filtered + + + + std:cout << "Hello 38\n"; //should not be filtered + + + + + + + + + + + std:cout << "Hello 41\n"; //should not be filtered + + + + + + + + std:cout << "Hello 42\n"; //should not be filtered + + std:cout << "Hello 43\n"; //should not be filtered + + + + std:cout << "Hello 44\n"; //should not be filtered + + + + + + + + + + + std:cout << "Hello 47\n"; //should not be filtered + + + + + + + + + + diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_UnFilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_UnFilteredSourceCode.cpp new file mode 100644 index 0000000..d0c1a49 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/ConditionalInclusionsIfdefTests_UnFilteredSourceCode.cpp @@ -0,0 +1,156 @@ +//std:cout' that are commented "should not be filtered" should not be filtered. The others we assume that have to be filtered + +#ifdef DEBUG + std:cout << "Hello 01\n"; //should not be filtered + #undef DEBUG + std:cout << "Hello 02\n"; //should not be filtered +#endif + +#ifndef DEBUG + std:cout << "Hello 03\n"; //should not be filtered +#elif 0 + std:cout << "Hello 04\n"; +#endif + +#define DEBUG +#undef DEBUG +#define VER + +#ifdef DEBUG + #define CLIENT1 //tests that defines during a discarded section are not added to the define list + std:cout << "Hello 05\n"; + #ifdef VER + std:cout << "Hello 06\n"; + #undef VER + std:cout << "Hello 07\n"; + #endif + + #ifndef VER + std:cout << "Hello 08\n"; + #elif 0 + std:cout << "Hello 09\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 10\n"; + #elif 1 + std:cout << "Hello 12\n"; + #elif 1 + std:cout << "Hello 13\n"; + #endif +#elif 1 + std:cout << "Hello 14\n"; //should not be filtered + #ifdef VER + std:cout << "Hello 15\n"; //should not be filtered + #undef VER + std:cout << "Hello 16\n"; //should not be filtered + #endif + + #ifndef VER + std:cout << "Hello 17\n"; //should not be filtered + #elif 0 + std:cout << "Hello 18\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 19\n"; + #elif 0 + std:cout << "Hello 20\n"; + #elif 1 + #define VER + std:cout << "Hello 21\n"; //should not be filtered + #if 0 + std:cout << "Hello 22\n"; + #else + std:cout << "Hello 23\n"; //should not be filtered + #endif + + #if 1 + std:cout << "Hello 24\n"; //should not be filtered + #else + std:cout << "Hello 25\n"; + #endif + + #if 0 + std:cout << "Hello 26\n"; + #elif 0 + std:cout << "Hello 27\n"; + #elif 0 + std:cout << "Hello 28\n"; + #elif 0 + std:cout << "Hello 29\n"; + #elif 0 + std:cout << "Hello 30\n"; + #elif 1 + std:cout << "Hello 31\n"; //should not be filtered + #else + std:cout << "Hello 32\n"; + #endif + + #if 0 + std:cout << "Hello 33\n"; + #elif 0 + std:cout << "Hello 34\n"; + #else + std:cout << "Hello 35\n"; //should not be filtered + #ifdef VER + std:cout << "Hello 36\n"; //should not be filtered + #undef VER + std:cout << "Hello 37\n"; //should not be filtered + #endif + + #ifndef VER + std:cout << "Hello 38\n"; //should not be filtered + #elif 0 + std:cout << "Hello 39\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 40\n"; + #elif 1 + std:cout << "Hello 41\n"; //should not be filtered + #elif 1 + std:cout << "Hello 42\n"; + #endif + + #define VER + + #if defined VER + std:cout << "Hello 42\n"; //should not be filtered + #undef VER + std:cout << "Hello 43\n"; //should not be filtered + #endif + + #if !defined VER + std:cout << "Hello 44\n"; //should not be filtered + #elif 0 + std:cout << "Hello 45\n"; + #endif + + #define VER + #undef VER + + #ifdef VER + std:cout << "Hello 46\n"; + #elif 1 + std:cout << "Hello 47\n"; //should not be filtered + #elif 1 + std:cout << "Hello 48\n"; + #endif + + #endif + #elif 1 + std:cout << "Hello 49\n"; + #endif +#elif 1 + std:cout << "Hello 50\n"; +#endif \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_FilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_FilteredSourceCode.cpp new file mode 100644 index 0000000..502a818 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_FilteredSourceCode.cpp @@ -0,0 +1,19 @@ + std::cout << "Hello World 01\n"; //not filtered + + + + + + std::cout << "Hello World 04\n"; //not filtered +*/ //this is technically a syntax error //not filtered + std::cout << "Hello World 05\n"; //not filtered + + + + + + + + + + std::cout << "Hello World 10\n"; //not filtered \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_UnFilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_UnFilteredSourceCode.cpp new file mode 100644 index 0000000..45d6b29 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/MultiLineCommentTest_UnFilteredSourceCode.cpp @@ -0,0 +1,19 @@ + std::cout << "Hello World 01\n"; //not filtered +/* + std::cout << "Hello World 02\n"; + + std::cout << "Hello World 03\n"; +*/ + std::cout << "Hello World 04\n"; //not filtered +*/ //this is technically a syntax error //not filtered + std::cout << "Hello World 05\n"; //not filtered +/* + std::cout << "Hello World 06\n"; + + std::cout << "Hello World 07\n"; +/* + std::cout << "Hello World 08\n"; + + std::cout << "Hello World 09\n"; +*/ + std::cout << "Hello World 10\n"; //not filtered \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_FilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_FilteredSourceCode.cpp new file mode 100644 index 0000000..cb6c95f --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_FilteredSourceCode.cpp @@ -0,0 +1,15 @@ +#include "header" + +cout << << newline << << endl; +cout << << tab << << endl; +cout << << backspace << << endl; +cout << << backslash << << endl; +cout << << nullChar << << endl; + + +const wchar_t* raw_wide = ; +const char* good_parens = ; +const wchar_t* newline = +; +char str[] = ; +const wchar_t* raw_wide = + ; \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_UnFilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_UnFilteredSourceCode.cpp new file mode 100644 index 0000000..64f07a9 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/QuotedStringsFilterTest_UnFilteredSourceCode.cpp @@ -0,0 +1,15 @@ +#include "header" + +cout << "Newline character: " << newline << "ending" << endl; +cout << "Tab character: " << tab << "ending" << endl; +cout << "Backspace character: " << backspace << "ending" << endl; +cout << "Backslash character: " << backslash << "ending" << endl; +cout << "Null character: " << nullChar << "ending" << endl; + + +const wchar_t* raw_wide = LR"(An unescaped " character)"; +const char* good_parens = R"xyz()")xyz"; +const wchar_t* newline = LR"(hello +goodbye)"; +char str[] = "12" "34"; +const wchar_t* raw_wide = LR"(An unescaped " character)" + R"(An unescaped " character)"; \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_FilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_FilteredSourceCode.cpp new file mode 100644 index 0000000..54de660 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_FilteredSourceCode.cpp @@ -0,0 +1,7 @@ + + +std::cout << "Hello World 02\n"; + +std::cout << "Hello World 03\n"; + +std::cout << "Hello World 04\n"; \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_UnFilteredSourceCode.cpp b/BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_UnFilteredSourceCode.cpp new file mode 100644 index 0000000..cf0abcf --- /dev/null +++ b/BoostTestAdapterNunit/Resources/SourceFiltering/SingleLineCommentFilterTest_UnFilteredSourceCode.cpp @@ -0,0 +1,7 @@ +//std::cout << "Hello World 01\n"; + +std::cout << "Hello World 02\n"; //comment + +std::cout << "Hello World 03\n"; + +std::cout << "Hello World 04\n"; \ No newline at end of file diff --git a/BoostTestAdapterNunit/Resources/TestLists/empty.test.list.xml b/BoostTestAdapterNunit/Resources/TestLists/empty.test.list.xml new file mode 100644 index 0000000..e4c5bb8 --- /dev/null +++ b/BoostTestAdapterNunit/Resources/TestLists/empty.test.list.xml @@ -0,0 +1,4 @@ + + + + diff --git a/BoostTestAdapterNunit/Resources/TestLists/sample.test.list.xml b/BoostTestAdapterNunit/Resources/TestLists/sample.test.list.xml new file mode 100644 index 0000000..a06d53c --- /dev/null +++ b/BoostTestAdapterNunit/Resources/TestLists/sample.test.list.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestAdapterNunit/SingleLineCommentFilterTest.cs b/BoostTestAdapterNunit/SingleLineCommentFilterTest.cs new file mode 100644 index 0000000..e82e409 --- /dev/null +++ b/BoostTestAdapterNunit/SingleLineCommentFilterTest.cs @@ -0,0 +1,28 @@ +using BoostTestAdapter.SourceFilter; +using BoostTestAdapterNunit.Utility; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + public class SingleLineCommentFilterTest : SourceFilterTestBase + { + /// + /// Tests the correct operation of the single line comments filter on C++ source files + /// + [Test] + public void SingleLineCommentFilter() + { + const string nameSpace = "BoostTestAdapterNunit.Resources.SourceFiltering."; + const string unfilteredSourceCodeResourceName = "SingleLineCommentFilterTest_UnFilteredSourceCode.cpp"; + const string filteredSourceCodeResourceName = "SingleLineCommentFilterTest_FilteredSourceCode.cpp"; + + FilterAndCompareResources( + new SingleLineCommentFilter(), + null, + nameSpace + unfilteredSourceCodeResourceName, + nameSpace + filteredSourceCodeResourceName + ); + } + } +} diff --git a/BoostTestAdapterNunit/SourceFiltersTest.cs b/BoostTestAdapterNunit/SourceFiltersTest.cs new file mode 100644 index 0000000..ca2f8ca --- /dev/null +++ b/BoostTestAdapterNunit/SourceFiltersTest.cs @@ -0,0 +1,31 @@ +using BoostTestAdapter.SourceFilter; +using NUnit.Framework; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + class SourceFiltersTest + { + /// + /// Given an source line, the QuotedStringFilter filters out any quoted text. + /// + /// Test aims: + /// - Ensure that the QuotedStringsFilter filters out quoted text as expected. + /// + [TestCase("std::cout << \"hello world\" << std::endl;", Result = "std::cout << << std::endl;")] + [TestCase("BOOST_MESSAGE(\"This is a \\\"test\");", Result = "BOOST_MESSAGE();")] + [TestCase("BOOST_MESSAGE(\"This is a \\\"test\",\"\");", Result = "BOOST_MESSAGE(,);")] + [TestCase("BOOST_MESSAGE(\"This is a \\\"test\",\"This is a test\");", Result = "BOOST_MESSAGE(,);")] + [TestCase("BOOST_MESSAGE(\"This is a test\\\"\");", Result = "BOOST_MESSAGE();")] + [TestCase("BOOST_MESSAGE(\"This is a just a\\\" test\");", Result = "BOOST_MESSAGE();")] + [TestCase("#include \"stdafx.h\"", Result = "#include \"stdafx.h\"")] + public string FilterQuotedString(string input) + { + ISourceFilter filter = new QuotedStringsFilter(); + CppSourceFile cppSourceFile = new CppSourceFile(){SourceCode = input}; + filter.Filter(cppSourceFile, null); + return cppSourceFile.SourceCode; + } + + } +} diff --git a/BoostTestAdapterNunit/TestDiscovererNunit.cs b/BoostTestAdapterNunit/TestDiscovererNunit.cs new file mode 100644 index 0000000..f4f67b9 --- /dev/null +++ b/BoostTestAdapterNunit/TestDiscovererNunit.cs @@ -0,0 +1,246 @@ +using System.Collections.Generic; +using System.Linq; +using BoostTestAdapter; +using BoostTestAdapter.SourceFilter; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using BoostTestAdapterNunit.Fakes; +using BoostTestAdapterNunit.Utility; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using NUnit.Framework; +using QualifiedNameBuilder = BoostTestAdapter.Utility.QualifiedNameBuilder; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + internal class TestDiscovererNunit + { + #region Test Setup/TearDown + + [SetUp] + public void SetUp() + { + Logger.Initialize(new ConsoleMessageLogger()); + } + + [TearDown] + public void TearDown() + { + Logger.Shutdown(); + } + + #endregion Test Setup/TearDown + + #region Test Data + + private const string DefaultSource = "TestCaseCheck.exe"; + + #endregion Test Data + + #region Helper Methods + + /// + /// Applies the discovery process over the provided DummySolution + /// + /// The dummy solution on which to apply test discovery + /// The list of tests which were discovered from the dummy solution + private IList DiscoverTests(DummySolution solution) + { + DefaultTestCaseDiscoverySink discoverySink = new DefaultTestCaseDiscoverySink(); + + ISourceFilter[] filters = new ISourceFilter[] + { + new QuotedStringsFilter(), + new MultilineCommentFilter(), + new SingleLineCommentFilter(), + new ConditionalInclusionsFilter(new ExpressionEvaluation()) + }; + + BoostTestDiscovererInternal discoverer = new BoostTestDiscovererInternal(solution.Provider, filters); + IDictionary solutionInfo = discoverer.PrepareTestCaseData(new string[] { solution.Source }); + discoverer.GetBoostTests(solutionInfo, discoverySink); + + return discoverySink.Tests.ToList(); + } + + /// + /// Assert that a trait with the provided name exists. + /// + /// The testcase which contains the trait collection in question + /// The name of the trait to look for + private void AssertTrait(TestCase testCase, string name) + { + Assert.That(testCase.Traits.Any((trait) => { return (trait.Name == name); }), Is.True); + } + + /// + /// Assert that a trait with the provided name and value exists. + /// + /// The testcase which contains the trait collection in question + /// The name of the trait to look for + /// The value the looked-up trait should have + private void AssertTrait(TestCase testCase, string name, string value) + { + Assert.That(testCase.Traits.Any((trait) => { return (trait.Name == name) && (trait.Value == value); }), Is.True); + } + + /// + /// Assert that a 'TestSuite' trait with the provided value exists. + /// + /// The testcase which contains the trait collection in question + /// The test suite value the looked-up trait should have + private void AssertTestSuite(TestCase testCase, string value) + { + AssertTrait(testCase, VSTestModel.TestSuiteTrait, value); + } + + /// + /// Asserts general test case details + /// + /// The test case to test + /// The expected qualified name of the test case + private void AssertTestDetails(TestCase testCase, QualifiedNameBuilder qualifiedName) + { + AssertTestDetails(testCase, qualifiedName, null, -1); + } + + /// + /// Asserts general test case details + /// + /// The test case to test + /// The expected qualified name of the test case + /// The expected source file path of the test case or null if not available + /// The expected line number of the test case or -1 if not available + private void AssertTestDetails(TestCase testCase, QualifiedNameBuilder qualifiedName, string sourceFile, int lineNumber) + { + Assert.That(testCase.DisplayName, Is.EqualTo(qualifiedName.Peek())); + Assert.That(testCase.FullyQualifiedName, Is.EqualTo(qualifiedName.ToString())); + + string suite = qualifiedName.Pop().ToString(); + if (!string.IsNullOrEmpty(suite)) + { + AssertTestSuite(testCase, suite); + } + else + { + // The default 'Master Test Suite' trait value should be available + AssertTrait(testCase, VSTestModel.TestSuiteTrait); + } + + if (!string.IsNullOrEmpty(sourceFile)) + { + Assert.That(testCase.CodeFilePath, Is.EqualTo(sourceFile)); + } + + if (lineNumber > -1) + { + Assert.That(testCase.LineNumber, Is.EqualTo(lineNumber)); + } + } + + #endregion Helper Methods + + #region GetBoostTestsCase + + /// + /// Tests the proper identification of a testcase + /// + [Test] + public void CorrectDiscoveryGenericBoostTests() + { + using (DummySolution solution = new DummySolution(DefaultSource, "BoostUnitTestSample.cpp")) + { + #region excercise + + IList tests = DiscoverTests(solution); + + #endregion excercise + + #region verify + + AssertTestDetails(tests.Last(), QualifiedNameBuilder.FromString("my_test"), solution.SourceFileResourcePaths.First().TempSourcePath, 33); + + #endregion verify + } + } + + /// + /// Tests the correct discovery (and correct generation of the fully qaulifed name) + /// of tests for when Boost UTF macro BOOST_FIXTURE_TEST_SUITE is utilized + /// + [Test] + public void CorrectTestsDiscoveryForFIXTURE_TEST_SUITE() + { + using (DummySolution solution = new DummySolution(DefaultSource, "BoostFixtureTestSuite.cpp")) + { + #region exercise + + /** The BoostFixtureSuiteTest.cpp file consists of 3 test cases: FixtureTest1, FixtureTest2 and BoostTest, + * BOOST_FIXTURE_TEST_SUITE -> FixtureSuite1 + * -->BoostTest1 + * -->BoostTest2 + * -> Master Suite + * -->BoostTest3 + * BOOST_FIXTURE_TEST_SUITE -> FixtureSuite2 + * -->Fixturetest_case1 + * -->TemplatedTest (BOOST_AUTO_TEST_CASE_TEMPLATE) + * -->TemplatedTest (BOOST_AUTO_TEST_CASE_TEMPLATE) + * -->TemplatedTest (BOOST_AUTO_TEST_CASE_TEMPLATE) + */ + + IList testList = DiscoverTests(solution); + + #endregion exercise + + #region verification + + AssertTestDetails(testList[0], QualifiedNameBuilder.FromString("FixtureSuite1/BoostTest1")); + AssertTestDetails(testList[1], QualifiedNameBuilder.FromString("FixtureSuite1/BoostTest2")); + AssertTestDetails(testList[2], QualifiedNameBuilder.FromString("BoostTest3")); + AssertTestDetails(testList[3], QualifiedNameBuilder.FromString("FixtureSuite2/Fixturetest_case1")); + AssertTestDetails(testList[4], QualifiedNameBuilder.FromString("FixtureSuite2/TemplatedTest")); + AssertTestDetails(testList[5], QualifiedNameBuilder.FromString("FixtureSuite2/TemplatedTest")); + AssertTestDetails(testList[6], QualifiedNameBuilder.FromString("FixtureSuite2/TemplatedTest")); + + #endregion verification + } + } + + /// + /// Tests the correct discovery (and correct generation of the fully qaulifed name) + /// of tests for when Boost UTF macro BOOST_FIXTURE_TEST_CASE is utilized + /// + [Test] + public void CorrectTestsDiscoveryForFIXTURE_TEST_CASE() + { + using (DummySolution solution = new DummySolution(DefaultSource, "BoostFixtureTestCase.cpp")) + { + #region excercise + + /** The BoostFixtureTestCase.cpp file consists of 4 test cases: BoostUnitTest1, Fixturetest_case1, Fixturetest_case1 and Fixturetest_case1, + * BOOST_AUTO_TEST_SUITE -> Suit1 + * -->BoostUnitTest1 + * -->Fixturetest_case1 + * -->Fixturetest_case2 + * -> Master Suite + * -->Fixturetest_case3 + */ + + IList testList = DiscoverTests(solution); + + #endregion excercise + + #region verify + + AssertTestDetails(testList[0], QualifiedNameBuilder.FromString("Suit1/BoostUnitTest1")); + AssertTestDetails(testList[1], QualifiedNameBuilder.FromString("Suit1/Fixturetest_case1")); + AssertTestDetails(testList[2], QualifiedNameBuilder.FromString("Suit1/Fixturetest_case2")); + AssertTestDetails(testList[3], QualifiedNameBuilder.FromString("Fixturetest_case3")); + + #endregion verify + } + } + + #endregion GetBoostTestsCase + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/Utility/DummySolution.cs b/BoostTestAdapterNunit/Utility/DummySolution.cs new file mode 100644 index 0000000..f25d234 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/DummySolution.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BoostTestAdapter.Utility.VisualStudio; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit.Utility +{ + /// + /// Builds and emulates a Visual Studio solution with a single test project. + /// Copies resource files to their intended location for later reference. + /// + public class DummySolution : IDisposable + { + /// + /// Constructor + /// + /// The fully qualified path of a test source + /// The embedded resource file name which is to be considered as the sole source file for this test project + public DummySolution(string source, string sourceFileName) : + this(source, new string[] { sourceFileName }) + { + } + + /// + /// Constructor + /// + /// The fully qualified path of a test source + /// An enumeration of embedded resource file names which are to be considered as source files for this test project + public DummySolution(string source, IEnumerable sourceFileNames) + { + this.Source = source; + this.SourceFiles = sourceFileNames; + + this.SourceFileResourcePaths = new List(); + + SetUpSolutionEnvironment(); + SetUpSolution(); + } + + /// + /// Sets up the solution environment by copying the embedded resources to disk + /// for later reference by the necessary algorithms. + /// + private void SetUpSolutionEnvironment() + { + foreach (string source in this.SourceFiles) + { + this.SourceFileResourcePaths.Add( new DummySourceFile(source) ); + } + } + + /// + /// Sets up a fake Visual Studio environment consisting of a solution with 1 test project whose + /// primary output is the specified construction-time source and the respective code file sources. + /// + private void SetUpSolution() + { + IList sources = this.SourceFileResourcePaths.Select(source => source.TempSourcePath).ToList(); + + IVisualStudio vs = new FakeVisualStudioInstanceBuilder(). + Solution( + new FakeSolutionBuilder(). + Name("SampleSolution"). + Project( + new FakeProjectBuilder(). + Name("SampleProject"). + PrimaryOutput(this.Source). + Sources(sources) + ) + ). + Build(); + + this.Provider = new DummyVSProvider(vs); + } + + /// + /// The test source + /// + public string Source { get; private set; } + + /// + /// The test code source files + /// + public IEnumerable SourceFiles { get; private set; } + + /// + /// The respective DummySourceFiles for the test code source files + /// + public ICollection SourceFileResourcePaths { get; private set; } + + /// + /// The IVisualStudio instance provider for this DummySolution + /// + public IVisualStudioInstanceProvider Provider { get; private set; } + + #region System.IDisposable + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + foreach (DummySourceFile resource in this.SourceFileResourcePaths) + { + resource.Dispose(); + } + } + + GC.SuppressFinalize(this); + } + + public void Dispose() + { + this.Dispose(true); + } + + #endregion System.IDisposable + } +} diff --git a/BoostTestAdapterNunit/Utility/DummySourceFile.cs b/BoostTestAdapterNunit/Utility/DummySourceFile.cs new file mode 100644 index 0000000..112e431 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/DummySourceFile.cs @@ -0,0 +1,65 @@ +using System; +using System.IO; + +namespace BoostTestAdapterNunit.Utility +{ + /// + /// Emulates a CPP source file. Copies an embedded resource as an OS temporary file using + /// the embedded resource name as the file name. + /// + /// Performs cleanup on calling Dispose. + /// + public class DummySourceFile : IDisposable + { + /// + /// Default resource namespace + /// + private const string DefaultResourceNamespace = "BoostTestAdapterNunit.Resources.CppSources"; + + /// + /// Constructor + /// + /// The embedded resource file name located in the default resource namespace + public DummySourceFile(string filename) : + this(DefaultResourceNamespace, filename) + { + } + + /// + /// Constructor + /// + /// The embedded resource namespace + /// The embedded resource file name located in nameSpace + public DummySourceFile(string nameSpace, string filename) + { + this.TempSourcePath = TestHelper.CopyEmbeddedResourceToDirectory(nameSpace, filename, Path.GetTempPath()); + } + + /// + /// The temporary file path of the copied embedded resource + /// + public string TempSourcePath { get; private set; } + + #region IDisposable + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (!string.IsNullOrEmpty(this.TempSourcePath) && File.Exists(this.TempSourcePath)) + { + File.Delete(this.TempSourcePath); + } + } + + GC.SuppressFinalize(this); + } + + public void Dispose() + { + this.Dispose(true); + } + + #endregion IDisposable + } +} diff --git a/BoostTestAdapterNunit/Utility/DummyVSProvider.cs b/BoostTestAdapterNunit/Utility/DummyVSProvider.cs new file mode 100644 index 0000000..85e4929 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/DummyVSProvider.cs @@ -0,0 +1,28 @@ +using BoostTestAdapter.Utility.VisualStudio; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit.Utility +{ + /// + /// A stub implementation for the IVisualStudioInstanceProvider interface. + /// Provides an IVisualStudio instance which is defined at construction time. + /// + public class DummyVSProvider : IVisualStudioInstanceProvider + { + /// + /// Constructor + /// + /// The IVisualStudio instance which is to be provided on a 'Get()' call + public DummyVSProvider(IVisualStudio vs) + { + this.Instance = vs; + } + + #region IVisualStudioInstanceProvider + + public IVisualStudio Instance { get; private set; } + + #endregion IVisualStudioInstanceProvider + } + +} diff --git a/BoostTestAdapterNunit/Utility/ReadOnlyDictionaryWrapper.cs b/BoostTestAdapterNunit/Utility/ReadOnlyDictionaryWrapper.cs new file mode 100644 index 0000000..5195724 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/ReadOnlyDictionaryWrapper.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; + +namespace BoostTestAdapterNunit.Utility +{ + /// + /// A wrapper class for a generic Dictionary which provides a read-only access interface. + /// + /// The key type + /// The mapped-value type + public class ReadOnlyDictionaryWrapper : IReadOnlyDictionary + { + #region Members + + /// + /// The wrapped Dictionary instance + /// + private IDictionary _dictionary = null; + + #endregion Members + + #region Constructors + + /// + /// Constructor + /// + /// The Dictionary instance which will be wrapped + public ReadOnlyDictionaryWrapper(IDictionary dictionary) + { + this._dictionary = dictionary; + } + + #endregion Constructors + + #region IReadOnlyDictionary + + public bool ContainsKey(TK key) + { + return this._dictionary.ContainsKey(key); + } + + public IEnumerable Keys + { + get { return this._dictionary.Keys; } + } + + public bool TryGetValue(TK key, out TV value) + { + return this._dictionary.TryGetValue(key, out value); + } + + public IEnumerable Values + { + get { return this._dictionary.Values; } + } + + public TV this[TK key] + { + get { return this._dictionary[key]; } + } + + public int Count + { + get { return this._dictionary.Count; } + } + + public IEnumerator> GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + #endregion IReadOnlyDictionary + } +} diff --git a/BoostTestAdapterNunit/Utility/SourceFilterTestBase.cs b/BoostTestAdapterNunit/Utility/SourceFilterTestBase.cs new file mode 100644 index 0000000..6bd25ba --- /dev/null +++ b/BoostTestAdapterNunit/Utility/SourceFilterTestBase.cs @@ -0,0 +1,44 @@ +using BoostTestAdapter.SourceFilter; +using NUnit.Framework; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit.Utility +{ + /// + /// Base class which includes common functionality used throughout SourceFilerTests + /// + public class SourceFilterTestBase + { + /// + /// Given 2 embedded resources locations, filters the left-hand resource and checks whether the filtered output matches that of the right-hand resource. + /// + /// The source filter to apply + /// The preprocessor definitions which are to be used by the source filter + /// The left-hand embedded resource fully qualified location whose content will be filtered + /// The right-hand embedded resource fully qualified location whose content is used to compare the filtered result + protected void FilterAndCompareResources(ISourceFilter filter, Defines defines, string lhsEmbeddedResource, string rhsEmbeddedResource) + { + FilterAndCompare( + filter, + defines, + TestHelper.ReadEmbeddedResource(lhsEmbeddedResource), + TestHelper.ReadEmbeddedResource(rhsEmbeddedResource) + ); + } + + /// + /// Given 2 strings, filters the left-hand string and checks whether the filtered output matches that of the right-hand string. + /// + /// The source filter to apply + /// The preprocessor definitions which are to be used by the source filter + /// The left-hand string whose value will be filtered + /// The right-hand string whose value is used to compare the filtered result + protected void FilterAndCompare(ISourceFilter filter, Defines defines, string lhs, string rhs) + { + var cppSourceFile = new CppSourceFile(){SourceCode = lhs}; + filter.Filter(cppSourceFile, defines); + + Assert.AreEqual(cppSourceFile.SourceCode, rhs); + } + } +} \ No newline at end of file diff --git a/BoostTestAdapterNunit/Utility/TestHelper.cs b/BoostTestAdapterNunit/Utility/TestHelper.cs new file mode 100644 index 0000000..f9ce554 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/TestHelper.cs @@ -0,0 +1,71 @@ +using System.IO; +using System.Reflection; +using NUnit.Framework; + +namespace BoostTestAdapterNunit.Utility +{ + internal static class TestHelper + { + /// + /// Loads in an embedded resource as a stream. + /// + /// The fully qualified path to the embedded resource + /// The embedded resource as a stream + public static Stream LoadEmbeddedResource(string path) + { + // Reference: https://support.microsoft.com/en-us/kb/319292 + + Assembly assembly = Assembly.GetExecutingAssembly(); + return assembly.GetManifestResourceStream(path); + } + + /// + /// Reads in an embedded resource as a string. + /// + /// The fully qualified path to the embedded resource + /// The whole content of the embedded resource as a string + public static string ReadEmbeddedResource(string path) + { + using (Stream stream = LoadEmbeddedResource(path)) + { + StreamReader reader = new StreamReader(stream); + return reader.ReadToEnd(); + } + } + + /// + /// Helper method so as to copy an embedded resource to the path supplied + /// + /// namespace of the where the resource file is located at + /// the filename of the embedded resource that needs to copied over + /// the path where the file need to be copied over to + /// The output path of the successfully copied resource + static public string CopyEmbeddedResourceToDirectory(string nameSpace, string resourceName, string outputDirectoryPath) + { + if (!Directory.Exists(outputDirectoryPath)) + { + Assert.Fail("The requested output directory is invalid"); + } + + string input = nameSpace + (nameSpace.EndsWith(".") ? "" : ".") + resourceName; + string output = Path.Combine(outputDirectoryPath, resourceName); + + using (Stream stream = LoadEmbeddedResource(input)) + using (FileStream fileStream = new FileStream(output, FileMode.Create, FileAccess.Write)) + { + if (stream == null) + { + Assert.Fail("Failed to load the requested embedded resource. Please check that the resource exists and the supplied embedded file namespace is correct"); + } + stream.CopyTo(fileStream); + } + + if (!File.Exists(output)) + { + Assert.Fail("Failed to copy embedded resource " + nameSpace + resourceName + " to output directory " + outputDirectoryPath); + } + + return output; + } + } +} diff --git a/BoostTestAdapterNunit/Utility/VisualStudioInstanceBuilders.cs b/BoostTestAdapterNunit/Utility/VisualStudioInstanceBuilders.cs new file mode 100644 index 0000000..553db59 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/VisualStudioInstanceBuilders.cs @@ -0,0 +1,184 @@ +using System.Collections.Generic; +using FakeItEasy; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit.Utility +{ + /// + /// Builds fake IVisualStudio instances + /// + public class FakeVisualStudioInstanceBuilder + { + private ISolution _solution = null; + + /// + /// Assigns a solution to the VisualStudio instance + /// + /// The fake solution builder which is to be registered with this fake VisualStudio instance + /// this + public FakeVisualStudioInstanceBuilder Solution(FakeSolutionBuilder solution) + { + return this.Solution(solution.Build()); + } + + /// + /// Assigns a solution to the VisualStudio instance + /// + /// The solution which is to be registered with this fake VisualStudio instance + /// this + public FakeVisualStudioInstanceBuilder Solution(ISolution solution) + { + this._solution = solution; + return this; + } + + /// + /// Commits any pending changes and builds a fake IVisualStudio instance. + /// + /// A fake IVisualStudio instance consisting of the previously registered solutions + public IVisualStudio Build() + { + IVisualStudio fake = A.Fake(); + + A.CallTo(() => fake.Version).Returns("MockVisualStudioInstance"); + A.CallTo(() => fake.Solution).Returns(this._solution); + + return fake; + } + } + + /// + /// Builds fake ISolution instances + /// + public class FakeSolutionBuilder + { + private string _name = string.Empty; + private readonly IList _projects = new List(); + + /// + /// Identifies the name of the solution + /// + /// The name for the solution + /// this + public FakeSolutionBuilder Name(string name) + { + this._name = name; + return this; + } + + /// + /// Assigns a project to the solution + /// + /// The fake project builder which is to be registered with this fake solution instance + /// this + public FakeSolutionBuilder Project(FakeProjectBuilder project) + { + return this.Project(project.Build()); + } + + /// + /// Assigns a project to the solution + /// + /// The project which is to be registered with this fake solution instance + /// this + public FakeSolutionBuilder Project(IProject project) + { + this._projects.Add(project); + return this; + } + + /// + /// Commits any pending changes and builds a fake ISolution instance. + /// + /// A fake ISolution instance consisting of the previously registered name and projects + public ISolution Build() + { + ISolution fake = A.Fake(); + + A.CallTo(() => fake.Name).Returns(this._name); + A.CallTo(() => fake.Projects).Returns(this._projects); + + return fake; + } + } + + /// + /// Builds fake IProject instances + /// + public class FakeProjectBuilder + { + private string _name = string.Empty; + private string _primaryOutput = string.Empty; + private IList _sourcesFullFilePath = new List(); + private Defines _definitions = new Defines(); + + /// + /// Identifies the name of the project + /// + /// The name for the project + /// this + public FakeProjectBuilder Name(string name) + { + this._name = name; + return this; + } + + /// + /// Identifies the project's primary output location + /// + /// The primary output path + /// this + public FakeProjectBuilder PrimaryOutput(string output) + { + this._primaryOutput = output; + return this; + } + + /// + /// Identifies the project's configured preprocessor definitions + /// + /// The preprocessor definitions in use by this project + /// this + public FakeProjectBuilder Defines(Defines definitions) + { + this._definitions = definitions; + return this; + } + + /// + /// Assigns the projects resources (source files, filters etc.) + /// + /// The sources which are to be registered with this fake project instance + /// this + public FakeProjectBuilder Sources(IList sourcesFullFilePath) + { + this._sourcesFullFilePath = sourcesFullFilePath; + return this; + } + + /// + /// Commits any pending changes and builds a fake IProject instance. + /// + /// A fake IProject instance consisting of the previously registered output, definitions and sources + public IProject Build() + { + IProject fake = A.Fake(); + + A.CallTo(() => fake.Name).Returns(this._name); + + IProjectConfiguration fakeConfiguration = A.Fake(); + A.CallTo(() => fakeConfiguration.PrimaryOutput).Returns(this._primaryOutput); + + IVCppCompilerOptions fakeCompilerOptions = A.Fake(); + A.CallTo(() => fakeCompilerOptions.PreprocessorDefinitions).Returns(this._definitions); + + A.CallTo(() => fakeConfiguration.CppCompilerOptions).Returns(fakeCompilerOptions); + + A.CallTo(() => fake.ActiveConfiguration).Returns(fakeConfiguration); + A.CallTo(() => fake.SourceFiles).Returns(this._sourcesFullFilePath); + + return fake; + } + } + +} diff --git a/BoostTestAdapterNunit/Utility/Xml/XmlComparison.cs b/BoostTestAdapterNunit/Utility/Xml/XmlComparison.cs new file mode 100644 index 0000000..0746147 --- /dev/null +++ b/BoostTestAdapterNunit/Utility/Xml/XmlComparison.cs @@ -0,0 +1,239 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using NUnit.Framework; + +namespace BoostTestAdapterNunit.Utility.Xml +{ + /// + /// Interface which identifies a mechanism for filtering particular xml nodes. + /// + public interface IXmlNodeFilter + { + /// + /// States whether the node should be filtered or not + /// + /// The node to test + /// true if the node should be filtered; false otherwise + bool Filter(XmlNode node); + } + + #region Default IXMLNodeFilter Implementations + + /// + /// IXmlNodeFilter implementation. Does not filter any xml node. + /// + public class NullFilter : IXmlNodeFilter + { + public bool Filter(XmlNode node) + { + return false; + } + } + + /// + /// IXmlNodeFilter implementation. Filter each and every xml node. + /// + public class AllFilter : IXmlNodeFilter + { + public bool Filter(XmlNode node) + { + return true; + } + } + + #endregion + + /// + /// IXmlNodeFilter implementation. Filters xml nodes based on their NodeType. + /// + public class XmlNodeTypeFilter : IXmlNodeFilter + { + /// + /// Constructor + /// + /// The collection of XmlNodeTypes which should be filtered out + public XmlNodeTypeFilter(IEnumerable filtered) + { + this.FilteredTypes = filtered; + } + + /// + /// A collection of XmlNodeTypes which are to be filtered out + /// + public IEnumerable FilteredTypes { get; private set; } + + #region IXmlNodeFilter + + /// + /// States whether the node should be filtered or not + /// + /// The node to test + /// true if the node should be filtered; false otherwise + public bool Filter(XmlNode node) + { + return Filter(node.NodeType); + } + + #endregion IXmlNodeFilter + + /// + /// States whether the node type should be filtered or not + /// + /// The node type to test + /// true if the node type should be filtered; false otherwise + public bool Filter(XmlNodeType type) + { + return this.FilteredTypes.Contains(type); + } + + /// + /// Creates an XmlNodeTypeFilter which does not filter out anything + /// + public static XmlNodeTypeFilter None + { + get + { + return new XmlNodeTypeFilter(Enumerable.Empty()); + } + } + + /// + /// Creates a default XmlNodeTypeFilter used within most of the tests + /// + public static XmlNodeTypeFilter DefaultFilter + { + get + { + return new XmlNodeTypeFilter(new XmlNodeType[] { XmlNodeType.CDATA, XmlNodeType.Comment, XmlNodeType.ProcessingInstruction, XmlNodeType.XmlDeclaration }); + } + } + + } + + public class XmlComparer + { + + private IEnumerator GetXmlCollectionEnumerator(IEnumerable enumerable) + { + return (enumerable == null) ? null : enumerable.GetEnumerator(); + } + + /// + /// Loads an Xml string fragment + /// + /// the Xml string fragment + /// The Xml DOM representation + private XmlDocument LoadXml(string xml) + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(xml); + + return doc; + } + + /// + /// Compares the 2 Xml collections. + /// + /// The left-hand side Xml collection enumerator + /// The right-hand side Xml collection enumerator + /// The XmlNodeType filter to apply during comparison + private void CompareXML(IEnumerator lhs, IEnumerator rhs, IXmlNodeFilter filter) + { + bool lhsNext = lhs != null && lhs.MoveNext(); + bool rhsNext = rhs != null && rhs.MoveNext(); + + while (lhsNext && rhsNext) + { + XmlNode lhsChild = (XmlNode)lhs.Current; + XmlNode rhsChild = (XmlNode)rhs.Current; + + if (filter.Filter(lhsChild)) + { + lhsNext = lhs.MoveNext(); + continue; + } + else if (filter.Filter(rhsChild)) + { + rhsNext = rhs.MoveNext(); + continue; + } + + _CompareXML(lhsChild, rhsChild, filter); + + lhsNext = lhs.MoveNext(); + rhsNext = rhs.MoveNext(); + } + + // Ensure that any remaining nodes are filtered + // and not important for the comparison process + while (lhsNext) + { + Assert.IsTrue(filter.Filter((XmlNode)lhs.Current)); + lhsNext = lhs.MoveNext(); + } + + while (rhsNext) + { + Assert.IsTrue(filter.Filter((XmlNode)rhs.Current)); + rhsNext = rhs.MoveNext(); + } + } + + /// + /// Internal version of CompareXML. Compares the 2 Xml subtrees. + /// + /// In contrast to the public CompareXML, this version avoids checking whether both elements should be filtered or not. + /// The left-hand side Xml subtree + /// The right-hand side Xml subtree + /// The XmlNodeType filter to apply during comparison + private void _CompareXML(XmlNode lhs, XmlNode rhs, IXmlNodeFilter filter) + { + Assert.AreEqual(lhs.NodeType, rhs.NodeType); + + Assert.AreEqual(lhs.NamespaceURI, rhs.NamespaceURI); + Assert.AreEqual(lhs.LocalName, rhs.LocalName); + + if (lhs.NodeType == XmlNodeType.CDATA || lhs.NodeType == XmlNodeType.Comment || lhs.NodeType == XmlNodeType.Text) + { + Assert.AreEqual(lhs.Value, rhs.Value); + } + + CompareXML(GetXmlCollectionEnumerator(lhs.ChildNodes), GetXmlCollectionEnumerator(rhs.ChildNodes), filter); + CompareXML(GetXmlCollectionEnumerator(lhs.Attributes), GetXmlCollectionEnumerator(rhs.Attributes), filter); + } + + /// + /// Compares the 2 Xml subtrees. + /// + /// The left-hand side Xml subtree + /// The right-hand side Xml subtree + /// The XmlNodeType filter to apply during comparison + public void CompareXML(XmlNode lhs, XmlNode rhs, IXmlNodeFilter filter) + { + bool lhsFilter = filter.Filter(lhs); + bool rhsFilter = filter.Filter(rhs); + + Assert.AreEqual(lhsFilter, rhsFilter); + + // At this point, lhsFilter and rhsFilter are known to be equal. + // If both elements should be filtered, avoid comparing the subtrees altogether. + if (!lhsFilter) + { + _CompareXML(lhs, rhs, filter); + } + } + + /// + /// Compares the 2 Xml string fragments. + /// + /// The left-hand side Xml fragment + /// The right-hand side Xml fragment + /// The XmlNodeType filter to apply during comparison + public void CompareXML(string lhs, string rhs, IXmlNodeFilter filter) + { + this.CompareXML(LoadXml(lhs), LoadXml(rhs), filter); + } + } +} diff --git a/BoostTestAdapterNunit/VSTestModelTest.cs b/BoostTestAdapterNunit/VSTestModelTest.cs new file mode 100644 index 0000000..f8442e7 --- /dev/null +++ b/BoostTestAdapterNunit/VSTestModelTest.cs @@ -0,0 +1,435 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BoostTestAdapter; +using BoostTestAdapter.Boost.Results; +using BoostTestAdapter.Boost.Results.LogEntryTypes; +using BoostTestAdapter.Boost.Test; +using BoostTestAdapter.Utility; +using BoostTestAdapter.Utility.VisualStudio; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using NUnit.Framework; +using BoostTestResult = BoostTestAdapter.Boost.Results.TestResult; +using TestCase = BoostTestAdapter.Boost.Test.TestCase; +using VSTestCase = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase; +using VSTestResult = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + public class VSTestModelTest + { + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + this.TestCase = new VSTestCase(DefaultTestName, ExecutorUri, DefaultSource); + } + + #endregion Test Setup/Teardown + + #region Test Data + + private static readonly Uri ExecutorUri = BoostTestExecutor.ExecutorUri; + private const string DefaultTestName = "suite/test"; + private const string DefaultSource = "void"; + + private VSTestCase TestCase { get; set; } + + #endregion Test Data + + #region Helper Classes + + /// + /// BoostTestResult Builder. Provides a fluent-api interface to easily express BoostTestResult instances. + /// + private class BoostTestResultBuilder + { + public BoostTestResultBuilder() + { + this.Logs = new List(); + } + + #region Properties + + private TestResultType ResultType { get; set; } + private uint TimeDuration { get; set; } + private IList Logs { get; set; } + private TestUnit Unit { get; set; } + + #endregion Properties + + /// + /// Determine the Visual Studio test case for which this BoostTestResult is associated with. + /// + /// The Visual Studio test case to associate with the generated result + /// this + public BoostTestResultBuilder For(VSTestCase test) + { + TestSuite parent = new TestSuite("Master Test Suite"); + + string[] fragments = test.FullyQualifiedName.Split('/'); + for (int i = 0; i < (fragments.Length - 1); ++i) + { + parent = new TestSuite(fragments[i], parent); + } + + return For(new TestCase(fragments[(fragments.Length - 1)], parent)); + } + + /// + /// Determine the Boost.Test.TestUnit test case for which this BoostTestResult is associated with. + /// + /// The Boost.Test.TestUnit test case to associate with the generated result + /// this + public BoostTestResultBuilder For(TestUnit unit) + { + this.Unit = unit; + return this; + } + + /// + /// States that the test case passed. + /// + /// this + public BoostTestResultBuilder Passed() + { + return Result(TestResultType.Passed); + } + + /// + /// States that the test case was aborted during execution. + /// + /// this + public BoostTestResultBuilder Aborted() + { + return Result(TestResultType.Aborted); + } + + /// + /// States that the test case failed. + /// + /// this + public BoostTestResultBuilder Failed() + { + return Result(TestResultType.Failed); + } + + /// + /// States that the test case was skipped by the testing framework. + /// + /// this + public BoostTestResultBuilder Skipped() + { + return Result(TestResultType.Skipped); + } + + /// + /// States that the test case result. + /// + /// The test case execution result + /// this + public BoostTestResultBuilder Result(TestResultType result) + { + this.ResultType = result; + return this; + } + + /// + /// The duration of the test case execution in microseconds. + /// + /// Test case execution duration in microseconds + /// this + public BoostTestResultBuilder Duration(uint time) + { + this.TimeDuration = time; + return this; + } + + /// + /// Registers a log entry. + /// + /// A log entry generated during test execution + /// this + public BoostTestResultBuilder Log(LogEntry entry) + { + this.Logs.Add(entry); + return this; + } + + /// + /// Generates a BoostTestResult instance from the contained configuration. + /// + /// A BoostTestResult instance based on the pre-set configuration + public BoostTestResult Build() + { + BoostTestResult result = new BoostTestResult(null); + + result.Result = this.ResultType; + result.Unit = this.Unit; + result.Duration = this.TimeDuration; + + foreach (LogEntry entry in this.Logs) + { + result.LogEntries.Add(entry); + } + + return result; + } + } + + #endregion Helper Classes + + #region Helper Methods + + /// + /// Asserts general Visual Studio TestResult properties for the default TestCase. + /// + /// The Visual Studio TestResult to test + private void AssertVSTestModelProperties(VSTestResult result) + { + AssertVSTestModelProperties(result, this.TestCase); + } + + /// + /// Asserts general Visual Studio TestResult properties for the provided TestCase. + /// + /// The Visual Studio TestResult to test + /// The Visual Studio TestCase for which the result is based on + private void AssertVSTestModelProperties(VSTestResult result, VSTestCase test) + { + Assert.That(result.TestCase, Is.EqualTo(test)); + Assert.That(result.ComputerName, Is.EqualTo(Environment.MachineName)); + } + + /// + /// Asserts that a log entry resulting in a test failure is correctly noted + /// in the Visual Studio TestResult. + /// + /// The Visual Studio TestResult to test + /// The log entry detailing a test case error + private void AssertVsTestModelError(VSTestResult result, LogEntry entry) + { + Assert.That(result.ErrorMessage, Is.EqualTo(entry.Detail)); + Assert.That(result.ErrorStackTrace, Is.EqualTo(entry.Source.ToString())); + } + + /// + /// Converts from microseconds to a TimeSpan + /// + /// Duration in microseconds + /// A TimeSpan describing the microsecond duration + private TimeSpan Microseconds(int value) + { + return TimeSpan.FromMilliseconds(Math.Truncate(value / 1000F)); + } + + /// + /// Given a LogEntry instance, identifies the respective Visual Studio + /// TestResult message category. + /// + /// The LogEntry instance to test + /// The respective Visual Studio Message category for the provided LogEntry + private string GetCategory(LogEntry entry) + { + BoostTestResult testCaseResult = new BoostTestResultBuilder(). + For(this.TestCase). + Log(entry). + Build(); + + VSTestResult result = testCaseResult.AsVSTestResult(this.TestCase); + + return result.Messages.First().Category; + } + + #endregion Helper Methods + + #region Tests + + /// + /// Boost Test Case passed + /// + /// Test aims: + /// - Ensure that Boost TestCases which pass are identified accordingly in Visual Studio TestResults. + /// + [Test] + public void ConvertPassToVSTestResult() + { + BoostTestResult testCaseResult = new BoostTestResultBuilder(). + For(this.TestCase). + Passed(). + Duration(1000). + Log(new LogEntryMessage("BOOST_MESSAGE output")). + Build(); + + VSTestResult result = testCaseResult.AsVSTestResult(this.TestCase); + + AssertVSTestModelProperties(result); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Passed)); + Assert.That(result.Duration, Is.EqualTo(Microseconds(1000))); + + Assert.That(result.Messages.Count, Is.EqualTo(1)); + + TestResultMessage message = result.Messages.First(); + Assert.That(message.Category, Is.EqualTo(TestResultMessage.StandardOutCategory)); + } + + /// + /// Boost Test Case failed + /// + /// Test aims: + /// - Ensure that Boost TestCases which fail are identified accordingly in Visual Studio TestResults. + /// + [Test] + public void ConvertFailToVSTestResult() + { + LogEntryError error = new LogEntryError("Error: 1 != 2", new SourceFileInfo("file.cpp", 10)); + + BoostTestResult testCaseResult = new BoostTestResultBuilder(). + For(this.TestCase). + Failed(). + Duration(2500). + Log(error). + Build(); + + VSTestResult result = testCaseResult.AsVSTestResult(this.TestCase); + + AssertVSTestModelProperties(result); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Failed)); + Assert.That(result.Duration, Is.EqualTo(Microseconds(2500))); + + AssertVsTestModelError(result, error); + + Assert.That(result.Messages.Count, Is.EqualTo(1)); + + TestResultMessage message = result.Messages.First(); + Assert.That(message.Category, Is.EqualTo(TestResultMessage.StandardErrorCategory)); + } + + /// + /// Boost Test Case skipped + /// + /// Test aims: + /// - Ensure that Boost TestCases which are skipped are identified accordingly in Visual Studio TestResults. + /// + [Test] + public void ConvertSkipToVSTestResult() + { + BoostTestResult testCaseResult = new BoostTestResultBuilder(). + For(this.TestCase). + Skipped(). + Build(); + + VSTestResult result = testCaseResult.AsVSTestResult(this.TestCase); + + AssertVSTestModelProperties(result); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Skipped)); + Assert.That(result.Duration, Is.EqualTo(TimeSpan.Zero)); + + Assert.That(result.Messages.Count, Is.EqualTo(0)); + } + + /// + /// Boost Test Case exception + /// + /// Test aims: + /// - Ensure that Boost TestCases which throw an exception are identified accordingly in Visual Studio TestResults. + /// + [Test] + public void ConvertExceptionToVSTestResult() + { + LogEntryException exception = new LogEntryException("C string: some error", new SourceFileInfo("unknown location", 0)); + exception.LastCheckpoint = new SourceFileInfo("boostunittestsample.cpp", 13); + exception.CheckpointDetail = "Going to throw an exception"; + + BoostTestResult testCaseResult = new BoostTestResultBuilder(). + For(this.TestCase). + Aborted(). + Duration(0). + Log(exception). + Build(); + + VSTestResult result = testCaseResult.AsVSTestResult(this.TestCase); + + AssertVSTestModelProperties(result); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Failed)); + Assert.That(result.Duration, Is.EqualTo(TimeSpan.FromTicks(0))); + + AssertVsTestModelError(result, exception); + + Assert.That(result.Messages.Count, Is.EqualTo(1)); + + TestResultMessage message = result.Messages.First(); + Assert.That(message.Category, Is.EqualTo(TestResultMessage.StandardErrorCategory)); + } + + + /// + /// Boost Test Case Memory Leak + /// + /// Test aims: + /// - Ensure that Boost TestCases which leak memory are identified accordingly in Visual Studio TestResults. + /// + [Test] + public void ConvertMemoryLeakToVSTestResult() + { + LogEntryMemoryLeak leak = new LogEntryMemoryLeak(); + + leak.LeakLineNumber = 32; + leak.LeakMemoryAllocationNumber = 836; + leak.LeakLeakedDataContents = " Data: <`- Leak... > 60 2D BD 00 4C 65 61 6B 2E 2E 2E 00 CD CD CD CD "; + + leak.LeakSourceFilePath = @"C:\boostunittestsample.cpp"; + leak.LeakSourceFileName = "boostunittestsample.cpp"; + + BoostTestResult testCaseResult = new BoostTestResultBuilder(). + For(this.TestCase). + Passed(). + Duration(1000). + Log(leak). + Build(); + + VSTestResult result = testCaseResult.AsVSTestResult(this.TestCase); + + AssertVSTestModelProperties(result); + + Assert.That(result.Outcome, Is.EqualTo(TestOutcome.Passed)); + Assert.That(result.Duration, Is.EqualTo(Microseconds(1000))); + + Assert.That(result.Messages.Count, Is.EqualTo(1)); + + TestResultMessage message = result.Messages.First(); + Assert.That(message.Category, Is.EqualTo(TestResultMessage.StandardErrorCategory)); + } + + /// + /// Log entries identification in Visual Studio TestResults + /// + /// Test aims: + /// - Ensure that Boost log entries are categorized as expected when converted into Visual Studio TestResult Messages. + /// + [Test] + public void TestLogEntryCategory() + { + // Standard Output + Assert.That(GetCategory(new LogEntryInfo("Info")), Is.EqualTo(TestResultMessage.StandardOutCategory)); + Assert.That(GetCategory(new LogEntryMessage("Message")), Is.EqualTo(TestResultMessage.StandardOutCategory)); + Assert.That(GetCategory(new LogEntryStandardOutputMessage("StdOut")), Is.EqualTo(TestResultMessage.StandardOutCategory)); + + // Standard Error + Assert.That(GetCategory(new LogEntryWarning("Warning")), Is.EqualTo(TestResultMessage.StandardErrorCategory)); + Assert.That(GetCategory(new LogEntryError("Error")), Is.EqualTo(TestResultMessage.StandardErrorCategory)); + Assert.That(GetCategory(new LogEntryFatalError("FatalError")), Is.EqualTo(TestResultMessage.StandardErrorCategory)); + Assert.That(GetCategory(new LogEntryException("Exception")), Is.EqualTo(TestResultMessage.StandardErrorCategory)); + Assert.That(GetCategory(new LogEntryMemoryLeak()), Is.EqualTo(TestResultMessage.StandardErrorCategory)); + Assert.That(GetCategory(new LogEntryStandardErrorMessage("StdErr")), Is.EqualTo(TestResultMessage.StandardErrorCategory)); + } + + #endregion Tests + } +} diff --git a/BoostTestAdapterNunit/VisualStudio2012AdapterTest.cs b/BoostTestAdapterNunit/VisualStudio2012AdapterTest.cs new file mode 100644 index 0000000..47ae329 --- /dev/null +++ b/BoostTestAdapterNunit/VisualStudio2012AdapterTest.cs @@ -0,0 +1,91 @@ +using EnvDTE; +using FakeItEasy; +using Microsoft.VisualStudio.VCProjectEngine; +using NUnit.Framework; +using VisualStudioAdapter; + +namespace BoostTestAdapterNunit +{ + [TestFixture] + public class VisualStudio2012AdapterTest + { + #region Test Setup/Teardown + + [SetUp] + public void SetUp() + { + this.FakeVS = new FakeVisualStudio2012(); + this.Project = new VisualStudioAdapter.Shared.Project(this.FakeVS.Project); + } + + #endregion Test Setup/Teardown + + #region Test Data + + private FakeVisualStudio2012 FakeVS { get; set; } + private IProject Project { get; set; } + private const string DefaultProjectName = "SampleProject"; + private const string DefaultOutput = "test.boostd.exe"; + + #endregion Test Data + + #region Helper Classes + + /// + /// Aggregates fake Visual Studio EnvDTE and VCProjectEngine structures + /// + private class FakeVisualStudio2012 + { + public FakeVisualStudio2012() + { + this.Project = A.Fake(); + this.ConfigurationManager = A.Fake(); + this.ActiveConfiguration = A.Fake(); + this.VCProject = A.Fake(); + this.ConfigurationCollection = A.Fake(); + this.VCConfiguration = A.Fake(); + + A.CallTo(() => this.Project.FullName).Returns(DefaultProjectName); + A.CallTo(() => this.Project.ConfigurationManager).Returns(this.ConfigurationManager); + + A.CallTo(() => this.ConfigurationManager.ActiveConfiguration).Returns(this.ActiveConfiguration); + A.CallTo(() => this.Project.Object).Returns(this.VCProject); + + A.CallTo(() => this.ActiveConfiguration.ConfigurationName).Returns("Debug"); + A.CallTo(() => this.ActiveConfiguration.PlatformName).Returns("Win32"); + + A.CallTo(() => this.VCProject.Configurations).Returns(this.ConfigurationCollection); + + A.CallTo(() => this.ConfigurationCollection.Item("Debug|Win32")).Returns(this.VCConfiguration); + + A.CallTo(() => this.VCConfiguration.PrimaryOutput).Returns(DefaultOutput); + } + + public Project Project { get; private set; } + private ConfigurationManager ConfigurationManager { get; set; } + private Configuration ActiveConfiguration { get; set; } + private VCProject VCProject { get; set; } + private IVCCollection ConfigurationCollection { get; set; } + private VCConfiguration VCConfiguration { get; set; } + } + + #endregion Helper Classes + + #region Tests + + /// + /// Visual Studio 2012 adaptation. + /// + /// Test aims: + /// - Ensure that EnvDTE and VCProjectEngine structures are properly adapted to VisualStudioAdapter structures. + /// + [Test] + public void VisualStudio2012Adaptation() + { + Assert.That(this.Project.Name, Is.EqualTo(DefaultProjectName)); + Assert.That(this.Project.ActiveConfiguration.PrimaryOutput, Is.EqualTo(DefaultOutput)); + } + + #endregion Tests + } +} diff --git a/BoostTestAdapterNunit/packages.config b/BoostTestAdapterNunit/packages.config new file mode 100644 index 0000000..8390c48 --- /dev/null +++ b/BoostTestAdapterNunit/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BoostTestPlugin/BoostTestAdapter.dll.config b/BoostTestPlugin/BoostTestAdapter.dll.config new file mode 100644 index 0000000..400ca7b --- /dev/null +++ b/BoostTestPlugin/BoostTestAdapter.dll.config @@ -0,0 +1,27 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestPlugin/BoostTestPlugin.csproj b/BoostTestPlugin/BoostTestPlugin.csproj new file mode 100644 index 0000000..18ade76 --- /dev/null +++ b/BoostTestPlugin/BoostTestPlugin.csproj @@ -0,0 +1,146 @@ + + + + 11.0 + 11.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + boost_test_logoSquare.ico + + + + Debug + AnyCPU + 2.0 + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {7918D2BE-590C-4F1B-9A72-9F1CE4640AA9} + Library + Properties + BoostUnitTestAdapter + BoostUnitTestAdapter + v4.5 + false + false + false + false + false + false + + + true + full + false + bin\Debug\ + TRACE;DEBUG + prompt + 4 + BasicCorrectnessRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + $(MSBuildProgramFiles32) + + $(ProgramFiles%28x86%29) + + $(ProgramFiles) (x86) + + $(ProgramFiles) + + + + + + + Always + true + + + Always + true + + + Always + true + + + Always + true + + + true + Always + + + Always + true + + + Designer + + + + + true + Always + + + + + {bc4b3bed-9241-4dd6-8070-a9b66dfc08c1} + BoostTestAdapter + + + {30ecc867-ce89-425f-b452-7a8a320f727d} + VisualStudio2012Adapter + BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + + + {82df0aeb-582a-4b38-96fc-aaee773beafe} + VisualStudio2013Adapter + BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + + + {eb0051e3-1dda-418c-abaf-c1da5339114c} + VisualStudio2015Adapter + BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + + + {62347cc7-c839-413d-a7ce-598409f6f15b} + VisualStudioAdapter + BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + + + + + ..\packages\NCalc.1.3.8\NCalc.dll + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestPlugin/Boost_preview.png b/BoostTestPlugin/Boost_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f65b2ee226253f678dba55c4638ccef19e5489a4 GIT binary patch literal 106654 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 Z>l|Vsq*#MuwI%}KqpNA4QHHY*{vQ_y_C^2z literal 0 HcmV?d00001 diff --git a/BoostTestPlugin/ItemTemplates/VC/Test/Boost Unit Test File.zip b/BoostTestPlugin/ItemTemplates/VC/Test/Boost Unit Test File.zip new file mode 100644 index 0000000000000000000000000000000000000000..b418fc45602a5e4baee448a563d09703b6a2f919 GIT binary patch literal 114989 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

1*_*T_DGl8 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

QA!pk@yN) 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

10jHg}<4xQ-F3e0s`85y&XW@SHi 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%0AmXr09Qr>~e^m+yJf@!5$=&@QDTb*d!i}o~ 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 literal 0 HcmV?d00001 diff --git a/BoostTestPlugin/Properties/AssemblyInfo.cs b/BoostTestPlugin/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..84847b5 --- /dev/null +++ b/BoostTestPlugin/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("BoostTestPlugin")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BoostTestPlugin")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(false)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/BoostTestPlugin/Release Notes.txt b/BoostTestPlugin/Release Notes.txt new file mode 100644 index 0000000..e28af91 --- /dev/null +++ b/BoostTestPlugin/Release Notes.txt @@ -0,0 +1,157 @@ +# Version History + +_The version history is presented in descending order (i.e. the latest version updates are presented at the top of the page)_ + +--- +### Version 1.0.4.0 + +Misc: + - A major code re-factoring activity has been done. + - Release code as open source + +New features: +- In the previous versions of the Boost Unit Test Adapter, there was no reporting with respect to memory leaks. The memory leaks information reported by Boost Unit Test Framework is now being parsed and reported to the user. The user is also given the possibility to fail a test if any memory leaks are discovered via a user settable option. +- In the previous versions only the last test result of a particular unit test was reported back to the user. In this new version, the user is able to see all the test results respective to a test. +- All the output (being what is commonly referred to as stdout and stderr) generated by a unit test is reported into an output screen accessible at unit test level. +- Any exceptions raised by the Boost Unit Test Adapter itself and any informational logs are now logged to a log file. +- Added support for nested test suites. The user is able to deduce the nesting level via the naming of the testcase as presented in the test explorer. +- Replaced and updated the user manual which was previously in a pdf format to one written in a GitHub flavoured markdown format. +- The user can now specify an execution timeout. If a test takes more than a configurable amount of time, the test is considered as failed. +- Conditional Inclusions statements such as #if....#elif....#else....#endif, #ifdef, #if defined, #ifndef, #if !defined are now supported with some limitations on the conditional complexity. +- Filtering for multi-line comments and single line comments are now much more robust. +- Created a Boost External Test Runner so that users can execute Boost Unit test project compiled as a dynamic link library. +- Added support to Microsoft Visual Studio 2015 RC. +- Added support that in case a source file is excluded from build(https://raw.githubusercontent.com/netspiri/vs-boost-unit-test-adapter/master/Doku/images/excluded_from_build.png) the source file is not parsed for any Boost Unit Tests. +- Header files are now also parsed for Boost Unit Tests. + +--- +### Version 0.9.4 (Beta 5) + + +Bug fixes: +- Previous version has not been working with Visual Studio 2012. Issue is now fixed. + +--- +### Version 0.9.3 (Beta 4) + + +Misc: +- In the output window of Visual Studio, the currently executed unit test is now shown. + +--- +### Version 0.9.2 (Beta 3) + + +Bug fixes: +- Known limitation from Version 0.9.1 (Beta 3) is fixed by catching the COMException "Application is Busy" and retrying several times. Only if all retries have failed, the COMException will be thrown. A sufficient number of retries shall avoid this issue. + +--- +### Version 0.9.1 (Beta 3) + + +Bug fixes: +- When a test case cannot be executed at all (possibly due to incorrect usage or parsing problems), the add-in crashed and no other unit test could be executed any more. Now any occurrence of exception during of the execution of unit tests are handled and written to the output window of Visual Studio. + +Known Limitation: +- In case unit tests are not shown in the text explorer of Visual Studio, rebuild the solution/project. + +--- +### Version 0.9 (Beta 3) + + +Features: +- Support for Microsoft Visual Studio 2013 added. + +--- +### Version 0.8 (Beta 2) + + +Features: +- Support for BOOST_FIXTURE_TEST_SUITE and BOOST_FIXTURE_TEST_CASE macros. + +--- +### Version 0.7 (Beta 1) + + +Features: +- now displaying unit tests when 64-bit is selected as platform. + +--- +### Version 0.6.3 (ALPHA 6) + + +Bug Fixes: +- targetver.h, that has been removed from the project template in the previous version, has been added again. + +--- +### Version 0.6.2 (ALPHA 6) + + +Bug Fixes: +- A mechanism that is supposed to ignore inactive code within the pattern /*... */ did not work properly. Whenever using this pattern, not a single unit test has been discovered. This is now fixed. +- The XML output mechanism has been changed: instead of piping the test results to a file via standard output, the boost mechanism is used (--log_sink=, --report_sink=). + It is now possible to use std::cout in unit tests without affecting the test results (e.g. by using special characters like &, ). + +--- +### Version 0.6.1 (ALPHA 6) + + +Bug Fixes: +- XML output file will be overwritten when having more than one unit test project. This is now fixed by writing unique xml files for each project in the solution. +- Final bug fix: for target names different from the project name unit tests have not been displayed in the test explorer so far. + + +--- +### Version 0.5.4 (ALPHA 5) + + +Features: +- Debug unit tests using the VS2012 Test Explorer Window. + +Bug Fixes: +- Adjusted the project settings of the template project (C/C++ -> Advanced -> Use Full Paths -> Yes (/FC)) +- When Visual studio projects are structured in solution folders, the extension now recognizes all tests. +- When the number of test cases to be run exceeds 30, the Boost Unit Test Adapter does not throw an exception anymore. +- For target names different from the project name unit tests have not been displayed in the test explorer so far. This is now fixed. + +Misc: +- Project template modified (file containing target version removed). + +--- +### Version 0.4 (ALPHA 4) + + +Features: +- Support for the BOOST_AUTO_TEST_CASE_TEMPLATE macro. + +Bug Fixes: +- When changing the output directory individually, the Boost Unit Test Adapter can now discover the unit test cases and does not throw an exception. + +--- +### Version 0.3 (ALPHA 3) + + +Bug Fixes: +- If a test case is commented out by /**/, the adapter does now ignore this test case and does not display or execute it any-more. Also, an exception is not thrown any-more. +- If a test case containing the macro BOOST_CHECK_THROW fails, an additional empty line has been displayed below the error reason. This it now fixed. + +--- +### Version 0.2 (ALPHA 2) + + +Bug Fixes: +- If a Boost Unit Test project is structured in a folder, the Boost Unit Test Adapter does now recognize the unit tests. +- When "creating" memory leaks (accidentally, for instance) the Unit Test Adapter does not throw an exception. +- In the test explorer, error message provided by BOOST is displayed when using the macro BOOST_CHECK_THROW(). +- When installing the Boost Unit Test Adapter directly from Visual Studio (go to Tools -> Extensions and Updates-> Online and search for term Boost), the Unit test adapter gets installed without any error. + +--- +### Version 0.1 (ALPHA 1) + +Features: +- Display of test cases +- Run all test cases +- Failed test details +- Finding test case location in source +- Running selective test cases +- Search for a test case diff --git a/BoostTestPlugin/app.config b/BoostTestPlugin/app.config new file mode 100644 index 0000000..3ab4f2a --- /dev/null +++ b/BoostTestPlugin/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/BoostTestPlugin/boost_test_logoSquare.ico b/BoostTestPlugin/boost_test_logoSquare.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b0fa35659cf0327709852a973954b89a54e300e GIT binary patch literal 212693 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 a{kn}Ha#Y9NFQBR$%TaW!uFOaQN~x$%=Y z@ltuRA}gRr5rT6K^Qx*2ck0%|-?^7iu}4y6*aZeoGngLsBI^C}1&xvWGPo%CUpcHx z{jMbL2olHBDr1w<`H8+~!bu#6byljqYm+`;fzPf#3JvVS0xL5W=vMSt3Q^`t4p2-7 z-#bIlEFS3mwim(LGrslAD2Co#r)p}V7TZrE_WR}krea=U-Ey08!8}@JvNIb`$WlQh zWd-+nI;RW+Jup!|NJk%^UFu}c@5y)Q8HhcY;-56aqoj+7dmnH$2N_Rvwll+TUbET9D{6?OxMVr5ba;gwHXcW z6juu>`UyH<`csw`P%nh^$_@2lljhi@T8fB%#TfIZzHGaidY9I^7NGWJNK@1*}e7kX99!E>=@w`V@@sAaL0u9f>zx35cd}fNS;F0 z`5c?P!?D1nQgYo)Z+<6ceu*yY*y&0mSYjS@=$ttIaDIQ3S1@d*GI1SySz9>s$-TK^ zG%X2kZTH&edB^$UZ`i^9T)p6rmU{=|S|(mNs|ZsO@y^vNQ2HCazD4R)nUNN^(rJmL^OB^$Z(0;M;{Wf~p+t5X`myCnG-Kk5I(;h%Q(A;L z6*tSYcY?Nr@4Y1)ZX=*`TDzKO3N|$#`(6&h7D!K#xct=F>w2+D6?l~tByS&tq^RvL z1Y{6(?M=OQF#&4{TbsfeqId$BLShH-`M#a?7~44uO0i4$DnKUu9GXN6VLmQ!x8Wgp z@vGyN$osFKn2?7}MV4EpDzAGjUR$sTw*)-!xF{>dgvo_B949~Um0I+3tYn!g?o)?a zH)C~MoR&OBc+n--d77`Qi8sI07=CdP!d82Bgqrx1tnFJTBacN_CAfy!zcDJnHx|Fz zU!YDAhPbRO8B}Fvl?a?&hOIxJ1+C`EeUX2lm(X@-Rh1TT`bF8Re;+}>&4g<$vwh7v zW6!6F6Buk&mMmrN3U-g}j@ACPga1K)+UFK`fF>i&R5BQ0KtUz^%uKY-P+^43l_&a- zYJaJFN++15B}`3_5RQN%58<5&DEy7CDR8$0eI9|>whgY789$lmtkx)QKO zqD0D*KryC)2XNv+H+O*v3>0LI(?JQQ&E9XQJA)T8`1^Nh&0k`>sXDqAZdV6NZcXCo zPrumY9t^DW4KYu^7eu&ZCSTGZH=?WkCK6;Rl0kZPS*C*G`iC}2? zR0&87DKqTsGW00;B#gk8-7}_*QH%O*(cZ{Td)c>)?ulI}*DGzVOBTTg} z7Yc$nV^y;+m6BHcv>#34wMl?{e8}y3+kVuxHHy*h^++Xx7y>*T6X|>%`{aN2ode7V;F;yS^W|yFPOL?J(1J=V%OxcSdih z$ii?IK<%0en9)prefDne)6G+p9iF>(oj%#4d7Gv}m)%@j?wj~|_Vn+vsstBErckLh z(@U6MC?j&!Udg;2nZk8y_1&(TAFAft(y$ab(u1~6j!>i=*VNdH%%)6V5II%}@0n~r zx1;%LjQB8h!EWu+MK-iGSNUB(W4;1?QSmXZ`lc+7We|!G0&RRGu5mp1-b&QGi5+M= z03?>M8|s0yDN3Ia4Lg2Ry-?$!VE%~!>i{mezz@neR(5ep(dJ+8(KTv^fzHa1uPD$D zw#3XCe^hg*I=4$Ci-n5-^$(!VJm(jzcYC9~8CcKA9UQC!h@vS;r#fV_R1y=q5zUR$ zTwAw&K9{p+i67LX(B(0@CqH57p5aa@)B1wme?&Zu>*G@aqryiQr}F7(QYwFDM|M_k zgTa4h3J|pFg48sWC=vP1^VFrM%E|(g(_}VvZW_smo#zq`syy2A%@G|sykW)exl57} zud@Iu2zY=|Gh?2sM7NHjs?WSmZN%S28Mh=c05xeFk^qTpm5cVj6AtJ!G`-j9CFgO+h!fByxDe%^yDu!`Rhj)n1##$-ZXc#v`gZxkv=#y+d$vvLY{-~ zYj_eyAAT1n>719v;pKRbVLRyA`8UD4dBUwi6D3|9QuqK3Ljh(*MWOJwXYKdg?Uei^ zZCLiPhG)OoyrRn4e(IB9pJ{K1Dl!oN>E9tb(N+>x617dV6Iw**MNr?G)lDyBRP>N< zfUCbR8Huq$bF+!a(6;>YKBae;NDc?9d6C7WGc4a~RZZ%PlofMbBh5s!cbMf00xs+o zsBBr)tiImU*1!8nUH$P3y*T5`Cm-XI+rIu<-V#!HAjg%+_~}C|xhwg@wQvJ2pnZ$o zcLIW%_~?Kl$b}xyFRF)U&(iv_QEBoU;^msypLqOurXVa6FNOAr9pwPgwW@58hM*CF zi9j|x!mJN>9fb3~%-83k)_bx>L+D4xPC$dxthPM7rq(oz6Z8S`9kVU#a$>QUwq^h5}y4;T1ljmEeAm39cv6I}aQ!7Z8$k?iu~+?c~| zZ*ASo*maj=;K0TFJy64+1HDiNYCjA;A;59Ji?^H`JL=;l{r<;a?_K`rJzpdIQ1Dki zlR{9`Hjlr60onJ=gBIZ_pg1zm=W6uNh*HUVguYFL0L)drekTH{RdAaG?v%%I%!sTh=vUPDcEhcA}c6)u8&SvPWa#7S5f9k3#)p~aQ* z?S*%ig_zvek`J+)5Y5C7$O+;E@E@Y`oK2wE!jDO|71Lli9rc%*i%)UaW23Rm=*Ijw zjke@Jzj3G9`o;WiqST%8N862vrFGeNSN|TPZeoH+AWRch1E>IYmH$S*DCvl@V%!{@8!^%`b@k}m*;11@-n5gw8yKBylYQI*R{P_c({)N-6 zo*U;1*3)~ux}8zR+EsbQ!xBHICgu6lE&f9oFGq+MnTp=z!*paVzuG6>7-Qvw;n8>h zsW$dzO43LAk=+tHiWF+_*l#3>|9d?Q*6}z;ns=qSvBu_4FiqvfA%1PCj4KxvtRKHy zFAJZx1ZXA4EK*y|z+@8*{OPCK(2H(yAiFI&ne>qXx2HrdXCCxe6yaj zpWzaf)tq7JX{)#B^9t zQXrU6k=$@Zz>H6ef}h{@Jz%;tZFNh=jcW#%ATnP$#SL5RJU$`+{QNzX>QLZph+#0lVh#$sRaH?qzwRqU`I3$y+h=>-o0 zjUp3U0-OZ&y;Bm}_N-FR)#r|_VXPn-FB1r5z#U8Y)zA_KHg-)Z_Zcf-%Fq&pY6=M> z0F?XrNJji5DhTMplIX%17@(YqcYp$f-)ig4Wz(D`DF|?NkW=~NQgWdm2*6=80Q;l% zit~KjH-k^GUfQ187{HU0=4J3WVRnr8m1h0lTVv?6 z{Z~%zNFNGQKKeb6;+j7D_wDzsq8!c*_2R8DEzg(ned9JD$JYj26y#9wRDBBJ2`yb$_AgM!%+d5f7+pyEYU6D7P20zKpS~x4-OQ*PG8Cm$vs4(V}PuTTut1y%o zH<1*`XQ)l{;CDm-(AoB%nT%E{lJ7~O`pqyE$O<2-{DA;C_xp}ys)I*qGg7@)E~MJI zfMaYoH8m~jbKO^acN{}?ez5l%+1;%f=Y{Ovopf zR}mrtC5Svj(d&DAl#(e<#*>@h@FqIUNdCnrP0&@dn`BeYV79aAq6U=E|M74sSQ+wh zCZ!1;>!s2v+dQLz@bKdU~m-Bn8x2&A-$quB6I!Oj2#LHUC zem2Y5@`RJmTGCHG@-*2ubnmu)mS7bgwGhQ9vWSrP0`@&!o_e-UnToZ+u z$hB-kyiR4tyl=;bY5{zF5q(D3Kuu^kD&QtQ$+WF+bsA#39K&auiKheRx|I^ii?|o8 zcbG>2K(#&wsjUg=fCt>acVl$;mm3l#cJR>RTn7K_bRl0Hr)DP}hNnA}CowBHAyzK6 z!ozxfbnuNC#=Sl&5e7Ip^V8bb`}0u;4mV9>l*v-8_h4O6=aYAy99=yody^SL@*f@Q z&41v{tM!vbOphwE-qI#b>+B0_Pkw>NVY z9QB+w&Vq2Ga+SC}rOzDYl~y!~w&O9{-&wS+a&b&Y8}L3rec5vXsBg~7+DIZdNS1|I zmY08T(#U!`n-kBm64UI`y53-#Jko}3P6j*#k4+UZ8=L&k3Jy>~4voy93<7J#jU#!m zX8BzddJ?-%O5g3rw9JN;z~gAU71FZ^(yKa##yVh}xS+9ads&*kH$z;_Gm6M=*pI+~ zO?69w+RYfI?dY3!MKd@#X&=H#E#c<(d-xSAC{H#VylAjb804q zq0YnyYM(%|SwPc8p}w@abI311Peq9QjHNDjkj)C}GhVgo!+dOJ_GU=?!>Bh*c1+%) zJ{cIouwoO*4RltCPs#+n7*}8w4Gfkz7p)qGtj<`D6j%CWgv>Q^N=KFwf=gB*?4Lzo zdjj{Y@=Fp8%>^TQRJ?dfMW9d(SQyc~UGs5V`1ym+X2$SD;YV)z@}6b#PJJx^Tdf{* zS{p$F_bOi`IaW8ANv>Hwj^3z11-hg^q$j>X!DifoT9n)NCV0#^mf;Wk-N#0iC{uV0E>ESMwWMBwQ?$+i}(m|fndn)V#Nv6=n(Ml&wXx*vK=2&G#USj+;y3-l?N=F>;0r)EWHjOmJe>4d8b@aa$nMfOMQWbtZ*)|462I#MPDFzs0A z>bbFocnB(kP_>?aQm$F$P}zT*;}KRybrRwlZ~8a(gSDMgzuvRV&M|JHG(@~8zmb6E)8I?!D>!1Sk(%87RQStLcmxl} zCOoRrvr8q`*DV{vby(8EWj$xa(W^zI;j?w`&}uS{jqEj zbss!nJ4hWF9Nj>8V2jw{qbl%yFSpkd&prHY^T;llIZISOHHlAagypU|U0vizN0wFA z?12rTb}ey~I~Y^EoP?9N{jcNA33{g{Er8vBRqW?7)O5R9L%Xz@%&IEys$pBAqhtjq z``+?rz)#4l&Ol1t-%w0TCf<`iXLJqHZ_sxk5(>|6IXKY!I^qYi*UC0(zn*o4HU$?3 zJ@oFM6?S}~=bNwXPidh$mFg;#kXA1{(dD+A4#)XMCnPS%bgyB3~y zMBNnTykg;`AB~UyS%InF@DBS zr9MKHRpP?RZqwbFGQ!=J2Yix38_tPKGa8%^X+4md#cK9fa?dw|K8S#hO3S#QL4`Z9B6sAOV{cKh4@WhFG5aB#iu)m|RBpz#46ivao9a++FZpkY@zZi=A`)91zZizTmceMWX+E$PEC6Mjz zBUk1xhy0!>7*iNjMuylfg&|-CUAlPV>a(St%A{g89r4Cyz8xO&lf2o?j;qcWFAXJt zk#E@alPY90cR{&M%;9`UwL`nDJoIvbZTf~k%P^{06$#&#Ni#i8dLc8*OXTc5g)NhO z`eiEkW#mVfh_Av3YS56z`c(5f2NztDu2OL$`@IDQWP3{uw48r^^dZlv~%7dmU>(5J7tj|f!lw-oJn53amT^l6xD z4OSZOJ=HSsxks3i<>7%I{t#?8eBfMrU7uA-;Zi2CVx&9vnCC9&l_aJ81qn+mxE`(u zk}9jo<(@*u{UMN)fPTnkx}AANk>LDGTDP${R*9Xo*YP4w7pAd`HZ4)$SG_g|)I(MY zQ(f}pj808sz?9LDQn`z8d1cVQJBf|~WN7j3$QeSsY?QP(vLBm~GVWb`Meh>hsJz(( zI-X!DYY#7lWXVh+3F9X)wT233p)lzUTnlu}3^IwI>th zAGzLb(d}c0GeFmduMohOC#~{%55=YGMrKeK`gM=FE~n`Ze1kMg3=~%7ucV(}Yp(X|@Ge|Q$V47=UD>QW>W0HRx=z@ROSKZB< z7Dg5dR8#RgWjoQTZm!)2{M=6tK(-Ci%<)aV6B`HR`?`;d-tIptqI=p=8L`?iB7j2I za$yhlPn#gt8O@sr26dP+ONxfkm2=!1de6%F&$;M)Nm!Q^)j;jnB18q?jwekBsSJb# zK0bHp!Nnql=VNshJEY2Ir*jq&+d7qm&^0A)qFMAWpz3j2GqZQN3S{y-M+s)7%IN-l zSt!fv=?p?Mv!DMYUJQVZ;^Rt!W{jICN#fksiAC_`e=39zltAe=2Utqbe%eeLaUo3# z)TyA^(@ceE#za~vT<2l?qyl`AI}jz0I3Ij_U4 zveUO*=)ub4!G#tD{gNqhjHlmP}$mQ=$8j=0UJJZBOqw4C9qZ1Et)z-m314D)Pd_Tr&mrNVu4oVV8^h zgv}+g1lbOd=u9ap%to~&J(^j~ZV3k!2vFXI1^KgPbt%KB+p>&F}pkH&LSAmko5$CWwT>$f>3&sj~~&_ZA{I3l`VA z?FXes@4;e3gP#Jm|;U3>_ z+~w8osd{wO9YsEX(Is=83R!t#A#H6skRMvAg0l8XB0n4w5(=6DFgX9Qn=2w~`@aJ0 zlPblL*>+kPtHe2sw@gxpNguG?RF%dGnT7=yk>0G*P%AXees+E{Tu;DS)ZnL6baFQh zy&{@Mi<9GD(QmS4d<*FvNcMzmQh8#=8*+8*x>gqx5u>sS#!W~sGr(a^5T;P$p!9cg zen?8lbryfcW3|MZ*fT5r@2E?bq!Brx_5JJBWto=Tsdz7uS;J%im=6zTtkL{;k$vA;Z6Bq1fLChESL$30mPNYp2CZEg_Lm{gi8 zF#MRlQ|bTipL6|hLvkmccO%7M2(6Hgk?|*>($-%fP>W?v-mD#N~6VV-}5wN^$m4!v9^yh7~_L} z`GXTIshfTuo8H3zw*OtlEdLwME{E)QT z00C=vJg?;RYs6SibD!!$oHd*tFNnLSis9z)lxB>hq?vqz`LA<%P%z9z@AGsqaNR|- zNwP-46ZGWch;}YGgJKgeay23Sz+)cTlS}j88=om%T7LimxVIULR*q^Kjl4jzFZfdr z4D9*Nw^is))d`;vCsA!e;TdU4I7jEF{>}E)9x(k%?D&cGb6ZAP|2FHgM=2Z>7k`gi zvIPIFA)oXoq^5JE;dKvzT18uAlMmEr{Ix8TpW;O!6F;=11=@zreN)uc^)RjL;QQ>~ zaRndbearb88d8SY7a%Wfw8D!>uk>k9QLSsq^Lvfcv(VM?q`V`xHyf#GX;FU+3XCC0 znXGNB#-5K|^-wG>Kq%FUMYc%hI=EW?t1NL@=zX@jbW_To%XNG7qeYcUu9=af#(Ay% zp~1}Wv1B(dek?GANnm6(%0IdS5umHr|Hz}oYKLaz@q)KMTPEhz6d0!Y@u|6e)nEeW zOvCEXhG#AC-E|(^mxdYbCoT&dhS9e<{P^RQ_$rWEt5tjs3$-+3ogCQ1@rJD(!^_6NP6}Z0sobf zl&dddU2+;j;Y-%zo7Q<{Z0WM))j2pB_YEXQ@Wq;uuv0*M zoQbv23sagmqef$zwkd@285d^0WBCvCIe}l$>TS9k5PvD)rQF5GMmRu8osPR%QCgF0P?%5PLP^;b78% zn$tWZ^-HV@n+35ox`{-TiTPjQZ_d~Z_gxy=*_f9BiiixsK$rUhyI34X&2`y|WV9GU z4(M=37@woieysu}G-K5P5v2cn*|~$_to1Tpm2)vmMsb)f1vYEd;h}ey`yqR^%U2P@ zp9NZC1U~dcV$EA5ro=T(jtifOv_9V~`+JC`qr>c=-bWXlc!^uYT;^eOp~QqMSu$(A zP!Rn2oS}2y$e5@sjA9!SO5rp%@Pn8Hc(IB3S<_IGdXhAII946Immu~Yh+DUP)t9D3 zBr17eExqyo1QUTdYD`VIcAshqVK8e!uI9br&k@PJTt|ZX_u$2p-WA&4sZAF{uR*=d zv*E;?PYP`MzY&^pH9fSq&gn{M$YbF;`x|AM-u~!}J-FN$N7)$M^0x^5drCa_Cl2WV z4Iy+#K}Atc>_8Bg`F!_8x?R zGXb|LtoctHU3ozdnH8); zsx^8$JymApK%dMeZOfj5)C<((1)eU)fNMiC2vQvn*lPd zoc&;PsxUGS$qojmh9OVtV~+XxI_Yy5sRfOv5VqyjCb+C0JpFM|_1n=}vT@|TS$L}vxp*COHl(M^l=|?}AD%ie(jQ~4It?A_R z`xf!7GS_L>p=a7!8(S`^m{)CQBAH98I8WaEX405FqOOB;i<_A~y(-|aCIw5{tw?o0 zIEw78ogfaX--Z{2E+s;z!CDT^ejA3#SfxF6L6DLbCEO2L>j{ za)OKG;*{)n*8}UBiZB}3NT^>Ywy;%*IhiNa2gH>(Mzl5-E>4+hT+~UZA((JH&)|a=5hWzj@5j763sM+isyU*s@coIIx%`jQDwKrV>ad$siJJL)BP9X-G@~HKtSEl? z5Qk-~Ow?5BSc}ZO0_N3rI@2@BYbj&)Scgoxd;+DxAztxdl=d1P2ndqf4Yyc7yKjMw z-NUC(GEo(-FxcAjixCXc_1ur|?DuDYShuR8C0dH1$W8s0X@JViM|Z+#%&%cTJ~o6H z=oQ-2KUq5FHn;qTVJo^dmLnFIl$kGW`}!O-UAUAYa6QfRa9u6*z)a8Bnm69P8cnV; zGpA*}9_8UKth}?;=|51m`jz_{6u;M+j(re#`i8mh>*MaRKLbb7=$@EbNz4gH;cF_5 zd)!8UJrQp~zAwyg z)+>87=4!~;&vGjVl94*ZRP;o4Q!#l!OxKpKBR0@$PGwiiOyh8GnUN_AlK>i-Gv7j7 z1!6Uc&tSRN-h9bV<^;jQE98g9eS?pohAfRoQu^7HAb{~oMr*z`93{7g_{0g12yX9MWUx6t%Gkh?3YNa4 zJv{mR_1(7CT1s-g6T4Db@!5(?i^p1{oYb*SQf=`%saT1fBiz=p<{0=>8+8VCPZ_*K zjYe3P$x2M$sx{%zV1O$OE0wjtdkao#Bo+3m{IT*bY&G~b&=}M4q{OuC*CNG`!(5#j zJhV|Q#|ax3wWmn^^*cvUU)$>gm5`@ne2hGKnM2mxp!T74I>ul{J6i4`UPu;4=CP!P zD`<{+H&57~m*KfaZ}Is%KAnKejqmeBfjj(+b9#7mF$UW(mibgGuBG2h?{9oO7P*ga zL&b?tFjlH-;mh)T$Z`YjNuPe!67s3$M*R!b^srkb9n9yB82I{_di5d1yqfCcQQ&^i zDRyzAT_m?~39EYnhV60kj!R#$Kt>*YTf?}`bTkjlW3dRfA}neQ{Ay(3Nvc^mmd-_M z){;A-K$eTjyTZgko3Wwjei?POcl`+&tH1X%9^NwX;iWR}W<=RmlBQAoMf9yvy~el3 z6pph#6hJ&H>N4JA_Py>#d0B3B<3C7B-?lFUcg9J7WwRxh5x$KziEM<0 zj^t=?RR2hZokFbhs(N^7kiXr?)aaLgs!tme3qBQ6&TY^xk75=mmStye`lmNjc==5&5A|E-yVv!WM0SC$9ucg)%t`~o{8rh#QMhz;60brjW5RT|T9 z743!ksfnzDg(oA5)6#syem3dvw50ad=|uu5D79{JSt;j+$-$;yx$LN)8O zG(F{EAuqF>XDa!AS%j!Y2#`pgav7r*=b(u6lIfP1!Wnd+VHvN#A?A68=pcRRWxBkw zc0bEJ`v@tw!I}vrUNlSlNYlH5Oen;4G$~>{NM2T%cKsxCDN`6o2q=p~9k5GZHIsvc zT}xk&@HnlwErls*QGFquui<+O3R%U`1(`c0o;8mXH{B=%J$DW zWwPpTv`TUzJ038ivp<&-sjL+dd^S^#*M7fChCu?ME4V-hCR~{^ig#Nxn&=rWvlyAr zP`UH_0aGi4=&KknQ`dsx26E>PE>K@X+Yu0+|$=VD_yyN1H=j_8NL71wRttpi}fS zw^2WUD`e^44+|bE=eP0`CGvO}Vz>Cp#IM4;@z0p@KnTAt*)y;W^;NRRKw>ne6o+Jx$GJj?tn)b0L3GTpfmaKDz2oCrG=pg%R=q9DcM?HH40{GCIH0mF z)jD(iqfn~K><2$Poq?oQ?glMVsGwvrsWQP@+IDAk%I@aQSD5oSwj(hmErR`TW>Gw3 zE=APtLW&*Vi5-@LMwXa1%Dq4XV^(5%9vWq{U|QsFMT(M&heAepWTXGm%~q~Ym5R&g z4j!kq&Rl*sAW57BYGhCmy&37|_7;sX@P+w)qU$fNv0}J(suCtXN;vcU8I=nfj2S&b z*GTQaDKDrQV;K?H#VC0x%lGobog$Z{qxWZ7yspDpSWbA}CYImz&t%Dj=KH!t`r639 zCk6Im0SVNB(KHlPU?Pjd#A|V1sx*SeV*5Y(^m7`D=+k)*DVt5llqKhA1jV%%&*Rnb zMj<&2WWMZlv81^=D9bx+Fy7Td$^YXH6Ttlym2^MYBQxS*k6ymOzN<0Swd1|2a-YD8 zxGFwiVn8bm32ed53kcE6qA%d>X&mzag9whIze6!LCCns0XNG;an7vz!3X>ij+lcTi z{8kJkX-0}A3vVO4+4)cW5X}i(B!)B~8x3I^%S%{OFMEEG6Zw{s6281@5)#o^glhl~ zy_u75pyljXNJx3GG~0}E&Y#hZf9EVhwKlpCMwR?KTvU%wc+?=EVqjA_rVJ6~a(I^ppd$?``jzFyO7i9U(fmf6k=;?rB*?YWgKjF%6mI?| z>R`ru#Wix(nnzLq^Qb)~IE#L}RISr8NNXzk#xfHq?U`#fY2|Ok(c#b`0$>SF{Le3Q z{+aG{Vn7fM81|QyfjUPv>wo@>W>?m8EapuYazvf0{tGjr{~)D1?lYE#NX%O6X;vyd;t(u;S&Lv4g-Bpb5!Nyik2%bv;sv zS5*?dt3Jj%_ZPR7^Xi!Mqh!t?zZ+fwce?_2d-|qnsRv-XZ zUkqGhYT|I$E~`50dPv>x-ocDjrL0NrV{ zB3~iZf$#zq7b86HJZQOg)#}6IAcA~~he^4i!b^Az@GurC7x%U7p`(b$oO+J6=38_g zx7tM|L=<`Sy7c-;ZavBK$Vze;ADYMis$dm2* zETPkk<}1I~TyAM;xdPjexmWKI?B|H`16v3OtG-4DAWCr)u}LC-jBXG-v_ZJc+>BK% zZ~g&hRarDb(mE1$uAOhf)_&cWNg08#0)w?$Q++zSG^-Iidw1S2{622&zj4M;oLH{R zm_OUX#=>#A@9RkOnVasW%%Y$A8N&nk7i1|FbixE;`dR*SVLo-G6`7wunYOI_@|9G?WL5jxnIWOe-h=>TBJp|W{n6et4x*G3lt z&(X#Mlgm5_temb)Pp+EoJfFO6Ca$m>9RFfx{XygMoRh*hUBt}ziv*?>hX1r|)k$)5 z6h{C34?S-9NDmF^uGe${gWzkokK0@u0E|K_0Ewvi>6<+{6?_2Z5HqDCab*C~Z+94<9a6Nm!fAB*8Scinu=sK1j5>yzOu|wtdma}@8|09Z<)$M*G9uV)@C=ut7FzS z`lRJ=;+2K~aiLGWSlC#=_P$fCV%5|KTs0rjGg&NQwJ60fI=sXUCJ^itJ%@mo6dizc zqW%S$Q7S+!6BO&4QvU5BnGRXPIrAhPuaq&DEW;vSvFi+>)qPA5`3#o7C1tT8AaGk5 zY>Ekg_O=nA@!2nk#!) zG9`jPcZsk8I5Q%M{cN|^hbp;zsqzLz)j%70e1QCcMhL{(E$P69y49^(;&X7|?Yi?e zxaR?vk#MifbmunD?0SiYXT1EAN{HwA_I9CvM^EjF2G%FTW_58!M8Q*Rqao%r2X^kP zxDIRTH`1D^z$RJZMf6{0>+us5K<3&qnybVecKR3@Qjx`NoQnONg>0nh`SDD&qUdvC zEBuME5VIg(yYQ=uZDtgqM1*-G+^Z}bs(pD-)}M$QIaXe| z9D{7{lpg*NRiL@#CRor%1^B)qxH@4Wx4&M!!w~aDVM#4L-!UR0MgD5K>+HV4jF!*T zN*EX~N~(ChZ2qwv-P&7i`k+IfS(UCyG|fRVd66ahth+hTDpa3H?up9nil-yS&en-# zai$Q&`Jz@zQ$#QIA2Ym7E?Q67JpKo-UK#sG3sU7e+6R1Rl5v5AWJ3&^x{UY(X^BPCE0H?6}3HuW4vhM5ki9Z8+ zDMM8|^+|&|Nc9mPuD0{xKH~7YvSXbFItyZ!58SynU_x)iUtu_M612crQ{!eHpGU{b z*}#us_33TY&qgUdE@!b&vS@6Vw8G`i7d^5eSq)!AIr7{BF)}Hy3PX9ovU}7!`NCxj z8~BE+b;47o0#%F8Bp;Oz2dx1DuRGS-ndUD+s`ShVpIj>uqrJMsIvnR^pcV zG-f6PW3Er(93={p!$x0v01eRDlz+BsKhQjf}m)=cH>Q%)V#JLdjBI&4T z{>$~8(_bQCwu-uvRX_l?tw8`cZUZe1z?mSa47dk|RjNur+Okhu*8pHB);nv1nE8HZ zsdmi7AHh5!ruR7TNdNYsn&1z+yS2HNB4RGdFS+u=^2`lmLmI$<%*9Ec4H4-32)eTQ z66!@VtiGWjX$6C*(@o;9EcrF1!%@Dn3XAiio@OuU85~PR55(aFPOG1y7wR-8@BjE? zO_J%mL1%j_%PcjJxv2UMss=#Uyb*vW;S+bOC3*u)HU{9G%Ji>na|ac~FSTf#6TW>u z5AawbH9e2h8T}XPjyr9G3YI1itdb7xpRhT2*QdgvszrIf`LJA&STVt4t@cU{fP`$>wVrAoJ_|dEn)Vwyt0x-hV8B_*JR0g63WDDMtw8(i0~Id64XNLV!>*)v@__67;xVDF?v2BKE#&%~Pg7~KC*9VHl->*pbKZNO z?-hYgQtm<1oLCLy)9rU37^h7BXs>(hF%iAkwe8ojN(%s-j0llkxfN_(T4lgNt`;z+ z8HLaisiF)vPuUVaX0VaScN@%c=Ia~$v7WLt(>rV0%U#}hCSjo)yy(Qv#3UyZ@8D*f zb8+VmkV~{M5rOU9)NR|x%0}-CXMTW{-tRiqRAvaG%vcJ@Cl8zDirfCJ?k=9v3zzt_ zf>JNLax=&SQg$3w{sQ3!3F>g8fye$lBLS7X>lbd{t5irw#)qsueUugN(|GkwRk9R7VYon-)<$KR93@!$}a@MT&^a-0VUB?+QWE)4?ztA z#gM?II{%awKBqvdOOuv)u9^KM5|_Qg3KI`J3c#R;qTo`LsJ~sj=mUV~FAc1Ks@!Sz$KJEsWSQ0u-y?VGm&A28 zwdfoPc6vIi+8YaRoV^J7yh+qQFkPRjFPKIQ_&YyU7aVSBj2blqRKNq92t4zDlox0+ zh7_$Rp(IrcISuc4fqTkohv^4mR_XM4X5R>0XN24l43U3BZs+`z-pOAcYX5KsS)a7O zV353xdK2E+C?BqFqKTqrAet(ZTw_Vwg2rvPzOWhNLVc_(HC}qGyd_aZN0lsM=-=~M zo2cBbROr%KTrD#!SBWJv!v_wSQ|@%+A)|GMN_4rr_f&=*{Y50d_yP?dw{moCGC={D zDK`6YjCjXU`^7~O(m+0AP9{>x!Wb^aXG^4AS{EY(u`!~UN*|eYkEOrHnGzjA&mK~k zd)cJ%GU_AlOjV|iLZMBiu&kl?g$#h2iTQpSVEQAi5^qQ(K!-f!b!{~RS>J2+_W4RE z%StXb0tfC*V&|a30!mn-lpb3dlP*17_q()Y07u{Dj&TD^Gap+DM7Yj^jp*utjtr6; z>|z&Y5a2^~?OPzO{{yC@Mty5T_Qt?!&Ckkj_&IxijeqUsVCDAo=pfg3tG#1NORXd5 zY}I}IKIhE&m7@IBngX~hzAyEvwtH%2l7p9Hu?<>Zu*oFJQlNU(Y&5lJbVH_YpZc4h zaWUZ5)*0|}>apZa_dYq0FGtu5JR0w;xMe?IR(`M;-r>#Hzl3^-(my??vNgLoUi>zt zz6oWJ-a3Hco>#)=@bJT3H&JnwVcy~i>z<}DW+wvxJ;Va?3Hhl(P$kcI6w!aV2Jc*W z_^v_N_5-SW-<*hzMG@4}Tv!Tuaa2s5CIFO^uI+5&PKK^l8kvP+Q(JX&cBX?}{d4)6 z_$k1T0RBJ}0JKm5n+j0ku}lN}y6YQ>tq>*Hj0d-Q>wus^58sP#27+7Gz-kzXV$*oG z<4KDiTd%A7i|6)2@f}GiV^x!_8W|JuNS#OLwM`yF^Wu74T5BcM3>L0jH%`D<|Wl@k-T{S8k@dtfH;k0CbxX zV?i4}Kj#JpoZqw-%y=#Hw{jEq2A*@f7~qVGJ|-0c0wjt+DChz`8!d*DLEAZ<^x%7{ zp+rI=*Z@T7cWe(u=Jm%8vRA5bHD$}>b_|jQl+q$v6=G?;&9L#HQVf1@g*yQ3LLw(~ zIY3>oh7pv*D+at(O7&vTPy*Joxyh(#Hz)?A!QUdHz#igVsbNe=2cnF@*Wf0=W|U)a{; zqd&xicmk#xu%OYd0G+NF_GX_+GjJ~Y`c5Z3uwD-U8!~jO`2bWK2S{xIxZZ5_jM!u% zcV2Qi(Ls_?$|D(|GjthN>fIM|0`V7`Hjmg1YvomBaBBz4E<+3+Yd^tz}#KI|cE z)S?9EJk$WnV;*OfK@0O6fruY%^H4j|s09GXj++P@%mO2an1g}*ZHs?QP=169lums_ zKz%;Rx}tXe`{UlzWeg3Hd%dllhw;Nv%S}mjK(O~xovX?XY|Rt;88Co6aj#T1xqp$- zbam{m^?H5CT)w=dRd#`n`b^m_%eXo11 zy`4;_i!GG%YpmEMc&BLe=!P+^%N2}UyIe1d%g>){5Y?3BfU_uAES zEZ^+u*cP8RVo3Ql!zdAwb<1PhapD^+sJux(>x93(z3E97`_tt?LZ?2{uSv9ZYOLQY z?y^L)z1DT>!8g6U_I~{)YZw+bxjylii|I&}=aF>Yt@5h2RA;V$y5g8KS>tz{wR0aG zdp7-ew3gOx$BXGjYgM<7w6TmD=Xt52N@hDtIe4P;X(b{+*ekPi=>HEm*)Mi?ynrOJ zt0~>{)>}-bW!9@|sk^=P1MGY<3vUYylZeggPaeeZu!AzBr;}vcZabZVE6Yi2K*ipQ z`NX79;mY<$2Ml$eS(z#O zQB!rP@M!}EDARu@rjZhtvu-Qzkc-<0{U4x_)t#0lqYK?lB_lRY_qW$ouHE2kEo#20 zXlZcT_{}N2cgT+P@GCM4q+OSMPq>ibs#P*Tkql?=wz2UQA!eqmZ==U}X)2w1Q{HlX z>NxeQ*Za+#ujD1#nQ|;=*)1oz7XQ2N6+_1LGb7(FKUMFcf4%gcOMkaAoxSPN>n~f^ z&aWwV%-S*HhR&8ry6Z`MUeXfRg2v0o&2DHoh-WTeFs}Zbp@eNxbAio{FUFx!Q;db# z7e4uk8XUS*nwr=+Wrt45kjY=?>N~h4N~rc*>lP`JHdR-m?e;fu>2u3&Pq9&5F~25a z_kqLd+Z{>lLKcY~NF@F9%*L@u%CwN{UG5Xe(_uwDW2hXW?BAcfef;k7g4O+(Y-GJE zjW&yuP;?iq8M#T^S>|E##`HVyjU-&W7ti$ywXDlAOUqLEm=+}WwLMRDBQ-T~_>{+< zYw7<%L3^g2r(kh~Q~fjP7wyHG&vvdnbgoSAih&vLU?Q3S?ZNGGdRqE&I8HcfOOU%p zN--%a**oT;lKDn`rIVSS1=s4VA_gY*UpU^&^LvwNvHZLv&UqfAZ>aMOjaA`qT1 zhYfdR4cq8qJDB8cQFBTUj2tZ&SlE5_LZ-J$((w7Lq=#<{r%fA1O0ACsw8ZyTwWQs9 z5)hp4y-zi$&xyX1`6f4RQNhq@ z`-wNNq}qt;R{H;fTFJNG$aEpGP~z!>7Lhy?@B6hh`;}SVM&Lu`6yx> zF@#7y7i>?=w9?4;+_p$@tnkw2lfnaty2dg0J+fM3JyRpelkS92v$oq8GHfHSZuvB) ziIqIied_VUOU8!2Y?df|FsrVhb)SM&%Z^VG9V6G&tZ7Ias`XOGN`S~48^}sh^bhtw z3G(^WSWN%*UeJlRiEXJ3BhR_m%pJdfPIU*pXc3&2L5k&%)<54p=8M3BaR+!eJeN44 zxVj-=u3hSD+vU7#S&m_Pt2{3^EZsL~JI^d><(|PZVJ@%lhOa&1P!azuZk2UKl-&pE z94pm$mcH%D!FR_=+WL(pn`aO<{eG5*2l1hQI`-KI(cByjA|~qD*nRnWpdX8*OWySI zTuJ}p!t=dx@>Nv9OF7Hd$N5ImSJ-BQ$*{?M8^~O}k0mxOg}tKbno1|k3_TQ{D;2NqD=<1&xdrH26-IXZ8Yt8zU9{FWD+~t29GPP29X`pS;XO^4Ifb-8hm}f=(rx@ zvRz%><;=eN5Aj#iP1oKzC*YH(=<7G`WTP@2>b1hKswZGWAc$c*X3|6XAa=NdGc0Ke6cci87Musk!HUWn5vD^jO8G zN?x0S!%nZ*IaJ?9yLNFWkIa&`{>@Pm1+6byZuvw<+>?JQF<#c)Vd!2Fa;IFAMcm)A ze0Aa{5#{RwWMOTIUc<>vx4Ygyyi`2iWKVH(UZc9!A$M&J_l(8WWdTn_i2d1QeIELE zY=`kSY57H-IXd!q!1%$zJ8pk9t5I91mz^8CtEWEbqWoyx8Oztx<9qE>tvbXfjup$A z!&9Y^v6iqUygzJ6m_Dm0wnep`zx|&6(>aP=&&{LGOYV*B<{@TUYz^s!M^DezduTbo z=c;D<%2VSCuZu`1I6tQU*Tt1Q`qwH+)>E_O(z++sL7#Nojz8j^NS>-iUDFSJ*=kW4 ze#Mji{Y+M@&fFN?mANd^_KKC%$`Upxs&~FWaY8?#1x<_9wUm9`^s0S*J6aQ6=db+I zMPuDF{Dnc9==X0U6bdJgv=?6ac9yQD(lUGTB`qb{mR`?A`TXhU4np4~o#+hXF#SvY z6@gPH$t7&uoo2jlw4ztF^|++DL^+Ez8Kk89Tdu!8U?JxJFe?9uB;K7~(xr{w? zy1L}W=gu~n)?KlEPnnSKMuV-qgbr9NA{$*?5g@+%`TBV&_q=--wpfJCS+A3O%fe1) z<4eu*v2W&%`*>&T`ZfC5<*qkw*{@723W-{q&zN2wBOq(2G~t?n z#dPs`IUx)6_dh4YJj8tMM16z%(V3n2U{aKzI9W{U%&RJ2+OLvJo;__98K+rwQ>(&X zzw4a9-L{HFM$bm_X{QZHmhzsrLq_q$VcDJ_eFY`0HDg!aP7?9YKlMG(aQ02LscVjo zCCZbc{mbq&$~;rOONhou zN5@r*XAJWFdVJD|8yB?3oDtg-?@xGF+uxWdzb?OZW}_G;&b-PQ zPOBFl^EJzy(Yf#WnZOB>+cXyp?XfGD^p}xtvx@Ktd(>=`GSr*ba3Xo%VpEoGS#MhP z$v7-^&`|Ge{_~4<{Z;(C&7J#MaH5z*3tLY1NacRVCNk@-?C>_F}}|j7#RjCZ+BZ z80ej+bahGNoF_qQ$LdzrWPXS+EIhOAz(yYSi0}94KZaTFqGL9ra|J&MJ5g3MpFG{N zZu-T`Tdri#tNPu^!a{WT$ZA#~V$M87eUYrdc|{plQFs=oRFvK+N0CzlkMmJR0R1S6nvVa!J?6^z!cpT6Qb^PLI17 z8mc_%3GW$C(+qMrZ#F-%Q&1I-Ws#%8X4$;tnw-$U#d;s}YUBdasf1lsy?ScRuOv^n ztVldMc(vRBr!hTord1`m2iJ%$?pFP@@Wh0%3X8Mr5&|6uuW4-+bdoi>7C7p2ZSAVg zoDl2lR^K-$`8?ve?yfCB)?KwD?34LfeC^3fHryiMj|r}SnI+`mkN zKXJ}2Z~N$D!Dlxtp^bf{JDqlYa$eUz;Sn#fx4X9Nu}J@*cOAKULDGWc@yzmCm#tflQy%T^A!xl$5?Mb}F+|_NLbkrW3a;dRkvSAS2D|Sw{55{a23&eOR`{ zyoJ@`(*06$RM41H-942b;;KSV9bB{NWpU(30pF()#=;_G-TVP$?Tm|&C3_CtW%VbO z2Ly;@!UR$|PT{*ymF5e@{qvWQ>D~LL<=DyJtr(y6-A~j~%4z5<PQ>V)EE9{p^#5rSrnNr1A5}EGUMv06L#v%fSC{iBw+uYp z*evI-|NOM3LPS^i>J?vk+@*9j3J~wMu(mIwYe{U+_j=3eijAeAW^WSa+$-?eKBS=0 zgWTaGE-CwniTWyH(mX{~Pswj_)>{Sg?RzZ`=^l9cvdzfV<$h|u5+^e*xl4Bn9i8JZ z`ANuk?Qkt;FQ-h0RST^QGhH^=jnxt*<(D>oRh`o5CGEReQQOm+chvLtvD%Bmt>P6w z*bs@t+mAnormCi{7&L(J7EKtK*J8I|mGCN&*Oy<=zoe}&BfsC`jFJ3g)0NvLGtVsz zIM|@H#P#t3#i=jq`iD#P{m?zA+YUE2kbznKU4sJ!JR&`61OgL&=Uu>viIf@6%i%C_U|&gIo2o zQRfGzRtgXeQ8l6FL*6Q_{L%X2#UDrVHm7wjB<(M5l}{CB-*jA>wwZ5V)ybJ8cH4|H z>8GVmR?eAARRUNuS4T}Ave3<2;bz8n!vh*IO`gXCo743^2lKkG88G>|mx1rZr1FfI zr`6ppwW--t7Db1-^frIAVRr;P6e5yy-imeb#PfOI4Ak{|n-^~p-F)FmK=X`e7B#L1 zIvVCZBnc`qiitA=U(?U(4u}!okl|jI4`!?jH!s@L!s`FPY&FaCe3vil!3n{s+pT+A z9p#+t8f4`syPs;_;(ckL>N2+>36-me&aRZfiP@^f!I# zZ_=5fLBc-bAwx^HO()J;)2y{>i)%dvYS7Ej4Fp-Mu%hW>eCarW5Z+NrVizgs$TB6d^ zo*c8r1SPMW5WPaj^-1jqrv-g6=D)UWz7%<{e09AQVJip|ZP{DVLk5t;mEnR{Y}yAO z-aqT2QNJD9r$r`JRmx9GnyhkgTK7YpWdpw6=j|L*Y_?pgeT!KA=9U#}L{HS`XGBaKX~ZQl%fa-IvW^}b zY?36Af6DM=RlpqmwGwJR!*sLSdOGQ!E)R+48xb$q-rE+VbfJ7MYe%uw6!zsA7tUOH z{#3xxM$i(QnzFW#(dk$3e@@yTo!3CZ&~ z##byk?9+p)wHX%g)%e)b;36%)d4S~M(`G82HT3LD9sledaUxE2>gc)V6Ud`$0-Izz ztb5DqjB>A@%1msuZwy+r^I6idC9cP|MNC}tP*x)%ZUSkyc&@Fr+P|mkO-PK{PS%=@ zhn7z6nq})=N^f%PP#v>s?j~{Vaby&se}Mgj014w=J3_4AiW1)zcRqg_g3D09qq6ne{SNo{CJG3n@_mX?oCQ52N za4}&&Ug~r@F(YE$n_!omW?qSQ)enllJa&3!!1 z9U|`G7uR2s*(h}KuwshOB#$^dkB6BtOAf7x<>Xb|#@us%Hv4TKI&B+O|cFw+Y*N*WG!AJ#6i-8j*{yK0X$$&?6#aXedN{ zwTDPf;ro!)6@1&&sBYBiO*hhKy}ZcdVBTpH^kwMN!PTeQB-VV+@kt&;P8@A`+I%P@ z!0qLPO#@cXY~gW`s{J}5CdRF`Nj~dfLC~|yC$rpEi&rlfAtpSslSGttvaHnh@GhQo zOEP5qP~Ip}<#gXq{AH|Uf!Lm`AW^Ne{Vz7<8@aDM>sVa-?(6U!p>O)dp9;NJdoMJ4 zI`7%oz4CTl5BzS3%Z^rkJw!x}T&gWLxu`?t1raF0*jtstSPKwqMS;f)1?Ay~7WqIk0q9ZLxsi!KX)P1Clz&z>I z*GEj0U0AYlgo}`h$aKHiJEPR)1@3g3thLK@WJwU=)Qdjq)`{^0h+TL`vgh`w;9Xzj z{cb!G@wh)!`9fz{f$%KCS1mv~8nUe)HA`2$Q7JJx{rcf!1w;Nl((JiK@+Fx@dI958 zQoJKROIRBiM&?xnHa|A8)HS{6(vtgP>p~_;?OUyJe~f(i`cz-yJ5W*i zyzs@{HXkd+{JqWZw43ORaE+VQAr}xk_o2^(&jW~a>0BlDL}6uttFbqA1dj@5cV+5c zl4f;}VNcOgEsmZqr@m_pdtusP+biQ7f>j0&7C1HVq+ZNp@zD;cYwWH%idHGFmYL#x zUS73z(?ac}!?`TB#oEg{5fdX8>I)C3+FN)Y=rx0}^_?>A;XZX0PgC>-IQ_G*6#Y zH9L{BCl-Ei$!^}=inlI4*w{VxeNpq5C;V)lgkEChp@MJ*w4@Z_;74sqPIY>no0K@(sSdzN#bLdg;r=TPjOm2b!nuQt;uq zmT}vuKE=Bvs=95{wiA0kMTmuNolTS@cdJa;vSXuvDgA$5<|)?Ox0R*5-ePBXLq0=L zp@*=I2au;eBz8^Q*MvycNU!I&tt=;49eVpz8YwUUoPh3UYf{8kAY1PdPnWDYkW?j}VF7EaVuhGB^B0aG|P z>)R1S%C8G;HRQ1vKVbAIK`CKnNBKQd9z?N*_)9z3SHCT9JuPTNv{1hjvnjo3&47xz8GfS?)ds+oww>gvV7i`Yhh=*F1Tp z;ky%34?;H!h{>-#lN7Y1?PE)1n3dv-y29RjEd#=+^Jb-$SC*&6YUOlg_Ea_>_u3%RvC!D{sQ`da- zl99xRuNz0nag>dN5=L$za{==^`;oxnjy~BM>wI-c? zssFi0W&WY8oq6w)Ul@mbo;D}%)AxOrZ_@TYBTB|Mx9kOa3T~#*6Iw5oQjU%o3lXuSEyd`FQPwtw0_a)8G^wm9c zLp7(}grhAodOnan2?ApwTv(fnSHr_drTgC_ICGjduR9Yy}KeqIK%l;*2 z9@(6&e>dX&;x896jMwj(d|}}% zFmS$n)Rg>_HBT}VhQ}Eb8WGc0@Ctmf2N)Hi2_6@L4$dj5y@ zmEs1|gvazaubN!mpRZldbA{>G!B>PucL|c+ah;7@11ff2?Z5ll@FG(5@$!NCx6{YgM%_JWq4WQoaS?F2E? zq%qOFks|SWTd(rI?~ytw;v>O2CP)n0PmI_nMPgsH&#vlem>g(I?8e%*E*g+@Wb>rV z}q!v%@(m%FmJy|bSOv2I6G+R6gw z{nezXS}BGqy%>~nasL^g=9>dDKI~d=lway0vq)~!;;lQ@PI4M~GJ|*!GH_B=8F{bC z`|aV5TzXSAV?|4cR6>o%&8$5QQ6G!fxoH<~5G1F^Gt@&ekDSZ0qip>{#%wch{I*?(hsaa$o9D?)eLt8iYJ@XVX~GlH=9>^rqHifZ5{Ki<%x^*n%v{!%B3H~!v`V@}}c=~qWVWaUzW(MV| zoq1u_)AOm@&oWbeI(A1EsYRzMmF7E+Yg+2FUVFJ`0ZVz5vN(ygZOzG!XUe=8kNAeGex%87vx;g3?{RXd_9E+If zZg`ZP;953$(-(ciYC#i!R{QCMRho{UeV+KcK8yICT0zR9Mg=Uk+4rvN#jVG~Z>#mn zwW%aq^K5=twL$IcdF7r}Wb*oz#>RJ9Ql?j}yQXEtsj3VhomCFmYk1!mZX3W>|1inN zTlYv==c0*ax2}XYw#4+NyJe=vbg5NcxgfF1x;Zs0khe>;{Ic?=?jQro_&)uA8C%c0 z?qR-9#XdfshqOLge^5C_XQLeNwgF<~>BPBv^<8C8+-wdczJ^9Z?Jkj zJZ8^zvqm54)ak5mYgpY@Xu2u7q^nSa{!{#h#D^v2`fryd4$+&p-i&8O@PwhmRx};k zXum6W-jNpG{(N5qrNmkG-!0z6g|)fSKfBDQ@Ihd$OZgRn>Ih!PS8~?$tMfd&`akdy z^pz4iJxTf7Vj;PuW69!*SYvhDi?%$(w^BfAk3czVxQSkRzm~QyIsP~Ly-}XI#Q*e> z{HyD2mV7go&^RSBX3d4RCD&gzl_}Ndgg@&Hn>TYP86uRmqL!a{>r4!E;eF@j(nFLz zzgV((NO08JRrh8YZR^Q798AP4mCxC3x?QI)K<1sfo2&5lLUEu+${m-eK;ilwA+JNM z23?>HikFyMu`5mP^0G%5=BycJALGXob6K~3jgk|a|8qxWT1$P~3%Rku-(T->+jg^{ z%e$uOtXix7uFZD^C0pe_l|G!6A6`0sL7Tyh`=w;<)OowA?u+CMkyL*hB`ssCov)wK z5M?=Wx@xdvpm}WotG%^f$UuRG1@wU%ry`Qp&h6)c%N z_Hx|D{?{rFZYI9hD#Z_c-F&9Z`cjPXPXB`9`0*2+bJD7ZO^o%cC=_jYxv1wW)ot+U zY1MPH)HyNZ4}6Y}G)_OU(0E#-_0)OSWpBB^>uOydvSL-hD3b8NbAGt&lL%rY`KjG} z`iW^0F_+IMs;P`#ps?Cp_{QE*ZUuAXTW`u~)ZF*6D%76fBI}pcXeCdU9Ov0@9USS= z9L!5qJU-Ch&#jUVRV_@pL0sc8%8YCbbEeHHzVxYa?a2}XnBmIv+U zQRmNDaqZ;DIJWoJ*^wCs@~n2w%um;^7jqy*+2(^tb%wR&ScB;g631<5QxKL6-MOtW zI{j(s@e2Lg{-w(A=kSQ-YJBn_zG>S`iP(-so1c*P7c{mPX}>w_Aof(DV!KILQ`|tp zr{3R%*KypzXI4#DHJX%WRCHJHpF5)>eW|ReX#Y7QaUrreX4~BW&H2ICg?26w++{R- zn|4*_%PPy}w!3LH$0Zy`y5!ISIYYTR!?~;Rf}!Aw?7}*0IbIp3#)sf3 zy~Ssn^TUHPW($yOla82VtP>#id{4DL()*|jG{S`&>R$Eq1Q6wJ2O_!m^K#Spq+ByA zz0ns*(f61jo@eqIs-_vus*m2>mg*gNB;;D~n;CnZMZ|^i2zZv{Uf$U!?apdd-o2M( ze5HLR{pOet*}mvlZRI#Azb^IE?fct&wx^euC20uR>z!;_JbS~Cq|2Az1hx%P>FT#l zkQ`Q0reB?n9yqGY=?JADu!H^&2q$?gb~+a+`!ZsI+>K&gqh?W4J~C=QN#?B`)HWyB z@q=N}K!I=zlapRf0$)eibT9li;+ft-@_w(l%JQU}-io#l7xO*{*0~sNDJtx}njD^0 zYR1dH8QdEcNQ(Bdn|KVyDGT0zVYrKacBOsw+WYM%SmOlkMjos#Ofy*b$Wf>D)0q*y zTlbgiUo;afG@Bf$oi155KG0yB2svls;XXkxNRWQH=hWk+MDn238b13evA(3pafb(C z$8?)&sqeZLRqny&W#=qgtsHVy?!W;pHtP=kx4xE3_VcIJ8tfg$;tM)2eMx0>y|%rb%7Z;NWr!?Cf+vdD*RpC8+u_oV5GFQ1DKij=cLcgAG z=7HX&SEHUA?&Kq>o2Iobt;x>Xaw>4&J{Fn2$F6MY@YlM#NNRsEAE*+<)hk zncKv!IWDpmyYIR?R_wYW=|*J&l4 zwLLv|hI%nA>hYxDhKd=k8ISpiP@%}Kp}za>(0>YhRm6Pt>vr#Z-v@=?w)dR6d-suP zM!O%D`92l&=a1L=I{M9`+S%E2zV2Kv=h$5suqt-2Slf)ZM-8{8e07Qv^!~2bws>CI zqWz;sT|LxtN4WAC{jy3}@VD)xKrFszoNka+)h9!bG$C^5R9J*_qoTgQl-}(deho<_ zF|J$9?`ftrK7E*2EF0k;lP0s-UU#G=D|BQl4_n)B_4Cj}s+%rOB<+e{ za|*kDbU?4~gZ<`fb#JG!9xHLthcvyinjxOr%*f1dh+Dar{Zs*2Ry4EnFO z&aHjZSmxk9)vq7fIRE%(IbZ*k`SQmndw$nRDmN`Q6|YFKmY5{|{*0!stEc{CEt9q6 z{g{gr$hDmBIyrAMpVq|ATQO$iTZe74JGY7w`j0~v>Se^pOfj6R?~M;hB6Lsm=T|AV%N{_1Cu-RdlElUExP<`VrGf>||Yf_!}C{f)5NLW)0d_XL)0f-XI=V z2WKaAdv24v+xl{l#uE4SBdy;Is-(83b=dpTn-Pi)a~Dz3&5`u;vFYP2yxGfYJI!W$ z9C|%i#cj;>cUpI^?DJ^JEWL4hT-4=zuLI`R2B+w!NZUz1*p{_BWWpTbMIoaI{nOHJ zCuiJf$-K5WAmZ}Ix87!gx?|o;s24*#?(q`V>ad!&tDnqA7xeJVSpIV35tBA97>euJxd*4vxXrpWvTa8E6 z@Y0JMZOwOD^iALXB<@z{ldO!YKzfDNcx7vLOhC5Ay}?9xe{g_EBzdo`dCy&!>eF5cq|_F9d!e z@C$)o2>e3e7XrT!_=UhP1b!j#3xQt<{6gRt0>2RWg}^Ta{s{>5_V!XeJv|hTzdrx} zApq{XySsnc!2f^Lb9^4$cXf4fY~cSk2B1B6Jo!iEG3}Wn6PJEGGWS6lbB^QB>T%b> z`9Jbu+A^~L(f0pHU;pm9;2x#3vy)>3(DDD~!^mTf|A;(poY4+47`y!Oi2ICe=De@^ z+~Yt!^ue_Id-X(pZrM2hf8oPm0q)z|+c`D>-Tt@s4V=IeQy};6mB)+)^-&lZKRYsY zxViaRUGD3Qe6;&}^h6!BVf=%U_4l;>Z?_RfH*o*``*)5FKtJgFkA4_g9UUE1TU*=j z@_-w#{;Ln#qi@tl!I=K6pdW@49P$0n>SIi(gTmrLZvEVvmuNW`d;QP<& zqdjwvX$MaKYFvy>LO$A~KsU%h`+pRpe+18eW?hW4udy|Bd|o< zrluyUzP_GQzJ2?~;ST=RSO47Y(I2?PSb%Y3V8PZ|5%@ChkKBTdZ-WE0f&DUn=oe7L4CA`PS6c9pex$`w|*Gj8GP}b z`yAhaIrM{lfBN)^a|Hgtl!*aKIa}}q8;o2wgY?rGdst)PzU`$E-->Dj1RivJ}~`n z`!GB+N7yk6ux1LrGrnI`R7BH}-o5XRG2`S|f8ryp=xUS7`O6#e3QU-fYf_aGCp86O6R78OsL$NzZp&N)e`xpR%NLFfU@phl`r;A1!aslu`pL@5;^_3@!v~ICqb=+fc>cG2 zxH$$l+=a0NhBN4f7|QVX{P{ELV_q&tZ|DzMe`Vv41svgz!2R93chuXrZ#j6u=P;-A z6=yLPU-jQ&XvwloZYp=O~bkBRFMz8gUul`>M}~-hnaNCM6~P zp+I(Wa`NvyAWnb}^o#3E8`NV8uA@LE><3)JPGJLxIhdcIC-(>AgI&NbVJ~P4ogfqK z5!d=^$1USOaSlCT1Hcvq-1K!0e?$%oAA%mg@!w2&d*7sXY~8@Q#?0G)X5+vKvfxL+ z6F9$m^@@s(jiut_<2n9@c>!2*W6ZR}{ED~%?lEToXJCxBadB~d7TiNU*b4j}M~0ui z+HlJPhZrN{$KVlT07l#&=nPCSzd$}@Kqu&i_RtmhaqGn0{y%XJOd0=YxCb||0TkvO z_Ym8_8T<}B!`E?)Pl%(`mo286=yTxmqu>6h7y3jU_%M7CI6Z&f8V1OW5cZ*!$0CEVk)qWii)D1K7Go;3x0`t7Pj>x{}=<-R=^VV(DucP z7n}l|ne!iyFJHdo*cs+y#NxjAXShaPvi-IvR@gCfufLquAa}NIDckoMGLmOZKoB#g3jk{6jWk zJa_;$k&%&9L_`F~4!|qs7|7-Jf5=4qV4D~VWWttU3k?6zqc2<_ zX^k*4lb}6T<=RyTx0kL zKEMn0agFhvzWB#|2JWKEXZ2X5_GtgB%XIEMhsX zfm4)1dQSpvU}qQ~`a*ny9l*xW7wP~9=+Ar@{t;JD2l9ad_A+1#825jZ|APl^{(&!a zYHn_&8fhPHY^0y<(Y_9Uhc8yp`h2B*mf;_5nfBl>J}Hi}y>O0dq3gpppgZpW_(8v@ z5C2CzhCJ|yIElSe%#*+$@gFkqfgH2}Pl&(pP53>yhtHxNY!bf3iAVGi=S+cakcIY` zchD!kGxz&CGV)*}hzaNqa{yur>~9J%KND zYHFaLb)wYQQcd+Wblh*`%xlG^^mA3(Z%_wqpf9*Y900zs^B8*0EiW(Q*bGyrFaA*< zzJ@lpZ{Mb-PMu0gNJvm_Zf+cmu*T+||Irt0s*v_OaDg}s?%|){4!#Bd#C&`A?p^BM zy?cLC?%cV<;SXbn@5ASjZ}e4{Y0JcY@Q6Ne#QengKgQD+|Cm=0$9C`DO${0}h}yPo z8|ORP|2Oi__yP0**KIXlskZtOx|CAwbtN2IfPa0;|3X#Me4!q=W#T`Mzz6dM_(a?U z&bY>n4`T;R{0Eotqrrm*Q#?F86pO{;;Dz;bU;INR;yLDX_#$i#zK)!4!-fsikRd}j zMO<8*>Z^=+NXemIB!!}s^?+eZlr z2~qTqwo!tDf|Q}5A;<2353mCU|LG6LfH8xAX6}dYcQlky?KJ;5c7CJRbG4NmUO)WL z{slMxj154>Z}!u~!3eehnYjO>t_=T(|E{jC9E^YyQ_h_`$C(?Ly)x8?9Lz(Q7npns zHVI#pl$7LP%(Va65%y(eWyP_}VZ(;~-rvva<2u?57%+euK72TJ>((ufjbpy)EC0tB zF(#}5L_|dXMm}VKd&~p>E&Maw!A}v7!C&*YI;tl9F;y9VhpI`sL)9kVrCJ()drvBZ zj$d{4b-(*RcMJgkkOAJ2XF*SV$8~Q0agKty27Y2`Y56xe0drklT~3^2_-AYsvJo5L z@5uEEX&=PA0gnERL+*Qs6ByS&(uQddo58vO^A>Ul$YJc8u~Bf0aWZYVk7&caZ^(_y zeSW8t@{S`-YvsX22~9FhIdI z#KfBF8hWnC=hS2PXLv`SD3AfH4j(@J2dtJYTgKrZeuVa@k1--2z`TIm592U0GUCh| z+!+7Wxv8lsM;7LszpC5U{iREna{6ZWe;C~vETI!(LtkyN{)5dUE;2a$CwOQ2#27Gs zU<-e2qWN!Ys;6?j4^v+PPEv(Ir>LR;ntwVUD5Li~;n&a)976}RWB6w{f*rNcaANJsWjIj*n$R&h@g*o?8 z2L<0pj~>lghl2w%Gc!)E!QAIQV&3NG=l{dFAYVX0fU{m@c*NMaaYWq18iN@N_YpZN z_KkrZH*Wu_IKVw_@P;*Cdt)V)bMqjTA9$Mj8f-;Zc&>P%A2XF&^ z84REku7mfik9nLU>M;D{J__1E25hM>{#8{~Iko{CV6ejYz(3aSi2KII#(iQ89%s*< zP3_sUhZ7$VBT$fwBd>=|K?c@z78VwNQwQ~sw{6_Gky21l;N%tD{4wWtc6OW?58W6Z z8Qp=;&-jP`gMaA4_zu&a@yUPZk>MYDaQLU=Yh(UfD$m!9%7^dYv7}1wT2YM|QB-O1 zZ~G#^4RILt!40Dabjo<32x{PSf+@BxxoBx;Gx2Edf z-lxh-ia2vG*3QVwzz2AQ4vYYxwk34G8G3b=r;{EUCt2683j zQm7Bi5DyUleSLlV#8+QmpR+zhY+=^;%n^QvwF5ZC8V<1-eu@IVU<)`$j)uDE3**JQ zjhjQ9Pnk01cl+no31dWmKjR<$q7T?UbYd_BHo)%R{Q>{ri}9}}I`^-L3#2{=oTdus z_+Nb2nkoxnQ%qt||4?w;lFkGY@Wza;QDRaufxKl{tn5=Si|nYH8Y1X{KGEt ziwb|g4_^UJzz1y^ZV?NA=KqKd@D&_UAM*hdm$9Grqko+~eVQ|817q~T6lNZQ9pM^s zKh(h2K`>RaN!SqVP6nBL4R<_^Z}bj?tpRsI6izwzj*eH zxW?!NJAfQu`0wJM>F00xr=R)P(SNf*=Y9qB++RfJ{w4R=9N+&+^Iw#iOy$vQ@BD&7 z`WZk4Ra1+*;#^>SJjGz3Bf5Zl0$;`?4j&sQA3tRXq z{2ucKV$IJA=6CQ5{^9@deLRE4cwk?!6ZFBz!CKQmxlD*t0PRq`p5swm8(>dWZ&GwSd+0Ik300E|5Ne>U>}|KT3?0Gz-dd;|Ev50H=b z#lM=G+V5DR4%#55qTSE11(ukvQTFcL+h?({vEld{azF5oSdVeQhcQ<00NcQGI?M$o zCMJFIi1i_S7V!-IVtgnVE864O7yo!Jg8UP9&FIC8hQ9I4 zx9RH#ntxM@GxyW{m(kp#fdAZt2&&|B7FGR~{=1)&PgGM?A=Okv#Tv6>!4b2fR^$1@`j#!dP8ho#P|G68?l(jJh}?r~46G?Bz1HwQAL>Kip^PV-FwC z@6b1L1B?Uu;~LhDSpTnEw~m4gd3pJt?g5=Tb&3-w5YNCn#syiJTM$d2C(|eQ5%C}P z37t?M?O@M{JHQB>{3||;uR~YNGdQAvEBGq<#@wDyt@b4en;5(CdFgh{$0OTM)`d9MLa05QT4|4?f;HR#>foiU=q(1vw{I>7&KXX6k zfI`2c)Q7ALswC$fy*{`?mA&+$Dqp%&jg|RSUBhpC0gOFCHgo~E=mQ1wDKG&(;1ux{ zYc$M-eeu6?8L>{JqZs8956U zEa2o8us8TFY!bEvz2Mu3E4ath=RTq?o?W6IqZ6*dZZQWTHvh9fOzekWA}0bj;2ecn zvtk}Y-qTQ5MHPnG)BFDPz8}qdIlb-!|3!hPs8l+h7p1=7JQFI8aHiJ=$Emu{@2Fb3 z9XN+CF?}GXfsZjZ2HA*>&>Ng$Er$6Q_Wv{f5kr9`Qy=yMjKLW1%Dk zT_1Y~kd3*1(V|6vki}j1$8$Urz&lFF-=Gir1oxPem~kQx{WJb?AG!krv_pH;2M6%c zfA$CbLoVaz=m+od!QOC=wF~%yKU7uFdF->BocSNTSA?GB@L%}QiHeJlqrSWfrrrfP zQxBXjP@f-Pr7BV%Q8iT+9NA3VM?cU9avA<{j@S=<5j&YR`Oo;*(9qz-3%oPO)Caz> zANWsSynqw%ihL5!_Fxm-1$)Do)3L{c@qq_CC;Cy=&%O^GI+TL#Kqqj9_{Pll;1dO7 z{VV>l#$@&-&<1e;aSJ~3&*mT8W9~<6X4c<$f2X>pmik8Xg!6KmcjRVRzhIBQJSmj3 z_g8YynyR4vAIFao?o=qf=lbQvZOYxkjIuE>p`Q6UQzZ#ORCVQVxeIVXd;$N6)i`JJ z3-AxTz(0c%utNOr>p2eiM@$4x47T7OSixrc;s|pLVg&j^eun3J+~vrTBb=Nba~*WW zJ3W2L0nd2$gZ(5G6%|TbTbtUoYZqm0ZO!2xaSeKad+-KbnRte=#?Wifzw&?Rj=IdA z)W4E{d$yL8 z(;j2W^Q<*>Vw)b77V1LtUrJ;BTTTJ2fiZj(IRW@b41nz+HX}!dzo1|)$F=?Y_y2(h zO-)VCdJc7%`p6w&FUVPb<}Xnf4~=H04o&4FkEAFf}KLIzQ&00!v`3>U^|e7m;(F!XXk(LeZ+oFo=0;N>ElZs zS}04|?a-ra^tMxHSLsj=dV8oSzd#QE1+@QHmlaWYUPtIXAngBIQD6Mbs7U&6`ycpu zQ`Zh1pnR=us2i52X#RIo(ViEnnzAo+e*fD(HgtgQSkHie=!5=ooynPy@1np)P!H>| zAF%@e;1G3CP#@S~PJpbwa&|pEJ&y0gPJru=1=qn9WFR*E*eAY&8`ufzz$Z}DBEqR$ zdVL<|;YD3DK1$hYZJ=U9!#VHvmzNe(x&9}qPq)me0(vd@iQW$ibh%DFz2i&S8yZpf z99*fu3wD(4p2Jkw<%?8ZQ937&fZxOa5#Qin;2-+H2Jjtx0$0RM6wIHv_A~wwYneF~ z9H1?5f-F3L|B*lBckoBl0jB5!?YNKN1%8aN{n#GgF&^&marckwkP8{GWsDD{kY01( zI{HF^KVz(Y$%hT&K2sO=1zFe|MT`bt|Ev#p>~Ewo^RTq0TrEyeC3LJo-d9yqP3P{_ zR2rQNxa~VkozYlNy^l|%O1{#2K;h0*Zh$rQ`OaA?FPQfCGZ(1D@LQDKz5`UKy(@M9 ziYsNi>mcQO;sjNnpF~yBI3PwM2SY3bzKHwaA3DL`a3A=>XW;iJh_QV=Uq}9jd%y+- zZNM9Fg6zweFZYQray;CJEy9lx|G^PwZ9})kcgR3Y>Wd%D%djux2WW@-+;Y$s-*FG) zgTDCA=!7He;m`aZ_nG>zRmj44;ivy>{xSc;Co5>&&urO7y`}TcI(pnSG#Ahjxl#@N zK5x#u6v}?ncFKN>0i7Gt`+T2LsghiJuP5g%^(7;baxyterA7r%m+0etN80}#uTvKc zk5Hbb##CL_Bl_8JDMudcnTh?tm|1@?>j1<86pRZ;*hgRfkNsENLp`Q0>cdA6C*hZT ze0+c45bx?>{l#$1w8s(Sfei45?|r@BhxHx!0Uu2M$}I!ukbyBUxejxU`-nKymwmzS zx$8j|zQg7iy#AT~51G&<@zE3Nmfa<)fz}=R;~M5se1|>M(sumrWh`}a*(&O)(IG1P zE&cbc^fR79`dQEC+z-@+okmp3Lr?13F-z*9cOVsV{U+tO--7ZvzKg0!38dG6rL=$7 zan|O*2G~J2@Q(r=ah;h{xsQ0??nkV^KX)DG9Ajp%nmBRdAKF3A*s)`&ix)3)azVse zrXcr(Uoy6cT>r;@v5%-vze5xl7|5B&n6}Ijb3Dd^7z0~`EW{^fe9RGf#E-J^9cv1v z4s%3%#wPw*+(Qmx3C4%mf9(jpe^2L8-{`$s;D@m@1-!r>s%vYghd#F`>t&jh+W}KL zM|ecNf1609rzB9edb_D8PiM;SiW~Lf!DH%?=WXhmp*iJgd624ldyA?nr{9^P;~?^5 z1{e4*xW@;#?GP?id+)&3(v2@{;E5rf)}@Ge%5vM{*tK zMoesClc;EH6Ge?jqkuHhhzKIBC?Ji10!rgS1R`Lsbc%q|2y8Yz0s^9#b6@J#SNL%JH*~cB;>#G9{hRx!QQ21P zk?p~emv>0Ruf9I@KQE6P{`H(RyieaWW7wE9sb~Mx=aTEwgnRE!Tk?8QcFcmT+vsO? zDxb{91)h(J>sp+Gl^yBs+gjgO)~0FgKmE>b6OMM?FUqz4kNn(m#~nvicjT|V(`6wm zfwN<|D+~VN=*2u=`t0nv>FwNJvX187ML?^fC$cWvn&p2(wtrsD{r}ATU0$C&#vgq7 zwW-hVFG|Dze0}QM;rcY`p5bX+x4ZIK@}@MpS6(BO{e|l{tWS$xSz7dnI+R^)k7whv z+IAo9f3zn1F&4ycy?XUZ`t7!s#V5?>X8W@D`4Z~clC72Zg)e-e;I?nyzHP3zrSiyy zIq2hg!8f|Tm)CSox_dxczb@~kk?D)hXcM|Q_=FB%7r+Z&)VeoUr?pQ%nw}riFHPyw zGY$FcEosS|sp+1-T$RT67?{TNxI6Xw)2(Srmj8`w^L&2xBX7>%hU-Vz9Lle~e1D;D zrSCpU`0QstTgH8Kjd8Rww=s0?Qx~Bm*c1#N%zCUePza}lrb{~C; zhm@uM+6&Ha%l?8h&Nw5TdFGi%6^sW44<20jlYc>Ai}T6ESl#+f{#)}k?b@~br}Fs} z$t$~o-<_>0KRmGo*r#3d98df9?f)rnzzcTkgtSFD^becVda!zRM!tG?W%)*l4yuQ* zTKpZ&e>5%QoPWHZ`rUAI9s?ZO$0f#O)v}}&PjBOCJ`ZcXoAdn7y8P|eOAq!*lkXp% z#{zjDozcD0jlcSRy63u1smGtLNUzL&D6L#^$UjRj>-+1~p+0To8{i*rOF*Lt=1TAv z-Ne5rp1&OrkYnZIJG#KwEAmzE@Jzo+>lqC0Xo>gn0p91Et>&wJHinG4jN!-?e|}rq zRGWq#JKnU1Yc!?X_Gg>_fo?tX7~qgyR@*N}TJiWrTXvco-nKq%ozy8c=WoE~4egO; zjvJL$zPczi&mER-IJJ;m)6?kU26d>XaN>9C*N#S zx^_XHTQ$dLjtx)H190jY-Ox{3A@V5$Z1}S&+cxH2(Opmue-WQNT_8WXW*Z3nNbbs0 zM%cFaMOr$9Pe<9+wzt;4+IMJhye~K;&)YU_PLJF>D8v4r@YU9ZS3+NC*X}%*^WK)% z)6U7A)3zyH(&PPZPxJHq-i(z~ILH>gs!t?WXp6?^Ztb7-8}v2Wk#%%LL+_;J=Lx>>o}LhAUMA=*kF<1&a((Y% zOdovVUY(;?4n0FR!V%u&w~yca%4^gY=Z8sOD6%U(+}$BrwuUrTlwcthso*}G?V zdT-4$Y4^15X=ncS>#;jKr5DE!$bP_OY1_ib(z+-5XWHM9Ry}!78aLqX^y-S`MXyHR zkA@%h3O*#ea0<89=31w1tv(vZ9o=G%-m`$d^fkIhTD*d`-s2t5Xpg4y$G1Loi?qtO zw~Td$f@fu+HT{A1>|A{j9`Vjy-$Ms{T%{l_42fHRmQTia8Q{z31M{g6rjgQlL* zF8XP*9rX7O51_GtR&)eDp$EJ}!z!Psvr2#O@eLa>>_T=Q{Ufb+bOW5zU&o4vw&JU$ zbV2_)lO9PMGSAY@Ex{D@$G2d&2hcy>eLEd^qF15+lYKjQ# z`r^~+%AfrzEzJF>c^~{0w%@VvJ^Cw${wJUC?mH|vcDElN|Bc{X$gcP3tUs3zAE0%} zZqVQV;1l+s^zsVQ2%go$pCG79KC*7S#s=hn_AEUq`dXh&?(hTr;{&>zPB%|$+(0({#~)}HbRzpP)}za%XA7bs zej&%kbmG(}gpSwO@Hf!&Y=8VCt-CZ;pHSEVZEg4QP8al_^YDbcrh8MH=ubb8fAoKM ze_sEvWK!BQy+>L+s&^W6!*yxn>;Y*<{`T*U*H@-ax!-?c(v*US82ie9tn|l=U@+cB zAFx>WgO2(b{S(|8YsHukZKV}2FWGbVpU;3^KwC7TSG=pHQ!aghPtex8sE6JJ3%ZA& zKwV^A9}{*J+T$yH0XF&&E>6}}=$~PjHGW+70UX+|w>8?3JM@D)ZMFyC`zxMIyQklg zmW{hR-Fnsq`Ma+>^Bw?e(^E5MroaB{@6xK=W@8?^gZ^|1+`@UR=_C8( zlzv7Jej2p(Oef<5H1s}Xp1)6DkN%#~DBj1NU5C%;a6TP%$S>eKI*9LwPQfSiKD~jr z$i6Y6vZcct_!Umz^JHCUfd^-ge<*FvV^-~J$^HjpE&ccJ%ip7K$lp>-?V4U5(>Go7 zFTYBQr`(g)u2__Y{H=4k>&Bal-KX8^37hv==`X*s$Q-(V=R4midvs}!J)z9I*~9hX zi!Uy?rk}~Q`5)ip+pES#ny~pES-0__> z_65*C1pW0<_(L6C^SmKGtkVBv%0D{L`Ojy&c}cc;^*Z8h9s%Y$~>yKEe78^n!c3 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 Zwmi%CQS-K?{MOQZ>Qj$qJ@nDT{|A + + + \ No newline at end of file diff --git a/BoostTestPlugin/source.extension.vsixmanifest b/BoostTestPlugin/source.extension.vsixmanifest new file mode 100644 index 0000000..03ad988 --- /dev/null +++ b/BoostTestPlugin/source.extension.vsixmanifest @@ -0,0 +1,36 @@ + + + + + Boost Unit Test Adapter + The Boost Unit Test Adapter extension has been developed for the Visual Studio 2012, Visual Studio 2013 and Visual Studio 2015 Test Explorer window to allow integrated test execution of C++ projects utilizing the Boost Unit Test Framework. + +In case of any issues please file an issue at https://github.com/etas/vs-boost-unit-test-adapter/issues + https://github.com/etas/vs-boost-unit-test-adapter + LICENSE_1_0.txt + https://github.com/etas/vs-boost-unit-test-adapter#usage + Release Notes.txt + boost_test_logoSquare.ico + Boost_preview.png + C++, Unit Testing, Testing, test explorer, TDD, Boost, Boost Test Library, Visual Studio, Test Adapter + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Doku/TestCasesListing.Detailed.xml b/Doku/TestCasesListing.Detailed.xml new file mode 100644 index 0000000..9f04b71 --- /dev/null +++ b/Doku/TestCasesListing.Detailed.xml @@ -0,0 +1,18 @@ + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 \ No newline at end of file diff --git a/Doku/TestCasesListing.Simple.xml b/Doku/TestCasesListing.Simple.xml new file mode 100644 index 0000000..8f7f7b9 --- /dev/null +++ b/Doku/TestCasesListing.Simple.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Doku/images/accessing_the_test_explorer_window.png b/Doku/images/accessing_the_test_explorer_window.png new file mode 100644 index 0000000000000000000000000000000000000000..76bfca3d7667b12e44c1bb10fe096309e9154d80 GIT binary patch literal 48212 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

  • t3 zq6k51%vO{i15u5-7OL^-X@b0{vP!|eiKTHIq!r(cixwnT@gfwNT_|O3P|?Ae{d!l> z)+9XktkIM?O$!9zp7kL|P3P!iaE!#=M`>!mv85~%twFllfur}n#E$s%1h2GS&%WKT zHci}N-|)>aO(XB!9Z__sRJz?RFZ$|{VrZE`%oOPa=KnMF{*m*{WQvS`r2K?PZ+S*U zh0Hu{YtsY+mgJB1Wd#5TwCtr;QF*Qv^1xnf1I_T0I*={!d!_|C<4&^MR}e^Q`(1GZ z7Kh-2)n|tR;wnVX(jzgMk;5=&FaYCBrMY9FMh2(4zDW>L))yyF`5XNzC^J>t&%r=h zRAgBcgAOKINT6U#*C@*mV5!=Ly{h#7j)gUpm#24T2(7{Sib0y85g;Hj61RV=GIeH; zMq_sNSP1fTenZy#p)A8%x1D;FZqpLHjkZhGkKD6t8Kqc8s4)aE>(GHOzdX2jylq4h zYK($-(Jen7IRd@0|Hy*hv4E=$&P6!z-gQQ>RgmUDVV+yes&B>dop+_6koi8sh;1G% zA5oPK;L`%-2R z&f(#=s_yN9g%lATj|`VqK(wv&*z&GV#xM6_#07&`rj_xziT(RWu<;@?BIh>0wAu+t zG!dTQW?FAl>k39|G91fJ=P(kk+%s2QL^3tD1G4SGsmKy|_+F`187p*vL_Fnao1Jf@ z0Jju$G^v$rVmp$Ww(_DkX%90YDQjFzYj$A zGr&4CFJzUY+6RHS8ZE+V}t?A@g8z-`wAhDvsC>c%%&#@ zk&{C>IkT`^y}b+8Z?#4F$es1K)QEv`QA5P&;x(Z=FaBxa`G@0e*@-nxC!%farm^7L zKHvyG5Yj1?T**U`HrFgNZ20JQvpUy%lhW%vap_8z?+lj1*_A2$wg}e%`#3O zaun?x4VaxIrSUif<-j;MYS$Fgy|=pVWoKDuV*Q=ODU1PGeY@&ynW5M7>W!zGzHO{^ z3bFKi-kBARzbV(%46Ei(JUuVT?&2?iNFbGnKXA;>U6iqm(}xSKN^S@^k+$e9=PH91 zN(MpW$mgELjFuclh?wlJj1L0?=&Ga@`RuVRN`^`|@fL#M#^^9cV(+X7Scy~pWvAr4 zU{>Jo37Ljq`4#p)>O?e`5qmH-?%JJAOKs*10|YI4qK|YTFUr=Xq89s?>*xi;lOS;i zK)s>lf>*~iE$Qm?D9!`T&UrOExOARn#O_0}b~tFP5;{q7;<2RyHl zTtkzw+n(^=smHoPZ>MQ(rs}e-Fts=>Qyi6v@Js8WEiDvEM^u^vdq?LPdW59cr$DEj z3133XH&*oLWzYV;Sc7EB-~LVfRKZmMZ>soSemYuz!}@>AoS%1~{%7Wo9`S!N`o_cl zQ#pJ=7HIy1{}v_xUcJM}=O3P#zc697Lhv6J7)OPgXE(}^UfN@?nXpbSPIil^ZG7^4 z6-EjYg>jh{9uw<*dnl$SJZePdfLrXy_WtK0JE1Y9E1Q3)q^Ld1V*@M@uNxX)~={Kq?Zb#!ug(u^p`#V>#p$YZAhov&t{3aeX9QXY zWg0DE(m^@4l9cVc7(u#sfn|W-3~((W8%NPW-TXX0x%arMD|@Yls4>lNq_Mg`wJ4X! zjUI#w?zy|PvD=&IzZ&@gEDG-5HO*2k_mKCnFyo511mLq*EcU{C1d|zMvbijOQRHme zupuO2J5z0-IXRcoI6mf29SRM~Df22+EwWl}h?79&YwNpLbx$*V3%;48{NL6}H3dJAJy42)V8MexfU>Vo@y!fuAdgKU>_2;sV*eGy#?E9@Aadb`%+`3m`l#u# zWMz>Rq!-v_4^iF3nA|+)WNW7XI7Xhcw6%FxkG1!s3#zx<>XT7Oq zysY4K1kA)^NH_l>iSZ6Vx=!&cXI7Tnm^bWJI;YEOyAYEi`L=NfyGH(fjvPHBD`@Km zYnQe9%k8U@xudYo=<74ArluvUSZSGdH&Z5>Mg7gvmYwRX8s|Cw%bz{M*AyJ2+P>3H zm4g#p;4&XT3$D|sx`o<(t|`;1{A~=&t|^J*NK-o!ql%`O z{ZJoq=Jc> z$<*MoS~xGnsr+;a^4k5*sMfGL<%9@`(Y7~LasICxc_mLxGg^2jA${0wEH=}qs!+N9 z*8+vNK_Vn~9h9%HMnoIS9;bz8o%ff(vB+U>ZNo9|!wXIgw(JnwvR7HwLttoqj!91q@OrWf2(qq!$Rsi@-Gfaj}1|JPF5Mh}I? zx+nf#nyt%<=8y{DArRAHH{U3RFBBIF2Ye`f;%VWl%Op4EYZ&k%( zTUwBTX5&pBUz{@V(*Io#V~f#0c%+t5|A`^_`$nau(0=aZ?|~)ExhkY7F5XzS_^O;w zYEiupo0Wa4$`kB2b_@Z_HQD7OvjGKLEEcyOXGz>YfaCRYIjsuE66IgTWrgbVgf38D z&l31KLOiM?U*{JOLR=9A62Ov!J+p+Zx)=jY`s)0ZF}EAT$!+)+9|>u>`i}IW&4xb4 zBa!Tbpz8-dw6@4$F@)(K<<^>eIw) z$M6Cvlch|pW<2d6+a*SOI$C+vcvk?wS!qsS&fy}_GZCPqb>=xaoarAZ6E)b zrSfcXm0Dl@lAKmiUimuL75xjwWqlJ~pLDXMN(;wOa<-hl#!b>@XPu4x`jCQ^_SKO4 z77O?ZwT`P?e)d4nNPHuXXvpO0At%0*`<6eDj(D-u`#-$^x)`q3E|e9_AFLd;o<0;g z$J2qai|i->{3)BiWX~dxQ9pcZC7ccC0}cu_)o?d^vY9~p64V9vukM{>kHfD7_UUf% zmkFVTO>!mld`mR+X2V zlCt`>M)S43>r6_(YLnq_(}Z_pWfJwbtYTb1#2ITLey zlKM)z|7FacxC$jc6qXYcS6$9A4;?iIKcmmKK|j6ywIxAc*ISD+$kCLp=_oH>?>-GGw16T2KlRKO;3RTan-~D=6j^5DN*{QU!)R+l1OzY7x ztoNXh|NdFq6SDlWLhnC4IHE77q9X$kV$;DL;9G9J_si^>EJOdUg7ZW)kC^q@rDI z#@8?>N+)i=Tea#LmpbjYPiesH0ZQz`!{q449N-VCU&rYK}@G=p_rA zPrb`$cZ9P7vHvWT@_)z~9<|h@p1F!|wKbmbIO<2bPDI|IKF3vSDzuv?w(9$mDDZPl z+kv}y-u@o#fPz@H#MtbWCd+iuJi$O<;dTa*j{d7aa&RSdBxY#TL@1IEcM^;dy~&$F<6x_@;?c{uRsFlWh|3a$oL3B$V5;+M&K3uuaQTBgF1;- zK-Vn{m2V~gOsQ>`xyiGe)#GUxmzd%yM#W3dEi58wDh-v4{CtFlZBmV#g+E2av!|%= zP~i`Q@SDGA8C>L{37&-aa$jyLo5I6hVKHjTbVfa|g1m$}nVOc@0wwa;t8r*odUSLN&CSj`>IHYjHv z2j~L^aDa~a^&M`eQM|Y_Q*{xjTIeaR#=cSIzQwUyTBW6cFm6Vy`I|xArE@iO=Ho=! zo1SGY@~Gvib_7pbVR=0jjP*J#(-jVLbDr@47HQlzG=G^dY(@ciRM4y;1z4pz2VV^` z?u!bN5I_Ca<(TeK-%WFk8OQOqg*8@Y!^z9(h$j4*fawL(4v`Hdt69Tv#^0qzG*_C6%8!M8j`h zEnIB3vP^xQj6`)caj2eWYXsH5klXqP?y!aceQbahj)|`|yaQM|((KbzV{NNQf$ki5 zX%~F42v$3@tv8SeJll`cxsID1uh!_P>j*lV1`;aOd>H&wPDjVk`O!;HP{qkbX2^+od!uLlAx zt+|)aWA(c`g@Pgff{d46+XA#x|83g&zaWDD9gS6_Kwi!l@M86;oUf@ie>k1ijp#Qp zn`DJqwHN*umFtD4&K_&!<3KbgVqn!N9$XE z@&Uy({_SEqN4$_$#_-lBx0szB?^W`UfSdhNn{(c`LSkS3bI}hpNPAbuz4CTRNzLw1 zW$|$BQPWUu^j8)Q1L@;dV(% z&bKH=9MY{`hc5>pLieSSq`8pc@G_UuEaTq4V1&Sjk0{;^#`OB=^e_cammU*KURy2r z@xp8b2UAbL^G8x=P^TL^GZliQTf?>Q-Yo^~-he>w6$qquElNRwk(wekjs7uMN{ZB3 z9Q!oW8ij{$^-TZSCvZMyzsqg{L)TmfNf#WjKTbMPaLy^Ph~v!tRf{*L3h5X$S3Smt zA}6mb=XN1dPu@+V_c4>$q0Ht}!H+#JlTaa50c(U)JjUZ683Zxd!cMW*bJHfj9un@! z+l+?Cse|8|Cfz1XVGOW z|A*EWu2)%8@^VCIq*b-;*7tRR3-($;F|w=8^eV8HucXE&wNSysgeCQ&qF;U+%`hq{ zU+!k%3EWlp$TflmO3t@m)zz&-V`5rb7dl+tA1kWr$Y_H=e3B~DtDWD8oLI^`E5GB} z@yR#4u~BQU{t+Rv{lka7cLo0OILMGc|4hZ^?wmO_3G2yD$`skBMDx{=HO>b03oNa0 zkolni^N&0mROFc{zUc>%;?lD0rAxhKe$*<~1}H-InU8_cp6(H05$4kbVi7BMdq|XT zYlMcQECnub_ioQQTOMBb#?L`P_lB=6D5^0a#_gAUq@Mgb;jLs4Xk^%r?@vXN?leGC z#aYZ$oKs1H{TEWe3%P4}6PS#iUGA5jU*g%=wyZR}tupQIc11KK26u_9iH3h7rHaf` zqA4g?v#;kRaC)5CvO$p?tKC-;c6=EGG3wKK6Zf zUuAIige^NR@BQ6*1G!r)q+H>BA}d*^u*JVaQdP#P>4=akEGQ%3MPqc2RMnLRj$1~M zj@Xb>=MFRNyopT3m>s8A##u!z)IYq#{=`+)P|lN6FMFa`Z%wycq`i+Z<zvLBREYsW0@pg6O;`| zBc$BJU!^p-nK}d0MZ~7@R!&nIwY;aCFRyIy7Z9el_BGw1m)F5XX)Z7i%iV4r@lXbw zea${g>g%AzrHJy_I6VRT36@`2eay>FH@0h{VWeIglxsFExDHZMg;PFgNdsSp6~$ow zB|L`zs`+-MRHbC&T=(Jiz1cA-A8??zewba4d7fdCzQf@2RXx7oNtIEGM~p8>vv}P` z`BsbmxZ2j=#sOh6l08uh!WiAZfmOqf$Ck`)Z#Pa}u!I7|IGH*R( z$B8?YlK@4lz)SiP;o1d+GOaKfl{#iS&g7gGwydP8*a%|5c{+W=M&t!=>cE4s{TS1= zpfzOd(2P%~5Oe%D|Yu+9*_n z^>4Nx+Rx5M-~*d{*kY?dbB6S-iM{2g=?_0Lv(3coI9LVh>!Ed@NM~;7?@-MrJugVA z0|F)vWn$>$@z9Cm76A&JOfE)Hr_bPK*Q%{K>5LvMyGCDIts-6@-JcnKwx#ifa5+j2 zg-k)FK)lmh#>8P`OCA^dr`pzb=M!QmyV_-$G=WEk-+XR*?8!{Y!+$_WzdWk#$#kE# z%=QMFX?S{#jqJMl#&-Y_#8t5p$-apn?0$kyf^x1`T3a*l=qfqd13xXyx(VS_T}`l! z+=st$K)8B-e~j$JCzmqE@u~zCk~xq68rk?(rx2|B%U!r0%)$DFRPN!)3CC1!@Edcw z*CQJaht)<$gA=eHs~~<-rtc7-x#c2>FS+k%ansZKOXzD?!LPEUA3uKo@q?6Xl_9TVGpZJW;du%+c^)>9oug;5mt)Htvt5nw4FKROhLg%$rVEapB%hj zYF%A^F!f*3r~7ug(K>#dO}4PuYo)%J*n7w$dOC8!aMKR0`M&wg=qWSJ1`ewUQ56(% z2@EPfY~2}UHMRKS_O}nBi=UYHUh*tFWppnWPYUq!$&yDS%+K2>R_pNt-sJnpP}Xu1 z7=1Dm4jmm`L`3991LE(zIRu#FZU(O-^p@ZK{h#cb+j=b})l@NMtU@)!AF*&Xb$MgD}7 z$?aOV(dzE`3kTG&cirtcMdm0z0XEPy3UCeaf*G|>Jp0cjuV2v}JpuBYr}Vu>G)? zjoF`tWyS>q6$po^(d-*TpL2@o$q#FIZml%jO>zv&E|+bX=bQ6(2UZGVackHa`<&)C;X+5t{M+^@l3|FBs_w z!Bt&)<^J@NjEK=Yw?4)8 z1&eE0BL*({j0Z%F)o_kLHfIi=w*VsV+D~Y}c~Z7{!l&@7!(Mbp-jB z6_)@Lq2gNfIP&u7uKPW_(2iA9q@0;={T=}-Ntj2jQ)%(*q-#`Bdn=Q4y%THrGl7rq2pcY2^K;7B0utYp#7PG63t2H>>(!xMNCu~xN%k^^_zb986c8q>8WXT7w_EFuLPR&3XI`SA_`|#G1 zxq--4uU*XJZ(}1RMafJ*W8|)@<=l*jng=&hl`oH4oNtPo>^vQ=t`H+_YQ>+W1Zs79 zpXN)gMK#jvFRyrJ!HqlubXfULD6&RWS)0bcbW}dl3OVG_Fl=88GU!*R@vf=5xYW!a z&K$B^vNvkN@bLPgElkA}-ZSZ4+EHg@h_feimFId-^b)S`l#h3HW$80}eqIH_IB;@c zw*nZVBW(TaLu7&yqnPM;LaJ1UUG_!!8@w$S?o@iB{a+>{mGhUeOU=6t9$ed^%LCog z$$1NP-|LtRZ5vWVM9t&Q`})M8(A%v-flz{<03xjo;sWA^Lhw1BLQ8#O;{>NpK_!OI zd||tF@2>Oa^nA@JM-9&bCq9a7)6#wmf9>iDJXyZ6jieb>omvB`NqnC~s z%Q`^zvxwwVkxrQBKK96Hnk?XEFeBc}3^Zz%Wn~4&i_zGvbs<1CxE#v}3B8UB6y;`M znwxxmfK_*y&+rp@&A3wol28}dzK0oT8ysuKvy=Lau_fI`m+;in0|?y)8NCP4E*fL; zQ`v-VlZIWs?az=j=%f>R=Ufc_`zep%!`o&3<8iNAd@L;U@Rz!IDzKPaiiWovqpQAB$sy z8*3}}UDoT>xrVocnBON83Ww%<>mog1T#wp_sRaKN7%3&xXz(;JsmVGNT#|4Wtv0Hc||CM$){=cVfyQI>x=y|!bD73M?l&9?6o&A_+3Jl;xG)1W>uZ>aEGzPD~EuB7lFLrQ_VNTi9g~- zhZn=j@F0(Z>1n4ZW((oQRU8YD#3}rGMEN z@5S}l^YQkk(6*Bg;gsJez*Yqvyl9A1m|=6|X{B?S-J&WIx$DeLe{pQNu!llSPo0q& zBbYBOWaTD96 zGbHTCYbi=^17<_^WI4`02QkR6x()Ri=7=h>xC$~ClFZo-SqJQ>mZ}(VSYU;b3nQWH zyEX281CiAl}Joh?)|$Unr{ z*zo_1&4Q?AqS5?T>DYRtuKw7`QL2l&r>;xFOxX{aJeK_1b#UJ*0Hl_fyPnXfU>CUYb#L|9& zPM8xKx_zO@uU@$E!gHYW(C+qUE7K|DuJ0YJzink0VCV4l zwg!3jt|To;v12-%wczax$J!DVS?0*`5oCCb@xE$uS#!{-wQoi#qSIxdn8tFjSNrfe zUJOyiM1O-!54TEOz0%|TH5P}8M4H|eqD@1@dIF1Q-4?*oUC!(9)2wiLvs5*7RR95f z3Zv%e&(>PYDn%Y^p#>Vws?CQH6P-<`gXh&rYspLf8l6&gE5G`?Kq-b#x+mw8le|}* zJc}x;3^%uk!?Z-uAm%WCu2Okd$#Ai?`;A1{~ z9ELT<#IkuSz#`@q7M|C6CrOb5;%QC`hL^Ht;$`1P*|NS34v^PWceg?r6%~DFrhIcg zW#40;Ahn-)G?EU6V~VCAvP1m+dp&W$AUv+!G~AZcfe?ryVitN68*Iy+6`cJ$7ltjh zTXT534jOSP@{zv0qAs~Ior6+YY|Jo}Ntu~>Q+K(qTiTzng?EW-`L~zdQOB-|rn*ZPt;OtS z(e(q>G=q{R*q>)KNh2wLnZu3Z{%808y$ zWH~aKTvoL^&8YF-2cEZ8r{;+s-QVRjjl53ud;>S0BW+RZR}TyC$ivHsQKx>#2H*atd6A-=Zw<^

    ozxP%NuU{9e8ZF+0lCDwg1U-C_R361&5?mSw1=7`y+oU zZml8yUj>-q`DSTupwT}2T5Yg)REEE#BL5wasjAo^CjDuN7~6Owo1yF7|4*%)KSFdU znm>X^D+vZW2?&^g#VyGH?Q|f;rOR-+#b191C9fu||D8eEVDJ&TBfhI6nUrrMmT@aN)uY&IrFW_-EV#|EC?Xx=#qbZz!LCt{wd7A5nhiLpS01 zk5TN}3G52{UNHlg0Ihyk_UA79i>X_^zdz|-4J9vmat@WV<=H0z>+{*HQ+O=G8(DrZtOhoKmm~Qdc7RSbrV^ zq{-D=<;8Eompb$2g5PSrR_HC_Su*q-shS2f#-i5KH{rDPof zGLp;Fx3)qN-}4;4;z?U-hws|Z*hTVAB^MF=c*0O<)G_(3fXnY>vc&1Kx+$Fh>Ed-C zMiV(08S|!3xBMP&Sl1J^DT70EwlPAoNzrMe8(A^UD`eQ)Y)`b{LQA6YIN4yS(jl>n z2TK4@@pwskM0Pf+v_AfjgJq+sV$~q+_QhN9r^A$I`4DgvB&#M`dQ%BlE?HD|T&MvQ zOQHRuTJ_;1n>l&ggkNzJ&2KkxakZ0rf~6~(Ai{*ylDbR25`>s=zx+21{s`|4F*!;u zUfAcFq`G=YDQ17zdt;%$j|lhf8U}*i2lm}Mr_)uB&(Z@vM>Kiy@=amF?eOtpQZD`4 zQW%boM3!t<#4{Z%nCELOZ-mp_9iHRGg{+MFxSH^tr$Mp;M(608&tY82b=96MZNzNP zo1)Lupr;DX!ygU9OEsaq3+{W@!`~$8_M5t-oTd%Sjl5c7P#2>x z++c<`X~f@w41PkhJ;~Iq_U?221WqijAN2U{j3Wm*inf#z=@&P6RL3a=eoQJ>eb6h>(!}nm+=!nJ=rU035w6WBfhV(Y>1IdiX^Qv(hnlOLpY7*ZG!=V(W#P zjRP-grGZdmKm`8vg1m=tV{nvw_T`rC@YHe}PxVNfRRt-Zq#f~sZ_zLWSoOu!iFK82LS4w=RJr4Cg$K#EgKl~IClDg34ZGn*CfeXxf z`xG1oE#p(xsqcm*R~5D4GriPbh2?je^Pay|gUF0~Cco)$Gp+I=7uH%trUCrYoQ}Sh z0yrqLu5V=1|5?j(ji5jZ*nPp@D?_tA?QJ#Y3~ z5#fVcq*WJL(vW;#2^k=Z7}vBJ@radLe3m z(--ZKb+8CvA|KhPQTC%+@JEim|Ej!d$t-G+1rfDI;Tl`CU2iSPFF{m zR=Y2uaMKdF_M}AV2#XNt9T|)5dxMEUzSj5s0x8S5gko;q^Vc8}dm)|s4TZP==6Wh%F95N|hLim;fueU)m0{MuAgI;gH_k17n ztiyT~+zt;;2Z7)jo^Mx~<-#09hdd_hbTl94{v5+*6*IQB20U-~=E_)=tpeE=Mwrvv z!h|pStTA2S5!fA`$+R^FzCx{{i4F~mPG$oSTa~s}31&{+yoIl}mDF5^XhLr%8&d%> zq?<_G{%|tLy|3qtm`w&NgyOIFyl*Ah4C3NQFtb@w^WjFY zZ5@)-_e>rfQ@T<7Rudt1E!VIQ9KTxcx0zRw(1s{b<0(pvMmHeT!*{=uED&^>$Sek= zs0VuJnA)ABqCZCMJL;1!h&dUHHlcY=-ScW!4VkP|OwngteCN?R?@a2OcfMqhepQ~7Sweyq&WudeyX6k0ws% zJd~ud@HBD#{)jcWK?qd!d20?KDd$U7YuclrhTl5}MASaM5y8a!!s~6)Z1DVw{^;aK z)VrJT#8d6T_jHQ&9C{5+Xi{MjZ4$yN1hjkL}Rd04-ffs1GO7-rBAYJC#?e%>>K zGVeYuwbk#zMRZc0HT~7Ag*r#0`!f3KCP?o5;~(jUO4!epHXw5wtqHc;*AxQ#iY?Nc zdx^f(41)Kr7v`aFjz~MVQu|H=AqvJwA?47};l5rjr?pQA7$p5myszkfd)|z^qE zkLY3+Vu-O<6*xw{`*Zaz1oKF|-f?uf*$E=~7^ZVc%3R=EwNJi#j@lWtE%X$~@sq@V zjoDm#?$r)E{NxPxf$h8*nhohvd!sPMMRbLTW>(G-d8eN%XL10 zvqn#w`g@O;(>U%RX6OTRARF%BpSNrvf~fmM`!xb-jI$+S9DzECqdb^bDPICFDYKdi zr@_jUGcfcKY+w*sO9EQ!MKswv2r+=hdK3l{_sw!Zc1`JAexj5b<9c{^j5^dhEDyTR z)_k+BuEO7IQjCKou9m3d&#c{UKq2*xs7-RSm@~iO%|rHM%g-ieUcO<@M&9ua@W2lH z2Vwp9r#t!x{?NC=#eD<5hc~q*OMbkbZGU+sQo;)BorPkKUiB`GEFboiu3oI93C5nZ z!7V)zN3+uL8OmRA@Fp7YC&ryMa@0FuU~2R_d54r~&3RO1h&MHc2}x(|6J=PHk9-Sg zNxwjxw{)^wT`VzjnpMptw3>j1-IJ)*FDNGX%pkW$(fT#C>=ZOlP8zlz#=-_4mzugb z-ScnO*Tw0W;yD4(*eu`j!+xN_~&h{BQ;3(aiKeSn|tRjc+;G>5$H( z-xy(ez{eSf-1yZL@#Q&foRk;6Cv|BR%PX#@y`agAfT3){`;eW5!@yarqG^ePn ztoYZfPv?1n-@bc!1_o$Zh!p=KCwvEgBdU5AbakW2Zvq^jHc*M4PoRMt+|$#}J98C^ zOlHy>vI?|*!%3NbMbuKUe8%6Q-#YIg@g8^E&nMyV2(bdD5(Nn=yCfSQZWEaUL^1}D z#p=wj;kii3n>>ydqM3fa=;D$JyY)6Oms%R`i-1dTFk34e#diCvKU|h@UzY32#fQdx zp6}8Kxf!g0AP{MaCBtu#hsbUmda=+4BH}xngPBafnUgpxA`z00jL6@6RdV2ztKxN_P(sfIdKqk!#j^cDZRv$qAq74(M zh%W5ouB(fiROC&&=<{Pi(u5FX-!`zdAo{&bpvki8k3YEg`XBK%G@i0q=8x!{+a(!% zNX*)<+6WWIOwz-%8Ge8ns{PO2DojHOaA(xD&Xf|+pa5botu{2s+juD6mIIefDS5=caTm*>ZNauh) z$PgGvEcC|}f@BBRI%tf1tYg3bx}5(oQGH_hXcEy1eq8nOE&N;7{>~#JJJ!pPD4gFc zsPld+5?!G8))D{Lj^B%F<`3Rx-gRMGKc9-@N@f+6MepQDtKf#PK_4yQ6a!9MMW0up zf6El+^^1zq1RY2igAn3)TxcM^o5VENM{=ttzV!a+6m$OvJpCkw_4R!E+sWB>G-;X- z)Q~86AI$f()O@z_=*5awYh%r06`ODW5(Yiy@6-*_oDhq zcWtCQe@AOC-|Afd8LOOB+|_~V-8ip!)A%0fF+_+>XlRZ1xut0^+_ygd?%lV+m0X`X zUM^HnNL#5wG%}+u@Hpw6o$DtEsH~gG#~>7gsVI%tU&xwT+U1zHO{Vc!>_avAzspK& zIBlgaCSI@hvsUl#~S)3YAu(qWIUx1}GG<-$K zzeB4)Ab%`N`g5^xZu&m$7<4>`vFYQKGpawdY!j9T0fOTNxw*GJ>vv|onG7fd+R+a- z2byi{cGo`qu7~fTw?jr<*2M#lvnNh#hZ-5`~;7AkoBq4V%5=H-f9<2=JXqx|H1i zx7_=x(}V^f0gu!H0h{O|&`t8idULvK;TSMKaBBXB-RIJ3#K-k+`xTbu{c1Lddl5-s z^L^DV=SfwgnG|;L*A14H##AI{oA5}tk{lcYk_j;VvPixbxd{j|GX>Xa5k z#glpQs@Wkey}AkCO9o)6UZ3Rw_sv*$tKZ$i)vW8v$Jw!feRWj?^nDNeRfD~CHp3g$ zMBBz#m!VS+_qc_SufWVXWwLcEKZ?MADz{JdBZX z#7PNQOO}H_0K?|3G5=B?@AV31z`lm3nJv(Hl@rsCi@Wsk#S4@3q zeQr`V-=AFJbh%m$&t^AR)=MNlPs(Ih!h+d0@je1MW3%v^Jp0G|)P-DwJ$`z9Jsr-! zkBUt87YF^z<>lJVMMMQMdlXOp)%R7j*h|iy`AMk{Hu5^TLw{Nw| z>eGwcZV~Hz&p2k;^!wX;u1LuEfA{uE5fK|feu((-opfArPcfTJ%(nKvCD3mVAu#NR zm23S*JL?2$2%J`96s)bcrmPKH*sLv=sxL1DC6xi#> z$uHTWt#$bcrElcSzBc_=q+8%kL4N-4T3f97`FV4;1w!?isVQ|;&*uPL1NMYpcf8`$9C3X=rHHTpH}&Oougl-E5m%vaNwd$V(BmTr9uR=yxg%-JJFD8(FTkht2t}htTY7jn(A_ zzmfy|KI=e?^n#GGdSC0@FS}w601Rb^2I3!&rnUIlZSe)!T9Ysx>VGH&TrrKN3E*v= zGgaq7P(&OF8zNFuyz^Dk68?(p7=<5;VdS~%`t8eRnM-MfYhz08AjU+R))p-?jPCyK zL{jAc8%z)NAs4+pz&Z2&NiLGgOZ?nfvOXqt`6dL}KDk|On#Ff|tWyg;fa2S6;rDkj zwu?OMGjc>B;JOoCqmv{ml`P~JU2Af zZc1pIpH2Q6V9Zne=wIww_`w!eFV6Sm^0T#Er1?EuR|G))GgzGBl75TH%F4!mnyfX)R>#w5i8mq_ z>dz7fyB6GIKv#32rj|Ye*4EZ`P#J_(gZi+O^2eVsBKJRIwETc|1d8UjO0^G@^Urha zWqyzL$3A;V($OUA{c@gX*PE**yJm|rN=o!kb8@sOLdh8w%%IV8e9e*nj_6tu$e zItdFmN2q<7pbuvF4ztlkX_8-k8u8mkJR$)op)O!Yb@h)wa9c`#95JvxZ&(~P@KMfF zA;g?-u=xjpAzcvJiJOzPHmQ}qVy)+3may8>xr7hp_^g+x18%~8IZvvpzh%_b)u$y* zT{vaJkuz^XW(SQns0}DUg(=$V+)Nw502e}Dp*ym=^1_)>%PW*JNBgf!k9fEYXUv6%}!zp$Maw2h!*0yiOh2l4#2f@#{^VTvlhMqeEcCwXIO}spW5MO<|ajF3XIp zyW(;ydwaYyOK|{dD+u&KFNOSZpEo#P2XOp2q&o09s9k23l4g@qgbZv7Cb64flJDt%y0CK*MD?MRK{VbzFc@Zcz z-CSa1@HRwkpz3&tF_#??q*?9=%``UT2Z1UTz>8J2RCe|6z>Qx64@x zs99T*xNJ}@iHMV(W)1Y+?zy9)9=tbi9CLh61S1{oaa*h3Byf$4R99EulFy*4 zYe-5`Qd0it?w0udTf|~9)KjJHP8g+ieRG)?^qBb9Y;k3cRAYN^IL`kEr}vp@878*3 zHBTV;okC7O$z~VCHSSM}?0#GVv$u+5`tt|5{M}B=L9mXnxTK#6GE+=$oWC2b1zTYu zSHRE&W8DJAHc=;dPWS$Xz9#cK>d+A3{c)52<&;`({c;+=M`V{Px{`)n5d&FXqrnD^7w?A>7%I8FMz%+g(hQmrdoFn&nx^kM9#N`r*v@qKn*t26h&1 z^;KsZcce=xfR4Y-i|d{VQ>j6i%qH2ZEq_`0Z2H-|e6~zH78D*Mj)Z>O*GK9y%jI*A z%E*~t6DM*fiWncP)USVzKQNQfQs-Kqe9JaeR>Kri<3QOeXjkr<)|i9=hRmFS&+mz6 znybN8z@Mn0Cg2@9mO$l zil=aKF$Mk5vWHQJ{to`ucMIjQ$A>M}A}WRkWfM9rQKdMs)-t9K=T{GH(|BVzw=7l5 zz*OQ}KlXfGZU1r-g$^V@hC+(HzZT1OZKHjtZSn44YR8{IlFWz{0lC&0H?c>5X%OJZ z8`+cf@Vq9YFV+I7zO?LdVfOYhCV-~G(MU?6O>UFSr{7Z&y%g*AF;c7J~vXK`T+Pg!%NO_ms| zu=l#Ytv}D#c|1*Y%xXPaXOph^JFKEp2pT-@drr1yijlxow6-3gxs`u?63=`0q=JC2HJ-~?Ld9R>B zOG5=mRo()MgSmQb+Y3Fk^hu(-6%lU6)X->PX8Hxo4mhO^LctKTlXWHWYCRMg*-v)) z`83(LzJ+GTJI5R!+LHN!N7mLf^j1{tl#B^Edcw^)przyhzu1GKaYLMPwoe*Ho24KL zY!LqM^z@NsHk%neAXxgB4AOmR03<_h@TiWu?AmJxUnNeh9T#e>k2kHuq%!Sto?Vo)LktS@ zW^gIb|Kv%m!8E=cKD<|4XhRzk`pvpQLnrJ@S5?yQL)o@p_Ni84eJ+{5SDgjDyT-fU zmalXCNl9@MgBYg%@RC!Ufc}&<$JrYCNG$tBsi22*w;X>7eR; zBX8OfIU?YQ2Ounw1)S4+Ai7D+m?mU18Qe` zE7SK?+IEUVx8*UCTMg0=N9DF$vHFK}EmM70y;7uEAH*Y%80LQS0#s$4m>gsoXl?C9 z@c8r0OKXy65zS+ew9UCaM@dlf&38L1BBl@E1BVP$--ays)mM)F`BKmBIz9+*5|Y4k z6QG18>mMRY+Lg}X^}YOig3o&mTITCaB~<07wjb&V>|JN=1qwc}RD79MJz1YAr?N1_ z9`op?Mix`;Kz5+$L&uRZE?4!hQVs*^(+B%h|DQhd83fXh&b0C>0iTHTB8o7h)?0i+ zD<)e1gJn-br*vXT6=gj=D~B^{Aoz`*F%eNOS6hDC>)CJ3563nUoREuxnVHNGttIg= zYu7FAgrNIlr3OPF{I!vwycorJo=(ee)yLQC{Xj#@Iv+eJCvE(&3Lp#AblU~wb_NJo zFrEk(wMh6ua#lBNjUI@+!G1(E?13Rt*sL0o8bC7}AAvmp*rMs)vDwg>dSGCHrqQif zFOa8zje{c&7Ph3K2WR#-W!v+bm_D%DkET{ck+}1JuMLn5@i=w-T+R&<=9WcurHzFp@~VNFN?O@G zmK?ML+vT1SGV%xu>D+Ez)#jWUqICS8+B9gTVW13&Z ziti1Ya>AYGs}@4NHlT(IYZ*tU+VtL|BdBrG%01l0DcNhR1Nkng8Fd+qeZ{g|F!y?AJ38Zog~w=RK~(QrrkH>PBPX+WiV#q<2aqL8JU@42d?Sfw#i~w zRU*pw2;U>#Q3ElJMH(^Oj}q3yL3Jh*G5LnkqmpBp&dOV{7Gn$95vxn?ESW9jEO!%f zXXs#ap*36U{ImUn+pTyduPYm2D9vN+GXhz{$Wlj~G)Z$Wc|13joQp4?y_aN+py5tb2} zjeHfE2$7jdD}|+Kf1%09u;6nY28}Wz!T4EYJiawy^vCc^9w-~+{%1#M=udF5j>{*? zsg0OWIgfriJ#IE&$Om{i7Hkl%Oy)K6f*bT`qI!8#3kN{lJL6( ziwd!WMx6bBS*cj37AU!4_siirsZfFR>v&q?rb^v z>ch&7*WEVY?qL;5_PiF!h`Xi!_qxQ55RG|Z!b5^ple;bpu6IOX)s(YmJ~u07t;{^M z-pxaROcvr`IlH9dKikB#;}CW%VtLq(O{W+FwYOR?4)qiI*jkLb_2=P|^FWXIR{=WW zhr8uyyQOISFX5C=^~Uihr}NG8W1Vab()t3M(LCfWASbdO>M>!hYHz|a?uTq z+^{c92(f$H`uYV9G`PFtKAh`Pl+4no+b6`F3SA`mK9r~P=XZSk7vncoP)iXl(8=1o z&!1}bk!;O}aTQfHHJRDAVp;5>#;blI0v1W&?ALmJx`6sP=yF-MqF1Oc5EEFQ2u;q+ z)@NOYQAe?6!x8yfQ{l#h)SMg>0o) zIiLMMjS(b-AYa@b7%y3-A?dIY?wgcjK9(LsOO zI5A@rbiXkW-%2LEPaOd_P_tkL-%=?#Y`onir9JB%_9Tr zf~(;!2_m$Ab|@W_GbE@^)Qes!t{H=K2&+;aZ63LNjs3M9=laxo(<;^-Dm{m@)C083 zjqWAdQ}9`b8M~Iv&4!i4^;jN}Tp1D54T630s4 zma}h`_Sv%^1$Y&^Mke;9thKJ+?FoW#DuBO`u86MJjBbt3-hd8rjr!2Rrm`S;CMV5l z_~2)ll_Q9Zu@Afveoci>cJXwooIcb>x-b(envui!4NdC>I^zU+<#> zma~IUxe!)&4_T`+&A;+ZNRpZ)c09dqX){R_h&W&?%E`+5k)KZogNe93KLO-`0d+wk zsGc?s0kW?LfKyeA5Nca>x;-6UmjmsDba!%V%)`(SC7DaG_@p6LW`ie@P9&aX?0f;<=X5`0d6olBZEmzN_;g21dq9zjGPvF!Y?fyq>nxU+K1%jyZZr ztvK|Gr)|)Owk3~6`}$>!Z=VbsL>x!B*S!$r2jKg2mPmFC6+Rm@msn7uP7QcV4YGwD zrV#pTMcF}3;dF&$mwtFueeBuhs2OXvl3Q$E%r!|7I%XZHE#aYeqal7iWj1>{PD3Ev zS{C?W^wa^rRbhVQ_hhHkH}G=0?Yn&-QHd&Q+%t><27Q8c37`!~@1NF|V&gAeel1IHhGt6SYQmy<23-*Keqc z(?dW?UPnyFeiFgt z)p+g*!xfWuylLZ4C(u}1`2crKMr+Z6nw-aNqA;4#Iye8TvulUf6lA6f21w>g0BX|$ zro|&CmRSsLpyN9&j^Be0+M@T{)p2?hWHeyNpQ0hXMfDF4Qd~`hjje=(@_tSQlL5w3 zRDs#JnD83?^pI=$0s~j6y9Jmt&@ax1X=G9e`@=c>EWp2~qU<$8nr!QkWM^mqJuIiw zA;xjHb#{r>U?=2zx`>@uW4r1C0C$0Yg3Rvj);_{!iHvOu?Pv zag{$y9NfkE1+{O@39HDH_HJ)$Y-e2-Z;totUn9S8;qfW&%;Yg8Va0o|RWpSfXK88a zV-`cWw7(xt9x2WHzuBdq^uFYYL=EUA7MGfsq|98tFf~h+A>f(P%^}i`vQK{WO8HPs|MmuNZ&98!*$49{L{*qEyIQ`EbTx=X1ody?LwE{(V_0j(j%IFp7g0(01Gi>#? zjALlrdr)z|Xhwbe0&*MEZ&ZCj9YKg(FtXwv7Q?3{v0%(su!9uYHb~Z6i$HvLTHf#+ zPfK*Vy-2O#c7Io81!}?y^yd!bkhbBg@?;BGZ348h=^=c&$J26JxjpkeSvku+SqkSg z2^_GQ#ha~SyeSt(WWCoNMbD`Y0)H zbZb1l>vLUO)Isyb>7DPbuLv~zGi>5trX(>DA4(#8;cm;kizADhapcyph9eLtG&p@M z=s^3j9a{`c@#S#O6{N0_mzVeUd+w6{MC+41v}r$O^;=B7=W1RbMW9fwzUaI1AQ(v~-YW

    x+HUqYL!cbd-i=NKVrINBI>RODW5(?*|Y_=MfFS4`4DT z%!Pi!W^GK$EvAbt(L;MUICfVMtj*#1IDR?0IJP9;wfIf>yV_#ygv)uZ(HGd_qqQT9 zM||NK-+ihgxo)sY6J{N2HNPv&O2l^#+Oi&W zV|}+l1NXw?Izw9v&%d;p!gd^j>D{*&uo2NHdV~YJUlGLl+~N5HsI38obJs9b7k*#`U`p;8T-?Jp8i--i zT;oAu1ht*w$68q+o)0%@zZ2rRenC4n@w-2nOQyOy_YI4?qxRh}n~N4MIm(B^%v)WR zF^I|?E-rTmK;-#@J}Uvl@SDOI3Dc%)7xamIU-bF&(Ag&UwDpPlBa9sln14P4w84$} z-a5q^-6NX8?tNw-@kZQGQ2A_BHiQi68_Fp?G%R;?Sj#kDDn zw%qS$+QM0x)u>H>#Z^C2(oj(cUPoX6F$q%OBs5ffMR0+b0J7EFGPsEB4OwLsY`jlr zdf8DUP8>Wd2T4}V_u_43|IRkdFU2OkOa9y*mMYw z`^TN+^pPYvb@O=csr zF@&4V#IHvmSCedQ?0RojnvGHaZzl?su@G}HXg?s9hb$kR!!ljX;vm}6dzZJo&}wAp z!<#7fVm|Ip{rUOl6PXCHM%s*zm`%RKwzk&%{z6+EFE&$AJ5%c?kh&$uc7@6%2=nOn z<2Zqm@##*ep7J@z&(?UJ9;>A$SvOKQQtjk5A;u)o%8sg2>WvEL-d5zjW4o~R9ERW~&!2_L)Tz3fxT zqGl&6gFTX@cR&0Z_6UzyxCpE?xCz6?4AmIZMG)+;yy4eRGHBFyK}H7XPe>gSLUDdv z5SQHE5iOIu&4u~}<+6aLEQ5VUHiQD%m^%_(14i8ro^yk3ZPVLvGvUZp^)31I`2_-3K#4XZy z-Yb>*OI(9V6NW!XaMD#~SELpRa#PATZ?{bZ9FKbRq{iuTgWQv2uTQU(VA~*PiF1KU19UO_4 zfiEdrBC}}=FPS}^8>YOb-V0WTr8e!-ctA|pa-h}q)AY0~tc0agS&HQfuA0(Qjq3T06-#9l-^kYgb=si({maS{d(?t!;><%rFGl(GsG^hJ zGV>AsK?P2L=DMYV7Lr1p&%;_Gi=NkhQ2`bCt^s%-B$glgt^PbQ&bARLLP+X+7!@s` zvXUx5+aVdy-tUh`>u}MkKiF(PIn2Vu6`~W3dSB+p`e9H~CE^q=gKARJXv_NFXAW@C z?T6lTh{iOq$ltx~nVdwCHToP5Dw85I9CSGvq=q4y31Xn4sB6_-G@*r>eb%CEDx=TN z0A-a8sR5RpMZ8&O!RzQBRIpY1C5e0{>P{U7(m&s1<-zFfloVNA-IRbTf8Oi)qZr(; z7`!WOUz@!awM)mFP0eTylykkUW;{Cyf6cjFe@z!BR20(d$9zD!}4`(y`#evxus~kpDs_6>>r@IyhsS6>RMLQP&tq- z8ihR`@Ilrl-^L^%L_LAISDb7c1|)AO>lRd&M$I$vjU<#{xICaJ{ewQcGkrE}7+?Ru zSfVYF%**Fk6O~Mncpu!SSNk&}?REZbu{A61cqzxfdjWES9`QS5g(H6xzH&Z*RWRvf z<=FUl)P#EnR~UL)soX-p7zfHOR|~s;W4{6~tX&XC{ls9rMz8kz{2(m(s^e=aAiUW{ zy(W61Q*~cGVX#x|g9e_v9tWWbqSE2uqK6ah)|zzxtJLf2oaIj{g*-pG|6=>2P*2r(EPXdwflsBdIDN`!A*Y-245$=$?fxs9rC0j+SDXp2IVu<%T>aF zJ6rP)Iq{F0`_3aKFc4G0o8b;m{f=5^fx^zfe!|HzPA!f+=&F*}#HOxB&HdHe@$lU* zrsNbsuu@081icUuynuoN*$ZUJ-Q`u2MyKv?mt$E+aFpl6e#$}+%_jUCo=>{W123tF zAQJf_VXSX{R$Q;p#{F~ph{~T`3c7fvJ6a zC4SV;XohQd7+kvx?&?~w@nfec*$w;N!w8Is@Wq9dNRr47^pL5zT}+N!tm*Fxe~zqr z_S&U`HxCc88mhomKK~zUZvhqM+O`dk0V*NxEuo|eN(o3e2uPRGH6Y#HU4k2sE{7D! zVPNP^VGGjA(A_X}cl_7je*Wiqzkj{o|GjH{vtZ4Fx#PO8IM3re&f~o1$&c3|Pwtxj zp>`z7FJeZELw&FH?X%txv(kreGTx}TK5*G!iiGmb7WlakznvG*#7h0Ewl`N6OHa;# zU|ajqE)zk>DMPB!rzd2wPxcc^@}9M%H2tL+@uV*Q!*@#R4)GVb{>cU8D6tY#YqK>G zD86bie?BI`CrV+~!9R6iuI{5+ple%=ge@rp0*8t3*CGW&I3U9Y;+Nh|GSTKbKV%El z)YP&zZ*>b>5m;Jv$K-LKuf7{G-KRZer<=-AQcn`o&o*i3q%U+d@m{t1wN*}G9dcx^ z5OqC91ha24oHsRj{2!SMY4LQa=M}$Yj-{v&*PgPQ8$?>S)D&rrPx8?!tx!6_XT}>m zxdFvEo9a3>y8!?w_%&JThV?#Mj$hj}$-#PS(i|t?C(zlWzd1-aP%->9UeXhz_lONxw9;}cjO>6dg;VSK-jr;Mz8;Ko(((s!2Uw^I8VUw`s5H_!Vf2nKD zM|EG^7m9CG^G#b@{_yTz%_jl3KVw%2_}@Q#p+&gyC=MtcQxywVSZ#@Sg!P9$H zbkcb}9TPltSaP*3{ljTB!Lwtpb=`qXGP}swZ6R6`^J}2^WFlt$Y3nYX`kts40ZDM< z$eWtOQ7|c`xs=(hS|FWbSsB_qRSY;SDg>Vce^G{dnSohhNN~1(2{z? z^)rV=&!XBV`o%9@nG%NMW7b?U<5s=}#pfvxTWm$3T;9S>AdgQ=aK@ORp5p!+@v*Ey zH)ZHLka#+qweM|X)oTvU*UX7+sgDaR0%>I$zuqftX=$Db*+JHQ*$qzV7|#*xWW0r5 zic3)XVIjHmtkN*Ki%o^>Z;uohUTBr7Qs(VBv!cMe(Fq&8#Mgj>JLA6(%nu?+%sfL0 zcM+cRvI+C&yBm~kEwo*qFPi1r+l!!e3FD2f>JweRXgQy5njbRM8!yyaejW~=R;Ei4 zOtG-S)FcM{?9uoq6n0u~XqxIh2@Dwd{5mo<1vRX|7-RkT=kJDx*ZTncuHog8{R8abvHu!?br(=sEArP(ps5EiK>aDu z0DC+sodX||8^tSNkQn11iJ156pAQ(lF*eBT#W!1$#7(f(L)9Ju+JV^^st)0r5%tyzE4*%W zY}$E5K{}Ez<{~Ozc+x3_Zu9V!=aFd)JA)o=tAH8^3b%}g9C)mRP*PBM%e$85%Ia(i zTaRb`I9xK#*Ty>{Rg4ZWNVg+g#7oRgESJlNVJ)Uh%vMcOh}_y16*r9^_qo?u+cKJbtnHz@B7F=r;0W ztr8vV7d|%M*B1$%3a<6o^X^yoHkTKpB_aYhIq#3PX}5h{6~#f2ILncFbp24B80f|w z5P{xX8$VF)e|$9jz^&_ZNv&V)mxr_2R_{2o9ru2KY*b!u{#P~Pn?WjC3Oc&(6j%sT zr?NG*2PxD61W#yjt1ekzjTug)2oS<11sV0Do7&aiDX|aw#^y0-l0R_KpHnd{e51;V zYoO~s(_UKqHPB{8l!Yd8w^qr4VTi8`>5S{}!$DF==0Pvlza&S3r#0qf1Ma@0d$- zcg794E995o>?LSjo*N@d-K{OlsTx=9%&6morOMg%i#M)!&=%KSnLaB?%XWbWOIgnK zaclUSj@+-AYxMifY&mbEl)q`sA9W0^7ATY4#ns3!%yOVjCQ7}gt8t28Z zFErmbT^gm-Z1=t*ZVl~mvz^5KuEQX!_Vl>cVBj9XdRY+yswt{wk(e>+MkLn!-rygnT>U6FHm7Q zdTc*FD?t#$$ptOF4G{r*+_Y4M?Xj_*`dMd|)eihu_@%-m{)afoC5uvP1~icViR&Ai zAqx1zQdY+(%|b|S|KSzI8ek=s7nBtxQ`RB;H8QxB2P~+)Uy+DR4%#-pyP|KNY2=f9 zlTj5P^y(tlND?Hhsfd2Bs;b#x@$nY1i`ovLab$3u)#-W$S$VuGka4SCdj!74*#dd@ z0hU}~?0%meelXdaPnqI7-bh;W@-V?Cxwfv5KxPu2CaOM*X_CSX|7E2;cLLY&H>;Qq zNYPXOHM39Zq{7_Q(7_b}GR~v%#IBuoM?z1SkJ4wj2=*OOP7!|{$=i8~d}X;b(_;J6do+E5UA==u1RWzLkX0?RIUQm`Sw(kFL+}MBhJ{ zj`;M4k$Ojfk7(bU+f?q|OhJFT{uNyd{;90*NPRC5#pBGW@|atF%R^0_w@>szN=6;M zc&SR!z;dAxA$w7AXp&Tu8NhCiGORvi?4iq81#^FN8d?%n$x@-D9FrY1UoI~3Ey!p8 zB)93I)k4$;mh$AsPEMq4swif}-rJXSmF9{Uacq}c=A7XCvxJK8fG%XNHuSF!&VDrK zN|w%0qdrM{s{YORAxhEeV za@g0AXoWo0eYs53T$ZrfUqhUMtSMEhWoxMy<<{i=wT}hB@Lw}xuJZ*SyqYXu3k_aI z6!pk{`J3YV9K-#2;Q8bJoCpnI%M7+E*}k{)H|ScC%w&a^gSr+7{*q6r^0p=UM+qK> zW>z0WB>Nu^e>h2-=MZjRWSaz2w1dthIlnaKF|li_M!i!l86`#&W$b~pOH>gNSeDbu zz2W5fRj_ExfXP}%pv&Z~C_N)J@|mG2E7;V)|E^GA{qC3eqyV*_DBm{$whZoZcM92z zPd4cku)mM*Z(A?M*^U!GfTdOh#M>npR8OrC#ON3Hs`__ai8%617%hI592mxy=x3LR zf~p3vR=<4pBw~7<}v6R5`lo;V58J|s!BHr>Z`)D^T#c@>6C{Vu-)88 zKN8p8HZ;lwB#KvM9P^L|m0hy5HWzG^N3wld3=T4Ic475A=QzGU%p&&szPP0=^;@RW zYAt0LZUt4oImQol(`6#&9S6CKm&{M!OW*$pB7kD%qJW>?m`x>2@t10-!+zwm7nKwD zuBM2&gmXPZex@3c6TSo+eH46Oz>br2H-2J;jm26+7bL-GTM=F5$%*A`UmWnEJb#(B z;?;n`JqneC2s!>751h$Z&~(C!Vle@kmI=oc-9Y^=qPZzThKSrBMi-qXy7t%`JN+Sr zdf0t~gA=l;X}LcyP-T??Ay$kw7kP{_;HX?IKx8m@z9FgSl6o)}$!7d5Y*jq7(U|P`d$gE*wM~1Vp#@#;ebLQuVkXVKu{vKZ|r~Ctt zN4cch{JDKH!h|2*18>^v7e6jh%u|(6!`fu}OBR+8<))V^UZ7JG1GsfQzQZX!+vRf+ zF{{>y4bS8Q+)XVUj$87lS8vk|anw~+!?Po>LpDNQ-VK1vXzGZnD!{92?~0NIV>OIyD9fH-lBjy7wp3lye}s5 z7l5!_W5%Q+zW7o)GSqjWftU&>gV)-2QsmWG8H~|BbbzydBSCD9NeNv4{8s>T>3g`z z@^|WfR6VA5jQPdNhUUr9A`47K@yw|&X?008nYNP+&dpQ4i z_Ctstd6pAHlx25%lhW9V-_UF1yM8XynklITgj3?h4Y0+Z+xFdK8tDYmc@2AV#)vZp zkDxPGx)M#)lcjSK@G&HrdZw;L&2b`XaCJ2;2<(LjffN(nY!p}u$ybw|l>VFKgh5_e zX!7K>od9EUb^vpZC-XVE@!Bz20+xEy(d0SDfa=D4v-qwojBqig=;H;VX?_6B@64Hc zo)d!Q&p$miaYbdr&m>^S?p^Ek9vjjuDAHV|_N40PJLj0)(Zp4ht6WBX?LdU#_xa$3 zRGV!RhA8cAm37*Uioti5nWf?x_3xfj#Ag1ilbU{Sjl#Y!vw$!n;{9>8YPA-~OQve|bRb>pE`;oeFEJ6T57NK>T_hY%>|7 ztDn%<4!q5%7d`E8uF1CJNYh1`4I9bCXrgK!T4z+x9K_$j3{agR&5SG7rk(25^QUEt$Dg1CobH?Xm)5i6LOlp;?hXDSk)Swkijt=B32 zcxq`3|5PU-q29k{|GRnXu)M2oYH;fGaQ-3jmUkem?h7J8bugsHMqt=`(_yT7Xp41O zcRe)aCkh>JZ)HdIEwuc2qV)TY&PAQWWQTX$V3OB+*J-Y~n~<4^2is6q=@6^V1e!f5 z@d`Hc6wM62hW(uy?g=akZP;kz7k*g;N2Cg#AT(=B@L5x%=4g(~FKo)3b-XU3J$U0z zb%s9gnS?-W+Jx%>0~wzxKdrG_vL*KlJ2#U%yCXWR@DzJPS9p@QsmK{U+NJcZjBWJR zWayko5^M2LPghnvGLj!GPr#M0WYkf8n^+mI|lQ$ zrvc5j%13F6nu~$*FA_Nj%~q+9r@n|Z4txX4Po=f}62tA#nWZ{racF9sn{T6035S;Z z-=QZrHqsr>+#mj_z;~k9eu7*#C20CVw_~*rwl9S8F#XC;3Ah$;~QlDc9aL zOQ^?Tzshz{Nkr@yW+rb`S>qxjO2(+gGN3#COe19Z{31G9&A5P zmox3>+~eYWWl5?djV>SjbjO104yt`w=yhc>Y%STsWV|O1Um+`l4V@|5wJt|?=;awE zTx3D@(cIp2RE)by`iBPon$Tf|G=p1b0etciGYqSqpt6BPwy^N(k$U#`ST+Jkv-2O@ z8=7{rJ+>~z`lHNa?N4Dn41GNXZyL{EqXrh%-%%e7C2{(4Q}#0*!X{~Gz8_==lE;^p^<;X?&t<@r zYmslVzEwzBEDb04>AX|coJ5%oqCZtVOP^)KQvSM67w7pcrKaFTX2x2_(D51Fb?We( zrp$nP17ThqgAMPOvSE6vl|9q(g`urEOc1~J9v=4t{vBGO3)n=9-o?JP_q=2JWOYfA z_r>_>ZlVQ0DXHC+*CL`(_oStZOmBL_<=`BbWy6bH(R)FR-*)d;h*vxgb!t05j+g7? z)HmD(QfG?Dy-d2ol+kM5RingWX||etkR=gg~mvqR*8?rkonmGkv^b zotB|hcYww8yzK>{3|ScQn|z+SRol?srpB(Da9*2_2Z2}x#wlQ|D$m>Q?HdF?V~>PK zjvoBWoKt!?lT-(VR#bo5Z_K1muCW+z;TRfJ!kz`H>UIDbff08&fgIWG?{n1Bia zO{&jMp1X>_uS9yqmKd8Z#%w{WXj-Ml!@c71#Dev^DU%Nc-6x{RW(sQdOAnSz_;+FsCZVY;K5jW(2oef45hzyjcT! zBG&0=qskGr{1Bx}{=7M#1*&rJ)0x8ybf&zv(vzyFZlgB)0=J2u#VPV9-G}iNS<^G3 zx+Ur8y@>Rrb_Tm#kwdSaSIrY=XLlD&gve*b@U0l_@Z*UcS8ur<-k89DvG*p1Rpw z!{{QEg6e#Y;;75OAya9xp(=lF74h4f&4!ZAw9nzOt9c~*1MgH(BPOhqdom44*!BfH zln8xZ6gOPnvvt?`YZ{;aJ4rI@C^k#si23gOnN>`=)BBC%e8z|K$WM|uWo5ryOMCZ; z1^zyJ6{#}tHnCpwdro&!Z>m~SNCv1{I&VwX7jKAA5rj>P@U6nj0xNA3;bZRarm(Iw zAkEfKW@6*AoMm)JwU68TRW>HxA?hEL0|Tag=nU+w}K2yy3x$FFvodKk_EWL-i_s@Xe>RdO6ql z9k-}`C(UO}`WbTZjoVFrR4Z-O_O;`Ps56-!273%vd-*0HJr-+vnY0flmd@{Qe;F|i zH#Z5<)65VkLsiJafbDf91$NZZB1wdIf> z#76Jjcf4vI%jX&8{w95a79{4&kKlg1730HhS&XA=?=3^`(yYc#i5R1|;zf{lB4jr> zINwd7C&qeIjV*_xmI@bj>KfU%gm#BgWn3IxK7^q1mp?HvY3I3KEE~?&nlqFQ^p!VQ z=uG9s2uVh?)WkI!8+Q#YGhg1{p83p~N+Jk77IYr?`Eq`@)-to56xwn3p3^K5iBP@v zK~<#%ldFqY7c!Z}5)sR*?IM4+6dj64cng6b!~JXx22UJN1Ksp z`?7S!SDi&Q+p(UfCz%R~6V&3CDF7^0J{Rvus~&HxW5~4Je~>D>Whmm}n3$KV@Oj)h zB3Xb+_Kl!(%f9?sMSI2HNz24{R>mwdNlboJP8JxWDkcy}b`1EEKhzC5KV3hlKwhjU zwR(Eu{Rt7Uy6x5cv^bI@33>JM2jd}U9<0+w!01u%C!`6zS`3Zs_h06vs+&ZPfdkw)=bAcLpSd$^+GI)<{6x z=j$sFh|c?ihV`ZsL9|=G#hJtFq|rtF@BvD4^j9Z%nYN~F8~Z1hxdlzC6!6upq_3n#y%rO5X(41xBtu7JUoK{b^AkkHVWU;u3x_a?4M9XXU1l z^r`UGN8hror&jCJSIfR*z+FQKK4_AyNKoCHmZE7=iQ#e`r5l$g?@+emK|XH1 z!}fw?E&LU39HREmW4%v|p;kQ(y+Tb7>s>)l=cz95H0&&q za3-Fgw6d&523)-pZaj|dS%Xx~bevJGd)|dqHd_)yidk-Z#q1wio|au5`l`-eoswJ} zkB%A^UA^_N-z~d*S9EnC<$F11sXcJRrag82_|ALUO)G#7AP(dzGNzA$J$4s55-PxP zzO45qF4@TP1oyt5G;eIYzFKTLiP7~k3B&9z4=I+sL$uuh1kWCOJ=_OVo?F(sXv{HN zmvUDZNv}83FPF|3Mtn9Wo?|B%0_Q1~=;dgyAW6~D`$2@Cm@`?Kd8nBw0xRk$%SUW7jW!pGY<9+vf@OR-)?7~)El#ff=(k+H zO#h>UaLt{94K(nj{rf_RM-KZZV;1VMk*_}{nr{G;uwRNcoR1cjRy%mJ6xz69q8FjXu(f)N z9@3l=h6Q;LPH+_NB_1Y2lUN@xDc0AZZe;2-D_r98D>MqXax9PPVD%Gc$K@vq6 zT!bbP1)1D<%KVOF9X}In57HPGpA3iFMg3^Uu}*C^=NSwuTZ7i(AMuU@1>W zRi(c1THOu6@=N8f_S?E6eC(g*xygI6xpleeLX>NsfF4fP8)*79y&`;>dnJ9fSE|xA z!PhMGnU5hD{b5Rj8eAQK0zfIqOuaW2Dy&MjkI^DJS}b3ML0%4QR~Pcwf%V6)avPPhdY_Ge#$>zb!iB_@bdR@_6 zVOeiHL86Hgi{*$oX_SJ=K-@`PAHwxukn|**=E=*dg?&SOwFP4m3>_F$Z`YqrL*!&7 zjU!3Q__pdf+$}5CP`3YV;=8P_44O5K*kb$SM&JS+-`<$c6*{25K&M~A(|k_R6cxv` zr?LS&0uNBmULxv+bJ23rL56Tt7!o;+`=ZQ#F$mJFC3RLlz*9y`@#7uoYu%EC+7%@+ zM22*^N6Kiq(al-66$l;xK5M{}w!WYrzP1!hutIXZIkxHEOrb1 z+*~uZaW0skwyLeaCYfAdi@y6_xM6^e>|U93jzYe<9SP0aQA#Ki!0NKVA*aPiH;ulW z>TJYqH>!g)Gx6s6^_9L9JQz?uqr@(zLi07wIMC60tDB^$WWTfZxzJres3e?T<7E4- zX=7fr2C68BsbfgfFt3)1es_(uH#>U~N-*IY%V|4gnWyk}P)GmWw)?HuWR6vwDI%d>*$?zHS1Lq=-eP{BnZt|7WnQDyZ*2bo)?=ykWB zs*L<$!mKc7Ja)^o9C%tr%lfC8q{gD&Cjj3rww_To3!R@`ohzPE-n7GwA!Jk><+kf6 zcr6Q4T-spgT*V^7Q!FLtt>SAnMU1){#f2Ni21|%V@W~?Ol~^10X%VbLUrZ3ZHhC&^ zKRy%kTo^4q!?$ZN(Ce}Ctr?!~oxH*Qr$@)y+t{X~By2;t%C-vE3#xDpi%*svRe*3z zpk={(j$rjnO}1Q>4`0$XjLE$G;^K@-=(v)tM+TUPBpwWT`6|cGC@3XK2o;hAJFXq6 z9i<8f-i3_d&o2ya{hfZiZ|Z>Sdw{As2=DWDnQv=6Jg{Bs($hM>gUv&(camSE-nhNn zHtbpl6})PZ<)>;_raJlAJ6``Vx=2YsYY(0Cs(IFP_wo+GHYeE+&Q1%>go0Obr1RS2 zM$bWns2y>7?t7z|!s361Lo!olZxvHrgAFsu_NH6aoRvxT1$CdvtCCsEwjp+5caI?x zU!{EDPi$)ye!dg#m3<1RCQJl%%PtH=7bQ~rfPfewa6zj)8K#3y_PpFx?ez3QonpLd zv1#`({x5^XzEkEWksk8(XVBr1@ z81Hi2O0^oMcmB2Uq{nu%c<}91-dCOoq9cl+sqdo2#2qa0**+=cIEAlmGBQ_r6xO5; z%%dJzxJ{^a!^AKbvH68@2d6$PiPn>Hs@Tziof{`|6zjqq^SzRB=rP9*CgM+N_01!BBCLqqB+ z-SgbTcRE_Hc1-tlY<$(3v>L#MrLcsnCL`6ykQpDI&wjSP-_mF_^DFPHA_UGp_JOFi zP>z(=&U1ZfAuy8{&(OQvq?;1)4dAD2(8I({thRTI#d`N0X|^cTwdMJu3Nre z9y_i@yQ@mY=Ma2gS$`w_;{F^Dar(gwgX~aoeKNtVXL`A*`E8EAX3^)TZ^PL=>xSWz zDorcsXP+yeR9pkPyI;$$Lws`i+mNG?Z@0aKFLxpjimpzJPQl)*o(%^>+8%3#Rr|YL zEVdf_u^#S$n$ZhXjiRUMyuzjGr|vtwF9#~QTjlZ0@lwP&bh+arwRWSzM%id}0IuTqy`+Su z0Qte*uwCZkBYemvBJkeveaU;0u+^3LNXBp4X!rIO*YN*f&I+y-(W)vKS`dr=PQcXtP<8O#p9Ifs zNh1{_RIHp)Tc}GOoPt~gr7K-RB3YxLt||$ z2%QEU7*LaDMV0B?jSI_zb#uL|i+UtKnA{i+V=u>6^Elyu>VUXSJy%;o&{<_L1RliQ zMK+Y)Mf!uX$pI8y`LdL;w$BF#FDhL+mj8OR{a~c0F;rJqW}&v}V@S|@rb5qIB30NW z)ar;Yo~FzNX^=N+VvGRrESQ=JX>bQJK>z~8%&5`FE`#?=zZq2)2;fEyeMS=C)LIZl z#+gL@cE;Lcmvg-p2-ojWPv~`uBkM;&Y8Om}9>YSZ=h*b+{($kpEfPvAMJ`S_y+-HN zkyFd(Ti;;~(%hDOt}U8F(8ICtHouSG)XLIh|ExLO(hs_h#hLxU!eOAd>xxm1b4`-w zg~mL70+0lgXZTIXVYnZGTbzSSRJhl3N$IxG`4ZBhVEJsc&bP(43a6U`z?WrCdF78f zk55-{4AvH+o|`-PGuOY>H@UF>hMO&YIzD#lIwSPyMx9|gyaa)-)8C_oEJ&W*cV>|G zN9-17lr6zXJFRBes^p%YiAYSnq=w8i0?SF6Y|Q^7LK3IYkSL2Ln{}eR;i2jxd|etP zeREIhJ8(5;FSctp^gg<08Sr>!lAatevL~2Wf3a`vx3kxJwvunm$&sc#&ac*LL0|W4 zw*Qp-aT%NUo5t0`ZahWZcxdDePlNm+8#9gGZZF&OqvBU}2_T9`hT-ew#!d>3bHY&e zHL^FaP;IZg92FT-5b9w8kvl3nbZGrFw9E)aEG^xc`CJp7RAo*f zJ?bnXJKmJ-xz2A9AA82H>YUL3xEcnl``Sw~_4v+YLcwg&oKI-?Y06k$2ueUh0 z7f||~69Q&B)&JIW=5LspHDBz-7oB=6;U+sxzvTxZo;5+HmPvJYpZNU~*9@zp3Yi}%1*nyF=H9DaAQCv6Z)a4V;c<)#B_ z@BP@mg@lWBT3h(hs%(+;X?T`i?iKX#qM~!2C!)wP@*!2Dv@yi(E-*M5gHIOmK6Vtq zp-k|ZG)BsajgQEVPw(|uzfnRav;qHq|LyP4oOUITYI?EYj$Kvv*lX_73bPr!*NE)d{|Ijgt0eBNRlDr60B0OHRe_XJG+f zV|OHlo`C-*!_&0uZMc)q$o{l{n2a8uUOYdhHw2!`hLIo4=U8Dmgx5xp ziM#7M;KU9-vV6-vJQPh`p(PGJTOegnyl?Mt+Mz$jBemXtPk_9tQ5Jjy8)H;|jU}wr zl)5PnIiFmRfxBRW5-?dUcg$o;R`el=84AV$V1Q8a zf+xT=T|4L=dvdSwg)tz-MsLBon1V7p1`|k4(VtSF(U}>{nSj!vg-!fI>vtPh+y>{( zlu*x%KL@Kq`b%Y8rccVKpj~Ep7yjxSKuTv1hYuDb-3h>9ko(v-rWHo{ETwe6$)i|F zfceRfm+qKo&T$6G&se8^Ky+1~I*=#5M(Y2tbG+K^-=C9@Sk|!rB)Ndt&x<_%Ya#K_ zX`*w&(KkF(jq+maK1ln7`PsIEakAHAQ0$v!v>Y+Zt#cW(h#-qm|J-1%vy1I*(#m%T zBi&Vbh4(m@ng}-Q`QfEzYkfsBun}usH;W%=d+BPD*PhWon9tFotR6St67 z7ZZCR8wOHYJ0tSg7h@;2Z^XQm8;33#5gn=UgbxVpt>N%?r^wP`+g95j%5 zuN(RvKr;mA=&K+22|868xirGtsxqdTvZ%0Fwqd4@SN(CzW-h7vkCM`>(-hNF5_$$< zSqjV0I_V3mbl&;o`_Fl8vP(Csx^#1}XfItJpT=_sMHV?+1bPTb-1CUZL;w5KWvJEqh^naw(O#J-?zo~Dct z@s9eGf_r*jCX5{NB*?cVyS@Q=G`A@5)MAEddHE3@{za$2?vHDQu959LOsfmt|#52cYjYoA)>0^5(Qc7d`Dv$LC0!&E1WDL7>3TP zX;(V{a+Wdom{4949*M^D_dN|()~(C7bA0V3>rVAxqBI&ND$G0>HMP*_f49jMBMmW( z3#a+%NX~l_o;Me#%KT_Ir7^);fWJ@4-ie`A>KQ>U6$|V_HiC?v2=B3ZLz`Qau4O*g zilq^uky}zFs+`u@B(e+5h;%ZJqkW3V^s#zj9uXGVq4R5*)J1vcm`7PXX7Hz5@uqHN z1$vMB@i2_^AOI(rRx=_6jW?Y?J;~gT3xRC%|8EU_t;Z`6A2jZ&>J@p-E`}Fvxzu@F z1|_-(MdS+YW~5fRJA$ksa-Ma$0ZPy}oq@6RNBbbkh*YneRLfS<^v%fX^IelXU7-cE z@Y$&1l+xBj3~H$Ztz6Xjfu6bl#*^{yZpPY$0m( zt!_iUJ$ctBkTlNSRaDEi7_(^e4vAA(Y256;_k^I%37i)a*Q;#|w@>J8!NevOE-%Wn zCF&B$L#>CLHjVDLV7@WbkK)Np9mzB3{UbrlpOBBiezvxN<3l^?4Jgw(sgyj2e=%fa zA185&b@s#@Q2hL6V?zlLGjsxbhNbxZ(#Sd;K2`%(np9_P411v=V(!B(PB2~~>N1Mx z2dB(#rgP+^ejQ*Z!_S%|njD97i!%2S<(c1ZZ#L=$BGST=FQ*a*rVo#5_NIkFcKSY- z^(cIuS1Zia0xD>@c5L;f8a6D)KDuK36~+|0w+1;12ihOxhWmpA(z>Yyy6bpEC6Q`0 z()3n#MN?l8Mex@5Ens9`wcdef|K&je_sA*BH!&XtZ9gIe5Qgr}u58&rn>m-k0)j){ z-KoMm#vti(xsKO7HVp2c{ORf5v8ZN8lTLLu*(Y!F^p4Nas`9KJDNJm^3X*5p3X1P? z)>kjA_v&-|)L$_=-lE@??NU~1A6+(;-mdvtw0H!gJv-B>F9K2~HQCX)z4Zgcr9%0( z=b>vp;-eG93m#?=5b)mCWksh}r z^dPD6|84G;KYdd!NsrLSWQFhj$!2Wr%trRen(vSU0>iCVJAe&5rmP}rk9DpX9bbWG z<}1ia14d%ijISf{h}`y~{^Rbd62CXIwy{{Q1&g~4`!H}(u1ODR3O6m$-blyA#u!IY z3Qdbo7@ZGs;zeq~so*V$U-B~mL<2zvQO#XnZBeP!>a~guef^Mr6rwjdWj}uXjc4OA zy(GZmFZc&6F6BCZvtlTd4X;Z7Uu}kpx1y|?EAsow6%J^wP@id1_h@*9l>yHc;~E|O z-o0;UsLylBOQG%=Eq}sV%3@7Uk?~QD+LU);#ln`+;MQXhD?b7$um?DNmBf^x%$zFk zBvJSr1{Kb=Q7r%^_1*l6U}v`+n?yJpPFK7p(arnGC})a?t4mi=+aaeq<>nwv`nCAYOUw2GtsqZoV#@H2n@Z=CvfuzE{+Ak0!00zxd8g_7;(|sv6m@* z=cwq%XxP};)!a?H3awlXb1VWILt%|E$QV{U+GPa{Q%Y;uX~lU~#!j!On#v#R5L?3H zo};#3qw~|cBPqwRcXKVv0zQbpn?6q_u(ig--?g{eU^6{@KGx0%PnO+W^H~0X{5_^@ z3c42x=OK!|FRHfHg}t?>k0(sIZPqRIt|}YPpZ7vrW=}iSy&HCe61f{2$2V3_NOZ?e zc+yUPd~}(5VaEbcRZw(qQ5mdT@Bq*?z(h3*qHL;E;VN9UhkMhf(L$#krVd>`hp|-y zo(I{(G#3*6MW`$0vrDZ-d-C?-n)Z7p$1V&}b#o8*jXV#?thgyp7>w5xg^XEF#-J@~ z9t3SIxo3{vEH+gHkh(u~+%O@~p&&?N-M@Wfx>vI__+Vn=7fb!NiF`6Aeoi~@ZHF!< z-V2SLFF6~BeHtXiJzG{hc`#h>Tg}MsbhNq+@2c&^6$h|gcsHh*=!iMT<@7;(w8+D+ zn{0so9Qo~rfEnoSbqSu2u>eOmd%tdW#f|6#(j)#SyfJ!I`Sx7twB*$iy%IR+_2jK3 ztIw}sFrd#duILXZ%2@=aje`g!f0ll=KY_orX46>H5~>N*AlE{WaiF>JYc)d5#SP*o zm0Ca7&Ozi?(ubF-a~gh^r@xo8y4$zTVayiC&8JSz9qSB26s(H%+$jtex)zWr31Eyu z33g6avua1A5fu~!;Y0*%=`cNb9o;=_z*y#{Q);AIN;fU|Oyy(pkXuh7BR7jQA)lCG`OH1h>L>+n?U2DC^QHANXcrnI)NG#mV|$WRxnl2YeJL%Jw?MPsjbq$H zU={AziZ5Uc)?LD?Y~>WkKP!=6NLF7S^9|3C!;gMjTo@!0(YxnB4LIBd`1?m}3X%*{ zZoz$+HB;YmF7fJ{)m~zNx?DQ|l~#4;T?rRA!KowsL)#m1g(fNTrW~qd9EowX+R?*9 zmC+aOqernXK=LY#X{=+3B`i{b`;+GIRjvKYwdm$mwnh zVcvP(f@lrA?7jfr6TD_#|FMl3?Ph;qEy4Rg&_Jg(D*A-sKfHdbxnP?)F_Uq+Fom z5!stGb0E^op-6-x zq)*mm56t%oF(M5fH31u`DKxgf>XWJ&_=w_|B_eZ3!Z=LSJyVA7g=B_nH1^l=a?Ay0 z8lTS8Jxqwejrp&HriXkcG?rf4M1ENz&-@n~2-eiZOkH*}HTe_Eq&0hwNn>$0Ldo%+ zA6t)KLk(biw<^VffZ%IH4p|n@YJ03a)Zn{3e^Jb}s1)1@awh~p9eJf^$)(RbezTOO zYIzDQ-e8&lz3E7d3I^?N;MSIv%YbO_CrZ5b!K>Z1Pr*T1Nlg+;{Om}0%`)aR`jpWob`Ou5`M_$I#aWY- z53W7+oge~Bp*Lfu2R&c^m0_ut&2wz}{D>E$jRdDQH?-kR-?+ytfRWK^Cv1H6#93?oNwm~#ZQZhO@co-hCs8;GTWB-s#ZL$L#*_?Yt*F6_JDh#A&d@`c0}-H%J2J8R9kon1s&XVj#I&uR5+pQ~Y7aAiaf2?Abjn8d2;Q zp4X5cS7YDoiq3B1QJW}#{u}t1Czg4U|J^05z7a5{aO` zF$?ttvpm@s7#rp%83rcfXU+;THNG;_wE|X^$wEeqiDu7E0p<=lP-sfn%)l06fUsDLkk86hRQMUP-V56_dgs@Lz6K}UM462 zj|FA3hqS=~muVKmL>icki)zVd<&G@FG5PPj(aDpamT&Q0vjGlJzy`RCS^8j>+4e|O zzq|S~y@L)DCQKXb?%X}LfqD$-f_#RNq&((d)wh5FuU+^YjJOB8KBVsR?7!^R|F7Yz zdJ3jo+dg7Ja@Z1N1K4E7YEPZlCe`>cS2_&vvmL&vF5#XBhL*e?aHaXFEx{ssPq@k6 zW2Bq@7UPstu9F^htG`#wYw%#v=N_^O!elhC{0e|bGv23*UE8{q2iqG;zhe**N^V7! zis0H$S?HHqGYF2vU6AJKw4jeue`QqdzhpXr9J+?#yztC2k5Px#&*h9*n{$S1r|L;_ zyohB5>XCiE=>~UFM$kgP)TcA!oNF3E1PBag_5>pRMnq*I;BDs4x@Qq{#XOi?Pu+8O zskM8mStQkB?vLqwA|+Wpps45!Rv1)Jl01uONzr^$#wDdJd*-l^mtJYfJwG}RgyR=? z9B|V@FUqGdBJ;XNmN@SG0&)_h>z$m?ETjJMaeNEsyy$549BlTR>g z*R>m%8&Cs%^m3KXbuU&bu~nN=eI~!4F(=jqqysfqbCWwc3bZ$``&t+DXWZ{dttX59 z1w6_krN?BLFdrqG+mujvHV%8;v7nn1xFa=7bHIU-WB>f*p7oXOo7DnhsSEQ3n3K zi`sPdX_j*CcVvI(FW&doypri#>?*7z+;4*h|`8NB}OkfqS|j#>N|=U+_*AaTZ8}KXoUP>EvQeWzM|DP@D6Zo*HeGWi?LDbl;ynbIY5kA>h*nwJ!J=!Y|tVQ5&cXZGKodi~qpfas3XEr%Rz8-_pyL z%Qsy}Ovnl0u>X#hKD%WPiIL(OJj5wevtyWd+h| z{1DS90m9o}{E5)^p}17u{QS12!kl=!FV{gB#uXG|ThG{y9Pj$eWAy{b zaMfA<2@Yyrx_i8t{WevXZ;}Mml2E8xNdtMNMYeh3WAL7l8^%G)vAb4A*p0b*Rf)8g znM=Y$%z4mfGvhVuq>U*(8e9gL`8D<#Hz_8SWs%5ad9p@i*R7WM=PSI_{3PjbI?9#K zp2<_5K#}*|kltly0@J#YIQ!jI*EvP6Q}&vmrc?CzY1^_;oxP#n*=g0mBFmr)2gl6i z$$yD)z?Kt-*Z_F>6;}L@HTK|+|DJ*WJtX{ZXP@?;)xmh&8m{p=nKZ(+u}`gM8zcTT z)ojET5JFB1cx$(>P4^+dP{bhdcb({5-T&(ve_|$BFVJ<%lHFYrK`;`8bFse^4c(@A#{8kh4i$JxaEtNB>=mO__|BPv8XIkwciLhdSf)?&o?DYF7wN%N&7{ZA}A6``6Z0YLP*W26h~%;sEhf)w0Fg!|cd24&w0lN$ z_Z$nB3^)N!@T#a7{N3*l{x8Hgu8g2mLM%AiC*Di^jIuxcHU?uda+fUZ{7|Pq^1wW| zYX|@XU>^RvnuBHJsChFA@OPAXCYzp5z%kA9hqK-UGsSOq6@l3*Npe}zFO%5DIGdSX z*48T7cZ#V$-+kA04ljyfl|6FGW%o7rFnY!4iecSQma-`F4r^rmP3~A-zKvJbt*(x1 zM(vurELC35O5thAM~07(l&Cj!;A(c`z-ssKsp*^RW6CQa|0=J5t`YwZhW=F%R#Uk} z2TJR2{8}0w>yh>_*Hb_UO;6{=D4Y7E0GnF-E4DO09ZX~=FK>8ni!iwKdsA>}CUW!o zf|r;IiN~+6DAd}2e>Yss^|>1vPjZu6Hk|#;BK0?624rN3jt!=U z-oiMGME#E&9b{+C&}A5d@m?0JMI#`}su*ZcbPu_9>i{0R6$Dpo-C%O)FUi*HQ9UUJ zM?xw=Sg8yarnE{X1g^4c_n7Is;8F*zr zt#Q3X7kT2OwBQnUvY2kN$+6sHBg;;ap{=ADwJ_*!7 zveZp9t#loc$WgBaL|h?NH4qm`bPPKu>kw8;^e?rjqsIahVwM-NfoKGb&(?K$YJt8W zZ8fM%2;#OJD=>dRpu!$|IN<ozaC<)Pssqum|2fF-!WYC%@weRL|{(Ekq&L)4==qaNEvv+B{{4M;&a0Y43 z>32LN0xveW+36FdYmG7Wu$=PWK4B0@)^)AY;X{OZ-*9;HA@LE>wT=WO)P|4W6+7@# z6=-mQRjdUPWg(ydTB})3Lmf3935K`N7p{(7C*({Rt`l;-e03c;j1roKHP>9#gEB@3 zj)BG6W>EZU$7X5zh^-T(hD%g<5(fXD%Dyw8iLF~3@gN?G9FHKsf0(YY*>~bAOBjR~T>96;L4XyC^G$=hTgu1|-|J71d-(6((LYR5@o-+yzs6hs zALCc5nWyn9F3@3N9TIp#%v{MbRe|Dva_bo8Wa^*N$*TWJnmnGK4HgWUj7H_(*0tID zRYD7k-1PoCrlk|v8n0`_W;;3!crsJldrv!GO8amM=3D!*6%WLSDK2hhVmu>o@@XS~H3P^g}3iS5qlvI>x>U z@PbFqe_U{+KV5}aA2$8#;`(1#C*Ul8(-ql!pBBlb2$FC*@vlX!2iz=A6w#U6W8e0a zp~_<&ela?_Ui;TgvzDa=rG~+qIWn9{ITe?g|Jg6!KxhdZ6BR}^MT!%0W zz*Ghxgk1#+2V>7g?@c9K72nk6b=OLobSgxqPzP5q;rIPlt$HV&g&379 zdQ&jc)PT?MV`V$}Bbuvo%>9)jFI-h=$!N;ar_qkBp-vs}N}>m0fMXD~%X-SIb>uyP zVyK2NVr+IemE*0@0s7c*&!sI?CCC}4(*V)1T4XY6S0A_0%I33&_r&Jg40UVM0kTDt z*FeP7@>LnQ!asM`Y(Jr_0g`&?1WM3POa9FXtQAcncqMSwT=}p-J3pA^!46pk!e{hJ z`AHSMo{XwzM;|zfk;()Ia{_dLl$Cz2MFGp+{4An;lG1HBIYvfMA;nUeA0pwZ<)Z#mNg#-^GzVW z!z&E21~QnhSwlsW?m;n#@q(-;P>urQh#Sg-ikYWDo(|hSPst;zUjVUD7^-;nV^O*4 zeM5}R&^g6*QJy+ge|v&f`9-h0@z?kYDjoa^lGp0R0Ot3CdSMzUpz%3e%GvouEBJF~ z*mPLX|Da=siBfmoOwOiDSTuUHiMvBeLz`pgrKM)v#M>s~FQ*3|QvFFoHW^V83AM-a z0O85XfEncBc&aKuGj)9MK+SZ*9`L9XQqI&Y>!csdjo&>RkBo7^cI<~EZ8B901b1nZ zx?6w&Ujbxv^`eG=C71WMQp-YF2#}YYEZ0em-vQ0aP<}=Gv)Y+H;oY*~0i;xS@fT%} z753Qv%|{A@8*KOiZR1ePms%&*;T)S_y*;NTeHSHejrver2N0Uwu+Tg056(4uklV3CkjDfAT9p0Q7`o`xMBy!`j`13X|kkB})4=)cDg;9Rj7tIqVTJ&jE! z{BFq*Q2PBY@)&m-`1ktw5Bptkii_|$T`|H#1OAIlD4dK^^qg{xx}yNFbKe7~{LHQp zzD3;@xBm<$*ewu3lci3SAvX&ByONClO7W1{- zEK$+z0BOHX5_T@nOQjVyj=)5+Jq@0VbA>4^jv0y9eW+Tg>-SJXN6VP#D5uqbnk${3 z#rZhd)ip2sh`+zySn<7Q8J%NS;^>@pGHOBF(-K^2gahd$g*ae3{-wA|140i22$eoT ze5Iyr#>LQOA{r1|gQ;zmlV_ByK%wMd(qmwIKK{I|6Rf9aDdMANLz}<*D>nhxi#{>f zwCfU|=-4t9o&W3_Di#s^tnm)Raf&7Gr)xAYjkjE{fbc{$wKv@=O7#=Sm|VAYC6_Sop?iu>5?;&S7@&iY6tIQmJv*e4Zu(*0Oj-+GBym;==;LGHySv=G)gy}u3=B-zIZNJY z6@21e+t{{s=;r1|SY0hP0f$MwEH94->EYpHuou+mtsCy=oibadM&4HFY9y0rBgwax zFbj>2rg4=Mcj+=dT2x3?B!v>YG}WZDY*J7<46?`0MRlhjCc0SAG(6UhmjgT4^rO!H zGU+^yyCnG-%f-^sT9RKN?$Dut=^psvUplI-^j zBQggAcPcfHR6E)y1i`Dk9#2QztmI9;3)c2NHnML!tgzapq5qlSqH;EkW@Y%U2v8$&#-5ZzT&IE4I^r~4mKrJ$iT_SySR3Ek7tHAAG6`20uL4ZZy zrz$vvd5}3Q&-?9k@RrPn$`mufr; zIi5%k5_KY39bv@J_uS5b2Jgkxfxx;VOiu2V>c{(OOG|e6M*qf&P&p0)+_<-PxKPjK zV$xfTo$bxMxv%esY9*uV1fO9pznf4oc?Zk+`RHt|HLz;Mxs$;0IolK$04zw~TCa_C z)nutWobO(2m5Zy1Fr)}hqYTqi*b6<;48!OYOkDe(i3)A#yT0yHMECB#_?+RhCAoxiJ+}3uzTK@5DV4BPDmsugY z@xJ9a0In|vVK}N-uH12Hyhd*%Twz!6{Y5cL;&}VG=R?!$vw?JmDO-o9d6!{7rhUNu z;W;f9-k%Aw$1{P?k}F|K)i5+PWZ(&!TM9zpTJdQ*jl%Me(-qc~a~=%mQ%r0AuPZGs zX5j103(7NFE?$qn8F+phOh2ToYB)zpFx)Ny=lR(n(a4Iik_Hd>l+~zt3ZfCUS!M{f zS^01}s`D!2(4jt1040;1c~I8(tn{k3Vo~tz&W2k*44@0w{N9{%@2buYP>-*B7WQ-f zo?SC*#^WeQekG`9C)kA2%zrMz!p}vKtV_VWZ~pG}dDq?c!P$$$p#N+jZVSbF{vn;8 zM-RQc=3=+d*OLgwZ}Xs-GlFdnT{4a`CTeXU1xw{?pz(`zpZj{TtGkCp$oBhBxA=*SM{fG3Rh6Gq^BIf0S!|Gc<@ooVzEI zT8@Jl^sJU>Z{(eMli5j^aB9#knU}OM_IcSP)`na3h(*@gIsT%`R^%;n#StW5>%;pcQ{0nHIBrW<1QZUk`kBxi_b%WE6pE{r&Bw+al7^MMryU%%&0pX~jdo zcg489iUntKVD`WYNi}}(4}!Wb@d9wbwVrviE*Xzxig+l0h@XEwPRx8Ah}yBN$)Hm@qc5>!;4mC z*KzlP4)4UT{RY@wmh%9WOSP8|(=T;)lq$EY)$StVts5=iCb^$aN7nhzpI#)-)=Q?O z+SyNPC!02;L+YvZiIIa|Mci(A01dLp9dI+o%5B1v{mI^bTFlo;E2j;^_PZj4GCB`g#7^vf;tG|J9nGwxf1&zbukff?fUUbD0a_cl2G^LI||% zLr<63;H84852nnQ*mUw4zFp)HC|?5_rXXAjP!noV)g#)_vjiS|h+Kd~G)k@d+ZO5K z?ByzHjnd8-3m4m6)yg1&q#^e{fQ&IQOsL&a8*ay#fv29&x@ZGiSGX=Rvwm;7fU-1l zML!`(W(WhURZ8dP{&&jg85C7GiWJ!ce}77`64<47Mc<(^Yty z7A9b4J*lGvkF^Qgw%S9Dh*4FK*gziQwJs#^Xmt7dl=kpxcL|zy6

    VAq~L2AD&}3 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 literal 0 HcmV?d00001 diff --git a/Doku/images/boost_library_path.png b/Doku/images/boost_library_path.png new file mode 100644 index 0000000000000000000000000000000000000000..d9dc5665326cda415acfb30a863f38a68e0c2ffb GIT binary patch literal 54204 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 WWrRYwLdexnFGX23nF^^_Z~s4JF8$R2 literal 0 HcmV?d00001 diff --git a/Doku/images/boost_test_adapter_solution.png b/Doku/images/boost_test_adapter_solution.png new file mode 100644 index 0000000000000000000000000000000000000000..374e7c575995cdae3e26a8e7cd1ebc9ac15c97b1 GIT binary patch literal 18694 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 E06Uh*UjP6A literal 0 HcmV?d00001 diff --git a/Doku/images/boost_unit_test_adapter_in_extensions_and_updates.png b/Doku/images/boost_unit_test_adapter_in_extensions_and_updates.png new file mode 100644 index 0000000000000000000000000000000000000000..411ced54361fda6a6bf371fb34162dab4c9a7a99 GIT binary patch literal 58082 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 Rm6{2j#D)s_GN literal 0 HcmV?d00001 diff --git a/Doku/images/boost_unit_test_project.png b/Doku/images/boost_unit_test_project.png new file mode 100644 index 0000000000000000000000000000000000000000..dc703ed5662a3bafb506183138f7c912b0468ff1 GIT binary patch literal 61842 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éG_D!iAhDnGnjEbs z@u+G83{B?s1=&L<+dh~7?I07R;kf?CiqT$h4sKf6xN*&P3iWYlo%a0LwE5o;?4=Js z)?feR?Z8uA_hNJV;ht*#d5+Xxs~E7|M4+|e8xEdn^BR;UcmIRey6eQn>c&%r1TOCl zonk-Pliu9aVn@d6OlR@Y8!?8Td&F2!D^!Lz_bNl!@#qx0f)Tp4Ew!ZW3x%KStE!g9 zTKD7e6BY_Dn`yx#qyG`UJ&=3J{G`tS5HQ@?Qj0_)yM)^)XL)KlUFGg4H#v7=ig5ba zD;R5MDHuo^C9Ch%Ixs$w7`~SbJLe4a9IGkWqOVb?NS-=-PU_?Dxw4g102j?q@U1y; zzOC_|IEgJ0SCX2mIH5|YcrVG%7qcaYz4exBvQ})*2skOfr~Uu4g#7<~u+4Jwk+d|6 S)w#u%PyZj2+o)UjpZ_0t+-HUW literal 0 HcmV?d00001 diff --git a/Doku/images/boost_unit_test_project_files.png b/Doku/images/boost_unit_test_project_files.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb2ccaafeac7395b431f5f4976f68d16d298e88 GIT binary patch literal 103649 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%0D3LyHPP3O^NB2f8cV5` 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�!lu5A=Wx_||w zND%=QX(AxKNKud~RZ2i9(xjIFfqloZJHqoX#N{T`Y*0kI%v<802dTqj4a7A66U0t2OherxM9Xe?d#&mp6Q8$H+r2SBW zO>Nwzf!^li+_tBM>v&=4+V|4gdLu`q`j{*5dWuR9->QkI%C(DU=DK83b=RHPsC(;| zVp#Q@^c78wRQb>o|MN{B=9Uh_2lj1HGKtvp+#anDynjgT9a=yQU!Qo&^e3r^u>=|S zfY8`7A^Q^XxYaQGTI_Ha)RAs2im4v(w+Lc`?@}=-(271_^MiCeB!6I;3vfLE_7iO6 zR@Nv0xVtlXA%NBG@>jr{ua&jk&KOOr$8x?U6Hv8_*ZpX&ySLDcE=C&4&s!0HVxt8x zq&tL0Nai}r`rwZirGs(|9-7OK)kru)KG4NIbWa%*(9g=K>$;!)b<_R6I@03|Hc9xM zyQ;Uv+^Urg2?}Cf*0F~AweDFFA2x&Qk#|;htpP*-*4)BR{uFO8}_hlQqxY8ee)xZsVZ(|69_|RG9%ak#KdSw z`_v+%Q<8t}FdU7S+u@nqhHG*)QsUV{dWg6HOd+H)XRg+X#iLtWrJ1ywp zJT$jEok&>Ud!Tsgas;F}5Inn^x0g%)Kln%nPXB{Wbdit>aN33sX-l4XC9g)9i+(Qt z7G;3=i?i>YTtYrCaB{O%nkn>U{J2;18$kmQ`#PGc`A`>=nT(TG>yEKR)^vR3Nnq+z zIDRX{wH7gJs2i#W-H>>f3s>H>8ZG~WT%*XnpIYI!{caGecF zJ_*gVN4(V;{4scR0T5k+3TNoujgYs_-GbS|5gUCQC0#9&Dv`G!gKoCj#9-XJ3txiju;#z zeqcGAPQG*fs%^8^^b#s7)T6=sFmYD&E}o_p)^3CynrdMa#!1XZ%`Q>33rd<5JkP52 zNU+3PzWd6K_!a6YcQQff@?>jr4yEZAHJ*^Va6??8#1r8SZ>i0my;miIY57I+W;sa( z^q^zQTh-FHZ0w~^LbceO(`jTRo3OAZc2u~93%mY)5X14< z)F=M&m&tSPunGR%g3vl#Np}TxO=YtOCFSaF=L9y~e8f0)5?? zS-xl?P3?5Gp5p#<@GA)i2kiwX&6M?bql|jToj6gNpX1%zd&s;VH%wvfUN-17xEF}{ z`7=)cVOW?RZ7q1|Pdcq7B%zp@m<9pX(KR{%llyMASKa58C;lW;kUi$5GunSmPXqJb zLkEX_%DdAjG|Jvu5=%sPB0MOQ_B}}g%(ir_(UZyg(QPeZb|?CbECzyh{xY)NA8L5P z2k$r(Ch$LB>oTX$6^9xE9aqDuI6(rZ72e6(UOd-Sye3j}mk(JBCi6=snL5H#;@6pO zS`+BJ2fWIFEjKF>D?H;*Qwgx>vM+$0q3$_<^qq~7po1NtNG`zkcgWs&0TuBz(`xxOGCRGa09YdwuBj~D!eqY_kg?F%ot zOg@P?zqQdUi@kdf3UdkDFa#yTf9ChOHsq%jP8R!QjiFABG7@IM?B=JuaPY|;Nu1KJ z?`GBEF}gcZN-gE$rryTN5QXC60?6_0*_E2Agv`VFii8fr`z>_5;C*(+?RnR0k7=Dm zZ1RxML%g_cO^1l7vRX1@ z5;nf>2J{ID`<`|FK$a?Is6OkxLx_($B67Nx?vr#lj{9$2FNcVV5ZWpz(5uM)! z%9agxf40jURstT9GG@=M+caF<>a9P^&I7@#6}o!02;8T zZtr@mNkV8jW+ic04wT$}swkYtJZ8SjhUXtr(Jxe$D4eU3UzZ(BPruOTKMt@g=QaAp zs?&H(OogUmoBB8~)ikT0;_71B=kd2Nn36}qB#O}Dxmjb}68aOWE3OqTEJ6Hf4~j~kSBmt}o)>3he}7rM z46y^v;TMyJlQ5-XX8^dKAYkHg%66c5|CmAfs)l-TfcgV z&lsi((74%nZjm57*OK6w3xH(hbQnc~Xg;Yc@j|-hUT`f&-pqBW$mo9yn|dP_d_-ie zen-0DjUbz51ZwwM56MO}P0eGwEo*ZhdjE*fQv{6W*sSCUir>wsM=d!nAv3Tj=HSTy zk$s4=c(O+4b{tNV$aOWOEMHMxO?z2o8P8?~l3YYSy-?bs&SH(cB!#DDyK$&jPbEl@ zB=hnSNidUp%LNNWoarVC-8knq^0`r{)vAD_%&Q9wwygfE!(H`YYsu*=V#VjR{C?Tsp{dnm;7bq%%2 zau*aGR3048c_QO>);9NSeS>}KYGcpuu@+0nS9Yl;qkM95C=?P2lYoLMWC zSBviwvN7~r^G#^Y8+NiVKKHyDwU*hl*llci9#h_>*h}~u0w~>pd58Hu5qv=LoGS^p_g2|G^AXf@N&br zTIgHXUU=JQef4eUj~_H#cHWvPpZgFh1;srOZvPp@fjY{#iC;22T%js)lTY@;8~?fj z_R<+!=Qzmr+WOFDCcg*?f`5+J%>J~O5sN!fmOvFL_m~+~uHIGd*YG<~QSO((?61sk z<$X0JB)F6If1@Q$``t^s`*vu6A^J8AJ3u2HdP4?SEa5lb&haD->oaALE$x1|5~Rda zQ5kIlqy+b*&2BvwYH0#oR3NZKf0k3MO2nMEAqbo$N#M!K_jFb?-{nE_e$$NaFrWXg zmh<2Cdeis@V4H9LVI+~h1}wCH`VBYyxxtw=2FCn{j`_zvKl)$n^S?*=FB#i-uVCyV zlLBXz{4yC`R;^RmtP{PA7|N!S3v&zPZT2xGx4{&?pvk^MqcjKg~yFsJ?Sm z)Q8%=@&x$s@-l9;z{Yrr6;l6=()&apdCCQmX=PzJ!<4*1XoA5r&Id#@a<>@Fj_oB1X>u)|a65+-v)kW-0FNmZ*q#B7bHTqzk zltORWNanJWS&m+OU2Wd5F71}OT&`EelJNA9nat8ErPum+`UT;m;8WscNj8Kt_^Z#y z&{XA;$v{MHlIEP<9ul>udhFBk=BX7z4x*tX4^Et$zZbB8)i@|9Wj1_X)L^|B0Q!An zicj5v)B*iqMUFU?;2*F*7Hn4M-~~}VSBB)Z`{$`PS8z^YgIr}@M@wyGg@8FTYAfKs zS#vEK$N5SnS?fjuX4eGr3LYzCevv_m>47E~!!{wc9XVVWSCq;v12aNB>E9NwWP5># z+qLzQOBPvAg=5#_c9*v%9yxu>aeb5wL8(Zj3doe1iaco{IuVq>1@4amd3Hu|d-c&j z?*+0U=$D0-AuqG}u)aJW_s?=n2;S)d^H$cncdne61h*ljx@U&upsYkerz&f=DsKWbN%%D zs|!ZpRsDrYWyCX6I2}&)nk(z-Ajw{0h{53`>;~W?>%JQW_|n4Z%jZeXRn0C&(+KfZ z`_4qdZ8nPog0IE2bbtEr<06UUwR7P*(*^`!aNsA3<5%ZNxuoFcU=7;|mE5w+_e*@F z%INVMR2GQPe0vR64gSR$hp8UfRU&VO2{=M=mDL=W`te~Ydny6ae`;#zSTaXi8IS1$ zuc+p8X@$<*^t%%s4v@LI4Kq98JfE$e|1G1zu59IY)WB&$o8-mmRUgn=+9v9G0)6+$ zV=*A;#AM|b)b zxq*<>3GTIta7nT0vBRB4M1MOa&N~YlFzLO)0Ae-$T@8b*tiVLZ6Fa$oUjm7NTdk)I z);5UTzJCNUulvv#paNH&A2I?c%&g`>^sS;1A3o(`HU3x83zzlrcd$JfF_A=%WII%W zx_85?QQb&b>glw-a=+sdD!*$^_mJilf$VGJ{~Mu7_iwgg|9^P!5rTm7)V$E;0BAs3 zi~mk-$16&pJ^%0*l>E>JW=s(Ly7iB8{B?@1tLqi*k;Ke2B(#6{`fK%viBWJ!Q=m1E zV#)V|?}asFO7k4?=WK+Zhkb6YC;JrrVl7cB_6Aui-4oN<=L=~)R2PRMt4Vy=O9Ilr zc@KrhdzKK@7_`$F-ZaYSx$CLiR&B|OZfgG&&c`xT` zfl&=7$lsZx^nVrbqq8y>fZo0Q_Xhqd>whj84+RQtq@Az64rHtu{7sMfbcWV)NL>I^ z)&2TUD(Ukx`o4c-{cW@z2+s}+{m&OucZw{H*J-F_9ATrPH{!Je z3PIJ%b;EmS1cC2H`bTU9R=CXSZ~mCS->SKRYZlU5I#oQubmsT&7EB9}3SCtB6h=y5 zP3|tx(%99dI=Po5>DBM*ebiDQbT6avd}rw-P*83H6KWF5C1;OQ-w3;q;3 zQai$J02LcwFbtSW-Cm6;yXEvJO#+rvR{^OI^BpTB#bnD&X%=}f?du2svdCMQR>bNiu4_f zx8jk6<!EnKLG)^!~hTq=I;I@_9`g=BqptIVccw@`Ao$EPH+9*%nC_(udhAU+3~> zH*M~*=)(Z-VS%E|_RZyPl4upNuto(1-+?l5=Z;~mo`p>80xr)-I*Pd@kvoAgzJGPv zvN`M}$y2F-y2o+lPObgDuN6^vd-4;?vBXqNKWGh%`*a$tZWE=Jo=3S@8GJ#E%3QA74J`L* zU1@cU^B(&c55L!!*xv=?h4c^0IqGcZM@BI?%m18pgSb3Qa8>843*~E1DX);eL(!DKF1VHZH+`MT2Y zE>zI>c4d~$*`Vyh(|2L>GMx9|{82WMcPTO#wzySzT|wF=`p=>U9uKT^TNHhscQvi( z9uypr-f~2mDGIx7SGOJP;9WjG z2Ldbs^|+lrfg(WZn2mLiwb9(&j^|M}Oh$FMHZ5z#1*Q&E5;zSq!#WJHX(p_sT;BF_ zjGxI^!qruCB$#2&Z}4gEAvq4Uca`ui?|}UP^mxS-(%^;rddp32C1sRY+7bubOJAM* zNQ8VamRd6=ENUikd*Xv|;hj9|k%^a)250p}7)T&J(C`-*&NRW^hd(mcS(KmCmUqz1YCVin?g%I3}UG9AUUm*s(dx3(v zlgu;Zd+OFuZLJ^+2f8^Mq#46-oMQvsz;H7Q%H_OIpO{KtqSryOl>n>C{+@hEu(d`* zX)trDbZdN=PTYm;x<&;(y0_E7BKWlI)UX|oc3*tE1N8vEyD`%%+KBP5Xv-6vc~gF~ zMezcG(8pSGCi;L2EM_7ZjB8a=e)an?w0EO8!wnMjA3Q8ouuJU!xllWpDL2m@(0$#I zZ$8MqVj;inKCros`UbhsHCH~r&v6tVL2fsmaH-Y%8Ej@qiTkY;e~)@NYyN2~A4J>hWqZGK*?p{P{*x`)l$qb@d1IGV z>6Odfw_tO?jn?RRDaBo#*%u_e(#}WDuAPv4y??~@q7x|rfuV}Ihpv)>P>on7N(wG? z5Ka4KrI+lT-fcmf<`3_0>C1~dx6RO46&YRq@RS)#DQbGzoQWRCg0eP~Tc7~xRV--7 zQMvQjnf0+7)Qni(8ZMtc5UiyC>R2h>LhFz^G?%{}yvsrzYd=+0zbj9ksXaUs{FSws zhyV7Rx22$Gf8`Rr(S4MQcKD8_Eeaa})Wa?qHCMTXb3^lhQ_wwg^ zLuf1XamN#JX>Oj9ELtK_57%m$sN^ncFddiC3L(0V`_)4EJK~o@lM+Soufx+nicQ?^ z*vIF`Y6dOeow<=SGW~XEycS&fTEpO}cuR$li~MkTCYiF9l6H3Fai>VkYLj?`4}3*0 z2)eENBaJU5K?_sP$?Y!8+e?eGMWQk{wO9JxstTNJ4VPnW6!`?>52T`Bt@M72eng=} z%Hp$L95|oO$V@h3|HILjc_xA3vo5&wm7B%G4A<@bPOU0Wm1N^v@ZehQY?8xlA+ZVG zm4s-ql%sj>E&3gM8L7G|rZ)m>I{`6B=L z1?83+V}{~mG2qz7%SOAiwOQhMnlkvGTFX+hh`wJs5?=bj2EVG%PQeT78I? zuV9QL#vrpbtt&R@a|FDNS26(aF+tv(ID(&*k7UZAVYIP`s1k#gQBm9+_qpS8bU|2GB_ zXT@v!LPOY5<;Lu;#Hi8~pQMETj-oLG3WMr^at1F0`f?D6|@uTj>| zUgBqCkSsb^q>_4*EO%v5OS}*&1i~CW4Cva8*V5)r{m!d>gxyhieHP*7lvCFnbq##pgLZXFsJ-PQN3l@xP z5_x4x89Q1b0$T(m)J-(XF3gmC6VM!rw3KyWAHuV2_1N$t$O#FgWcuOoNO;Tcl4R9A+uCpBC=$Hb z4vYn+0=50>KLaRK;K6GAqf!w?JBKk0aaCEgsMHe0z0X9_W7J&HpNHn&ax~L=$xQi3 z*HR^GTD#wmx{~_d+C>;9zqSO<$p#sYe!3p3sYY9%f>q33XfC+tj+kkc!w&z2 zM1JJ`xJOjkD`slQWrd!ppnzlT{tAa|NhTNu;fhw^9xwdxmL}OX78HuU6I;cXTRK>& zvAEIJe8n-F!NS+XGN9Je_6fJ^`hkKD^-sKiNRV@DWfCDXVnXES{i`*SuHFw5rHGUe z6wHXat>M706Woa^ zEPR|Y0K5ialAqI;*M@ull{ZMI#vYxraQsksQsh}{b?mK=cYfn4BD=46U?t05YzqSZ zc4QP0k_ZY4E}>E;ejfwKDh}CC`O5;|0j&ZR4#tO$fHw5B>MU>+@`(+PRNnjtkenqN zD~7w`^~hgb$Nu-E?EN1UckgeF!B2l_FaKPE#@9pCIS)1md;zk*v9W){D1ozqi0=IW z3LN}{p8nn4|32bkiJ?AlM`>aP6-B^b%ZGoI-@ThN_>ZsPqjdkLndsxge&lJ{08jV- z+XVhC6_$K=pmTzRNZl23z~-|2N04Xoxa;_U(f zL4Ya9TLue(?sjP8X#%`e+n^$#LjvOcH|Oys918vM;_;`}cET5MNYgzli`2$0qJ*#c z(EH>}nis;!ui-Ox%Nfs};yEB+jG!DysR6nHj^F+>ckhB>JTSL@qE`qEFY9&IRSv;4 zPz&PaL%gVf_S~XN^w)A2Cid%whDbe+7sJq2oCGV}9sfgM;u7^B+7z$a3`1N_F4BS1 z77ulSwtNNj`+|SK^bZg%`A)tHcEt*Q^rLKbuSz7}_&Si_x&|pl4C~6iKB@;2KV_jr z7EH!{b}~@?>+1~?5<{b-xjj87H%{zMlBE~IY6f&XBC4@=yxf0SQ3R~HJLfS!0j3te z=G60<3D*3wZQbsgERffl?h=C1{?)6+43XiTWjlSJY^$2BFY}Kk2U=PJC$Gm3@K3sb zzpQ_zFy9yW5&mY1<2@=^&YnBH@Kg|R64w2t7PF+c1>A!-u8lK06A_CsIGEi~ptuVKI2u{7&=BS>bjlfNMeY=Tc* z6QXO81XlAs;o5w;Z0HHUIyf*SqzY#yj=s_Mi}W32e=cqagGoK9YiIyot1Ej&21uQ< zzVA~-NTB(7>jKq-6Ky*r>!9GnY^w%k>w(>x9Ddbs+G8>{|_@`CrtLm9XN z>pP~VrY0g1N-a_rVBwAA9fQ=zf&cKF4{zo)y5kR5_0kP-_ytTr z;NC_rI&!Fgib%kJU~QWPEd(M{619MA@a-Sv_g}SDMytnZD$Wq~TM-X({ddLq-;bcm zd7bVZbX*>FwDl1ehOI=3KtFE$zZAnhb(Wh8e=fRsSCCVC01 zwwShBMP)0rxD#8Y9pQ{}oZHMEj03Y^eTPJTeQkAg9Ft7UMFcRPmOGaL9qvHKfnGz~ zpqB7fh;ggZ;*D0>2$s&|O9(g6Q)P8_>;RU}Cw-G&E7R|VNk3g`{>th?<8T7b1dc0D ze`FWLI8+rrQ^42>D5EcHIu>6aTdhlL^7Ohbe$x(4g=(#^8pl;6#a|;+R_UyF^)?Ll zz1ca`<{N;tdt`dcFD!#;P3?MBFt2azf(`H6b?dg35z&q4=~h@tS^M_HtTXK9iKEfw zGi?IA)Pyn2IL>_u`faJuA^WD^Leh_y$)9~TYg#&8wo3FJ>o+tP%uHj-<e^w(YK%%`My_B? zt)ohpBWL{U>Z>Xo?x6Mbk=_@^E5lfqyC^hX!Q&PVc5Q$1hIuG$8(OW?`t4!RXj?RN zi)Y)8+Df`mC1ApSDZvXRa(a+FC+RlkW+dU4JGsdsRkvu1?tM6VOpOa@lSeE~I)wSc z^g|ba*?J(#CQtk2-9i1kyX3`4>EmCO!=@ucvhi#L{=?A=b(GCw#YRmKmc=AYdmzTK z(?_mu@K`|q`@oy>Dhp8&fwYiBbX@An_yl_b!`G@~AdeqDQj(46%$sW{Qt|VJJy_v; zdYOU5UVMN*SrP&oCZTrQcz4Wl{Bw7uYr?3s$0W{u7~8ZJ8rU-dlx}AMlN?Rmdzesbni3ah4m-)n4px``qRF2)jAnXv}*Z2zlb9( zw+BXnVlqs!a9$Pi0&DTwK{`gDYF@;~r~K2n+%C9O(tfQ-)Y_UphF}F88+DP?-pG;h#NnM8MfT`K0kXe7V)+pOs+ ztXdj9mc~m1kYTh$G=j# zq*b@kk0Bm88vWK-Dv-%ne%z{Fs>iZI*hTbI8B(J$uS*?MZLfHzMhct<))26qi*#h3TsxX?JrokG z);|5>yKHjEa~u85aWc8Kz{+jgd@+Git_SRvtU!Hrb|)C( zCdr}Ld2|TJZtxYtp<0vg9@O5i60skbi)|Q`IF>Rbo!H_#opwz=@{Bt{fZ^q7%2rs9#V<#DBVlqg?NV zCEP~2OVZkiZ$wWnsz3U$J(v+~zin(vFuHOS1qGvM8>!~9daE)AwzZF&?ym?$$2@Cz z1ziDe+AL(o9BLt$yc~A$!DXovW9Gfb~3cx+ii45>3V6$n;us>ek`f?LSct))f^s%UbWN<>lsI6 zemTDYGOXc86mw7TzOb3Auhqcz&xMh%4a|d&0OyxF$pK;&=_eM@G*m9vZNIN=U@AR# zfZ$kKw?DpdlXlmrV~u}jH6UxL& zu#YDWNpya`0O7hiQk+#RW5``6 z&02UQ|HlWm{cz@i1CR3Qzbtix?h}2I&Qc!bu-mNmEO0~?ts&q@0_$0j+vZ|`&s=7x zvt~bt7N11ldGJVUeI_F5RUr0ODuN}pmAx5ALIj%s%iW6B8Dx9VAueOK>3HmT!~<$# z+beq)xkld*u~R5{H%FD=OSu2Tb-<4YT0*>j@eOdoVT8!@v@S32_9s+Kvlh&rMC5N? zUY{ktxH^l65kRl8nu(mSjIg$FtFK4_{3VXx2nE zuL;5|T#x_5N{{(rBv#h-#1zOR4Ig zdTdNZ*rPGA`7U!EqT!WRjMb@X48&O_7gv+4&iYQ!bx8Y0Bk4K2c@)y>I$BBzyH8AI zY|adHv3@bYtd#N({7XpI55KYJK>n~r?9R#vG1pudFxMF-7)#A4G1vYZ;`QI)rMt^f z_Qwr#CLN1c0nw$zRFMWGSw&>f05)%;i+_4Dd??U(9{ISYj1snG#RMaMa`dQiJ?Vx$ z^`$=*WXmIc8sEqga>TmIDpZw{P;sWcr@N;q&PfPmh(_2nw0|8x_U;9NFxJbpQbM&<){WW2` zpyw2rA*ftcOK;L{uDB-xQSnDtS8HNQl52Q*~#c8StNv z#?PIfapiQZS7A-8vijq`cJswJpSJDPCV;NG80hvmwVBjd z8n~RlP!rZ_4Aidzn)OSQ#y2||W55MNLQdgD3b*{HsObL+|IPUGhk15#YZ@cEw}C-A zOY1XKzuf>1QGo_*gb-s9vK-5*3;gc1qDt*c-|-&V&DiU1q=1pD!cnyrPSi;06dihugogB=}Q7#^Q_x=k_(iR9bw{b+d9E@v4!Z07v)U6z?%~AdwjxnL2 zyhf3gdav%9a{9y-&-CiY7()hE^hmA#qj@r+ux`r6&x|-pbvazpo zZRvgX?}Xfi(px>;aegc>FQp*=zaFT~f9aOfGfGLr0l#?H-cT}+{Ec;Je1n|b&)h9^ zz`Wm}MARmquICNqCdYD`sp0L#?fvD}<7+UaH4QmgFc-FTQ4Rr}xyg)o&cq!y?xMQ2 zZUAT{k)#@Hg_52z_muy)>%sNgo?qGmI(IuJ@La36tec!Y?yqvIfj~3kN}x=Mv^$$8 z$M{*zfP5l#&%M$J_i_Bx9SMG;P>ouS?ba&Ko^wvykKTbPK%)mWJB0O0j*U(gyf69L z!ko&mQa+rSe?ntQ2ynTA?n>#lklLm!uBy8?xh;^NLY%JrA`RPga=F$_elF~U`PN>7 zetR^ED>0yCj}ge^rH6SEjbD|dzjf!?sJ2~E1WmBqe~_~pv132I{T?721njf>APZ** zbv+<^sIr|WrB1A-T0dfgQJ_CDndkK%w#={UQuh!XUy>j+7yVjJbKV5PU%2t7 zK{WiT|Edrv*HK6zs>kDFSY(=RLRl#^A;Zu{|2w&R7?FrYoSyVSgN!h;UwtZA>0`kf z2*`~~PxhAc-StEUPJ~zG2Pr9(J9$4>1r$FY=m_Lx0*k~X`H%n50m=LA(C{n`8u7Lf z&d}Rk%KO5P?M%LKS#$BV&yQLq26S8zK#j;XA^YUhZQ55BHawZNLXT7;H9v&l36kL^ zjW))3;+PRelafX_|CEcu#arQ4=yijMVWHdh0HMdiP$?-=y)gTt;P{5kx0&hw=|9d6 ze$-X2(M2ok?B{~Ra>^R3((TYUZ~w?5wUks&f2x>!O9xP2K*Z0NzH{I*A;X_|scb@K zYsCy-aJV+4Aow`@-zJvS!?W6z~aPT{ZtHGh3WCCqJkVToCJZh*iC+ zPO94RN!zLCK0<_D=)f3ReyLTEe%E|mq3X0EeW4Pe@-JDL-rl@-+ zaFXJW%&pumuiqVft#B&QH89$8M$#nblN~<5*#>s0Ts>z-Ag;w~))EeFhjNy3dv+Tx z-OwfOr--6Z2Lnfn!W~!7Qmqy|Jf9obJnb-LMi4;75c^eOd(TMN-jevg{DqwD8=ebs zdXzszpFNgq8QQsGh9_1fj!0|6L=^=qNl)zyc0iL=XFha6}-;hmoC2|M%qd|)9|4E=?d?ngPMCr(3`#Jpw(fy zLEKFGs+;0nCjgLm4A?q^;wH;7wCK~VncG^6ptp^Sm7aZV4vcn-p>)mQTo7D_plGF% zl;MNHFFkP4A5Vtdm4~?H>-Ttjr@Qn9t_~;sfTftvW05?!Y=!j#2#lAQv~S7%^%sp8 zxLdXc&dE&SQNLeN?X0KfD9cYoBo0!dO+7zhc-M0eNkKTAz(dOt#a-}BIxV=X%vKwI zBQnCLJ7ifgXRZ=Y_|9NnA1W`fgJj;>oqKpyM4a_Nc;xk6bTg$z35^@i-<&6OhMip$ zwQ0;Bxq(Y|*H4tSoE52+mc}FV@OIHK8^cpJT`l;1@X#nFjbdqetA$>@$}a?L)J0Ud z2rQg_zd0e4yR!HTWu1&KjA`%5o%*YmgGMx0JNAJxbLgp=K>h`ylCGvFR3sUd(|*wk zD(t>pvCO2320FIy7CINya^Dp+xLNNmR7zwND4VtarA4!YM&?*g8>n*SxDk*&^*~&W z4csUJ5JyJZ>%{_(Lu5Y5T2^STmfi%lsR>E@(w&{#;ed zR?alxtA{UGMEbgKW(i@LT+qL<173o&wE+iQE<9Bbb16a^7^PSL3%C0QvEO0VO!TM0pFf|5ENVjn0^}0fVXuT^%*?l4FdmmKX z{i$F?W9^fSj0}{{Qx;}RZ5s^SuOg%pW{^ii7AvCpbTiJM-Y4AbV z_m9P%4i$fBVzxqo#TF+gfs=WP|J0D2^)fgCXx18bE_9Fubh+F9?)gr0B(?2Z8+jma zyL1l!H}VzOshgD-DN*k=E6LJzyW6L2CL5cqzw3HPHK$`0otO%{gwMwn{EFe88RlPS!K!ExipQ zhucspmj#_tz-&N$aVBj{SZ&+F1!8;s?R0gP91|$VuA%veh_R`4(S8}_M_6hQ*qfkF zQuswTAZiRTURGVe`6^$Q>GwgHF>05izv7Tp^PT6G0Eao+`H9+>ABf}i!t^2i>Vs06 zOK2htE)S>3hu+7%&lTk(EbyWdc3k%*cxZoM1H#X06T^hWyzlv=+uXdUM^3;MT59pr z-Apq~0`sv9`*nJ^Kygcz)ze@oae5ve8r;L0lH>L}DUI#tP0}*2?w_m8+YXXy_*BAO z30!8b@YMh?@&yd2j(^x@x2;aNZVQ&X9^X@lNOCf;@1O_zMQ~=-r-Al(XC3 zxzO-v?VIe_+PYX*IPR#nAPyUGw7i>~1Q8?NUg-mS<`7$g`4Fm8VCvNxzf?jhpxYkt zTn)*>Gy&|8#t$M+KDm23;ZFC;1s{?Ld&paE8)#J6Swu2Dy$7`Kd&b6JDHj`MPOa8l zG5ruCGxr$k8TZ`rMR<|eHg0$ce%Uv_I?;3-^^l3wUC&Q_pluou>k@NAH^vj<=<>H? zKVpHMvfM$daxZzXXym8GN-kfnFrt9hpO$f_)z7w>a=BhamUeyO%ePfO;Sjae^lq{j zboWCGS2#^OsBSSYR^wwt@?5p)MVe=BdUl?fIOdyS^TS_!e}(-MrnW3@99$9(79^-+ z-G#ZoSbJ}c@M)x*B9+7$_4soQ-0&e>j1NI!;Pk8g=;Q#$Uty97LJ*-dn4gwz;<#i9VPK;+Hg7}s$&}1e~T%2!f4xZ)@np#LxC9~^s zkiMbRI?15QgEaI@_RW$3HYuWsyLAVYUJLa$&Nx`o{_$3=(-?e?^#E6AoS;s6Y^!Z0 z1m)J|WqhZ7dyHQns(FQqN$XX9I52_x$5 zizVNaW50+@`n)P#%3z2MSSmc7@eLC|KF#ZYm4$8o_h;f@QE1*rsU~?O1~C%jY-{Lj z?v2Ht`wXOO)O`mNXN6yn&?v(rbxS(h^Rv!eUpgQyeSjOPlXm@@*`fCetshN6O_MM* zAHqX3iwyU=`G9i?-k!JYt!~>VbgQtzy54VxiGh|ZUNf;s=P!ojT~fuyU2OvY!N}wy zaU{1|x3rYhLWAoG_iyq^tYX+XVZp(pL)VoXLdr4Tbp6}owu}J&(Sy?8ML-%c>%$P-o(R?Tp;;jD=5!FbnoPGK3*h}UhNh)B(#gR*&gLTJ zFwFb7zU5)QVK=|%X=TZ4vEEa1zB3-}+~+<^M%gbRXXtn3bSV!Zbz@WIFMNz9C7C)u zg!Bx_@;cNFMG>^g>0789?Hy0;i_N=^zED;rqT@^2`iGabnROAoWBJ;)Y6BFFinu(; zH-q9&l%$mgx%$z=H}o6SA4Atj^8E`UrdOQCPirrB`)-H!dUwX^*M4tpX*J+$d3h(IA5RuZqF{cTk-9&(8#OW@k50yKU358#Za@`BU(H>w?mF>z679A&;z% z8O{PQ#}i`!SPU3;Fxu3-bC+cU4J^gO?=^3jzJT*9-nnDDKWJA>V!d$Ixw7Ysy+2I5 zYFED*k=y*?;$|Avods^xcKo}Cr`7B8%YfaeD5>KlO@-KV$aJ)+By@i5u;sJI!{;0M z;5x^YU-2}S6EgFsrz~SAGd=V4Ms&0#NsU^x(;c9Qs2KM@dqVG1qrFN>IXGvC>b`kNHo-+US7SL8s@Mg# zw5`#V^3WO!@Y8Y;5LL}7i#^rBv)D*T8$2{`Hpe%JE$y|e+=$S~^wQ8Rk7tR61Q*aV zMFNfuNZ2di(VM`+b`KK*E&HiFk_2prCkn>l>(9J%z-L=&V%zG}BH3uqTF>WeEWebU zUS{Osz*_!1E9QF`xicmiu##_eo}6MPB;*iO?8q{&_PR0fcM&MD;fsJD+R(gF%~ppG z4k0zhC)n_)N7}IvjdxS^#&35FZbx(SJ0fzDl5*==xtacFZ5SPl7MwsSt($}SZV)e{ zn;MB+mTn|~Ed?FBal49n_DXwecr1 zELiU8m{o=jCk3>c32je#daf6F{#fK)NoTm2#gz@3T1H+D-aX0snHUE~rQYtB$(JA^ zolTHd3*%~xulZnSyo?dp`?)!)*+a5*MvLb{ zS;tP5txMV5E+>=%<&1zjc+23(l`+d5sopX{5(dw^Hz6^-9lL>vXM2e;rk*9TZx=|z zU>1!BmCGOJovdl149}~`Dca2?@01kBbE%)*+Y%_Fv>@VGLlGt(Q6>0D-KG4j-s-}r7!mWc~6bBT417M@p4=lO|gkLDmqI)OinY3HC) zo0lWjPtWdTGZ8A6Y_cAjCPgWq`(Uc)j-|HK${lV+@0N65-pQ+_RHgM=QcE|Wac#d- zpWr3UXOW2V5NRIYS;6e%XZF~65wS01ZbB8qfa!9*rV6(VJqq%^2=}O^XT?S~1)E?P z(%yG(q@;&jjoEx+`qXW4ywJk-2~y=XTBcw#=-K(>S5`C2Lj3ieP)}XAj@0sUG~Xr1 zPWN*vom-t)xLaI~7SsH9D|hN;O0zE_0+M#!fFhj;hhG<1v{_W;49N^CnN!nUr3Ri^ zN|vA}fh%O+dC*_;grJ|aOIi0>$jZE~^0|Nv(XTaD5`vTm)-oDL%y&kHbB>qM^)6pP zgkn{i_kHk+JAnt8GOjG@O-7d)z&n9&c*+Im6hwnJLwVk;{NFzbVo8i6SZbtQSvy4M z>?mxNmOc*-9G&KCwuRLuB-y1Lo|NnW)(l9(%7Hu%7})4;&zEsl-a_>hEm!ICBP!NG zn$^@p9erX=GcA1Q)<;~ae$lCtLn@lZyL~YqkH)@1^+Mg&LC#&tz6lc+#P|TcS}&-` zgKL0Vz9Ja@bWh(ulG1FUt0c7Zj?}q!h7(G2NuLPbmxo|7LhopGBj- z>%d{F3#2u%HF~d0>zxwzoJc$MrMa0GNS|L-88?)a8;T=yIDJ;X6nKZqLmHl7aYVnI z>_0ar9PC~Cja{XYU@>Ah&fqdq0Y+Iwigy3h5*{t;N60>jyYKn{D;*#vljy()KM==h z!R0kic;=PMJMPeHtoiSpjb>)rD)5i#FDWeWsuYo2pv8GdhpwHLXztlE^b_11uhz(( zrXgEq*;o92Kz9-?2_wdY`ZE$IT=1uXX+MVlCufJbo^$Z)jwv&2HD&k&lekuLO9~t z@GasN{0CM;eG90sGJC#~4!#a6zc(h?6M)qhd(}I!gs0N_Pji9($#QYjej1Pvy(gsV~|} zW59=c@Wc>5;faB4crEo1iL(T(X0R}(okNxD?Aq}N;;GdFft7-fM|1v3 zOXtR|=-1;}J~<3cU4J5_OC(iI46ThkKG!n|h+mvXn-hrXU6KgtUrAV`A%Lk1&tJ4f z4Rwb<6*9$tgH@&N)i5L3OqXS5HWOp$T0Iqa-ht!8`p@pSgP2hlV3k?K@~twiJINi{ zzAsuUMqJ7@|2QXISx%P%M*FPtrny2sCUeXbVnWGao1IZEd0&JK&(N`7v2iIW3IsjH zHtzd8-a?Sa%~W4;P>;n^>4GxQDr*Ur`8s>=V(U&tCH;y@-dwS=2v5vajB11-6jZ;I??p_pMr0<=vJK*97>Vq`n61tT;{xiu z#0Hp<>V*RU?P z8U?6fz%vznt0EaYKw*)FoNiU(2vHcRL3&yb7s5_w4j&S~iqfZfGM;d{azQC>-?Vm6 zyQ?T)7XlsN8_5n<%Kr4b-wCbL)Xk4j$d=WF6)u`=i(%YwH$=Xg@=%Y}}54wl~xzZ&jLLjqfU ztj<)aI&~z?e0MC$bkBFYdgRCN%e9(162;cI??_2o!WK>EwdO>FY-quv0`^5_rWNaV z4w}WSQ&-TF1$T@W&D?m0F4UMTze~95Tv<70Z#dueUvQfDm06OF^XJdqkhcAOi-<53 z%r@oOHv8VHr*75|JH?PcvfJzYob**&_M>BXSg3>4OQxw4`(&kbAu%%3WtLLVp7I$h zhbpW!mfNFtVaI7`_r})R-LCq6)mO3Y43o&rPMeAYpk!A&F5M(o{dG%BN6@xZ4NHn8 z1E1a%lMdX0HBZqiMdi|I)i;rQ7TigV>kZ~qV^T7mu!LyT{U27goep5cTsZ>w;-F`5(3=5Y%gmM-e!>k|Yq&Z8-p84{0xN-so(eik~5 ztT?_=A6oI)P{mFO%PUmZ3sxK^Ehx#8Pwe>T*W3K_>j#UQtnpnvh9qv#m3XYyUuaX>q}!qM)L;GXB9_RbFLy0(UyP3^K?Q z#dCTL3jV98_Mh>CBnTOt%@8y$(oe&a6ev3>_K63Cp-hcTbK>Eel-}H`$pr0;|=@BMvR(|uY|y}UjVUulZwp8c!TO+5dP6#IXx-yJ8e@Hp>l_k>aDA)l-ppAnamA@pgR})7+XjS&5W-L*i&Sv{fiTi8QaAI}0Q<$GlkKByKnT zfClfKf~_G&Oov0&sy%ltFtJDhHn7Tr^JPQj;^zCS1%2kbmxPgpTBX5CzI(|PPM?&< zEFCR@Fv?H2tcwGS{Y*ka0ebU@lm6Nzn|U=a(c6&WoRMwWn`f&FX^y`H)QSpNCo`?o zUKsAn-h`%EH}ZuWaa;$u$p_MAcH&z4!+YQElVL`2@gncE%jb|)8b_E#O=1# zh(B}szRLQ-Vt#X!HzB>2O9tRn(crH7u0w=3b0k;ai^UzMz|Bg><8V1a+}T!MwO^LQ zA6X}@Cs99k9J+qPWJJeX`Az_3mLdv1+o#;}pg|_M2r(ouovY_f6O{^*{1WdiI*>>5 zUUYdwSn(G_WF3W@o2OtA?y&hudbHDyw-Wv9WbgX}Y4-D@9<>Ae24JJtceNJ%#C8F7 z>p(UxuE?^MoBmBtmqjO1dwcs$&rgQ-){6uS7t55Ds9)QDiZ2WT8@*RbV;HTyPCtEU z9`Ozcq%_6lNd3k3#Dvj}CSG3l*J)6uKj zcPA+!(5=(%ytDJ|SJ-W-kr%F3-oiu;zhd)?i0xu?(~nGcU=qHcny%C>4}n{K>!qBV z$!JqZ=9oC~#RW5^a=7`q!e_GfjU0!K{59?v>Odey=IMa(3fg^v5`xw<3)RDFLvhF< z)+aBgsC&sIo^S1CKSWVbh>ah60YD}zf{+JMtI?qy8eF5gZ=yR-c-S)c6HT6dMp+ot zx^3$n++w2``{`dw4I7hY*L;fd*fF7qU5z^QHBN@pTLR2Y`)&Pe zcS2H9X>04^b!Tg9>q!snG!f}rRz2+Gy4d?yv>schatP#YY1i(YEK@pLY(+>uTNBJzE%mC;7k{JQs}9?mTjK#YFM}ZKxHq}D$G-mbsh6i zkEx0tOteoaLT`-p0vX86jg%x8Upekk{aj9p{^I;&671#h41fRRz~8uR!ZrXl%ZVdq)v;l62LA^JnINy$?`1zzh;ZN+4%#<@JW za=bxJ(=r_$AnRvz@}9k|HBpOp;-Kd13>}pAuw8lfJ=K0;3jTN}=K9-1+PzWUONPxQ zH@2J02p1;h_>X&}CGb}u@^ES&l%Gd>JAYML4k9)pE=wh6O{Cwt7ekOV`U(*)- zN^#X?Nxq+6L9FoazCI-NfmKsXNOtWWh2%DK+tN}&p4$7mP*ge~5yQbu2DQx7eF3=K zfEQ*mFXp6ED?V`0B0Aes+S80Y-gF?2qK*Ge>Kv!VxD8UzrXG2lH+wyFmHZHw%oa^g zMHTd~|0Jm4jMgZyde{ZB7Q&1qKCr8wfLXdcA*^0`YU{k;qxSEkbO-;#)Arx5<|=iC zHJWu7d$*Ho$GwL&(=cwN`L^7ksXhzjCaZoA7{{aAs)Yiwi29385ajQ~4-D^ZW4zB) zNq@g(?)43o&R5`rN}T3O^#XeI4L##L<5~De^5<8cE@>y27BVI>g65fAvG^EFs-0wx zr=EHn!h415uLpY1a2+asBh|GSGC6JiOrqJ1cvylj=?+G|HJqw9BvwGJad#VD!aB0? zh46%-zW$nh8tZ@4XJc>Mt>$ksh;{lye?GTyZ?j?9v_hL@to6IdK?3~SN=4Be%sVPK zxy%mM_JWZw1i3bPIyOL+Zy$CU)C{w@SLt|Sh&1-Q87uUL=73sc;af%_+sN{F2VfCUpIac)xKdIq2K7HjCJNMan%!!!^ccCB zS%UxkdF$T zNhuu~$$8`S-`FlS0sxdf@64tn)*DcfCn&%)#|I$e=*><7akjItD2wJ0ty7t`H(8j& zbXLb`QPI&Q13yuhzRrS@0UI?IWv8DXFxwdOt^(=4T{9d4_3LEkr46^j^Ov_4b67Rz z1&~wP7so+^9$Ys{N%1a^6x#8$@xHy^YMptMa%~di4CJfLf+|_G}Ks546N@pM=uj zvbm$51!`rYH}T}a|7vgr8CBp0QvVGY11YX@>Q(R`NCF|%iMeHzJ9=&!*gomG$3$&4{7v>)EtcBuCUOL0_Ra zQZ1En_S;0L&)=t`j!L``r!H7wKhQ|=sggmP@lHS|1a6~5@P_z=u_!+Q7PBVu{k5Wl zAl+1bp3k@d+oluDBF&PljEo=tcof2M4Nh`2TlNfVL5ZQ^{^nKI?{kW6$}#hDCMiNR zey8Y!AG^hw`;tbaH2r7~b1#m~!0>ISbX?10incb89V_;c!ecf}e1Rm;TuIjo=;7`v zIw7HVcd|&Q=3A_pPNVa?aIs5mA!pKdA|(Q6T~erluTRdTwJ3_+kKaYnKiU^IMdx0g zJmCRqWczFh2?ia#q#zMFHGA=V2o7CeX*0PLIhv$&+|SLe+wr4i-jUWPN$KbI(1QiP&`sDHGS%(26PNs8f{i?f2Ytp^d# zTKFfc<@PBQ4}?nbFCviAu3}TVHwOMcaQ@B7dOThe^wtk!w z(~ElFU>NGJ-!}~g08$3ilks5oe$agBDbfyseXc_ z(*ICAoqLi7?$P1yjj~98w8t^H@K?6~N70Ob-8uiGlQ7mD;`;T}&#iZC{~ z{v)J9ze(ag?l+lu-rwU@p1((=UnUCVyu5sB8y~xn)>bZ7)LOj^epZgv-Cha7P5!Q2 z5xs@)ycT-U?U>xJBEzFl;V2bHt?iCVM)o3x-@orH*W}%GrGPEmA6xP_l86l%aRB;K zmaiDP=2Q6(%)WhS7{7UaNcKR|+9+1t;V#$;0<0U}$EcxHZwj1|@caS#CD-t^{O&e0 zGQMD*Kj807L`+K`Yn~xDGmTb;m7c+P!K{5_Tgu3!as@-Tg7*^X4~gRWw{L2sD_>15 z@luP02~!E%^YQqyinL^}gv9dNOb3B@9T&H+UqW)7vZ1k8vvz;Vt~x#t`Z!WuqYg-; zF=-v=zaqVEb-)TBD)u~KV8^S)qR{*EIoR^hG6=%2RDNGo)@Qxf{hHKOVBJD7!zIwk zyNqM6uc`f@d9nd%Z%SYn*$w0Z#d1rQaupk-5v@m94sqVUytP@$f8V}SU>wOhu{FxD z$=B;eSWtnNZQ7!uJ7dd;3cOE>=aE*|W>xCk7dHs+%X*l)txNrBsy_5I$2A{EUhYOr zTW7LJ!e)0gSy+0!w>ah!$pPP(%CtOoZxHr;2V^MM;&;8>0uN{;&+urxLNN($#p~Q+ z7x0W6R&A^5D$l&NPaSC2U*2DXZFC2>pg`!hhl{%|Z<8-055(cCo%{D6g7rVehh&%- zZ@w=f7?bSB4^2k)9&&YR$D6K>ti5<_xhncb&d&83OBDE;lkLkCG8U&`*X#FK&jN-N zOIMWEuf`r~u+N>7rGoMOYF^#M)g(DMV0gQoIz>?)h!59;TTM(}a59Ez+%cYg2*67@ zLWIumj`s0&BW6UptiBF%Id10Bd`vMOuQWKP1~f$dM3!S^4%F+B9h}M%@8?uX-yHlb zlH}SIXp2ggyU$cV^_H*jPa8{lB#|DxH4;UvzPV3sU-bMb@PK*k*c-l+S*s1;emQJw zrgRx!T=qaRAYSF?11YO$YAq??8##kr6bvG+>AM*3<6{O}&hdSsMfmOR?=3%Li*b}^ zo*9)OD)7wT9o>^3wCKzA!oziJ($LTQ#oM_iVuwmU(%759Ue_vBe0*5*+!w1OOpZHP zgPpxlkaR!1sYrOADRCJ;NPW+MqJU7a2xELqD!f!FXoo)iBi%fIlrc&)@*!1Nzu6VF zvlagWAuiG0uI_N({Hq97C1<_9fe)(5VOTUpzdj37$E>NrNapvgU#1jBJKEB^lP7+j zFWahs$c>!MVHFc@8uGt;b>4D^BO+ivZs{ruGGUMM67<8vCa7qyU=I{g+#sY_`hiz< z-+N)h#DX=(-GnNhD)_7}@%2GrxFbWc0=`=QU`}rKi_KD+S5tXZAP?)wtYxZo3FIucHGxDls{Zjt5&|}{bXS&zO4XsVmltzG-L!iSrjPno^IxadrMl~EGGt1z95il&&m`8D!H_ozlGZ64(F9@d>H@@zi*B0du zo5l0zxhivMID%fM2QOHUwUCPK-p8NIe=Ry;M{3@T7mNayMuXW)w*I~*#=Q7lWnj5e z2$0r&_u0n1B{Atee@MzEjVUj7R~`G4&gJxmtNWiRJ?-5TBK5JhBLt5U&*sAR@I^h^ zy!e(s`+QhmcsOz)`Rl8vQ}rK`?L`YeDmCaYbqN?9W_XP#<_`Kv~hQ6%E zEnM~I-|kpS&os2UwkA1J4Eic8S?n6ghl{uVCRn~p8jQMm`ZouQp5#7SMWMwMmN|B# zvhA@;0x__XO!)BFv*|m{3b3pMeI<7naJpGiSn}uSBfmt6tFo+%N_nDH7Ud0p4Ks50 zlcQ->YR^=^wFznuL}1K%UHGtmoMRClG@p*LsQ|)V_YAphS#o*a9e(*ca^F3%YA^A8 z@i2@ZkH02IFMeFK8G;3(d3Qi5hE#z<0Re`$c=R;YCEwfx)(zd`FbAG7kqaCMBnm-H zYHccfM1jc*qOdE^`lDDSY`t?{dK!<}b2#>|Utbz`*0HBrz9zr<4SWHbm#~`+$3Dl; z=%u9DyBQ_lLb@ni|JvIGxYYvJf_S^roBsYJ>`LxFO|cJlCehYl>vGXc*?~_zcuv73i1*AEzn!^0w1ry=_J(y5!FIQ%c zP6n|Xtp*ZG3>0|hj*6XZuRHP0#JFPFhYJReWc&)HIiL3@~eg@3KI6zzbA5Tx&H8e>VD$@jD zoGzi>1HQ6DNOR>-@@JxR_8CrTR3tbpbnq;;KAD>*UEp6R5-=UUi=+=>K|zz@$sJQ z)pP5Vu56G;x9A&zdmA(JeqGUNUCFI$_8j_B0bIg_?yS?ZCO@Zqy|5$u?_<1z5X7R< zT4h@9J{T(m7_P>ym{n+(lKYzw2ygv0!xzW=i2gi=((PaG_BR^PjD5>_&aRro=y9|y z63?v&v{VR}IQblYJ!aqsUDT%z8P9#(AO7%rr~$ms#a?G+ZS4Cb^|9$O*U$x502RnD zUvv`L?fK}fcWd<81Cj=!!2rY5c{A8hFu}{=vkH#kN$SS258+@W1taIObFhcf22ToN z>cyN5@c@v*@W#xNC`O(}9MOOGRHFp$2pj00M=s&j4F!zWql|BO`WGj8k0gUal2y4}u2Q@5LHLV)CTXk}n?7(4ZqX-D}ujRaWSmX0? zg}p#4R-o{$XFR|P_ic>hlW7f7WCV}A z`?Pz^_%lL%jnh=4op!8Xzx2vq|4F9Yob*h)`j)~E1nMfssM7HIpNKZKfGnSURYm$bpig0sv=Mi5E>N|b)R8L%etJ z|2*sY-uL-ttyv7`+L&BVxgd*;L6KMzehnqwMRjDu#15Pj3{OB z%>sWgL2|loC@6TpklzP!Y_H`8aWOYwwkBR?)}hP9d}6&cN=F{l!DSh zIbaCK9T<|fbTfCg1-aWgJE0I^KBEW5v5@0Z&LAIGTWcG4lw$lrVPF*Re$>^{6nW`W zcUwnG6uxtOOkf5RIiv1uswQ;N-cg9GAW4dV7<$(}ZqukIeR_I1DRVu`H>XxlBqPRwo3L z%009wl^7O^<&CXZW=wk4lo8z{`qk}R3@*f5bv(QYZduJVwV(O;8Tsi=%DGFw^q~n3 zqkb(o-TZ_A`H5kET)+R}e*QB~ZaL#~EQtI=`$k6rJ#_nC1NUoD-5RLlI!! z5KUlyQn{$!58l-_<&gTfxoSauco^MyIcoaj^xdzwUNT)sS zs*B@dqL|jH&R(EI4MEF4)dl0sPEfd~zkRJawxuWGI>LQg60@>C5R@ zt7JN@z96{2-F>tqX~jOU)>7K~-fcP{K$)|MZnyhr#@M_j&#v_oY{Y+H=4`^$%IMY$ zb3cb|`AmQJ97eMqg*dC+`P-Tue?C@&<5YK`a-C3pKmsc95$Evg_7N{Y@a;rC!DIWj z;L1NDYO{|Z_FGjaTG>rVH@FLy{QvNdc3|N0rKIIhcQN6fZ(&MuYidtX?YF;T`ZM{> z0pjU20Lzr~D&ozk{?yRHa+^Ctr_41b;*}Ltag|(Kl&(nBKccQ^KY5GX@Qb{6o=3g$a&>&@wip}fiRad7Xl1!q>P_-%!u5s>?ccfm=Lj#A^oC`R*zCzN zdi)`mvAPc`;0KyAFfp<~&7@?zGQn9krEcy@i2c6Tky6Ki!Vm?ey5_=|t;Cricr&&{ zg6huDdAWYm;W~!j@qB|p)HwGh%&XP-Ygop;{6;kRl@)hoG(ha}D-V)XUi{jdi(Z|U z{g^!=s?%RoJIK_8Q_S)g9S-sMCK3QnJmhg}HH2PzSip>r4jR75Iwy_nZ5+OKfQ{Kp zkgTRx!-jGeICnQG5(qN&g!*g9`hEUH9nW|gx>q(aA9tw~d9STJjNef5ilLp$f}sR+e^=i96ns}->)9S`u5P0}9=)!{IDzE<^7^D{Lnhw!UP;VUIMYL_8yo)+3mkZ{Ld8u%4G5eVp^oDz`^Et_sbj1r;yWNk6nMeYqiFuz46NbEk z1^vcxxO%_)Y7dj<#}Db*GxzV)N=RXP&m473p0K9&h!~(!txxUh1>60Wty#gALq?L} zhO`#1SRJfYb+A`K3qJSX=-J zdEB|5w#u#WZNEIt*QLhm35`j0xA<(zt_Jxko{(Cz1Nvm^L1JD%J7w<8#vesi!SfZBy4=je>m7j!XbEgtKdp)oz{%WekQ=m()%6x#ni z8CU5MgFZ|J_Su`y${4`F&R^UW5QYb%Ws)g$qkvWuFrsd@>AcKw>eRl2*xAawkPpdr3#2aLqs`^MLI@F{%O)p4Fs=&ld zhcl=-)v2~712S)i7UTVm!NKfPuiHL3p!2ik`=2+$BZV_aCU{NTnYf)hIhy%KDCpX_3@2Ml=^H+NQwdFJ%uEI=gwlSC#L8YBK?z#H7 znyu_w+QQ!51Uq&C{|0Zj9kz^de6bpRJjgo&I@wY~VN^ZxP2m4 zw;=6kJ?B&bsMT#YIz-yd?fA3*7Ub$ro{;YevlrZ7AWId4>&@IJOd_OcL`&QX>eo1! zo^DV2@F?+!%@*g+!m6U=HIxzk?8c#wYPLQkrP*6QRYQ8+ac<$bWXBU22 zdxnelPB+8@63eI@ruVLFVNG(#4Bz3) z4Xd)C!G}(QjU?;zXT(_CrX7!(?$)~Y(otVOEk}jp`+a)zj23e3B7S#iPoDHFMg}F6 zEL~4u-v_wCEQDmk3d87oe{vTV$hdx;EvEdqegxwAi^=IHeADL65UJ4JkL+iRge8Y) zN6jDy=vOp&Jp~S0(}1{Xoep5xnS5f|@fx7JJ%s*{q9m$D+@7~e?0bSu6!R9`1Ctp7 zOa`oi2QchkzsUFBKh9WBX!U+r3&vZ7{QXo)1M@&0D zVa6b42#mn~(Fk7$`7%|jpl8FV6}_PsY7TH9uN*;3e5Zq|({vH*0*U4n&i|-J6DANbf*~n|Zx^dAN^yBJ zDy5BIpXMD`{X5yAlXjvQjQufx+N%E>i{Isd@kYe}ha$M9+rG3uWJLVx`Rx^3fuQqq z*sc2`m2tOS@DgvTD7SB%B+}f-_hQ-qe6P$*2rkphy4 zr%`B(mp=cMGwpPu6p_>ypi?P+i2hIn)VL`f{Oh#|I#P)M9@|#O3IB*}aet^MoW-VT z$-dyp6UUs-aP|CHDR(l1%k-ga)VZ2V`cX>>Knw8u=UthYQrau0L@_cX^1m!+B>!na zI7%pn1&Cgs!+c}Bm5v*i&)>Ct&f?qSjJwqGLVlmW7Gv1rK``YBPpiERD2TkYVVe~x z^?nkEU1=tdBK#{vScfnE+9SLQ3_T__C#I&Xj$ha+l7Mz$yq9(#927_th7J@!NsHDXXC4e_k<>^__{C|NgiKDC_df zPxFlmdNwI>b!A4L`Ertj^lJAJF^#iK{?zHUDShX4aLVE%li!7SD2(wW$Dlnw+Pgo= z%U&8tf-2f+r^;{Aoiz7|G2iI(TZIhT1jdYw@mLL~_GL*yzZaT5e*9P|RWPP6mI~V$90{rGs}IKmb`=*4xts6`MzK=neZDyXqFvzdO2du zyEX8wb9osWIDu6m`peZlgemuGWzWG-U=?wAgud zcXFD671R4RiwED*ccHlk<~P%%Vq#Pen=&{ab@>r1Kq#>&9eXFKmE^O3d{cAq>r4bGIBxb7x*my z+_%qbS!?jh8b`5356%?q=gJbFsu{g)E@K6Pvu~B& z#8O&X)LSMuHCWp_Y|jUjm8n=-hoNO=CK*wVsz%&Ak`-n?V(2MTHMxsIvlE#~s!2e7G@X@NSm?^{G{^sy z2}u}1A5|!uJ&9XVtrN|T$Oay*ua%Zo1OW)O^GR*VIS-fck+55Ds+z4SZPT@DeZBL^ zlZO1P4^Xr@4r6NT8U48%g;&40YW|wDYrEw4QGcIVvs`W3Ib>(@g@4*haeT>Py(+W% z@Yf#Lpu2iT%XGgL;CWQv#I%ZOY;92Av}U=Z;n$s*6Q7>?GZ*7V@3P;o?~pXFZ}{Ll zSi?U0U0`1E~Sx&h-b?K)&sEvetc-GPJD5sxCvfX>GuEL70BYKYq z{7>Cq@hvZq6QLy6sHq)fw@}a2q~}JVYG}l%|D1<9*Vjka21NyvSUnYP``CAS;kQ21 z8CoWOMt}Z*-%~^N;8?8%DHka-S|nfzy@~(|l8h^?L6mW6*}2XmR-OGuJhQ<04;p)P zCaYPjel6=8Vjf3VPW#hqmh>jUIfYj{f@=%EY6|NejM1kr3z@C;Pfi6#CDrFmKLAl9 zXpgAb^Cx1KW@YrF>&Bcmj4j31uyae?L1lIFbCDm`I(m&8#=k&<0`XOa>y41+sdynE zHxp}?H-PA=i1$9gJ9K>kLOI@exXw)k`BphI^{#6^v41c#(~7oozWBSwpd~F0b%ef* z`~;_dR~{e@K2)>mB`Rm=@2ic6SAsXXiT&yPken)mMNKzG`AlCrJQ(p5BNWScb@h)x zZbVKKDU=6C33D#00Aq!3Q6vV%=%?ROx*!T8Z~gV_z#Uek-0{@>z_8E#%NozQC^LTM z_|h1|#o8ny`C=7?MtMgzv$5ccFFxrR!y#IF=F-XKI<|K@wO#b0NR0|n&!Vs8Cn0LNO_o{xCKM(I8Ck{P#=+k;tBT3}dq?wAVm-Wk-4YG=CLqh-fr!B^j1 zxUFVyBbJZtYtV3ld@EtIr~GW8t_;0~=FsZ8htU*_H=U1dQ%)Gf;kG;n6yXl~Enm85lwbJ>ytx$JU?>jwmU3=`OP%rCD>7#{ zp?ZkiNw7|r-obm?C-MuwGwm@NrS*Q3M{%Wcl&OeI@?M@r zQd3<}ZZ6*TP9DnoH#)uOY5RBRgnZJj%r}K{hjR=&&O&Z%CO2oO8gVI{c3rN1r?HNk zzpm5yR;feFOjq1ACVOVNJp*H;pn|I6+VoG6Ui4bT66lo!ZpOuM(*(Gmnd*kK<=xh6 zbmbjWA3bB=G%*03X2qwm{%(xUt^0t)?%A)z%*yJEvW4n9lo1+0H+BXRq^5m$M~ELp z{PUak&n7b};82f6hHHK<@Ta=Lt{C~_wOR6!(Qq#XeKV%aT7qz}KOM7y^U|1%Y)O3(&#rW^2(KoTM?{Yxh9Uo0IXs_{tm z{dXUkf8&3F(BS_c(x3e&0FM!UwU+cYp2JZ1$11H$e@7|%4@I-IM5Tl{bR|SfK0Wt$olS>^hfJuv5b-BJNgZnvmoJso zmO63!Nt^Cq*i;&lI6W7@zUna5nQgIhu@sLa>X5EqACRX)Ifm0^i zjGR`wg7lypWmNtS!Ge>e`44#?yHhfNvr54GuUfY*NrX}V1A3DB21R}%@bZxC=%!~YJ0qK_$ zVNC1g9W&1$Q?6vVrNY;b4mBGGpSg1*7#-mAW!2BR4qFu{Z>oQ>e{=U(IxnWq|Na8Z zfms`Db2>BK1AbQk{MT2iiKXUW6GD%d*BV-Ci9ugv`96v#Lwou)oq2|vRFHKhykHUC z1LFPI%_QXbP^1-HgbuM~P&S&}PudhGeGhh(O+ z<(a`_q+$rU;RqEw!ducdHa6t=O6u#AhKJwb(TetNPZqJfd`bPLXk)a-le1lzw>E)vCfP%^gF+|ARF*ys&Yqk0JypC=#Q^~W)4d}7S7ZU_da!H|5g&PBm-x19T zVo1uEOWyA$|GX-}M1$*;Xr_`g{ALJEV3D!%J=tb;q{jA`e+Gl^aMn=OW6@%z9hoZI zL6E&oF;ZP#2&`es2#biIvzJ|ODl0ppp@NO|HRDs3Hh0$lS{gr zjWb#gm1akb|9$kj<}LuZ?pgsJ3~6a;F_~Jr^(I@99@TRpslhYzq-|p6$wHFQ3_SZL zqx?9l){=*W+>sPc`V2pcP$9yb%8fVAupD#Qm#n(0h&L6o>4xli4Q#tk3% zouZB}dX=0K9BNqlkSZWpBED3EPvrDcv zNK51?uu{Q}d(R3u%3({6CuhoyxVL}T~lCsId+lq_d^ z^+aVTI{q2UL3ycHg+VTg@QqhssuaA=hnH69c?-ug^?s`!g1%(3?ERM%ozt_h>= zdT~xcx0FZc$+KZ*A!$RJiv`}^?!8z;+{tdGBrH25ihu3+(wQvwV>Y4I89rP+Z6wlU z6#8PR_>_pcBsN&@NCSbf)D2rqj57_7i){bB^DhLM3K7M5e{T)e+~W^ApF;Vl{v~ri zN8tQ7{{Q%Yi!G|dt;FCP332`(tMPZ&S1-^1S(F!$wYQdgl@j&*e=ja!Du>6l8K3pY z5OTog6R@=>I;HGwG}8OqF2zc4QhB6{dV&WgUu*YwQURvJd&P6cj%k>F+fUb<6u02Y zUVJ1(t5St~T5uw)XIp!0^VJ$2qtp02|DoJ!L*BEA?e=xo-=lFW*P;5KeQwO)3BL~( zLIl&I?izkcaGcsRBUy6!lFiidV6l1DhH*f&>QT_6Aa-wzr6Sra{E`jmnKxZ=CA=k8 z4}wIr#_5ZO$F;R-z|T?Rl*{uEU3-lL%-h#}__)>lt36VR=Iq#Z^RGYD4Apoy)JLK$ zmFj+pJ77}O&nHnyqZ4KC_P|85J({VBKG}(z5YOi}E|WYM;Gi_{xL7cn3)=HuSSqV* zwI*uj2#qdsaA*(8XqXq(MWPl(t|_#7f8R;`ynY0?kv_dBVY%K{w_`mkr8|P)nzFt$ zinxGLJudQ5kmPmsaEvXS(Fg_{`-Oo~lYE)(=OM=jhZ<^_f@Bj*Xb&Az=qH=~!4E&A zBtIUO9I<`z_RUI!ZHz};WTZxNtM#5Q-X9^&_f)g3Us>^Ae`$V}S%fN~Rp*iXU`9pu zheG_4hrDm94;}<{5+phRP(xfM1y)GK!L7VTD*L~zN#4jUq1wIQ^4l$1#Ua5k!-M^t1#1fyM)=|A?? zqh#0BK>ar^g(DudKV;&TLPI}i@RT#10Cj#EVG-YSCqsE)e46Di|Jy-6l=rtC0DM+=?v;_6ioL;)|8TX{&kPhmuK z@6;1;@bu$&75~uJzBMmZFXMSRSp`!uuG3uBc~L0M57nP z(m^V;jB2;3LX1tCJW^@ei&-68FFsBA=;&SMfA-1dbYi&& z!|trZX!o#dW;rtSho}>Pvo6uZzzN3qC8+7Z8of9L;C^oD+7o6;v8I4MdbLAK3xn#r zy}?q^v>bE%AXFfYeb&oWH}}3T@@FSy;}oUTVh9(n*>}5l#l0`+TB=cF<=w0CG`@{( zgOdkMNIxsQwqnM+ILh-ab-8+ox~#RC+E{*32U zdhATaY%3D)-0~GATeW7e50U1(;o_tmS6vi%JRFt@WM3*Q>R#uqsc#07cALLoyRqsY zsGMVkGz0b&L|cTfJvgq@Hi!S!3qa$KdH}6sjcv|DlkUj%Dc!o& z9Glr^(AmqLTj!k?$aRs>uUH)nHQJ5cL0ZIK+sH-Mi>$hMVs@-llt@ zoHr5c60HHh5R83^@PjzD-q_z3kIeDe+uh$Fi=Dkm*4GzD_$dCb%Px6;A4tv7;z2t* z{}>y6s?JjVSHzE5?maJ$2QtPnnWGFyHb3W?DQ_Xx|7UMxLjISc|9|JHm^Xg{ z(fegESd@fs9<|&A-1I*F$YzAy7a2dVg{B5qXUj%cm~~;%`fgu z3aaf*QkwDQqvc1P5!~rh&D;qfjJ>4kg*ht&tm8!03eQyTUkOc%?X9(aT$}?YQji?G%O`1`}(C31r z_W32-ruw;;m)G%(dGt@aN!DTEoniu^oEqQZAbPjEr^!TSP z5_ixu!WSP}=YmJ{HVeY4bSv8yGpP=19ztrXVzUg~&b&Ot;ay4U5?=6GR9`M&zt2CVdTK_o`8cs#ASsbMA7;@!F_Wjzvzk?kp2|bTAxGu zJv;vN{o(3$K&y5S5qjspTit8EHMktzPMUB3nT|Jg+-12I_lPR+Unq<_ILh}aKnnq? zPJF;d^xvT-y4bBGA90thNqEK-95}K5xWHJ2$o^^}O3Z z5Nv?jgH!s2!KSvblRsiYN>Nqn*?msvWEq(gqH7i@dGSSaL>%Fu1r-NM%AtF(+VR<0 z3QW5q?J_Gs-UqMOjeUSKN&-$Orp=0-3Gl>}zHq_`?iGcnp*x!H4rLVmBw2#!M*PR# zGDuJ~^>)3uB7P4%QEW0bJKN`2yU+~)5c;0^LM`dR?SGOveqWDgpH?!Q-Bx*@7a=ng zKu(6kmH$8f{ELLY{^S;boBkiDL{tCouBiV8NSi?=uCEHa=jFO)OwaFuk)RJ9z&!w4 z1~Vie8pG9ALzM5*cYE&E)YW#xv^lBbj*$)uAc(Bioll(`{xAX{S~<0dL`QMp!p*5T zwg>c?Ib>rEHXt7x+?>V$<`9?`87>DI2ds0PG7!ky$TiOHmfbHB5ud6#6-6u7A4bCF zy_E&6&@v4#NyYWZ7!Rj%1~NH${)YGHC;Z}GD0RP#W6Efi=mB8DR-tG5pGFjHBqn}k zP(%Ul9_SOZ0pxyC{GklK4JQA4On1Jz{9}C@`)4ycLN<`v>2NkneZyCE$?d2Ct!!ff zuHD?cXqxkcY4rClSlhPKm+pywY5W+1Z^s3QgqOMd`RiQkAWAHOcSDgP=V~V4X5P8iz35|;-PfbHcUg@ zy5~830!H?b+5|>k93gw{m7^TH0l^k4Nr%vvx^zTx?op3JigoE|Gxp!a6}e*=Qezt$c(+TMS7 zfJ?>y%Rhp7)7{|0v6Dm@arOi>VnX@ahS%`{?Dhej{m?auog*zdT2g+=@2#@x`YDyh zX=PB^#wD_*NzhjfoOf7QScRUNex(&IGBdIMHk_2(Yk$7DDouysJ_9gWSL_m;P8t{~ zu;N&nJGYKniyjTDfrO)Lr(sKUKcc6ddtb$ebyKokjyroYN;sh^hg>?wz)g^{CM0@s z?_INXyclA)QkUkc&UT!!#u@(3+S>X>eu+`D@VX1Vk^jBi#5BDMxV}LDAf7pWowRlS z%n={xN?JbQw2rHGfM?hEp4tIX{A+7#rrHHhD#ZkjAv?r9AD?HlY*tEIDLMozk?+w;16os|<8rtg?b=Cc>{ zsi3=yRe4*2%y7zz5#FyZ?=<+S+5%p57OL`c2~e(&A3u;%&7}fUOP2c9Xo4c71ZnOdM@n$cml<->9klZgdo``Axi;yYJINN%G^CZ`YxyusXFp>x(Q>x@?WYv}-az+(ciVxN+4|sKh-j zeGS|sQx%*a%I1Rc+s5CFIy1xq)*6;?i@zcOmGjk;(s*YaK4J+UnVW_dF?^OFEEcWG z^>EhtuoU4LD9My4Sx}OjmI)6q32ec!n?EyVZt;^`o=hARzS#C`Z*?w?fE$8Zgc|wYvD^5s=JlKAwKbC8doNXM8qu zDV^^vFMK&9S7WN4$M+rolN*Apem&vT>Q_Eu6SA7cE4Tv1|E(cf@+0>eL%?mtYEQ-Q@EOrdYQ3jm&;o4lgPSnN^(&@)E}{Pz!jR_(PaVs8Rkopk zqA`ACE-tR5h~CckW=jT03P!mN6Z=zqRZ9O)hu~*!b>074gI=a*eWhw1(wMHTXfsy) zXa7n+rnF&bc`OxHuEay*Gl@XShz8JuDdH;`$$t4g1^iOs1cEV9T2aiAgCA4y4%+E9 zp~!wM%j*`LqP4ipp}LX#LXxyhVCV00KED$uuTliJLkhp68RBfu-P2Pha1KbVs?#P6 zZKvD=daC&UYRe*%`jHpTmYbpiIzJC2wq6=GyqY%rC*l+p+(c7mY!-!y_xjNL#{sZP zW@>W(`28~zV`+7#-*o~1UT_G0Qn>wBG2^Gn;CyBL;PEt#N`qnC+kb*3U@i{C{p@Gp znU@Vc|5Wnt??f#7P*xlJsp93ezJO~Lagypqx6_K>Tk-c)%XN2a=%B6yw9YY!|NNk@ zUHS;^p`HUMeBiNu8M)4Ng6tB!a%^C^@s6=>zUF$)Q>TV1T@P(U;_-R2>24+b`aa<* z{f^UzWGXie7qLhgAkr78qxTGV$-sLXOaHY9**@q&`|>%begG-cXLj%l0snhiV|M#f zW}j}xb*hNR?ikH9p$|(uEYllsZu9pcp16;1EF1>H`{$ZmFMj7`T6}Jn=Yy?&d9)nN zwv^rqwdCw}5Sb=-@@}cW=x|=PxB3!J<7;Ewa>uyDS9g8=F>HZmx~-bXd@j^hB6c|e z6DrPV!@GZZA0)ikbfulzi0cgEQ#BB5^4vWy%t;n}v5@t}82k%^SAVnnQHAAU54?j% zzr0~}=wu(aaf!XIZsFo4%6@4TvAmMV<=wj1!fS9i0q<<>L6cdUvjmk~f(tWAYKL0e ztD(y)J?iKBGK-xFyTi!lgNl`nyW}Kf*FglP5U%|!mK_Sxvje2acCXRAhix$F_+!;s z^MOm<2#&=$sxg>|10}%hakjt`Q(1f9IeBZ|-=orfi?T=t# zUL$%2p>y-NWrn7YY9%M7`a%m1M3|-xpAb;QPv2eF8hA-cTMYK<>I_(^qF(gMihuRg zf&Cp*w1x7aEPiOL>1-AHC;**mRf_yI7<)8laE4KLM_aS_<3EiNmoJ!19p`4tH)3b8 z?NBmqPx3BL@+8D;{F@4{jeQs*RX4+E=PvrNm#c5us19XKK4RZ4P@`Su94|9%jCSA1 zF1;!0-{8rehSQbZ2rOOFALh(Fi?TulP2tOi@uPBfkbMMeO!QH0rt)$lY3}P~6G6Lm z&NE%0-a?C>ttOIvO;lljV3k}G_= zcXc;P{I}T&O!HcPzuyw4iwNzley#S%9XnjVjyuMbsaUUpIiY4&R`L=~Xq6eIf$nHT zjO1rGrU`=+1it!Z=sw|i$MucN2<$QvQ+z}0Us)DC$0V5&dIc23T^YAvH>^xU5=$Xq zU%^}WLX0Dm1MDfJLt_>W0nnp2IsI-wips&924T1&0bzp0?=P^Op=fj25;D}lEEP8W zJ_O3gqA;flhJMAj0I@~(az%!gpB;Hvib57#oErD|foe?sUJYyo4^m|xkm>Wy7jVd3 zt@P<+q#^1NEPUmZ^@cT(Tn9MB_ZF8ADYMK&+Ou&_qNsX9=17!7~pf zvf&GBA;)fRG+tk87o^Xn2AxRUnwzwr3`0aEY^G=0&fg)*#h(v2Y<3!YoT5>ID53EF6z0ec8Dj2uI<6Z#-NV`Uh+KiQ z;d4hHYUf_Z@?mD?w=E`@Kn;y2^n;j7(j!N857=E)!{Lj69G;fr7PF<^EepaTGgdj% z=}7iXp7y4>!S;^cJ@F9r_os$6@KsO)`@NVdS>l@eBjK93S|h)Eb$cO;{Gu%S*e*3E z4AVX6w;HjU|HkqmsFI@*M^;|`#SF4$~SX8({bx{vVfWY z8kOC8CzglT+6B|Ed9wd!z1JCnO-}a-0rnkp+B8fs3d^qg7Wnl&a5(ZmD)^RH6hYtO z-v}xly(Lq70@-)eHWy+8o(_xZLH zDDfG-V1ozSa(a3%-OJ((PnpN1fiCOo--eUBbQ26^`hv$p#3m|QHyx>iS3$%itIW*r zO$LbYWILx0e>X1F??ZbjIG^~5@xSDZ#l1A?f-z;V>i*IA{!ZZ1U76@{twlSh?hKU<*?2np%<10Z zP=UZA*KOue_cLGP+4cf@sL+|QKIS=NDSzwEm?BF(h%%?rn)@h>E$Ofw|GoR!EarLb zzApG?1ky<$4m5TWA={=`d!qC5^KFz`YRw|)ByJyM;&1Um7_a>0V4aA?)y@aEH%+Izl_#DKR`5l`lNLfq&H73bFN^T` zOFR*y9KRznZ^TeZQ|*=F?yfbCzHEDi3?2B`CF|`?YB?Mz<2XyY& zzt~Dm{JPL7Abkwq47{JMa<(LPI^RUz-UbZM-Mn1QGwS%{LWFsKZJetK3BNt}`@Fbl zYa!`*^71 zWwC=&l-h7H2DhgQ82Y+f9FEJu?LuJlUdbHR{w zz%G(FWfv}LQ3l`0I?x5&#pW{Hbyq?BKaZqkc-QGyc$}F>WN?B;WFehQMolTvJ^LzQ zs_~MO>{sQ3fyOP09?lu2bayp=6z6yC2JZfmOpvR$9G@2;qb_&tUL0WZP0qVWPJ`DI zFSuPG;;muP3${w|1JK0b!Y0*)&4t9pK8b|YoC@9g@n+Yfx@p?Y4Nj-;f0^))>yJN@ zwW>@?NMQ3i|2St zuIHwinL(pu7^AiHZAWCrYcmH%OTX;Pjy8x?q&r}Zw>{Qd`WjNs&YVmt=@D18Z1rAq z(CQSYhEQ2rpBK@n`u8n3HGDvpH!?2UW$|BPpHZJo7O3@lQ1Q8(?bw0THtGC6BlG;W z*{*X~j^875<~JYd$l=yjvbbjp5xerjb^JIh=@y67v7er7<>@~3OVdC?+@Zx1R}Vh5 z#bnujSi`}tVS-_|kYd?NF(C0B3<*Gk{0N)KnHrbRbANw-)U2Y`j9ZYz&CSip$q5&t z8!sxDf86Z?gL4fSj;aua;hc>`V?G(bW?RvvTHWW7DtcneGUjco?e88+i5@j_ zPgRZg3i5xJ&awmcArb3dq(2)Ft(Q82O5S(o*C#oI3KIOIGP<@WkN5_!2&0?5n`eiy z=iSclmSfLbUU#lPiNf^h+mDU#Z8}q&Ixzh8CZIpI%(#0}Jv%yFdlGo<;iWIH!0D^&ZQG4>Fo&#DeX#mF zYYh_-qDAY=-70*0*=SlzAb%)&GAgBu@33=s#EpXNUofp%>$ZQK0c0n)(Ha6HEd4 zuWaDH?jS2$_DgECX)LEy8b)gVMHQK)aEYd|i{`{P27;WdIX_0>$37I^rN}iZDijTi(Iqft$wu~Pys2< zY-|*nHk2O{q9Kz!3vpc_h;et=SO$BQuP$~CHrOy$awPYC1$(u{j#LOu8xqA3cyz%@ zj{cm&Lja=>J|f&`IU!VUJ*Ej87Kx5!QW=|`wtiHeP8&rhA!BUJ31DbAj!%^Y5;S*q zI*-z^av^`66o&6~CV*Fhoxk_hCL;pMLnf8aD>qsY^^jA1dOE^^{(fdQw(P2^Zxt1Z zvbHQa3=H3h$<*J!e`9M~aLEizB)-8S7ub>6wz~UrcX{zZK|zs)osD}cA<>ccn!@<{ z5PES4-Qd3KgfDlEy$?9w!)m!{1ddLDndOoOUU(t8W5k(TSC_alO}Bb{ckI(0N!0^L z2GDEzJwN}6?2M%3vfKQ+Uc34-&2^?P|3T}H5MY#9u2-Y$ea~JRR9Y`5-zW#DtG|TKz8UMWw#b z`EDHN^gxEi5*FLh0$<&AG8jzNb@@5RtLgcEG4{J`Y|_vp^?}EK`=+Y*{*CS*NuzC6 zlcPZ0LA~-%f$(cG=%9Zw1b?a(b4M^cx(jfQ1OArbkIi3ml{FE5zBXM4-sp*e)K0aI zFJcmb{FcM19Rt3#>KOOlw4oy7yhsSVxj9wP<&6}*n+*_HF(}4c@RgU`_4GW~tagv* z9h>|JuXN2!CbsKZbzSD6!!@k&Cvw96z5TPSHbf5%=-vdq<@;Jr|Ef;3s)k>B?x-r{ zdu?#YsFOwp)fS~I1Sm3|7TGUR2VGHnrQpnNSRakl$66aN43+kp(;H_Tzn~I89i|vu zbm7EL>0>|Hx*|w2XGsxDnQgry3EoVnx@;48G8W~wd*KpA zcaW9W<9%{=Chgx=DL${9>dqe=9Q;kW`NiMm>8tS88`L~8kS=5>+Q^vnl$nK{4^>BZ z0;;pBMqL16Z#jQvaK6x|@|@w3-GB80+!?%aaUlp6WM-z6bvc3@j%3*7S!Ex=>(cOr zE`GP}TmSxANT#>93^{V~{x1LW*zaIc_K*u&<~;8hu+V4K z^3z*tjk=LGWJ3-E)_xAbIB#x9F~m2HyxT~cZ?|)6Et+*X=)77@v>aAiF+TO4rZzzr zu`acmE;|3Zt7yGaTN{&%8&3aV?xOP}D*6MzAv~>=GL^RTe2OzH(5I}-^00#x|08h( ztI9%CAlOTMkZ0ceZiM3&bg{Ig{{OhOzq%o;G}ln)n=%vVQ4`=ffjh|_k!_lSFirhf=D?a{tSJi~Q) z;0G>@@YEB1=*H+42*!AjB7jy<@4@0QBi)G6BcYNs*bAFVOaVMdw-nBdS zzQ2EQ1@rv(#0V8{tsHG zCV^z8{NfHNUa*v^&;+9t7?ZHgc(22{NSgkd}_BoV+~d;|=ujz`%!CSc8AMX*MjLK7O1k`kU;Mt+g8R z{ZD_1LTa^BFX{Z?G^8%k*&*PCRp+GWtNbgTp;T2{w8kLC`b#kOG8CT(%QVHEh3IHF zD_M6g6}uqGjgv|MJ`gzAZ{af65R+%rOfWN$o#B)CM}?`NNyvGvMMR+7Vs&E+ye@Ni z4VWSOR=TIJ`3}x!@psq$4`pv1)@Iba4HhU+ij_ifD-cN-5mQv;c8mF}kc!$o{jue;5+9%enovQxRy`(?zeeaDUX$$yoQ z_(h7P#YSavs%k%;*Z{0prc)OI*#C`Yp}|LiHcpiV%yFTlmkMiA@_r>R0dFdGHAef@ zg8U1jDVcYzo|c@YMxD9ZJo2Sr2|Qy5M@A@+C`UnrSV8Bf(w1K>lx13^MkG?^DniF% z2=t>eo$uYNxnQu^E@gvfcZS&pK)Uj(y|=p=uZ;bjUZkTW{}^85<1RK*;$8dM{hU2d zBmJK8_gi&a?*9hE)@NZ^3LdD(GY!%qSg!w@&YajMwG}+;=bReIt15)Fz?-o*`h2m2 zN46e_^@Oao8C)Y*q#z=%%371UT*fyymfOhTh&J-Jt+UoP%h&ygn;e0geGmcI?_2zU zV_%@7IaRYI)o-m&rdWs76aTv?*fbrmwx48QqlNYJnYrHz=5g(OB|Pdi_wNRb*n{(J9U>vbE1Mgd>IxJf;`< zy}q!EXUa=II;-Y7DU|;-TyHD;VSezv43MaPU$HXJiMX1xU)f~$kJA)Af9*d0z=3{r zC&=Lcz=ev>(Dm~nu)JY;Xf>S_2%Jad#np$)mJQ058U5h${vQ>3vY`?c6@aHLt*uFC zB6Q5vZ~Ohn)9pUKNmajrKQpZy)e68(}hYVuof@-Ms7Ew|%R)KM|_SUCC};;Y@gc)*&2kjT@ZO7084 z?I(_70{AYAfSfLvMO8CNEjV%wQvhEdk#gMJ1MvflsfZ zp+VTRZO1|^=6{DGPW8tIp>PiWQ6Czr9U^?ty#N{)&3KTYqLYvJ`JL`Ra3P4Bo5`7uyi8XjXSc}P& z#TyM!KfkKz<57=nAs@yO_vibIgF@_Wl1B(Xfc$m&lqLQg`vb<)8M}q)oq4~SU|B4qHLl3*?U9hLSvc}25N{*4uETFVQRqKi&A$@v z5?Z!pPltSi^{89OjjDVgQum3UwRgX!qTLr#Ql`G`KZ*hxqQN&A;J!`g)hqbT{Z7Eodq-xzWl!3v zV#W0kGJ9%TT9jv|`&``IX&go$7_~s=Ddf0)-c`w`l{LtK{3tFC|E)UK*kNj1+>P1BXWF{8y5`{DeM2kL`1j0dVtd`z$49Fr22cc^ z0nfhO7&INrlHn@*`72C2UIr$zqs)f3)X zzbmbDz9|P{yhkW5TO3B0wiUzU+s#6UhFu2@q4eY@@cTQHZWhYhNx62lx_GEq_HdDW zAm)NWlk<0gBFsGkIYh?}4-7nurkmNI(NrEnx1m{|XgO-u&^wwlG**U@Z(egp)B4l^h@R<~p@gT+RR zOhoQhi&BokSCj#sC%vigEDj%D67}LAo0;#Erv|A+9Z?cQZ)C}}A$mlugoz)23tgQK zpCh&d98XMFWTJ;Hme*RhKi?6tANyNue;o(6mxL+&Oc>djYHF_vi^_1I_c;9ED|V}D z8R0keuE}xr1EUJJV!~cU#sFV?dtBwG@=YiVAxOlgw{p5Utk>jB_YPjbgKwjwqhmSp ziwEgPP+h4^XL{ieV_t7#><^I*N`S$9d(7-jU23j~NqJo-61}|4oQDDI^)GDt?ca=u zGsOZ#&uv+*VxoyzE6cXX;|gx*s;>@WH|(hCu_T8;6o$spSDNp9 zqefV295A1nq)j={uW#)b5#`n!$REVRV!aT;TEiR?P*Q0F`h)wc@iT@1wSieXUB>J) zZG|b*li+~&t3;x~R_U!*%W&Y*qvCV#H-~6zYv*a}9T25Am`8l7a=&2I!Y7d-mv;Eu z4pSiO%?=yzd`VeVgiiG{E<0P=+ne1#fL&XAdvIi=>l`i+fH2m=&@k1#jhvgHVj^+WFFNWK2Uh1G2sZ}hYVnTXwaQx?a2Nv7IDN!mBJF?>m z(Gu``5>EBd=~M6If`aNX0c>|EVAmTB*N9RMIL<2$wBXYUwLI*lCiQ+35)=7*FXx*Q zbK$r-l2)>ZI9|iNPtJcM9KyT!e`huLkp zD8PZ;pPPfXxM5B(?)(aKx$J~n1A2M? zEr_QZsovn^AW-k`Ww;OrHcCH54h?G~i%_j->nJlr%z6Nvf&=UBsC6`Hy&vTO1>v#0 zdU|4#=MT)EGcb)tm7Rcf(G#4-uV>NW;P|9X^}ug6hb!DP^ljWv)Cx{+N7Ni^hz3%x zej}7BC%HAEUAW|F^4IAWu&ju<*r)!&PbNiA@wh~tx#9s z-*K{M;#S1I3`1?`r~WiF-@w+Y2;RXB`0^(Jv8{dBy!WNO`hx2EuZ#t^*^sIKNhIue zM>!zqkucABxFhmi#mwnl<@hKsPs_Z=wX?Hh)S3SI)-valWZ=TgPeVmh@+x%eS@83D z$v2R)ggWtGNqD!tOGj4;X(areXYg`P+hSJgy%vZ2TZh|wqaxkQ1n5BIVc+wueeI@p zw~2aAWCjRTHk!KFORT5ZHF8l^yeL-%52H^s{o%TIM{Pt41HhW25{Y=&_nFUeA54aT zc)mTfJ#0)m_~V~lv|SG|hqq$OV!!AQ9_ScigLCI#FY(bPLt>k%4s3@d9(1n4pLIPE zb39o?wMi%;;RZRFF+ST1*aIsAn}{1P?N>b|RE&0vL@6R-3si28Ni}}Y7}DKYvx$4s zgHLunsC=oa3n#`EyVFce9Kkl9#o_|7eIKF#)zo|lOdq0@F#wzlP&jK9NT4D=un&uB z9@u-Ojg%4gu?C{Nd`nOJEOP_$6a5N)pXwj*cP;=7dwS+P&!5TM_HC9fo-<5Chom$h zk4#!Cq{1Ns5ujWaz!^wVaqNy2e6GBVhsQ!{iZAjv(mSWUp6%h%lA5^oNURm_2^(Vn zXEoy3lYKZfF)bsqJ6SR6Vp$qZ>*UbHKxM17c;#GOSu7Vp~`{kF75w@nYH)Q?by`GdK)9cF+)zd43+H5?)|LY-* zULJF)?9_rpgo&!m@3GoW3+(=o7-xP#Yx|3Aq@64T2bWC7cdg5kC|v2dYhoE~h;VxotI`}6g&jAqeY-ed8r$uExIOL z)hniTl`<0_>R@3}L2CfV@Le0e&SVl9QP|PrACz8*_--N#pwIN~6HdBSNF8}QWagx9zJ=+@sYm%zE*D+ezmeEKTaK(wUq>lRuv-Ww=RQi^@S5B06oaZ9Acr`PgnfQnKVA{CZ%ov?|Hcdk z)!nq7ujKt)>W^O;EIQh-8FBZ+$dr2LhJD5TcCN6o-~DBGaME95^$`mfv}eqcrh|!A>4imsok=U< zWhk^u9UK_RifBVE73ZW{>(Kn@@g2;|5DjUFgX52_Ov@=F*`|vwirl?2RGz${<4ydG%M;9leGXb1H^bmCUuY%tAr0%z~x{u5Ryro#fNB zintfryU+Yc-uZNx!~8u>=6v@na56_Upvo*+NwgVu>4(Oboa~|zj>zqoC?mghq+;jL z1L<7Jzj@Wkc@3)Q_nN>HQ#6;@ig9hI?DeM5m)|CL4Sk;0@kxc9F6NT%up9rj}cM$ky0Ns+p9+5Ake@9E3&*%7+7T@tx> zGgktd>TObffAG_&$Pd#uXWOC3^+0Jhtd_Q)RF+s~GcUb_8ST)mm`ZmsC0nr*o0b}b z8{F*b?My1pCRNN0?2~jT&8Cp~4y&Y%-M_gVa*>kGeqUg+IS#2j!^vB!60Iy?oj?$# zsJOf0+kEh=x^UHpxxjBr< zd=mRII@NO7vot0O8TfI7bJl9{+U4a)uAA*Z0kxPX)KD?*z{EoecDfLwHEf&dlG=|X z=o@G!gcDRc&|5Yu;rbMM?rl%&SPpf!J|hA_(cASS;g=4366gM?*_tgzoTxWEf$o0M zpPn|9&hwmKeN+=)G-=6NxSOe6%d1!vG|wkzzb7;EkV?!t6oTi~6-?roq1i50RT z+iS!*lJBkPWAr04e0VY@XDyGTqF``GBt*^xi&iyj0}y@2nl&&nOmGi z+R?GhyT9Qdl<7I6Hw_h;YrddxAi0kbK(+qmpl3Qu{i5pP{JaXtpTnULlvGk0v-B9G zf01a5jBHX}w$RQy%R2wfCp0wKIEXIZ?A^YDQ5y4DbHatK^HIl?aVg&U{@1FS9!cc- z0$af^-}^zF{9nql>&-4tM~rzdZTPYuU*GQs7pZOhTJM&~Mx1f6Y_Dz^XbJEP5_%CDtAM+t=8i+>IZXerE1?RUqU(bs)lHeHo9u)gWo zCGT^rI>wJm*a_KP{+A>4^gzq714 zYos*#qKV9_9QWZFb)pf7QsRy(IXxqTlRR+utEZXGEOAqZAIGS|Wa?;yzVZnX-_>{` zM4m3KDKQH@MY7fcHXiAFzf4~|=kU`u9ixG5E2A9u-0m4CLv|R(H70mQaB`omt%!*^wLs-t^1UhSN*4xQ6g5F5%DoR zU@b>!X;}F3&+R4okc0sZNnsiqi8jPk*)vYjBOsO}`XK|HN_ld}Xctmr{L_8P^)zy^ zU;Q0eAcby>*o1O3oy$Jxv0CMy`T2naWl@2B@lnzOLIHDDu8idC)cP<^n?o)oU>TAy z9IHqtz3OgER{dNb9?THvxo5s8XFn`AWKRLG`Auc|_EM5`iK=|9rwT_H!sJDC1gXeo zbR2vWh-R(XHKR1ZMWfo!Y9r~+_s{|^{VHIXOD_-M)96;g+y~gmS%gkVuMy|118l%2 z%ui;xWS6J}yEgXerPwpphf}{H#Bfe1Wq*1z>gxDkRk8$&f#Md;k&yDz zUscNHFYL6x{b}UEnGobAPHoCDG%0sp zRg~HRE%U|%ohVdJc>%?hEIxjxJuGumvp8(WVU)!HOmVaw{*U8B^g=?jPdU(j$dZB_ zo9WRShTn`n6J}>-t`0ZD>R$0+zkk}l6fpb}5weg2?v2+TTe(%3bOhc)(cK+ZZR{Yl z46`CeYbV0_FgRDT!TI~);ObN3r(O2-Laft)INCC;>L7+3-*~`t#=3i~xr}bMFBXuC z31spnPpq9(edoECXOJ*=v@t#H^+Cq9woa?KLVzqIx5|}6C zJqhav<<#Bd%So(keq)$zX1rIv6!u@_0g(z=99{PyMR8#alA=v+u+`8O*f zRH>pN@LuewUSN9b)0x=7JPbLFQlO&QlAslxCaH4#5Q> zGO^|P#`h^DKuxQ`>z2^Gi&d)cW;5B#bqu?9{QK*^SfSm#6gNkZvm&uo_Nz>s#F+c@ zQePv;RHjlu9QdJ2LKyCimX_x5r}fTdq-pQ$@n*ZbYwB`ha7J4YdZa<cVUHzv>pAtN9-96OpFLl~P&Tx}^F0W>)Mh$;+k51F>`$yWKus??bhU zexwk_m@rHo?aBpe`30Z4Am1QJ%6i92E2Twr#vFM}gErY<7z+4m6-orIXxC=)X$^-Q93V{)^*^aF? zhXj$=D!YQOg)%VkYd&_r?}Lt4-zsmP{KS;gx?p!eAI6V89tDPEuq@hD?^7yZNnYR& z(QBVP9rrERaKcHgRDDQsNxQnBt#|I`t`)9HO96b~5DxtIicmk4B9UO+)cnLZs-DP; z_ESV^3<`?Ot@2IFxY&^BmrdvcPtLf5FX!5P>E?Gvy6U{@d8x6E2RC$F`~pXv3eI&J zEwW$Y2c05GM%ti2N`{_CGvU(YhSoVKt;27L%D#-Yt24yNL}{r1!$unuKDV_dfM;hL z9qEXa75G0|0Nq6yNNsW8pMhVuisY=!BuzWV!G0ByoRrM=0Z`JvKIthE@R)d?y{O}G znby#G57&|`p`mt(PKu`>6S_Ed$q|IE$@McdXf>kG6aLZg0V6^CTa@2RRG3kA?6Z$q@;R%Jw|pWDeoiSD<(b{W^(U4Te)!D%`Xkm$ z()yOII)(1ma~)e3^<0%mw=)f5L?B^5hU#{GA*;FuGIAm!cza>;dva*^%!H+ow67~U zpr!kbFg`T#xVP!V%1)rGEB&jDZ?m{G0D1^}SH@X~ff;i&JdPQ|=UP)}#SGfb&hNe* zv-A!l(Fo~Y?Kt^B3rnv{8Z%sJK~xBo9o?Z_rGajSKr+`5*vM;-+% z+42{W2HT>GcUKSKNFs!}JvFg!Nwn9v>!|}fa0|%kt2oLr>iVWI`8Uts1C575tmyve za9#XD55eY#5*l!d9Lk4a61jNjkyq{e5?!Zzom$ah*Yz#DzTZRrz6&%0A5=SR^1(3> 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 Vk~-{j--F&E`j<^E6=~c5@ee~_L^1#X literal 0 HcmV?d00001 diff --git a/Doku/images/debug_selected_tests.png b/Doku/images/debug_selected_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6dbbe91f3fadb4142cb1346cda81388a9d8848 GIT binary patch literal 50239 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%0A`l(0dVU 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 sRFKaMEJT^zkf4Y#{@11Z-(JwS$;M1& literal 0 HcmV?d00001 diff --git a/Doku/images/enumerated_tests.png b/Doku/images/enumerated_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..939d4deb1451dbccb7f804861c659be83f10b3a6 GIT binary patch literal 27251 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�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 literal 0 HcmV?d00001 diff --git a/Doku/images/experimental_instance.png b/Doku/images/experimental_instance.png new file mode 100644 index 0000000000000000000000000000000000000000..94df500df3b89a67a75e27595b66ba8fd3cc68bf GIT binary patch literal 46409 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 literal 0 HcmV?d00001 diff --git a/Doku/images/group_by_duration.png b/Doku/images/group_by_duration.png new file mode 100644 index 0000000000000000000000000000000000000000..d20c184ee455dee3672a7a66853cbffb8c198c75 GIT binary patch literal 33460 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 literal 0 HcmV?d00001 diff --git a/Doku/images/group_by_outcome.png b/Doku/images/group_by_outcome.png new file mode 100644 index 0000000000000000000000000000000000000000..85eae390628b9cd0fe965467aac91fac1a8ca615 GIT binary patch literal 28973 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 Cunq?R literal 0 HcmV?d00001 diff --git a/Doku/images/group_by_project.png b/Doku/images/group_by_project.png new file mode 100644 index 0000000000000000000000000000000000000000..09fed375a8248f7d4fd3d0992d0bf8441d4afe03 GIT binary patch literal 28897 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 literal 0 HcmV?d00001 diff --git a/Doku/images/jit_visual_studio_selection.png b/Doku/images/jit_visual_studio_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..64faac88ed10be35952a1c06da0941c2fd240d1f GIT binary patch literal 19293 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
    +AiiaAdU(7GnlN@g4Vyiwk9N0<0l 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 z

    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 O1Vd@+X%wj0JopbU286i) literal 0 HcmV?d00001 diff --git a/Doku/images/logger_initialized.png b/Doku/images/logger_initialized.png new file mode 100644 index 0000000000000000000000000000000000000000..7e28e9515612f90057297e86e13036d6d6b8e4c0 GIT binary patch literal 10398 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 literal 0 HcmV?d00001 diff --git a/Doku/images/memory_leak_detection.png b/Doku/images/memory_leak_detection.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b22327dfd4491041afdbdee73dbc90822e0e55 GIT binary patch literal 58202 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 bR0gp(AM-hzT9?5_nSiFMu1dMm-H`tSQj}0! literal 0 HcmV?d00001 diff --git a/Doku/images/platform_toolset.png b/Doku/images/platform_toolset.png new file mode 100644 index 0000000000000000000000000000000000000000..524f990c9bb0c5d0ccffb8c3cbdbc6e2baac0c93 GIT binary patch literal 89020 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 Gu85T^54A+-L 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 A00000 literal 0 HcmV?d00001 diff --git a/Doku/images/project_configuration_type.png b/Doku/images/project_configuration_type.png new file mode 100644 index 0000000000000000000000000000000000000000..19a11c766c2aec34337c48a90f77b33dc51bd5d4 GIT binary patch literal 56158 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%0D`4%9>#Mii?dgE&d9&2XtxH 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 P@Fo39UZUvb2jBk#W<5`D literal 0 HcmV?d00001 diff --git a/Doku/images/running_tests_in_code_coverage_mode.png b/Doku/images/running_tests_in_code_coverage_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..ca63d9351bd6182484d43ee3a02407a9c178750f GIT binary patch literal 25228 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 NigIeQWzyzv{{u%|#!~MGp@P^dt`SFaiI( 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�#G?jZWF2O=ixY?#*^7+ei&M8)Y)4 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 literal 0 HcmV?d00001 diff --git a/Doku/images/unsupported_preprocessor_evaluated_macros.png b/Doku/images/unsupported_preprocessor_evaluated_macros.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ec2ff02fefe5d233b2f8c886e0891a07a44b11 GIT binary patch literal 47160 zcmZs?1yCGY6DUjqL4yT%3n92`U-R&vvNol4tnhd z2T7W{nz~p!xmi0pAmE|V(81y8&u|GxCvO*PODi{oa_k`?I27w2sEfJr^Hgd#YkPA9 z-YaZ0_z2qbh?=8?o2RjhIfA~^)AMwUe~4SVn%Wt|r@A0C{;rFIgHfNsn#L{;)((~k zzsWYk;4qYb@!efa%@Ho1zV7`uO~TRM-rT_r;c_Us6AnXup7zDs&CVR5U_@?n&9h)o}>!oGQRKYJ1TE)n44d$5iV1(5mSqz=zx3vo}D$o9`{voqpO36nb zs?G+6M6R+oM)XIvd^@(trPS5S_ZOPE-M&(z2K{>>e3X_Bjo;>~L+-%=qF__v=Q8|n zNWA#;@$QJB1+`+cymrK#HJoAMJm{ zsq3<{e-svkDdQlC{d47}tjfB*_}`7#wxB{f599hBv_co}%NrWX|4p3hZ|npCj@stW zEVA&B#H?6XOxWl6a_^{v{-GljfIXKw?|XE3Qk+gW*jTLx`UdtTP;!FDTJ<)~^j`20znetSRw_ zTLQ9;&_H>?g>gBPpoJmY#bv!O|XSp5XPaFtL~w5Xw17 zPNR5qTA|le$hvWO?X%DeQoJkNQoTKADPKw$+k*-_RyAgxRtvFO;zorVG-@4YeJ|4+ zz^skruqDhLqH)OG@n*?si;(iI#AcMRt>SiOBtXh#btB3}8SdRDIm{ZLD5m*mQ5Z9t zK8Uq^ibZaF6FP_;CL{?Ktftq{*1kE-0n8|m@0u;@wm{9q&yj~F-YZ=1L=wi!SEwRX zyOmKESDdD~byM|Pk}8UIPuWR(PAio6*fP>f(&|`Rj3Tr*WvvgH3(pgvDXrYQs`@-p zcc-6bTQ1yObF>FTGw$lXG;Vssdh}P^OOO9>`_2+|qd}Q&O{R%1?H9Y($18;GakHRY znk*TA^YpzF9kQmrY)VZn+kYx!olb)bmoA5%5FYD2t>UN&#RNm1^1pl!K!@UsErAG6 z5_mJ(&RrV55R*xBE`$%IPn8;^M4H#WFTHfhRrgfLwwIHDbWREZj@&F3Q)GN@2${kq z<;^RN6jgbbHj;Uib9%}>UL)*}`go=2`Y^?Svd4M{d(M1=wnR?BX4gxzyWo+g%{khb!BK!{*LU6I%jGJNS0y`;lR&O?S%K}QKv660TKN>QY`6TVm)s(R!{uO+0uL7($%=hSH+E# ztRy=U=)SkaAM7T(D#o_N&zNb&{`F@~hsm{vaCrDv7I&MQhRC?uNO*M|Zx*q8RHCQk zucpz~a7!H(phL=6(T5ZI4$n>5j>>zQgvd-EnvChjv{oCRY|5Gx{pi&{)wEgPcUUY+f+PQ^JNR(U*^S83Wa;nQ zTXTUYEKkm%pHIgJy^H9!cH@#emu&HC=*kMYdUcCq3kWVsmd@n10X|2|#}lRn6NGM! zN;#0})ym>b7p|jn!*2M7jSIWL3_MoMo6U#TI@(*)SMw8Z5=5q04=18WT1McC@s^EE z-iayFMA^w(9H;A9QO#xoqW0RS@P~CQc8KR?cDO)_jgjUo7<-f>S33G5UJPavsp z{2yGfmF3N2@jI&$Kii7T=^kEA<^#WPWNK8~sS56Z0jyK3gu}auJt0drq_Mogb|OA? zOZWHf8129#adt~gDsZ!!Wv}c4E%Y+UC1|9Pksj6rjAWy=a9KyD~w6v!H*Wp&o z4&qWd@~ZeLdG8m+Z6oB1;Rk}~oBOmzGIxYjLb}fOj(6eEO98qN{n~e&{l6ZpCECq~ z-?4*|J@hh?`K<;zc{Y$Ov5`&9SpMot`hK)2i1)T!NV>Zh& z^PJ>eLcy~>_kr{*lsK5vB^N~#?ZhXVQLd5j&cX_e=N~reSFC3q&PiG#Sw#wT#))W71b{z_lj!gOrbZ5GA z9$)GNF;KF_n~4f|9GIS&nOSlV*QCJ?;sx&4KD7DxnPOC8JQjKjhV#}oEpzVK}+Yko#GnzJ&zHAH6Eo84?G5jPyQ4c?mb+D zNxsbn&qh}~&l$I?0?$e3@dJUBT)1aplN&nR!kIHAbIMVnZt8caL(Oep5e&YwHr;L; zO!M+m51&D7dbrGJUJ1=8sq{~AB$v2-4*rquxHQygS0TQ=YpIw8jubkHMvW^D9I6-;u^=WVaXQUavX9`CT z3|vI8g+5bkCJut^f=SpOUyBDDYK8;;IreaD_+{VAbX_hUhnmx^I;JQ5;a`pLzafV7 z<*40}h|z$%SBN%fn1j}MZVcDcfU13?~n+?a+l8j z7a#sxB$P%X^lzjGZq6u%Og*xcDlm&PyQ+t>!?-)t-R=LH7lep{RaYnfwu@*miTg9^ zZf>{!hn_;U|Kr^p1Y>k)N#gln3H8^jA;CSAe;*+}?~Dga72*A}MLis1XevXf^#6?Q zJgpG`SHvMq*FlkaGwSM?ZeLdZ<?wB%bGG_5Zx6=W&{@rhL0N`r|(# z*>pf%nV1c{XNB|cTaS9^@hA?xtnodgz1Wx9TiN?&0MPZt`){dY+iO}W=BQ5#+1DO) z|N3Rm6mt*WvjQC)fvx|juK!U2=)AE!h;iiR3atvOab5#U5{cpDx%AVgylp{UBy9G4 zCAJ;a=PS0IUpFaFJ(uL?^B}p0db5QT)qji;Z~XY$G-&iBe0eXhuUiGj=iM_I_&beG zg)hTR;`35kUYQW%1;@%D8DdLPh6astfA`gVh6h&`B|ulo@~w7_kg=iNleD{Y8SA0< zMRmK8sX|^%QU^+Pm~XipDb&^JLNOb&{>nAlhm%rq?=!9bN?^;k(j<$W>aNTiJiq66 znwMj6j;GhtsAG=h;d9dcFo?60`8TC8_%ak)6L{a1Y$@3%QXhEVuwV+clw`&}U^3A! zUR+sPgd;9AbdeIRWG^^nXh56J7Ny3_6(KKeZ^;~NAEUqdY6Jx@;R&4zGKz`Igmy^x zVsy077GVLx;)p0WkBvpjgQofG7{)NypN<7L+uc&T_s)m~x#BLurW5#o<)bf(FG0bU zDVvMvyBam8-GW0mPV{A~HU|!7T`GlvAjZT9}!8{`^d`~}B zN#|0Iw=WAbuYe@_>^IUb69=Z+r;@OAzsCIQS%@FB^uXTSY)O36{t27qr=q3(F5&KI+Ys8I|Y!jv4*q^_@Lvj}#5jZLW=j#kN@6AgXdy_!@!)3qK= zSyI0oD*RtnW^x7Ls#OMSLc_EhJ!%F%B<4!gR~xNK6TW`Hg`Dxpzr!-$4vHx$ef&0C zc+hH;zi}OdLA1NbZ!ar1XN9HQ;AZ32c{%be-rcsh~z&)CRtm}7EP4w2* zkg<|U4LnY|anz-x{$7%04yO6S$A2cf^PVwA5n6(6X=g@F3I-)&n3xXuvb(YbEmgsZ-WD!W_E5T?LewVwOz0}9#UZ3OXmb_>yf#8i$9(dXs@|)=UtqOeAne9xXsZ(m4i_DfH9y?bM}x%VkI>vHAi7r+ zoRKw-nrhRS28kl9#4LJEIO^)!O-{y>d(|S71QpB85t`1{!9;e0SLR~DmXd>4MHfq9 z2P_6J%FcZ+nyIih-)UTQ`FbMdgF6)6vy%Pmg|Zmw*uWo(Bh!V{iR=v6Vx4lj=UIMU z?(RTV4(OG4X;ljyl2Q_s0ci+gAQ z90-~z$JWP9jhgd@OL2b=A)QKZ=rJ{lHBW^C*tM2%oegu>UcoNo zW(im;E0dX6L;~o}v;-VKP-UPftmo=p^f6AP$`I7Erj75}{7k>b0UOhu5puB~{!v5VNqDt>3a5)zW9w=WPs)=+T0($oKaDl+DjO;P}xd-bI;7{BgifKAi52?*B;ssIQ$&$@}7Q*vd?$@heqjPBnjbP~v znRv3QR$n#`-GfK zS=HzKMg%Jg%np*LA2#DQo2TQPCv)3r@%3!BH)X8u8<#8iM*aHcGa$l@x|lQqVy_cF z&dpPjHI1q+1VGrtzz&nr?p-o-3l zPjJd)X6~H(Vb-4&((CGlGHrP}jIC1tD|PXA5yO$i!a+;T;-^V2a3Aydvz%jOA<%3o zSaDMMJ0n+erH|rQ`zaVOiX`bOJXacq3)FNCcr zqo$C#>Ai&zQ}tI(=-#|%)m9Qk?TLZex-k#_g%6o`LA1$!Y^%3R0%2pTm$_PIY2IPw zN_VQpM>N)ujlmSeYT(Uj$(C%hV4-(PxlnJIlk%i!tmk; zFc%ZOONZ)Uopl16k@^>RJagN3Ryz(p@vXgV%V60&r9*ABH!Yy;@+!(0~0hnv-kD}8KegGrB*4oGoqGmf;&o3(fQ2cFE z2V`u@Aw@lN=N-E@Kj40r#j&lV=T)W)Gj>g?D>D36k&1g{UoQ1eoi|iY_s{9!@oin~ z@P=(F2Z)K0MprFW2=vl+fFF@@y-jCe#+Qv+P%v$M-Hgxyxrz8_pJKsPjH`bxRONFK zR~BzM$=-&E>sn9wjEAV!_;{?M@vhtT+O0@3(s^A%f}E0HVx9e+wzISR4uXP_-7xE1 z1ID4T-443Q6TS=Kki{?y=*cD3o>kLYZGlyx@$UQjgeRs7c#GYa-ubiViUE zXgGPhkw7qTi-n!k;O(POa@?n@>fFN57F zGr3|`7i$1f%Tb}HT_{u~{r&y8bl4O^f2)nVTbg7K3M#{YZUKk>Sh1OiWX6#3pDrHx z@sIUbjby)J>wJ~%#mjIKQzt^N=O>1Vaapx&a;cI>5S^u&t`o!Y1Ix7 zaMq-r{Xf>a%l6Ttt@UT@Wl9fX7{daDZ_S(V4S(QWBMBsFm_-53^Kh7H&x;JAcwyU^ z?5T(7_N_SFwN#OeSzADK{3himw$1=w4+K05?hI_Xi5%|?qIcZ3m>jK%56q|{m5LWN z+2yhuUh$Kfm}@P(038z34T5$9PKfTcBk|8eRsVb|_ZUUns$sZ?!C}_-E!_F;>d5l` z`a~Ha=Hu5#(YY$tf&q%kEm!=a&e$K`-HW@1 zDYzN?;J7TcWE)UlOUE}pa(KfN4BtLVJFQWPZo#8ZiGLzIkFoYwhHi+io^0-`-_Me* zd;*vEeBF-1a;Z_rzCA~QxeRp3n+-HutYiOw;o^Fg|ATE_6g(+I_Rs9+m{A%YMoL(S z;Rk0&EVRNSO;);4PO)vT{}aoj$vg+7f-`UQ5&nrj|B0Ag|L;&)9v7a+|0l+#p_PI8 zk=5tE2mmVsa!(SJ-{{fiwhM$}b|+*z_#Hhh9=)sP5!d`Ln$N|axb9~le_BT5CWeJ{ zgzQCgJ7qZ|KXl&d>se-sjbER+m!m-EMK#{2h$UYZJGmi$ zEovjK_cs5NfbGKjvbsbFA^W@Ii)n<{>3lJ2hi!Pu(xHr}Kmb+X$AFL2A32D5o^++M z)vsTS4^BsMyfRF+Qp10>p$q%N>qwcsS0(eXB`SDZX6Sq#LL_jyCF;5k@wez3=65~) z6Ec$!Up;^DKGFpJWA5E(ZqQLp-j)!TpxAcuLOMVDA!xcnciQ_^1m4}W;oAKw1_C(> z_NssvM;HB@Tc$vORW zivGbCmB^EJ7pV;A%ZMrH&wh0@LHTqlofinO#Jcct%uzpf_gvvO1xHH~ z<;rg#Q+Bix4Igd4eU&?Z{QLBe29@gt@3gzPTsq$MEr-mKPgMRqY!#;4=;U^%OJmA| zl-ug^=kM8$=m}71^sBGer@W}Qs3Pg6{{A^}TU*aKBWm$-jNa*iYDMYoo_?Jo85vmbeMMCh`sLw9UwqH;5=>w%fdzNRd)NU_3Ksn13)5o9p$OIZpKOo37+J>SdZZQ@+t-8Ak z?6e5JjiE$5zYkqUqx6NJ|8v~fwkyi16eYMs7%R2ybAc0+O{jRnjX1(#RDY|GKc3*d z<`e%N_U1ev>0t&n?>!S=Yviic?pV#`OfU*+JHPKOXihVNhjL=BmTU>p4je-|G74+& z`z}MZ0qf}jy3YgmBM16xE!R|j8zY8w2M&iedA}oui~lI1;CZp8!1=h&2muVkR_D*?Mo?D0RwHZhYuf0{IB$5H6LHWQVdTw z1_*%7F0bJ8`{bsd67l@KF!|zo>+t2f#c? z?Cf|%?|^_a3S$Bl5`#>( zSJ1=F&1k2nL}k;;~kj`!^4Mq@<))R#qIZayaQ2tT3I!4udQ) zLuYCuyJTxQ2S77t5tHvwbFz5#j;$-Z=FCJ9AGiDw1Wy0r0qeau59Jb2UlYSm_}>ke z6*r-aC4jdB!^?m60u=~Kg&aN#qWG!54me9Ri}!E%mQb1TmCJ~_wA3b9=b>v4`&xo> zh^CVG*5?x!u^~mfxx;_G0J1z|7NKjpu+?B+|E>T-;g1it{;M!4_i z|40et*SgI*$+Sgto!*Zmn76^`=YrXSIhzx8*TlyIPWAR0j;|v8?6gR9o+{ClH8HfINGux|F>!9?ypAG( zb$v>WE3FMHbFv=|9LzQpCOti#kAbHP)h(e=8VgEXh*Y^NhOhq#20|#zm%R#d6gIK* zmT{+((b29TH#hM1!jr@2oL9K>146)}L+`;7m|Z%~VqL_a-umfmNZ{g2C>F&)1VeV; z53#S?qJ_aA2TxgS#k%a@9k>Pz?B$0Ztyyw$)AdYQ(`Vz+KHF!r%#c@3l98W3E7aAx2yc59=g8H)oU6mgFx-G zwRQvn;?tw9uMF*Jv_Fxm%d;$wl&#dCCSxBgnSEBtpDHdwINf^p>2Gp^EeN-Gq*%Pd z$j?R`eZum_=V1>htWE}m`LEuXwKXOy( z0yg73OYTocif0R>ggOl~+=s1j_?x$^x*Qsf8|R$__S?DM?`khR_F{W&IZ_>uz_MvU z8w3i#l3yWfOy1W}*x5s`=yKMStE^mF_ipDy=-y|YK6bOtPn6jlDfNbuk$dx9O`H23 zWPG|-*f|zb8fZvCaDjrK>6)kQ-q!}55d~#_2)|R#p28lO{pBPiL;z7y>F&nchjL64 z78Wn7Yjym8Lp5sE;&>aUzNn&^jbuuf_d4{CZy$v_zv7*1ttkpn_|(VOBY`ros z{=x&WxW_CM2EgDzF`%g9(KH)m!)ggTL8w);6Ub5$ro=XUykzvlYm0@6dJD=qFhrK- z8C1u|-TS?)S_;?kCd)rFNO@J?9kF#ACvI;{I7|OcTji?`r|9Mb1>WKhoFn=PjkX^1 zb(KGLZPSXl+ipV6&3Z-Gd(%}pH~z*LM22EwVy-V{jik=qS<#4q zNl8iM@M3Y2%+zNA{+wv8B$Fz0*InSIZ$9PZnrv2QaOOaL+q-rfQ2bY0joQ6*Djc|F zm#~DGpOg7_rKL+#cO8?1eEf{v<*n;#2Qh;pFIhK-M$(S%uN{V1(s4GvOW@e$&plv#;^ z=Erw^$WmALk-p;LKEB#MJ^g{@V3}k7<2ngmb}lyO^N?}X z&?pe3`u3&qT~ZZu1PRP}8xkJxUSuq7t7+99fZGGRK0&yCdh`T&Xmu_*So7peaCv^5 zj(6&6^gJ>!09~j*-a!1p{wfEy&1*MQ%vQ(>?WkS4&qt%?z_YHcf+jv z{mp?!AQ70)vREk5Q;YStI!N)wE`{hwjcNM4g+x2HdRJ!1ghg#`$+A;i`@+cZ{sid5BTAuS5H&Bb2T~Rwse0($n%TwoMB$EjhiI7Kno{h zO?!cbWP8&#J!c2TC!%`2q=lSIJip?O?qBlJXFoPnTRIs#$6-sR$@KSnNr%{qrbD14 zW9vG-oW30yLH_o)Uh(lxzQRQ~Zoa}zi)@)nVT_NNnnTOM#h+A=UoZDLPCG5HgbDcR z;ek4`sc+l3M|m`O>pv>0)0>T$Ss+{Fmll=2v04#HNs~}|muS{FDxuL4`zGSnK_ z_OGFItSjrn5D!o*Z4HgaXl*HU7R~`$+!Pyh4J_mtdQ6{V7a@Gdlf7qs(lpX{yAAa|t@BdWJc*HqfuAJ2*tz9fOpdjzY3S zR>{}mYwdh3&-saTgSii4N8)3#eefI#W3(RzO;8#kx zC$mZ096201xUoJ6OFF)*Ww-p)66W`?Ff-+O?RAa^yp^I!@qYZ%PSi0FZU1EQ6es~y zwOOm#0`wkum|%4DfZ}Gocgwo>VI8jzo0Fz;e21Fiz=X9=WxdTq5AQ@Fw}NX10z-Zv zSX^bRIPA(*10s;4Y1vlR19DH5X{TH`IquJmg6Qm{(k#7h zgqwz!{}Lj}^zrdy1Nu2MBo) zZMtGJtnX@#DKg@c@w+Mb6%a?HllgQ7kdaSw3seVa1$)Au| zeY0Nf1CM3mRrXtwav;O}2> z;WU?|^0MFfUytC$<=kyZ=H;X!I=;=)v_1ni7aTwHKC%uM6w>- z)bO|2QP`X9T)LmGz(l7iJ?~p`j+l11e`PEoGeE_b%Sw?-o8g5VdmJ#N_o=Wi=Nc}8ts2R$ zQs=eK6YMAbR{7TaIP6&*;GkmPYnArEoryZJ1)4j*mhYNNErC*vyLY536C%J8hqbLO ztmSn)6sOZ6ORrW7_CrqCX4{tE?>fUH+d2O61}*Q<6!y0QH9yfkEVubuU0#^>{(Y}m zyH*anaIIfPXLXo+z4?>s*VcsWos=A1?5(7N=y>zaN>?FDttBJ@pB5PtH`VO?dZ*p* z&~>ECb-LgkAD=!vrhK-&a%PAF=KENlmY9-uJQ4 zv|{1~k^C7i$#)0p0o|?i9nHQF%?ph9Cmd&x)n+@lo`~1F&Oa4H5I7v3P>^0SE?m!P z?k~2c__JUf-yT6WN8~+g_C2SMGa$@fR;xA|`2IoqN1O~myKMRc3rxQ)xG`HeiH6>?TGbA-&WaCe8m z=<~^@5qWa7kV$t-=7);4Qq5pt+AO+{wy>V>Rh%yrzAhyn@msuBD#ptgwqPTp7Xe1( z>Y@Sy5|o4@Y%7~Xi442~;jLCZOM>pC+}s(StXEhp$w>m`awo=3`^3cT^H6Ok@rZBI zyFjKdNmD}vDIKe6NjMTbu;Q1@`$={0E*sY_9b=cM@g~K_%&Q*mEyOEAt!B@p}kqlwRNu zdXhzs*ExFWO>pv`{`y}0-Ej`cM|E{(yMc_Hy-e%>mG!iN@bopSp;gE5s>f4WN~8I= zY{Gm!+}(w9k)@`YyBj9zZmMIpNuRV&pYry<31JSe z4H4rR$Qx_$&2jvSJqDL-)Ym&V{orHQy084<<57g4aZf{QHY>xtk9Nt@_&*1_$|P*cnw|?J z4Pfsn5bZ!C(GVqmSdbd9loF=!>3!K&b!5lGAUkf$m+*ks#TX-K zqT(X5>D;=mey7&{y_SU-d6G18r^yZ8cfXv@)2D%pgVup-|9OY?Q+c}mqT-X?z1u7O zxSD%w5KMLUemMwrr+0`*dg)hEXVtZ`2Xs<;iI5qhp*m7Qg3+g?`FB!aV9L6#7Vv#U z(~%Zv7e28w`8Vef%cjY#|N48d^d~G0i2`y|jrB{}iQ6 z?Jsif&JBrF6L=Bj(SIl8x@@nm<~vXzaj zXY^58-Cn~yDs@`&J>0`3E&)2vOR#860fYh3A zo*pGb=^u0rri<>14=vI?od5UuS!s+({&`iZ-pGrSHGJW1USyt4{AP-U%i%+9(-=)N$TlXdmfozQbBP9u z+cv#cNEt7p_y4@5sgj(pESZZ<(#KMQCO5wwQc~CU^;dnGo}1YGXNu2hhN==`Mf6nk z8TCHpjar6;jI2H+>4h`<_eXV^Pdum0+>9mGrIricS|i5cQTo@-tPpzp6O#@>d!F9M zM^7w~^ln~J(D&M-)IrY|8-EJ#H(OxG-85S+ADFeXazee^wJi+o2!5XZIA@ zbE9g{w4TGJSp2=riglwnamw7!QZjbQe~Knb#CggOm7J^u*@w$32HXFvIgODj|3{Qw z5Km_cT1O@EL7B(B<$1v*y`0VC{PPXY%RNLj-onvZ&Er51-FaG?_Uy&ow1rkx!1XdB zub`ly$$G9t7%`un)^a&bN_CuZLTu@O%mRN8kxbwf$y2Hoe=I zB}&DE=ilSlPFHg?brX^~eYP|lD5t=0k#aGrb;9ero&X)*TNE9~N?m+z?-2+1es~F6 zU^n&VU!b?>ReCJZ*>54mwGW=zVa%}vktDj$d<&{9=AX>1Pj!EsAUJPbMMnq)oTA1K zvZMUYhoOLdtg*r*M1N)KnJRY2x(QA)U|P$)$5^DYmmbX|JSwI;YVW-x(hq(*HXhNc z3+GN|n@Wih0@s-K!c*7O#IILfnuqo{7#Za<*6GE{4cgO5xGnzH9|a@VvyleX`1#$FFKoqhM$YbG$xY(eu06puG$RKx#TWv46`=!%BwPO0XUHpcSg> z1X5@OzHBL*E!NTgpClzTa9T)h<8lT!{%p8#A1}B%XL<;AeMM2dIuuh^2Lk*j^7j2i z13!Lb8DLdWQ~#-Z+FfKBC&&uA%6ncov3s`5ta(AX&a2;DIS>b3bfZ~_~3@wYQ zi_Z%Z;1sloF5QLG%r`K*d3aa-y7!r^cEb>PnWeC23}3Xd8+TY5s(w)ZhQ3hBkb*W; z4TtpdkVeZe4(=Pkl`d?nd+W-&od{q*`$|gHNr*xqrk{o7FynL-|CUyIt!u^UM=4YG z$(rEl4!{njBY4czZEUOi(8)^e>s}~s{t69GuWq@C?5c@+p+Ih-HCcNuRz**VD>csY z`fRPBhGuV|;bXkxVQXBdVunD?kKg1NWT;3(zS4(?x$XM~ZK=x1>?q5B2ifQ@eijeS z_F#5dh65z_NsvD@KeogMV*qlwk3W}3)>ks9KArR;G=*YMm)8Uam{+7D{9tWg=CEL& z>@nzVDfaf>Z_?uzhy1Y;h9~(J80iFFB3&JJxsUbS+BGn}039$COW1nN*r9nk;07yo zHBl+)w-Mi7ZIz)=6&UYnbhMp+R??|?*;|;Bj%lAVXnqJ=@rqKN>Y%Q_W9tRnhR6Az z;&se6UTWKjE=hcaF5@^3;)y)8Pw-&(XXnrlo%Mc zHcl!|UGyw-6pxq1I&S-wXI%T~$-PdbTua~ull@RUQnbZ1#|HZ~Doy>KdDGt0;Rbtn z?SjP6KxuA5`RkxLx`?Sac@D&qjn159?8h)Qn+Q-p;v8Na;{W|qITQc-)+rn#72!v$?b?;1u7zBL$&6WIC%;d-lL``#p4vPEuv1bd> za5R*QD@%;M?eBNXoZJabYzWADL3D44!TkXPlyw^?y1Iv1 z<+@#1Pd@udhyX8glL+~;6+Z&e1_AUVK&7}D5aQo zfz*+-;LysC@CJW3#D#7(gvI)aUmQP6LzPsFgCFIvb{6r1IVK@IUHr%MrYGmFD=IH} zczAxiM|UU=ntwr=64YC`?B=mpo+h)0C}NSUl)HuZnh9xzHz3Jn-$?Y}ryKTDNtNoSHy((9y zMIrdVoNIdh{XpACV7#kKH8!bPgXVoHmHG)DDqkKFSFee;6MboZWa|$MC23w8ke0p8OgVaK3dzR?doC^}u_LY;9-v_6Ows;nkh> zq@@(!LdXkOK6CqDf+W%wK=o0mn0rGMtVH%c4Of`3E9 zQ|$cY_gt~%iwpBJ1&>>#*^an8Ld(%IR2v6`x-vx;UU0l#eD5t+m zvn6G)k7nTgn>}Bl$Txk0H-dID+WpFqHALHbU31rv8>8fBs&Z@c^&}AneQiMc6bHXO zD>q(EfH%BCLy_Lt(NuaPk`Q$Gi^Df;y57>|boi;e*mGfIWeUQz9`s~K$j-(Wgp&o) ztf190gveXKZeK#_<^MF2wR40rXS>W%-tXXydBkIQsR;R`t}f_z@70GSy5fqdwMEX6 zY{>C0jr(sl+#>9_ebRj=cCOc@2`>!l07%T4HqnvlL-3Qk@A)7shDr_|XoBWUVA2AD z-FvL}cA4JH@+6kw*^@U}-#iog%2?+I zmye zdQ0zouF|C`zoMtOPoUeQ4_}0pml+pZMZ2{d z+#zG9Ven_Hn)3K7h$r;2cbVpO`(rWiViFH{Hn{QHYrnrpcF_h30#ms+I2W`MGqliY zywFpsj1T>+9;!n=I6ei2G5;l=0AcdxROv{qJwBX^-q|7Rd*#j=aR%{x3F(MbKM%nG zgmoK70y<&XMtqwwcYm#Z$h-kc--;j6ExacM*fjDTFXXd9u6?gcr7Q#vba0c zc>*RAzCZ3}J<_@(wPkiq#VrG=>B=T=bS3IKNW#+)W~y4LwqSDt=(w3+)mzcw7S^ag zbDP!{1cW-Pe=ad@DnTQ|!{Vwgj3@)Htk}Z~rxxD)_EDLhzzb{4;lUXbzYVCXaXIC&g0a>#eVj6OOQ?FSo zS;7YH2@=-|wOHxG6wqxZQQ1D{T31@whwG}_G0h4(@RsUC6CD$hLF2hxJ|%zFB1`vl zl?UnW;${4oW!6@-C0XlpWGsiS_2taJb(ny1)k=$2zWyh}ymt|+J&kIeSVb+GKUBxn zvp=-m1vh?z2bz$VPG%e5j0e*G>jgl6N!8|v4(JZav&WEWG$KajwD=N6Ij0cNXht3( zTJ=s0*5V_{uM|v5LQD2e$8LWI?#SjQWHo_XiS(=R=ELlzZc82kGY^4Wc9VleZm_zyaJEH^o2`V1 z9>PnSBf7m{iZ?#WsGhUYlTk!_w>7b|+&&2#X&GMdaBsfNo4awzhZ&yojeGhrz+{ux zGo?|BCy#Bk3rt@B^4Xm7n_QQ;$oPk^1Vc)dn8Tcj;c*`eUb&22NR(L4YOD{*ztFA@y8YU8(GDDYjaU;+@*T-b2Lt>) z`83i3KU`rD9I-7O+7}ujYc0v`WQ8YDk)@4iVP_R$Oq*AeXPzH9C5tag@!(717Oz@L z5t?}`;``hKQv$0E>w3B{EMU>Kh-I(g(~Cw!iVls0`zIih{4s}vG)~gP|Bt%24vVUL z+lEI`Q4uf*X@gGb1`CkRp+lvlyHmMAky26`i2;W09*~%kmhO-NhVIUH4c@omzKXMLOL#a^H5F zGd{_`vpBHqP3w6p8M@MPdRHM4+0o%S7)6R+H4_yr^EWbn5euKm04u6W@0**coVT*< zuEOhpP0^3VCL#TUM+TBIO|t$%$)k;|L>XL0tSUB*u4IHYhMf2VG!8pq1-2{o4x1+@ z)GOkZxTj|D&K6ioAXZ0~!jbR_8c9Y0IlIq43cmO&zn-L@-NBFGp>y z3G#KY4clI@B4qft1l|*{KP*vSVBH9dpIg8oi*)oyjrn&=vjNbR#Us(C5-*o5zo(o z@T+U79{bXg`h*nb_T$^nhTsbrX0Te4xBbfum%I`4=SE!y4g0)%+(=T9YZEKxXB6T(ADd0kBWD!ky_^fdaIR@d!`iqQxPvd66SWqHc+NT zJ|~a%>D}Vi>b_$tNDZ}hcLSDEs5G5sFv89wIBaQKX^ zKxHXFzvx5g<$Dqjxjzxo_keu~!D z=_D;`GrdpGyxVC`v}uw4J*BRgXUNoQ3RoAZoWYY(P<2nL)deYJl_zY4V{C5TcjPi? zm5%&bLYKRiudVnl;xsMIhl54mWY#Dm5%y(@wNn%G##r?Ck8P zuOA7h-VPVOv18cN>~R>c%ks!=?;nW-Oz=8u3amR1e{is+)&rN2m1B0W*3E9c-g-hP zA2DC8jxh}WzQN0;cy^c0dp@JU9Iw4K(BfG)-`$3E+i6QJY@L^K;owj!>>ropMU4& zdrw3!xd7}0zMVLbqrq(`DS{sV-S8gg78w`q+ws45@85g+_*cq#*j|NIz38(y^62C*YKhY%QO^=93aKfdWWVJ>JD{@csJzEf6U@C<_3;uW z*#>mNA4n`Vj>}rotoY&ucWa&8-9Y0Anw~^pM2naCVPdFe;`lP1DX2c(H?eFI3g5i+!y8n@c7}!1BFc0 zqZvFZ1d7~R5~qIWzlHt7F#UF=uOq_)XmmfFJQ91;E)@-I$%e_03q zo-w=r6!b-VD`e*(t?Z2w2I-UcuohiUe#JOGF)Vb}Upbg}zUo|4m3&M1dFOIausmU>YV&|#v*f= z8nug0LYOR@eR!(7wmMzBtJ~O(pWv}hq92NxEuG_^+P*avR-R1l(h~18eH5w0Z8!aJMChQ8=UH+`BH+~s`Ujc+-#7g3KQbK=;F z+BB3*52-&Kj%Pcz0)N%u8vQ9u%U=4id(?u|DtaV|VJFupyox)1+@9EN1rJ>B#6Z9q zci5#b(pcb?ylOAF!o`%84dkbSRq8I?Te`(JEjGJwvuNwhZ@{&0%~dguurMYU;MLqm ztx#(C!Iv5fH6_@tH5Kbr{$h#N``&q9^kGVs*Qnann!XU!J&)(XN}HHw61Bn_5m%8O zd;7O|3Pv5@G>=Qe^x_Sk9X`8(_w%9Yw(0oM`AALuZK-1J_3ipXk68A7XisHU6&LbO zi)E;}*K!mI$$lK~ccZ7BJm$A>My8(?O;(t-=+pM$EV3-8eyr8>&)(ma3C3N97j0Bt zwaI*Y+Bj_TOuK3N&3B$wIpz+_5*u`Cp`M2P2zAE@o`3omE?NoZsBF1`eH>|HWZ*W# z^K5HTwYj9%UDkWU(o&q*kKXKms9`Uv6-eZHM^HdlWvzUy;} z@;dF7UDn&qG+?h_)5QFFF;Sp7hX>$-jTV@7ca=+?9K^q;)cFeJ?+~ZaT_2+12ljR%JWOBv|7PUe6xPw zaLMkO;~k$Kp97mSsng8!o$|AVu(MZy?khgaMEVT0bJXX?7YOBp(KgZO3*m zuymgDb6Pl?!dAGGH+TDl#iPz+!x0u|HdJCK!HC`yO_#M3wKG#h>O9H?HpPEh*>#X0 zu{seOEsqcz6!(0+*r}pW)f-p78zE^`$e9@LKTiJ{LO zRR#|V(x#fkkIv5s>-M(VBXBd%3(k!bkcW>?Ig*cPh^|c1Zm?WYK8dGhVwA&q&M`h; zv-TkY9%_#updaF5xT#iXy;yb$Vtwnf*ztRN^i!+vpQ~GAzseo*lP$e`e^a6bgAeU4 zaKnE}?{%1&(X(z?k&5ui?ZKdwlDM@|=E2IctIaetu#$l^cNI3<{wI3SNDZ%dFtd)> z<2W0RxlYo=ti0kqE9pH%oB6WQqK9J@V^(%-*jNyXf7qh++X&g=w&7BHfi#<;QGipc z_%FxGZ7aF;?_`6#j3hG-kFQ>pTHUhUn)2)MAt2eIpl&SJS#37KM0ltd)1k2&;t}>_S?9-=$ynW)4?BQiy z8)~O^LS~Ms&OV2W4RfrqU%Q5Q*^6_e$V@ATR#;wm^hoP4ucOSY%lF#DeLQ;>L(IfO zlT}^jIavZ@_n;*Qd6h|e1Iif%i?*1ttSlY^zHm(F(2Z_f>7XO0y+|99d)%5b;^n!( zNaOIKq>?3X)`H}tIMb-#?kZ!7HT)Hyb0qm)&h|a#P61v*aapXzEI}_@Ksu4hT*;=z zVo{eD%!LbV`IY+ofKe`*8qRJIYTPO$01YJ*%kAu$JXu$CguSivHZ4qq#!f?eG^0aTL|Nv!WwBTwZNZEmrlNe#i|-m}jh zZ!|o}2e-*-VXY>iY|Govk=cHBO0|naA~~}9ile91qLxq{C;ZPX4(oO8^$3VBDb*#K z!pGxCTOmVBEoOoxa+A1NyMYDue%8<>sw@%tMO}*k4+#U7Q9NP!IflgqLvV53cnfG} zbogMk_L*t1k6Flw*xni5o_f)4mLo!$Y>_j%%pCL1r~l-G_X`frl30q24=^g7Q4Din zqNiQSF(je=dyGif5jI)sD;VHePewC2n3dk3Zsb!yHhhs#60%o z_SYub$A>HGw?)0SCzfEyYvTe_?i{~_r(9XK4-*xnY-$flDQHkE96s)7tGCpIKaeJ# zTVvuINmqR-U<2maYRtw$`-^><)gJrS<|7ddiaQ&>o20_MITl?u>w^#mIpeI}uJ-gD z8<)WSIvYYCP2+&yzEr!t<+u}#}+@i6?^8#nE^tcXT_uXfO zywfCqCPfzF)WbCC(=5sf+seFrpzZ@YY!JO7ry|I$Ow5R^dD}>mS^?KJq)UHep9WIscEyv$e=DK94ISB?uNHqY zRmo9LUl#n8Y>@8!LDPBG3%Ae$U6+1+Su0-dsLthfakdsic-A@%isltZ?=@Th)TjQb z{k)qVrj?l`N;5B3p>eRxu(JrFcZXK3PQlAGNuM^{1^{`ioq?EbciEyAhv>6Jk3(?l^qL;ezW|d z65FM6|1r@1^^-4J+J+cjiPnlDPk2Z*T%6my(v+2iA%Efw7*6MXrx|6}N5Iiwbp)4*j5AUYyIvINJ_6K;m%%aUB(NW!&F=7Q;^tE=*_9b z;N-fCUxs|azm!Z%r^=TXw-?Y#$epGqJSWV=ea&r7flv|^{w&oJ8pdo+g5DOENrzUO zJ7yZ=GMloto8PmVR@aFgtf8gSM2l-P(#Z=JYzeq)#w{fn<&0AJXzFpj;2asx5FmBT zi>*TL1gWHgG&4a~c1^l%H$-(HVhFRsG{tJ- zslZh1Ft9K`OVeE^sE(ky^e2Ilw>ox~nof*Bce^qitIfY9k%#CX8PrZl&YT30w>sZ5 zuJbZWd3m(Z$i?3iAUrmC(%n9a%SSH@cj(B6L%VZEqyrC3_*}@~N%gaZd=rx)U+26T zl9`0ga3c8}6lcx}${nA&|Atk4gqOU>gG_(EyX7Q|8gCxz-5%C@Sd9MCqjR z(bnsP&nu-+YI>7El`eTjC+g&_rVhyIr;<9vv4(OOQM;7Wk>eDmA-I`j`2xY zU$Pa{LvQZx{_II`C*6f_7?Vs!R1Lk2ZRRGX60h)HV(x7znN}rr1MX1xZTDc)(Bb^- zw7=1`J85yU&LfuMc+UlqX@k(2=pXi_!04=Bb;nTH7>m{SEiQ!cpT9+;UFYT$O~nOo zs@W?+%46yJn4Ow~ zDT%29sC6)>g`QC`nb>R8*Fii8WMjtNYzzldXqJY;If!u5CU(L%s{;X(CX|5b9w$m&_yymntuT3{o^eildbK^=SgX%40)axYx&0P! zD&?3ef^mQ1-eq%(xHf+r7f&U(>VoJF(igzam;8h2h`dvKeZLarE8G!XOw#;&?+3i_ z_q4fS4>i7vWae!NP?fR_e0YT}`v^+T@X%3PJzhDDD7&L~O;JQ`4wBrl$osKx^!(m( z&2f)t^nUPeGCZuZPVKfp@N%Rp=|6g1F(^Oc-!&yG>;K^Mc_rtu6zLl0;Jx$E#AA#5 z^%@Z0&d1XcM(Z&ddx4K6geYdqVuCl0GRfKD0Pox}n&wt`#wCA~vzDTL&t` zpWnVO9e%Ff=GM+>(+C9BA!g@6A8v=)G4fk8L7E0z#?(Qzj?jY)2icXSugs_A3eNm9 zIM#Jr%6fjI?B{Q;L2U2c-jF8GaFX%viD^3yM6nISsiFO>U02zZQ>NSezS+gid6FC7 z#3l@+Swbs1&3AWv^Xjf}U~H>4chhK##A#?yjwt?epQDzg>>zLQX0Db1TYOhPP|jzx2?G|jl87|cR_j*G{6lyqe$FzA&2-HUq5)e z=dE>E+AmRYr@&0s^OeY#J<|^lbp|Gj8!VxRnvX<#;bu19ocL@@(=t6x*Zgwx%sISk zn>ui>X=KQ3HEm^`&5|dUw>7b%^?unb$a_1Vj4ws1Sn3k>_jfRud@Wef1GS#_ z;)_1LFjM~kw?Gk;OLDt2#uRAyn_zO;_KC=KLp;>C$^5Y=T&;ex%QZnh3VE2eZ!H=h za=31)cuJ?KjhVkKKRSu)o}bl~j_RGQb!W*p)o@bV93YcP!`Ze{bL1&m;}+A{9POFZ zO{veCI(6;DOxl*JE5zmF$W!Z>jJVF{d`!xH>)>9OjXw{iG0`ok*zn%^NMQ6E-n05s zhyW^oX1e{Tz7GOn{c($?kUN|rBscDRXYo9D@5t*u!;Z@NZTR4ONo;>;cpsiLrBtJ% z^CBp5ni}49jUB|l=MA{E@1pbTR&qoq7mY_87-RB|bxWNcLwJ*8hu)j$eH0Rb`kZ7% zExcSk+cM$SveRoYFNfzCm24cJN2GJw@zq9cS_P!7FfWZq=^ki!q}A=fLhUU@_sl zdN}Cue)15h6WhJ+DCCartRFrQ(04oRqp)!(#WR-o&>G6W^m8_1>g@MtY+!dP(`Jj3 z$rxaeaX;G0UYo3o*WR0Ly(j8=P?EO+6^6C;q!|&f}_lC?@KYlRU zTF~O~)(F+`dVzj-?Um^9WhbmTuY;VO@uw7hj#N)Or%pPT?qS0%ag=&Tn*@W^9FoB} zms{p=r}W@XM@}0yqQCYMCffkih4|o@O?_VdaZP=@`onq#)5RO#Lr=#oeJhFyu)|so zbzSuoKiibXv;6!IEkM{Vpr#gnH+>vo*;VA#Ri}35$)Yhgd2XYX2r^5tkyhx5x2gm- znr}4*&o%h_Z_P}l^=LeMR=UcmSM*C(cik$HiEu8XPF*>r5vkvF;DR3ac}=q8wTRI7 zovM?q=^DBM*+?DB_T?a3(Ta}B3$H7%M`U+3Dh8!>YPTIb?+H0WMGcKQly*HO^bC#U z-quaQ?O(IG4SYv9vP9?1_${4U^t@|H^a!Co%MwJ#L?cXXvBIf1=gt&>7>u;b z^o(7`iQA-{@Xdu!q(El{47H_lrk_4W`J70d9@n4OoGm7wNsFH!cJFQ{pX=Jx?W&iz zS-&vR97_52Dp2^#-b7WWHrHTmF?5x;^uS>O*nLmZ>}`_9H<*}0@8^icFLpv8PO`|^ zx2uL-glYsaK>Zvk}sVRy#{&8CwyTK8G+-ZKf;QXkdg#U?jNpQV8bmXSfIQz1#^2=y#++hS3`h2dHEj#snS1O&M)=y|!d<1}zvQwMu>}27z>r(b2 z+nBBseb)23_|l3Z4`&@#SNZ5V6o?BDQ0tk>@mrB~zGUN`VEuXjafDFF-9^j7MNZfb zMR#O{f_edeEFC4TsGxSv=Mn1a!#z>QGTRYk~0xkF29ID-tdr8t&j-?X?kn zhrEItkZFk**oeG>+m>DRV7H)P&owi~6~=CLW4SU!;jNW^9$7NQ`dg3u(~MIY=d#Q< zq6I%3;f%ZAXqj%^&9?fgFzPk8PbnR`w-u=Mr7+E8ez|72%w|@I-J(U4L`|g(I+UU* zHy#h&UwuR}j=~GwZCe`&iQI}~^$5EJvAuM~vjGnUHPnppG_C&q%gFp;!T91klNNi= zx#}R3n^IPCd~Eik%!DY+D15KFjc$~Nw?1X6d3%RaoL}auyf9ziDNbUjDh}J9x?kNM zSFgR;$SJ)|uEluBrO0CHr_(DL*bL0tx46G}$Ue|joyYEVi&xDjiG5DACig@MmE#(( z)*dwuLqpEhyVVwA#q>(GY3wRm}K*8;_d#ZGj4JV+pg`RX|tD%p{Xe8oL&e@N=^Xv_SwU!?l{gmvs z!`TX-;l0}sUC6o?q@f&ia%$<*4I23tCeB9=6d|klH-rQKEkVd&=-E6pw`UWKsxvct zRI_GE+Z$wkNQT0NKzyOZ6J37WJ#!hHu(0p?0UujE1H&2L&6{=*KK&P@Z9#paA)H)# z*?c!vjZq6&4ux~3ecY@LIiT!=W@s5sP=g^hK0KZtD?Q5&*sO3a z%B*|7Qsm*vejj_;7c;kGeJ8d@n{YT~4oRTUWCga`>aXI@syFgW)!*`=J!$m6jV~~cU?jTq?Bp@djrem~61=Eo zqdKK+CU{4~bejN_YR;32HBMju;Or7u9oX2jGj}Wx4TZ;rtdp+pRKFb>j_c==G|`MX z@!N?+HRqRN0Jhe1DIB2cWFm^UaIgxitqy+;^*M+RLD{644zNUfVRs*RvS zTAL+g)kq``B8?wgV2(LD)856N3Si!^O=qF&Fi%F^(!OQ5o}rH2^gB?)E?THWMh-{q zB>-xN&IHn37O~L8mK{Fs#8;)d3ciRb!?;^l(pKl&qg?tzyL|GAgcEetVolUKsH%z| zPUAQSszM9mWk&?w^(Yi*IfsNe^1TwYT+d0cfjgjkI|fH?@IO@eZoTNsBcw|Rsz*NC zOAy^Vz?z{-eEek`VpN!vCNQX%>h-aCax;oFf1m^^N}i$7<*5{M`Reb|Q|YJouflmX zat~{Aotzu>`qln~%PmYUgyMD1D1hwbL|!;i0DBq~00Qg$MQ=4betVASvIL%syIwht zrG8ak&#jobgEl7$nbU+tzL_$KK+Fc!tK)q7RmC=dTQ*%?wd`;g{vFL6D6iAFh-42< z?zQXR5S2zgDa6-Fb@x4%B6$mY4X5(`33OjVJM560tYzGgr^1i#V_ zv8$irg4k4_-xf{`opjyi;1dhg&_CNjjwRfj)8bvlADJK?{tH`PvUqo2hOoo`R|xZc z!@=sG_qoA?us~QyyMBQE{aWhIhMs>jd5S+_Ue_bAW(Hl?daHNy;Z);X`Q!nPVEy{) zJ#DBk`_7Ofa9^}}- zBJD{lLvwYFjxGTk++Uys}?)#cj6M zT1_oLq@jz)?AiMdKcP*IP-X8(g3(v;cyj&Aq13KkDT9nor8>$};)5smP%Gvf3T&(J z)X&v+HP%gXVf+?kM}%{N2>Xf3Nh}sxg(%=SFD-Rs#m+)L>7^+csFvl}ep+6RoDKKX>X%(s@y2kgyWps!NUZblo#DjCEDFi2{oUCE#PfMK@e~K1G0FVvj{2IB=`CC-$DU?h=p2XAv-IdKEfFrOP7%GZT;ICl?uTfn*q5C|9e*Z4jEyV$v%p^$$ z^L^3*`9cs}Up}D#E2Y4G9Q%FPgM4lJ#slOum=%(mG$N}_tZ^a$>w=qRkJ7LXH(!LS zEw;O`YE7D`H~8x-%kyTUnXY^ue=#uEUc{<}o7pCBauB_{4(H6ZPzoNi1J%Na6W}r+ zm94`W+su{tWPO_MZIf>l%`z+TxgBcXARk7>A9xRR2d-mADRTCL;n^9C2^0#AiHo4q5-?KR{Uwt^voP2(QsSw4YZ`1zI8(gG) zPEbCz;EkL0CvzPCc;kf(csAOr2bx#~%JKFBV(5ukZTk$t#Im+gUg6+VARg8yp6rsoPyc?R+wmZ2 zr=mM~`H+!=r-;NB5%S{HjKSK_HrIzeWC;K4c^D$0Z|eN;wc6fE6}1<%H`Uu`r+#@u zQMd$iL6)6d%%tVLOH;^GxsO#n9U5yJiUWtOV{y$MN8x9ll&7a}vwRd1JTiCmPFD<4 zTisAT6hp_2WA6LQ;(h50x)cUO$svz(W~=J2@9v8qS5JC*j2`!TuZs7?AarCp=$TK4 zi^VV~EVuMJ2h6E;wORX;R(?Uw_Q|2qwbjG4(h{HVzr}6bgPBgfe_Nf-9y*-no!Q61 zV!`97uoTv_h6*+V+nvlK>qjBni>61%n+hD8audlJEg$SC&IOCg*Xq`h81Ekg$v#XO z*b3Re^_YR2(ntDS8B2_BukM2SAbqxm6eiR`R+84XtcrGkciTcn=8}ufh zwHqvTB__9gOy>B;L|I`c<-!AZ5jl|dTqE7tQxrOi5$@ZopLENYGSK_Ao_uOL!Q|!Q z`7{w@@Wp#)@6hn5FIgi0YJN4>}BwkQRz*h#YGiKav32XbeWh{DpN`l*=)eJNLvd-U_myssfqFI zfT3Sb)m14208Vy?kLpm|27_-re-qOc@|lPdWXlk8>zP8mx_}3!qb|i96+M+pp%-(a z)Ujcu0-%lh)bN^>gpo*D4ml2%E2gqbZbJNTTz?}_R?Q{0@A=78AI3UVrH5jO=}~|M zlU(xO6qMi{h*_r%qcb@nnG7N}#2WeK28g?J`?IX9x8?-Xv;+);J3wremQdaupmtk}qG`fK05K$~k$EdyrYw5%v`m#u#Ss8l@G*53nb7$P& znL&T|`&Y9LsnqthmSRq<enP#Ml~xGh_aN_JSUZQPp+~9>H*Ra1#;=1IN!2uvHd~GPAU5O^|YsD zCL-;|;!64J%L0_712Ar5ySjd!t{WO3fj&WHaNpS4uv4f>br-dm-V-=_x?+_%i5(3> z0oIh6^<(|8=;7wsr=u=(t^MJ|;9c+*WMVoTrJFRE}wIrA!a(7nPfg-J=I7c)# zUoFA%FO~k3$}0^=NZ6h`K<(}oR6@y2&C}FAlS9hd3wCBikB?v z0rS{jGqzqCn>tKF99lc68sb83K zH2hD?;v(E)*BS+JTglCvsa9cFN*wZc&18D#pEP|9{dd#W;u#JON*byR-)ocUxnDYP zLoNeH^?O;p;JLK0(!J=#W?@s_Q7l4djy-*4#`S~zKmZT}*dDl;_9IO!j~&uhO}u-G z78t&HQB^3{MUR^6!wZa8FX-^5N_`D@(d|3f!*{{qvI0phEL~Tvu@yp3g|##>z9WhB z=PsU~f21&QT^KkLxMmi|RG{g>XZc;lkIVW@;Amfp55DU{SaDFcMQ|{dRt)rl&IoO4 zG}SdeyNHDZS3HN_xWc`?6+>wyKtaIW51Or^eJ4r|SkMRUwCfpncR~ z;Qk=pl=RffRWLw9-VTsE6zb^m1}i_#NFU{f!;;q7&ql0%eyc14Xk&M_QD&rcoU=K{ zf`xD*yo>cLcSaXK)vC{yAR7Sx)pr6EjZ!Lf8t;PViDAY{=8+8lsfeZNMk5r&FFYqG8 zuH3zhu;7*v+^PM*+OEpj!W4<#={^7uj*8MZSb#hFL+tiF6lyW}cj-7@1|y?f7n__t zRd=#SJ}cW(J)S|vk*<+B>z)r{AUM(s*DcI>WtQ`vle1QKgYz|nKA5g~{)b&Zqm?Kw z_!HxpBQd4W&^~c_4fxfsl0TBtoZSS3tb@t(Y5lh-4XUg?&;D@yyK_V7(VScppoo;k zHE*%f=-&^!cgc8WTzPWwbD0g02@1o2ud-XFaZE|)+msq^z3kinhnA% zZjtWQRp!MGJ-7e`Crp7&uU!DVG0szHcal(D2ZzbdY%zzW)i22T8QoU1g!>3ZVmWDI zs!opdpe`OIi3~fXw|^q6fK|=p=VN;S#9@EDODSQT8+TYu*Ay7!#@}+HszyJg$}TSa zx;Tnl)NpY>OBJJK+Udgm)PAHtsJ?{|@Mz-?3M9iO($^Kh0$r{`vv-H-$`TVskkTk7 z7$~P%F?uLX)uT_Bi9df1BZPJvq~^I{0qFkTOH7I2xMArlo?~ytl@vN(!hateAleQ~ z(P`VlfxBQw@mu8jbD*Vg2@f}NGH}XVrMkGeaD(Yj7$!*eB z78m#16@Ws}8|X?csy1(4zRK3#`@T(9MMy*I*GG@6YEQvvy5(uLD$kh{e=iR5^#p17 z0^{kPE;$=GiEaD;OY5oeDAIJGlz-OEWBK6U=@lUXfy(MjU>!_1YUf4EWT?O#lEu8> zH7@J0Xi>MVmxMH8p0tbm;ohX@H4DdOZ6TZ{c|pOP|E28c2i+kgKRzem_j?CmO+%0` z**^mUk5Ic(hZrIKiHA%3nHZ7h$t37CaDbboE#HH;7D0R8Gsa(v!M{zL4tZ?Ka1 zyHQobuD-9FFQUd2kSR8*?+4+|TY;NoyYO^V0Yu^lQPxx6JZ4l!|K$IKX9AzAqt%5%!LlF#OFKv)~O{Vrv_r6v$V z?f%udSd)w8zWi|oD+hrt0I|%p-_2WtVIaB`pmJ(oZII*D6RUuUDE-xcF_b0oMPC_3Jv3JqLwzIvi$)zZ zicJ~|b3@-7BKhuF97JEU0N7kBq-a>}+>ucb>+k%QFUYZm0LP6tx&TwS#SKY-+NXQ* zM+X1PKu5kxON!;JEDPABRI|!WdJai8sxQ6Rr&EtBfkdiDlT6w?5%G$?JSQHfAVN)KivF6AVWP)v{B`F2;OB2gDUWEW|CvmalxYl-F z%MXj9bYooxVx16EF6x^&%V#9_*u(9ymJtsd`Be*#kD?iTF;$7NGUne(B|KWu4wwsO zcKlGb0Gl)$2LG!o5-}z6kEZU(V#m}B`QN)?h4Oci_VB2KtwyUbGkwPHtw=M?@BG!F z&r=rQAIoHjvR)GtS$aLdo^urxQg#4Lll)tIfSg`J-k2kfhdYMI6)<~HoHF2u)WDM# zv)xZ|u=8Zib{Ual1VRf=;>4&{cI{q*6@cKuK-C~&s0=HY*b{ZjgqY-t6g;p=yDvJUWJFBX3!UPa&Quf@OPl=?78zC3gV}hE0^k^(hrygD*X^pOqGe8Z{g-aFjk@eZ2eSh}(adZy zrCu8ts4R=?z!XC46cXEUl9)_Y^9CzJoZ$r7!^Yz&c2d_s2A07V*;gr&hY2H9RTG;> zYqT9iEQ~GcS<48`$s_lT+XubfQo1&?)h3fiIQ#yVTm{iv zD10wn{;+GDo-w}Avv!&P-;zb^t>hdPx+=4F-e7DYHq80|lj>Z9c866LK4iq+`t>UUdYy<#fiPrQuJ0up5H0bM#3rzN zQdXhu^aFQKb)qw+W3tiM^4T^X5DVIlspV~>6?7xV%sF|Bv<8gbn^DW;WQP4JI`V(B z&s{t-K*|iT`eM4Oke)*%aD4i{m&bsNNh`Jn%SC`-`VXV}B;T~(7Ij(yrADqgWoX}K zBO?W;@f{2HwP})EOgJv4lfDqTQ{vhKFF&j%nCJ;}-hCBiCsC0uQ*sa2^1G1VqT5YW ziEB&MQ`Ul`1KL0BC(lhGP+&nKPsg5(4xB)#6G;^15jWm zWLySh9U|xcjv-#TYicH0?ucv!##ZkX-Kim?Mvkn`j^U8O6RPFP#Q3f*e8qw8_13R5 zu{F2Qh5OJhezarf>?UrT*^f=SKa(pACRb_Lj9FY7Ls?R0(1lvw*5$>L7-=K*I8mmm z469yI18UqFy+)Ir{~~a7VPs-D1Ns_O&2s2>eIyznv&c}=SY0l8tBWi zd+*Y&nk$;PhX#=`f4!=-w|q{DLp>@-d+`@a>Kfbs#Oqa$|VWEFS*Z!G;H zVEM4+04#QTkSQhYJeU?LN6FjDyVU@?xp);dQ)XcgKS;|rRhU~n(2^NFn5!6 zRIy0it9#$E=Ye9Wz>}l|fB)|yraUnUM8U^J&hY6%WU1<)G z0gp|YF=ceE2zR;ys!kqs7K@)x`M7nEO|mi8AszxqwT0kKx2=1focMc%$ceTtt?uByThtim9a-Q zj5?bK6ilrzgQsqe>^;H$XJGNLjnGcO?F{^B}arT$E zCbG5?5bOnxIB%+b>aJi_e3Poz%|d$tBsR>is)5Z61$BFI*qiowoou2gtg8ScLu(i; zhu!rgLYgaa6AOA6k>{shR4DIegjB5V((e5&VaE@cq~aAvLt-a+ktS0lw-5HSwxZ5l)5o1Q-f8PT=f_8*LkJk?tMp%l zxkc%SIzbciS4%GF?hB9wl8+T>)gKKM>@?AwDcRI+22i3}HCev8SJ}RZ9vDX|&6Pg} zSZ??qGCO^u)#M^p+2T8|33{Gy5T2)CzZ$U297&!}j?A)KtIP|qyN9WCaO!OXTZAMd zGWXeBqo*u&E^Om*7CK$=3{MBjE^QgxdrQOX2Ki=xB4OC*_Gfu$wIoa<%IkXo3GQp_ zCLqBvtcEid9NF$T6u1{*;{aqO8d!dGiV!=TjVN21w^unfVvoBiY_84>w|s4>>b5FK zVTHx7Au7P9_Ispg7Mlpg`@yr;mhpxrghf=k#0PnbxK)%Wvb;6p1a0WO?8C2-cO$Oq z%LvW6ngF2(@qn5EB7!jtfPiM-^v8YDQ=Y7%@JyH4WyJN~!3br!2V#Jr0Yv5jFt-uu zL;4=_G@cvp#m)}Uc!Q2mIL`nXuE<4o>BG)qPw!P6D~GfC4~Wq814{WgQZ`z|r2p=1kK~v{VtZ!X`)24CrM>s z31VaFi`EfUgjVe=jHOkKnK{JpWeq${2C%Bc;FjkgrPd|l9ndZgXc!E{+aR*{r+f^6 zWT#!fXHrAUD)F!P=6=-#7>3?IyLBXyU|X5Z+tR4Yx`UkGNQ%1qWsXnd=)f?(WvfOF z`|(pJl2hkr`@3ZYUh*#MlXXw!0fd-vlFAXa-`&0Tchw-tlpHhOpo&E!DKqR~#D6xR zz~>Ee+E}p8z+6vy}XuG zlY2D~Tf}uoOF23exXwfWAzS+Kddn3D^Zld#Tui_r!_{LGpt zYq}Jgq+6iO?*ji_7Rt#at3&_>TM7NwlEoWxAY3Nzm*iIbT~six40TQwiHR6xa8P~@ zI%E~)IhDuG08@^#ady;sfoOSj6&HXCN$@~$duVd|3Vuc~+O&VM>ZK_u8n1Nl=v<}x zv)uv?^&YU>#(FtLNl96ccm7d$UDM;a6ZA_Z5~eJCHE~uw?_XdK>>*4jkPK;bb9QCc z0IX>PK5>hv6TvgFgz`myG>PL zOnqpxwsBT-fv)#eo$aP8>E!yh6}IB2=v27s8NM@WQLyMoDE13QjJ|$QtCqn(u0Se?SJ!*yC#~7SGN3TQPY-4QBGwJDl zubsvRSOtdnmW&*+-Xl@w5l?eKPUO)*VdV~FnOQJ=daN+ancRr}Ll53=MRgZe@+ryv z$=WcEPY2tIo1yib>$@v1&>%ix(haY@lH`Hqg8F=#lWAOXf|3Ffyt-7i)>iRXQ)))g zQOw+I8RiurB9z{$cjPZ+^$sm6MUa)GElGHE=1hJ@EnR3I?9##So~NcgmFup1Kn_S8 zzm!anX%&p~+b9uw)VJ&Yx5{jJry^BBknH_OG+AS6ToAHi#XGa?!W1rGiga&I0RqlH z<*B+}e~w5J^(e1?zK|`DwOnYIRehJDlJ=tgim)xsmR))|E%av#UgaG-2?;&!iPv;a zgX}C|KLZO+lhaYV64*@5$Sh_9ios3`a6KT_Rf)F_ytm`07LKRR5s1CAf<++HVd)AT zLjRxEzB{a`t?3u_pdLUuDuQ$yN=K;@svt`5MY_^E(h&$n1Qf(V?>%&a5Q=m>2q+MG zXrW3?p+kT`;O-sITb}PN-@VUs`HQr**V=pLH#5JPHLJR~()w4ekTC)v$KqnmcVJt` z;Wm36Tw!iqSpWxygfEwf%rh4HmYJ_k(#MiZFN;1Sd>=a|e_7vNE$>Ew+!iHnW&|VP zm_AoTocA0Ah(?9fBL0RM;Nqz|1g_cD$L4{g zN0G%u?qvX}wz~(puVBKdGb<7$3&4G?eA9NLy$|p6`+!xMxK6;LZ(6e0h+eAz{Mj-j z0vjoI{^+eHOpszz5E|7+m2Q2dV?V=27MK9vv|1Furs0W|Ujc|2@M^e*KTM`9I2@ z{uZhMPHUwVM|0x~v}FoI7edmSNq;38o(tr|vCqpc192B6r7=4Q$r~0oXJcahc{ zJh0>aLL?)Ql)M{f;8Z*)BG^=ncizdQ*#Q0A0_-j=d83y%?<{Wbkhl=5!9V&2kcCn*)aWj9X2dfgpT0DEIPw4{NTsW& zbVAc)#l14AY5*W)SjAZBgKiWH^Ku(&G-B@yZdz8MGS-o#h zj*E)QgQQyS6LS_9woJ@qOKqT4>2N94 z^@N2|*rh1P#+HTTCH!4wHCC(tGQgThJs~sHx%C}(!)ly;z_v7Xu2tpg_^;~b$M#&( zEnvR^O*m72iE>)TM9G938Z$2yeKUa1l>R(AH1LgZHec^eO*8%58B&uGiJ3OhXCmL1S-A4*nK$nm+a zkaJnc;E($^KfkK0w?3`)Q~8vO98hDZ+VyDsxBJ}Qh4qDxv@TC7Fs!B%B&jnk*;6e& zXhcOL_Eaig^k&W+q?_9mw;F&SY5mk#^SO-R_b|y!F|ytFEoR}9wD#v#OR|-0 zGH)>z3wV>A_y?O-v;IImBHXkgUnP;hsIgJ9HZ~WLV%GC{-FB`nM#YQx+3}|GTMZ;fl^kE*=}A{~DK|Zuuh0E(f{V{lMqCW022{%A9s06Xk7> z#>g>{U7}!o$-e<6jl^6g`@^Ui=+1vJg%9d$GbZU9-ySmf{WlSM#zFU3(o@`l*pHdX zJAB+)XEClWLtFdqmAvlKb(~7qbxWGrf^yWtPTNOiEyxp&*BZyWnY0y8Wok4NuA=VP z?7worR0&K}o`Zr){_)c~aMI3WJ-zsOptq=+p1yv)3%+aR^>k4AU2|yn`0#MtMOH{2 zaQ;ehPEL*;DcA?PG52{Iv-ScS@PI|%-`{@@0^I!IG&ObgVi>F)Rl&^6%vf@Ebad1U zIJ)|h(u@*u^&w4m*=v!a#$z)cQ_w)wpcz=db6NM7B?;ta`k zXcW8|{^8_uoIjqBy)lXpH_4$>@RLjAq;PBQ`2g@&vs%BAF>HhLbmkIjar=j@zZbIM z0UxCFta)g7u0HdKe*qz#u)0xC{`Tb%jTqhX>^C>s?pZwwubLc&IU^EVp6tEz$8IiT z>cg`uW?d%SWBA^Hj>iT>gR;53T>-j{6l-w&c2en3U8*MshQh(nUY(HjD1qkwGUM8v z9n4U=m>~OzuPx99HBnmL=ENgm9I^75sYehQK8IrAXG6V^H?m(2NDR2p7MWj-+crde zw2=vKxD3m_(5B_#AKOt~sM&hgd^8{js;me+mEh2?I>1bO)5LRA#ayvK`<9+LULm@J zfGrUvkA~v1Gy{X{c@uTM$xC_pB5OeH`u!7rvwvvFRxq;$~*0R^AS!LiJw#{2B~fWw|y@W+mJg-WVAh zdy$A<3O6q$+Ky+=m1v!~WcWwH9qIxV6Os28*D*Q;sW>J}DrN1@3hDE6-|(is<4!#F z#fx#zAn^8h#Y$G(tFQE4Hrz@Vh6@85f25rPwR6@hgE}BaS4%4!jIniebS5SzdseN2 z5EEF2>Yt)KOQxEM5eX<67Cp}|=H1RnWjOUvk@&5;?@^y{bm_n|qLGhvD98hgDIQQr zGVTLTO}^tO95V=0;T90+TU}Tw&1b;rUHO<7?0}zhl}>|64lM*3R!7~qkn)@xGTA~B z$EXR{Dh-7)rNQ+wt7!^BwVl-OsPj0^@QIQ|_Ik z1Qaz!E@Z)H&sjo&L06@~c_86n;ZOdMk9?|R;krGO`{cvB;$rU3^wiYU;?h#jsj>Kh z-@miiwH}>R*7Dm*areySHMRV|U69goX}TSH)=B#s&baMI(Q}mR1IGA#OikUu2gy z!NbAj$_~8b-aw6xGBkjh6ADd1$-Q3%q}SiKlKloYh5t@x|oR8M@KmZ;8rJ`<3*T5sy^VF+HV{o!nE&vm+fo3Ea8f?KK z>Na#|jZI930be(E-caj8ZG^6btsSo&8o#ckac^D;)=t)2l-xP^_egr2Bb}m&4|_D2 z_k2MCEF8Mo&QR}#OURIhVvqAc5t2Z~-2al-XEuJ4W^{H!M5dhI{4f2?)U#z|)ep5i zfQ^p?xCf0k(y_WIvY=;eCY+>8H+!W$miUc>5Ix_t9Tp<LM2ReDycb6 zZhpz?c=u)^|4hwn3MQifWfPy)t3-OsTr=frrASq+Lj^{?bZ`E}giF}FDe!+#y;`V6 z^3@?27Oxa1Sf@VR*()sf(BgSZJ>qCr`6Q4_IyB#}S|pWroYHtWxk7h{Z1#P&X-olw zzbjwQQdK`z(EIM(AC5V-j1)9vI^Y;H-ACPM6&zqPkk25?EXclVS?ZwufoqM6#JmWdIP~DfP z=g1>il!I5@$8->2E{bZLZ3f#MOjJA8dtzd`y1Q$|CjeOV<+4_O7Io3l*DU6AaYaPY z!A64nlb}8+g>Y;&Uij)V01}myT`Ql7od_wRFJ}e})dWUL?##kl-a}1j?C)*vo3?C= zZ@1MLek-&oV9+z4*Q9Zr_Gp=po6pI&&8-Pseo3xuzwP@!Eq8#Rz=H%%E!BWdlZIiI zIDAO|^7an~{mRJ!Lb_*&W*O1%D28l|pIshKYFY*0`ljUsw4)+k^=v+hzM|RXhDwkS zZE(j@%yLx;@*r)t+o%GLq2|<;DDXF2Gt8ECm%L(MZ&uB-YSSWLoZj8}6uhr5e){jM zeA3d>Tm0hT;h_T@4-02*5QJp!&ES3*%(#n+h`@kTzcBc51mG%h8p(Y8(O4fqDt?Rq z*+3D652cORRriU&&9}{coM4mOrnB&rYA zF7>Id`&7-`qp^GoPzV3R#vAve}o6{Ey&sIfuz*Zva5SN?-*BmbJgRp=2}myB)0Wmndy z^BI0e3iY5D5!|@_@4%$z_^R76+b({Xf$uFvnEHND`0{E(+ zw;OYWbQr4AzI#9qIt1vIVGFx^msmnA^?%2vK{|)JACj;b+_3M1aY74oso7dA1HnAzZzB)sM70 zDgsC}5{bm0J4{9C%fMee?4p+tu^pp-H4cf-|Jt8JFCX&g!0LJxCx@I7Jz$Q6e>lnH zWcw9_zN(k3Dm|Vn%xNPT)x3iJp|K(B;|SY&@6{B3)B3!vtu5#GqAKjE zHPWeKk^(;f%VJIadf@r)hg6}!<3zoNYcV1>7+BXddaII`#S`3&mfD!g*|op1QANKA zpZu*KFhFJ6!=RB7nl$xD6_zS|xGnxQ4l1=r$5=eNRqVlDiw31XtLlFS0ak&60tzpB z0z~_2&MSjhl9$ziKRi9;5cQ5r+JIqr%tVrx7$99;!e=;WpK%wBHzoeby*=lKy4xkr z7YH1tT_EYdJh}W&aR8)ugUjrdkpz5mqIto9zsG0XhRzX{cx+08{v~Vz`)pEvR=U6` z6Kj)`le*T{FkA=xo%#xC&uEyhV#;>mEb%yq8!%!JEo$!^$_ek#) zMKCG2^<3O5%ko0_7~rIdR+YG0AuzN%)XgVP z%~)ey=aL_2qgS?F<`t8$Gj6%uYz#GFmMVyCQi;iX8)XxOhb8H^^roXB;WhL0a@O?^ zvH{P(q0?#fyRaFs(uPOCO6`jb?sj+Sdb`PClax|9iicX;k}N82h&VjVj%_l+CTa1~ z>)_{tv4hI8iTY*(dWc~yl_ozP>xu4>5jjpbDSvw_yN8>to|OhFHG@BVGX>3qZg^^4 zc}uX2ydVN`(W${frV;);1J$L_(zWI*>h*0klXra->3Ed3pHA7b9$yhLpagrHk0ZZH z8(pb@2CtxIUu2I&&pl2+uj(QhQ~#RBNV*jyMjE| z9xH9kT3!8<2*(G}K>RN&{l|VV^ci3M%^xN&zEQoQO#59~a(U?|5jExWGpbi{Q$e>k zTKOV6=jHlhipz{i%y9NnM-zK)fIE}C1%Qm-&z)xfOncjA)vx?^rnB)iHN#RX%+l)q zw!;!{x=42%yrNEC+nvxA7+~?(;hx9~Cx24MjdlwmtYV!ewr1N9-f)FFI~HpigFQQ~ zm76NPq!b|9Ygkh;l`wP-Py_s+NBbI(ekpG7TF&-dvnuCLP)lOQ32%Isc-f;}uAZ>l zG2_!?SE%KlcE^E5+vzcPgRl0;93Y$XojfmDOUmj)BI<|I4~T>?)jY@rlhu)V&1Cg_ z=MuR760ZJ&HNjsu{VdzG*3XJ3VwQ2|P*aJh0e`J44Bf&5_j8{joNa3=kd+sshOSjE z-31r>-$JOfacQ*DEF%(Atnd%C5p53k_FN_rdEex2Y(9GoYVepkf98OwsHm=)+1eLZ zDAW{aX~_O*Cq2&Hg-I*zO0D;DGXsX;%1yq59=- zzrf`m-}sN7OK{Fp%|bx`Yewq^L=p?ae=esnqb4Q_d*jn%(K;3Khc;;pbQ4-K9+G{> z5=l7NNACHcJ_%C8Zxq+Bns-yssgZAvPc_}i3mw?QwCGW2X~!Ftl!i(XM`xSHh|g%Wx3pNwu^->7W&j^Hsb<=_p1*RgWv75_ON$c zrqFx};GnKJ1iZz*yE&=A8p8PM>Is@_f(K~^*U+#|XtyekQ&Ih=7 z3dl7`)DXw=j9|vJvgya*R$CAA-%(`!3}M5bUBCt(-Jy9;kDm@Fl{>s ztaTN5sbYL$R%6D~Ew#7`sXOYmX71*-PBTQGrnoM2nq4!7o(}R-r;OGzvfUyQsTi8u zDNL8D6@eArxR)=nY1A*Qf+dxXOBTqhG#SK%IH>qL4*q#{cckZAZF`!^4pT&r2O#`O z*LpTo2V(rr!AdHUENIW=P1ibg^4TxOmqfOQ4<{9|1Ko{EQWz1@5oe6*?4XKf!1813 z$BFk=Gu*!fF<8bx(_*0w#i=PTj&N!%kE`nieC#Yl5AFv(_m*Q#Y|u-W78PPm`SLWs z))O^H9PhY~{$hoBH;m*M-9PCIGBix?;#arBAUff_?7p2xh3K);i)Ebk39u#r>0N$W5GXB66*#*1 zArTC?dIRJO?WwYERuyIMTAwrjE^hF2Q zZeu0#;0q$uZ8GXGQ8(!j`K)h^%T)S=xp%MS9Kf2r0xaHdC5=723MGV+$5#$`&=dJh z*fj~i2bu-(b`!^)nf66%S6O3wWK%GwRq9`&{W5r@=LhgRFNGat+#TDFOXp{SvsVvT z77_?PFHRUcZ>Ku6I3)OaS%1Y&JWDVfC>t%5p5dNq%;6DRl+;;N4tMJjb>Sx_9Nckt z6kF6SI7CiN-*3{kO${?nLPDAi*SX9`$LH2f)CFtW4a6uYYC1;+DHN^<3}EALZ;NMG z={*fV^?KaZC@vkH9KN4B)~{Y3pWU=%7;l>PS=8=M0=*#9%s}g`QaUd#9t#=%WgP0*Y=$uCz!B7Ax*OHfeT$C>dQ=nn!fGuuc4uUR_2IUkth zhTA}Ny(?6&0Jwg3I6Kvt)}t}}r*)W!b$uZt>_qQNqCE>DIyI`NM z9D3;!FW?ZQI7>g6ar5b4W1!GvazA)iQ&EwkPaflm%E zwB7UejJ=}_Ih7?#58t_?VlnlU8TG8of{%?nK=94$8>eKa^8(q??Qbt4Co$d?*WSLI z{*mg?gk9Pvtz}IK0K`)pP@U*qq$OW5r9QBb8?CKbwkC1kYkmCXA?jg+IR!;z#ILe< zfL8_sj(@`cztCOpqk?hsF%f54ySZP17J!_sl<@A^&Dl4UIyu^YX%EJ0V?4h)qWr5b zsBrLeSCcc&S4LP^_Z>e)%)Ti|q1Ub+(6F6i|gc4@R73b6h;f+fK&B*gmV7!fD zDe8dNQgMQE;FKEe`cAX67ix9wvxAiMMvfG)?{p`d?h*lbHLK^}Y)73<3w!+;oQVKW z*QnseS0>o283o{_FQa)QSUN!QFVx=EMMi0{_pB27zvA@PX8n(?dq>-S3^`=JPWIv! z+rBiwKhCI~J~Vp3!tV{{EMCYiifjPPsfgL&Mn&yg87u zXkU|iNX{%!eZTk4!sq#nB~3{B{NH4NylbB7&3Mri__pP*%!Fhl_;K)Q3vY+LYx2*Q z$t8lE*W2z9j;lAA^>lS_o0UgP*Q}cNyK(~-!xGo`L4;@&#vO?GyiDTly_T})7~SWX z>(^+zmnKc{7Yh%o^7empt9En?mE!V274y|5BjpU}b+qcNHJ30Pud-v!{c`SVWUTy% zNPtBDad%J9hNJHs0 zXU7X(S6wEPxf}09OiA;ZyG!OvyZY7DWk#-~B6BRWmLJ@(foZq}BaouOhJWr@PsB-+ z76dfnVw_86293{M$I*8!&A*{5)G?Kfl)SSUe-l&=*;A|b$qVxm#Qk;GVvMalI%u-c z{5Ug+lQ^cCL$%S{P<*(bNZk1#gWlHe&5850VPZz()*1v>!Weo+8+?$fKD%qw4^5kh zE*9n+#Z8Y074WmM%T4~H_0xKkWi@8L20juthbx0IBx_xWv4sYh5!G3^V!SKIPhqGg^K8|&}rh?_pzX7@x%o0WXsZ!Qws z-D{RfKINij5L(WC6s3XO7Tt*u+WfeWHfSTZ7ufjg46?)F$JgpqZd?~N)SOKo zq}n%P&Rr6hDf3Yd!7d!q=1cc?!R|yun{B0dn%`Mk5*K`cWPz^rA_qy_x|0jKfy->4 zIp!@CtIkG~-QrP@UeFYcz1C>BPahu}LLpBvi4PUWAKv)4kWyhJt6b zBG@zNM_}ev2q}fJze@vyYSodN@nK5 z5o}_?^yuW>P>4rI4QU&A=wCH<(1|_c(n>_P0-FN;-Jc~b@h2rRE2`mlR34gj+#4Eu zD$Q=N%^|O24uuI3P3DoVsj$Q)-{f@;bY__h$8@)MD|3o6vq9T_knzMs%Se^yNl^y2 zMc93&St_S`8#R&AExL<0%&!q#EzzICXzb3=it52Nc6m3L5dIS6ZWn+EIwvov5L?!p zvrig#B%m>4gtvh{L?~vjWu#@Ii{b*K;IWtHUeF1xsRP^4vY7xz^&K*bICZyXHS>c# z{)&9ZL^0b_j?B!Nflk^u&L-7&2E_fQ;X?B?q6Wzgzdh{O}Z1m_; zZ2Ie7FEKw+HT@fVfcM z?g#!7AmdYkiT*I+#nVPNt&(25qm`#z5X3*#f+|WRT24L;K}>ho2aCjZI=I9xH0SjivvX;C8R?y{&1`i%!7)jCJPzFpD$mSRcNt}7 zw};;A+tYdE_~{MzX)k*rmqiGDVL$16O0R*6cG&SECdkohq3AYO|4xnbk^oxTKek{8 z+w#s%T@9i!jlKk0cbY?)^WMJ_Q)*4>NZ-UrD9xnE2sO0rr{k%L+xwQg&)E!Sv~ifcD2H|{%`N!FC@ zQD0@VJdbAq0x9s14QMkAVi#%EHHgQXfgsiKVh@N0Bc~|oekVhQY>hELJKB=QM*wYb zvGtJiA5;(U>wh)re@{dIWtsj87ah>+bMq=ppp|(0p4u35Z=S9*Cq zAb*|J4D(PxYS!8hc54Nk7^eazL_li6+RvIQkYHf8z_UTR?(A*?BxV&TL@sP z{>(r#Hm}Of&>mo|%uZ)MzZNcUSU_shNVYv-Nv$GPvCD6OC7YV67#@40hkb1Ocy#HD z+9`ZSQ<{)#RLz28c;7Ma%nk8#O*^f37um=a1X;QdD4Taa*G_o^P`>o;i>Yn3txR-3 z)-evvV40SbjCuD4^oFuHALZ`>F;>?)WT4WSanNvnoqohgk0(F) zZMvwYJRzw`SOlcNd8Ef|n!%xh=jp7FAtC^S*U7@HuZ9Rf!#~V|USn3$AcOOd9cyf| z&5pLs9@W(NtFzMR?EtRSq3MFe7uw`iKa=@TInAd|;N39nK}oDqBY-y7H`e_< z8i1+ylc!EM#*k4ZXF8G@c7zRcB1mp1ynEe^Z-~DAOa2BeD2sMJCZ6|iPeCDg{ALmR0nIzDwoOl~Knhv5NYT8C zLuv);dhPMo7W2Nc7~sY)M3t|&D<+>It9e}HPV1ih{cf@JINezU0=cjBnyj!e4y{2$ zWg$O|vgn5ReOn4p8L~K)ozJ>T9CDLOT_`3cbn#?2oq{U#uc+gHO~sSP{*OV+|K-mM aPiXz6q?X?4D}i}(3MB>gM{v1kul^4@V_Jm( literal 0 HcmV?d00001 diff --git a/Doku/images/visual_studio_debugging.png b/Doku/images/visual_studio_debugging.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3a2be20168ae17eac1c609d26f6baf18f4bec1 GIT binary patch literal 85352 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

    y; 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

    ;65z2XE)00yR%8IEM4$9)dTCb)kZ~hT%gWPfb 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 Jp`!Xe{|l5X;Ise$ literal 0 HcmV?d00001 diff --git a/Doku/images/visual_studio_jit_debugger.png b/Doku/images/visual_studio_jit_debugger.png new file mode 100644 index 0000000000000000000000000000000000000000..729eed224618d471b779d0d3cbdbcce2af354e6e GIT binary patch literal 24296 zcmdSBWl&vR(=EDzV8KElY}^S1hv1&zB)EHUcX#(-!9BRUyM^Eo+}&L_E_adVectm` z-Fxc%J$F}8p?b}=_L@C=c8@uFkPsOuQIyxXuR$OXiny4N90&v*1p+}iBftTc4T*kI z;2%V5F;zPd2=&*?4^$itDjr~jw-=WbhF^gLBjYj!ETpOaH3_TOe{!%lwz35kmJNvk zCS-fSBxGQxXKP|@Z(?N$!ayV;1MII~?1EO-F198{#`d5Rv>`6Qiu%`TYoPNol-SD#YCYeW|c7RId9 zZ^c5(w(0yuBbw5;|o9w=;-LEa2FOABbjl(7@e!^pFKexqGrQ zRz$y?BFrB8kmHWD+|R7iY6*=bn@<=lKbl!zP1+7Q@WUH@zp&GpFIK5A4|GYF{=ld5 zGvit8l4#}oGz~ve4qokf{gKFpdaw&GbrOM|x=AXtO2aqng)~r0QYVY1!&fC+cc`uWmPH z)j1{K!ONfEi@KBi*oSj&=!OU`PVc!jVIb`#Kn`r_z0M|@O9Y8Q%@Y~w==9_6JqH zo|dhZ_St}Kt-FL8q0SQwF4Id@er9q+gG84U#W>t_K*(7|Dx8dwF557V=fp->Qm|m(M((>io0}2~1wDsI`^aG)5$~ zK+&;UX(Q14Eyk4Jy(aLiywWLuj^+7`=D>0F?12!}jUMy$t+3>Dqz&507qFTDA$1*Y zTY5O+6O!^Y?iyhh;$XUb2@T}!+5piQL*f+Tpq7Z#UQ9={(b%DupL{O^qNPa=tg>{j z&J~yNX)FYPJNZ?l0Me85t3=HrWK+X$+f9^AXOlsvB8gBb)(An@55Kf$<~JB-iuYAYx)1lb!IS(V7!>3j)!Y;;g=blqF1#^4M?-@LDICxXsKG+@pl;Zr@ zh)W(J{#|i7SeF=29;?M4$%sK`y9#HQ{~oGM^Yr5eVa5mkuF1XjZq;ih6S47ap8lxJ zl|AYCFW&}mX|2nn-7M3EFX9kfAIqN5XPEHhS-|Uv6XV`Aa0@ja!3>OecD3M>5BwdP zp@ikZb45E?HO<;xV4vrd6#?5Bg`>3J=R|Mh4|DYl)@zcIrN^yj6#U{A_R|kR{Ii(Gz1i=fsZ?${2MrD!9=3r37+0 zJKSlwU9tdm)Q&#;A8307{dlf~S~#cH`@xx|Vm+cBQSEiZe#vl;-jd(^J*XTC^pUYz zpWjexDN;Vp><=xzeqU$*CFPW$ofpE#3Dr@Oe0wY@#kTOU#B{B!17Aepbb=S zZV;S1pSH#@dW{G8D)9M=WBED3tGh7p*$?IU$mVM@7ZcVkX=qvr(MI|pQOCl2W_P-j zDmbLgW=#fc6bc%KMCIq;1C@xz&_>5cZIK%;>8)_qtXP+1E+mY&?&~LaO+=5nZ{D43 zPs_Q8?|n)PTp-ZM(XNDu-}hN*>5RP&RID2`7>}&VjSVjbT89IBCoR=OzY&l^gT5<1 ze7E7iw_)8hxQ35zGRBev4|g4mPXBydafKfA)V^>lc|2e(BFegn3IBl9Wc^gS zvbF%r&vtTayb$gfq_|YQV*TU#bxZAtWti)cdeJk9`W^v@gASx~qw5wYfw(`}SdV7rSTdl!w-VLw$jg+q zqLfmr;I6kkyp^68%YZz!HkyzPLG#5)J%?Fz7|5v0Ff3p&BQTWq!ZKRwg^sLe8pZ(a zBr7vD@2l=bbAT#Vg=vSlBbBl_qoR)ewKyz3sx5W$BZRMbzD-reE}`kDYC}E%vLu<0 z-LU6S4{o7GRftRZXYLp|;d;qKG{jBe@$|%N(&M{sT$XkUFW_;TR8~by7GHqC-c;SC z4R*qA#|nK?=zKfB_eDOvE(Gbefx`_BwO%vKAw49R3N@rHJ*Hfioca28E{0>%laxU2 zk8|&#cE%_>Bc==Hu@BEQgq3gi77pV#`KmN~PKvLVNtu1@k{C4xeMze%xK;GjirDLzb_nkK!$GypYw8)>nZq2_!mIL$97gOf1lwp25t&*jxX5PyA2u}N zxbErsZ{yPM#85@v^#8?hR8LeeVg{=SX)CqvQGtzmflx09PxgW7H8Dz1ISFh8Xw{Ab zKX_|t4w*Ovz-;TI9KrAr0*ua=&&R+8m`Ycv923y()K$3(oKmllNah%CEQOB@82Gv08vk43Cd0nl-x9 zoSh)Ufi3XzB|SvZAUUgDH5`ujpF<&VAo2mhIoZa{f9Ho|RyAZil700&Ai#{?L2yf{ z`=9wmvU#&KP0Ujz;(KG#zBl#!=V{?G8_0a@NZ7SLdOxnJjfVsD0oV_$x!3Q{J4ein zgiX_MQ6juivU>qvgIS<}iI9dOZt1z#w2M~p=*k}W9G;v+D#__2G3sw zY8P$dAq8OX%V=q(POY55ZY&6AR6sz$nAEs}rsmSmf#S?kQ_Z|8N=xkI_s0cg0eX5gT$nC44b9ofhBcGTyiDTk?_Jd^%|qZL zC4*GA)3^$5!!+0>rt7{vNr5Bq;zoVjBWxvRHk@s2`_5hK z;TPom1|JTJIb|!Y2#(#B{Ne&9f+lQke!a%TKGYt(OhiW?3ubA8>02h8>-MW&Y7hSB%>2ntWJs!BF`&i5Rw zRvGGpkB*KKEz1Kh_gXA8o-%uN&wO*zAycb5(2G!4)PWBFe3A8{@dMyQCVNkHQHN4s zSEku39?+U7?8q|ZOIbDUdhRa~PMte$NPO&5rgMadq`!{}oC?sI#79cIpOf`?o8Hwk zn_O5;bhKEVCnCJ;Yk)e$`sR!#$sd1VX zMZcINn@G#>!?KTS_m{+0!V(ih=vCw97Ck<_0t0wXx^=-X&S8&(Hh*ma)qEmpCr{zz zN=#7W$-?n{w!6hC5^E~U?W)TNsj`A$w5~ID!&oH z0fdq<3E~$IfQR*!-oszG>GD#~M^d%@^1A@TIHZ*qqQxA244vt$XTamM9=KHt+OTT+ zqqQF!=r7%{T0NDL7+RFJH!kB?4w?6p$oCYU|F9oXuwb%;&Jpj7nNcb#9Pi3q?Wl4p z#`W_qy8;h>A5`P8E>nK@afYn0^YZJ0j}4AuGH$dgqQarw-iTuDfSbq}7e4*rFE+2! zxyuk1X>~#pCbJEto%cTq{dU}QCm??P2ah>r z%9WG}3PoerLg_z_No{V9Mz`a~R8p@Xj>@KCR5421po{gy%TfOEq&sha5*n{nq0Dv; zFfCxe%rc1!bcb3hy!r7}HF#eR!Xp^BtYltnm!;dh-u0sy;hhhN=Q~TB9G0$G=KDme zyH{ILejf5mvq0i9%eVFX#yqe%5cZ7=l_sD1vQ9UJtzArH?g|L>v{+~sm#6g>&d%Z2 zp<67%b&&y!?>IDeg>R9tc+sEIbBrMx#uG?;J`2}#b?n_CZQQyyngy7}2XACw ziR?(SoQG)FFx*fiSMm^W#!*%t>?urvy`=W_r}A(L`vp?KM*>0@qeA2FR4Fe3EDH z)DS|3tGtx>(b3`mXPD2J&jk zw(s>&^IAL(l+1r%rYs&G`sxsv6Bk`Xm95A<6zBUVPPADzE+sVLm~V5F;j?NHcuSFY zmr4pQ!Xc~Cy3*dJ-VPsSAowaqMak%l94fPga?nSFl6i*klhmH8!tJ%i^l!R}IIkIZ z%2~@|w*7(W>wK{$-uGK*JNI8B$Ihl6kAsh#bckEAHG_glne?G@y4N}qE5%Q5-5czT zKrl{la26{By<8~L?)V3SNn<@6W%k+n{pikBRb!sIX_pk^lL)HRrBTY%DK(s?w5c z1p9c?6leaBNc&LDry~QopN(ODEXWQ;t3e{m3t9T!Pe6X#1^xl5dTC9n+J3`qwX_4mN$kS#iC$P+~s%a&n}USGt6AuwQ5q7_uRS_u$CKX<{Be!KbwS$*;|F$RbFdT|$nt zRqm9%p+fm4(ezssqDX=k{)PKA*)dYLesFeOOqNc`7)e=NZbEl`t35Qqx{iaI%ZN(ygRwaA|%EMxghgBtUMv7%z@ag^o3)vxQi|j7Y_kIz4P_ddw2I$Owj5EO#bPakG%8NkXN{) zM-5)DnVo z>5^%gVe@Lfy`R_$tRg}rxTlPkQK7slRJ0Hk%#}x-L=2E@C6o*HxeqrA;;P>CI=QaR z)_^169yd(muU+dO9BEzJaeBhmigo#b+pYOh zS}>)E4V2^+V;tSnB_58K80xPacnmyQZVYn(dpb12*KS23QcSL_l;1Zp2Y>x4A*8Dd z&Btf`+N#x=QD4&wlOL? z_p3nQI{1mcKvZ19EJA@c$oeN|1}%9Aa|BL`Kd@&tcO(`Y@{VoRo|_5sso%u1*(riFkY;(X$ZC#^Hey z)x0cM$(-9Zt|GH&)xCf#hd3dj9IRRpGZPcK)A3>_nleKN@Ppu<9u?(Xsn-h)vRrIH zM!(y9W-89by3wG#3! zIX3qjIz^}5ps6-a&%r9qad%mGIJz<{`j{A2ZF5C$1VNb1#%~fPCZOxXkvxtxS#6&_fbdcf}@ZCjHo3UjwQ<4sa7{e&MyNt7T zq7ZSQ;#CTxyQ`ms1qTZWL74cSmVX0ZuQQa$}2Yt(>mHO#L z0%7kXO%?RPFS*tQm>}*;UD=bXj><~KCTvKZ?%Z26{HKiY(p>=}M~h3bZgmT~K8-9D zA~|W@Z;uqUvs1-lJl`)rpXbfiEfsxjx|cULRoI*=!QZzJ*dNKF2i7sy0mj8xDCAR< zj|1#@sgqkpNt1MIgp`NrL6ufDngx#V1S{`Tkpr$Q(T$KPjH>~=oL3D7XKt7|Y@~<_ zMt`JO<4|tazJDiUO9fD=wuQ!QAyLjiE!hMxY?NhsQ)Tuzk}~2>)m!wQ&tKDFl7PU- zA>SA~1EQnIm6`w*{`YqrzZVZY+?)k22n%+S?FncmtY;yDmN;bKZ*?caf7H??wokyW zAnxs0^R0S?3Az=^C(Ao@!Dg(#j~@!O->b%;zj=Z5rO#dF{Ja!f*10GCNNqAj6l{Z)HX_SE z)@Kwuu;{7dqNGm0LPPxGz{~$m?x)e)KcSn$)cjdnp?r;!yrc=u*SJy#rSZ%-7i&F9 z>3@V>TO&W;1L=%J@QV1wCAwYyh>46k(7z*zB6D)c$;pvFJKBOXNx#^Pz4Fd0TkXjM z9?%`)V&@x%6e{V;^Z>p+3U%1@z&CzP#{2Gey-uD<;{)0f4)an5e(aF~>IOyjQ0p6< z*3#L$CGZc~I!*LRmFYBL%~v@a6}IUbHRE(c@{0}8p>(-YKOd9vH3DQ4NcUbRsLGw% zv&qZ_Yql;?%}wSn(;JXPoO}@-R^w#USn$2&7PQ(tH8*`#N8{^WLoCk_jM<7pmG zdlW0RX!KXIWhG&Uq{tXr*I@ zHC2}&aUu-blFHYzaP4j9NGZ_`ib=xFw;01mp-XArUF*b`87Do;VP!SdU?iDE66f3V z7GZvpT}A&)sd3H}6BHX+Wc5{c7&g}LA-Ohz#LdLDt^bocPQt>Y@E3VYe* zl$J}q&CWV2&A?o_n4!3&Iu)SP^tTLufd2%<_m0q5Ti*l${?&PWbTYEQNBiTGvxWQz zm~JBc^j~H9@-Uri4+<7CMabtzJCf}Dz6&B@EUg_lErV+QiwjyTqA}BBQa>3-8CP_U zfPA7LveR54|8n{Qv-aNou_?hA4lro~rvON#%_G^xM9nU>&u6wGUB;Ef(bnSN7YX&jWB%{32WI0>Ochof4N)VI5P(gmEJS zDd}5gE*LQ}c7GOjcV7Y&nZ+E?&-!;11C7qSS}Zhm@~GO-2z;gnG250(PNxx;>U;f8 zG6^gs)@!t0pP1T93(;wYwI=oI_^VrR>D)45hX=l)zIQNE1YAREnx+ zmdws)q2qWd5mj-ncxop6ca$AeTzlafr+w2D43^Nawysh z;m~XZM@T$BvsmTyY5Iqjw5l}bd<1InU(^@P7qb;xCaTJ@XQ8}Jj$>d|2G4dJ7nlY0 zlM(GG*Q3vzkv@6u>GdLgP5v~go%pFH{!@z~HZ4*TnV}qzk8~uG%HD&5sWd@r)42#^ zEnLHLNdIa9rkb~^`XL`s7KlFOxiPyRE5x?$b$L9QzpdWN==3lrNb|wOz|(tJ*{~& zwM94?&(GGtnI&6-*35P+EcvwB8qY9qg@rqnjJw8>j5TrF>L=)lG3gt1BkahDa zUe3dtaDCWhI}@rAm)y){{vMH*+K-`L_+9T`U_9W~WZ+c;^g=|ROpy1I6d1~T%Cwr@ zqP7>}SoU&?QyHcKQ0Vh`vr{OxV5sEk1C(R>N`9{%ek%#Z2&!S9u@RSxXYE=B7nhoY z#^utoV#hQGp>dXxgjJh~{x7W~4;;}BL+5yjb~BU4DnYJxZy?(|h0_yt+!jquM{-dn z^STh4MNb$=R=ZTrk#tUL;dHGFzHhsF#>Le@)^M0&YnazgFd^RH#h=aDBuletwjV6I9z zyR!jvG0}U(gqo2N{n&Dp$F7KfIc^tzN)3)wG*Ca4+eE;X9A#7--4@yR%)ltyx?19o zO6=T|1hOZ^#|ZdectS^~vq@>HT;sQm@-`~G9$zqyRUem?)j-1J)h*tdPLvR~(#ISOot0!k`z>pDVpOe>?m@ zN)R+`88IN~hZJf7Ac_6~5#g5-x!LUGR=&nEUdg3=X9b+{V{>1{$iVWW*L|6&IbyVE zKku>F;p%DoA-k=#`7!H4V-wrV-v&QR4*UYAhG_se#f!)3K-rDW8zSO4bTEB7t7-u_ zfo{H3<;4l-ZS@~cd=nxMuv+zuliLyYg^iSd)3z~O&eBnaJ7*ui$Cc$Qj8S|Z{THo_ zZ3usCG1fZx)aclJ%ty=~>ZFoS`)j%jt3>1AlZ#Sahri*T)X90>DrH$3y#h|^YTi~& zQhe@Ee^HB39+wX-WvmyEQ4aO~h$S!kU)qsvFvB4E{3O}+(}4a^5ZK5Sl+%$crj_+W zyAhQIf-UiSR+;cfMA4F(tLZ)}rX9hcP%Bm$@-v$QhhsVfAaIJ7gCq9UOsHsxHSc;I zn~@C?>rnEJlz)1XagCB#KYaFg!WU9Wpde7Mb*Wt_%TCTma8!gx@g<@o zCNBI6;~)n~NS+Ko1#@rCG(lq8q!%rw3C*sibJ+&FpR`c@!mg{t0+#`)UDFVgA+Y$I z92G(@q${+pGulAb`LGz`nG%N8yp>p3)TB;O zQ{!|nnn?|$xdm`HNxrjQefkbZv>#vU#AJ98AMAwraa-P#fYEIKWdq_41=sDnA1QFk z>XfLgke_gSDsj-n2B@J`TsA-Va7SuB4D6h=%3ns<+aJKs)Gg$Go6p(_$P_ymF?EaH z$nPDo3C7BOayq;@u zF(U8bqSnOzW$Q*{>w6@z&cO=SmN6{ke>85z8PoDaAc9S9>atm>cHOgJFo1A#sc3hik~R3)x4mkuD&!MhedA z0N%F7CM?ky$GM@+w{JbRwmKcA%M`@G>7kJst6)!*(jlDxavxRLaCTz9rNu%0_zd(X zGIXIGUh+!+LJ%jIE`6@h$fVDMx5B2Jh4$5}gX&JLWX@cdMCC0+RBe+$qteI}V3QUOa4D-4%rm=(|`7JQVWVpI50;}1rMrT<4bhTThIp7m)WNDxJ9^Hm^SH$dC3 zOIe|r&c{Yl;AM(@;p~44BbJr83ot12^(rh`EyE#MTm5X)Bw062s7O%ISa#=HCJOj_Z}5)y(V3N3xhePnaA zTZZea$(T+Hq}=w+slCE$@HyDaiYC6);!`#MN7cE`_RFvFdl3ABYrLUIZJ=XmQJ8!u zb397Tk6ty9K{#ctuEd7Aqn=yL=XrNP6&W%qH4@t(6IZO-?q(zQSa>lW64&IF^u;8; z9?Bb>^hFICVw^^lVj*PIu4J)XAPM&0M7rxOC`6BtOzV86IoETg?J_^OBQ4(evvqg$ zJN4Vb7~KLsK679DZsU7MY4gTuS7D?jCS*R$@#~b5X!@MF{sP6Qm{Bg#$iDPvpYZ9Z|*Aq>UVMZR7I$~R5Uvx zVC24lkvhfZ>4=d(Bb)a733oGuXL01#cuV=jee&HItEja7ys<)Atr`hrJjl*B7kAQ5 z&mXTE}1Hc6}CoOa;V7y5kCWAsxu?@qx zJcSEeb9^)-~H;!h}v;o+pV!kZpNbaM@KWKW7&8o%#B+ zz6wE@ajk=F-jT*-OQf$#n!Kmuyj;$q=gM5!&YI(hC{w%040fqlIj3vZlt{L1>D1d2 z@ZiI*n?>w35eqbZpvMV;{}97Oq?Nh{1!72E6TWz9MlJxo%tqUd7y5&H% zsw_o{`j?VFAXU~@z|zdP%9I^xv8(4z0r+OTl2!Slv8v=8R$HCuKP^)b^WotHD&8%U z@xCwo9!JU2dveX{4a#TBX*i)kTH$kDzdfcuW%$2eW>zN|hM!Fs<66OkC2M-%`}JU! zxm>oTd){#_R`B92;56$r>h?T~el4~5m#LNhof<_u*1uD;e-hqOE2dCmfWBpVOs9~~ zX7jFLtBFiHTR~R^)B$#1G3`c%;!%V>*JI|+@Nh;c@c4RvJ!piM*YP>;w6<1>cLy5C z&e^d{yjG^&cWFqwID4k5?&N%4ZzmL6DIn;w{9E$pH2Hf&@PB=qrAB@sgYGYb?1$r_ z80mvX{s^(0>#1|xrT}o_&RVMa9hY#kEy+q4co$=vAi~GD{~j<>yz(C z{3QQld|z=8fW-o)kKeY=1#sl&j_N|$rVqc{Biy2vJN_($zTKL*cWdcvULA@z!HE-8 zou=9}ntL0WMQ?#X>GfX>pf@&I;0dbQJ^N?|bDo;HJs|CC;(sVg%)k{Z_+F=a0`=kR zpqaoXcG6V+R3$=l=@+X;MpGx9DVv6!Rv!IEE=K(ie;jEev=!#XTB_7XyN^;M4L$V? z-z@C@)G&h`5R_#Hm;pP93&!#RnBModFp@LwJ_`Zer{A`INcFHCz+24j{HKu1^GyGo z(NBs1QuR?`ZJ)+EqIw5+Z{6(PD=XhFCw zef=5TVM53b_Sc;d1V7PGc+wr7cChg#P(v~6fMa_>YBP*IK%V@q*kn2R3{nP|^uOP8-eedG@OKS**+5Hvd87utn zOS5PqP>q3u;}chjYkjXH*P6ND6`&QfZWz`se^cuC#$vw3Y~j1u+(nQ?le!VKQ4>;TKw4HN4kqyQ>4onOD_pzp*xF$K3QbDNJR_@#)caO?l`{Q_m>Aa_ znRr7L04A$KQUGukz8NuT26(d@^ETVT5w@{I61-jHi{JH9?itm zRmAO1Y~d9HT47O;-sg+bv|>ZWh^Sk$CI}VE!GCxT>T$%&A1tgz7y2r_zfA(-8SJU% zti1x?1HJOPd|5sz;LH)gmnwgW>12Nmr7ERwdTo+OS;#X_7!EAVppJF1j>>C$SEmE~Eh3tnqEamVQ55egZuD*7B z!{hAS@BtCB-GExN+sohaB6&V|?IPk;7*|7!wm0afJy=^vf#2 z!Z%j)f$m9A{43cCRn~uLZK*Lt#g$1FAB*)p5jY4)tyaH~Qtad_YF7g~3Xy-=62+<7 zK7dwf)^#p{iK4d^y;$Y0{9F(bKK^=onCljzBZot9%;VtcaAib`Q+%FAWz`UfDlo6S z${`6?)l$GY9aN=TD22xA939i%<(Y2&))KzzC72{N3!L()wMwVM3F5RG9LoenkS|QX z$dfVC_=I}U$9{i0=NV`)xj@^`JGUEGfTc)HWEZV$nY|fYVxepA;=yN-ihqvz4}W69@UN2Vng*6W zlULi@EPuT#sp`#C?#Q2CfX=XV_Idv^NURqSOv&9Txl}2lra-V`Bf68r5@ZO9ua-hB z=9@k-5Bx!r=6$sP zLLA+cb2y+i_039R=-gEB<;2akHs46^eCVcLSvnFDdKBtNo*>L!+99K2fKi|~)>1e^ zB9@I*x6Kh`(=z<)E)|Qqd>bE=OQe(E*>?q{pURFwC~&HhktRq0ha2cmuG&;QMUjTe zXES@hV(G?9;qpV0!;-K=oe5oeG*67DrF5v;e+H056T9B4K5cKGRT$gVtd@?sB<%!F zRS0Zi(mpbd+OU}9wBZ$)f2#rvlNIPx!+Tw|qMjD%R zXy!tLUVMG@Swq5Z>V#isOIl)FchUEkc6pe~Q^@+t?txG2vn_8)s+-XtH`&#A!l`c@ zH3npKHs_0t?4{PmJ0l+owpaQE3%3}k0#%c7E34?MmPEsadDT!i z?hz+##MEB!>6=sY@x`^f&q&E}K0iLSL5N^OarkKKizHm?x+kw(Da#MwSws>f)BDog9la+0O4ts# z+h0WKHuSLz0BfAYvN4Bkqal zLhQG^|7kI$7R=U;-8!}cvFGkDy-P{<#1*v>VahqH1kColxmQ`Kg`G6 zo2RGj{u)9%plxi%phUkHyMHtsa2Eo+mXzB6A}CbofIg_ZEY6d3&wdx#DZqMFYR05L zl!!%+EJ{T40H8rY*iQqC*!e3;26GI)C-)0tDr%(?Wt(TU>(`A@PLab}zma0VPr2$E zd&5%(Xq}GbN0gIPamXz3bb-oJ|F5>_n?G`-+LTFRull8XHSxm|RW)@vI^c;KDI9O) zFg+cW2(5bqa@^AYPktj9F67cUHu(Wk#BE@5v-ij4>*ycd1=6ajvUP$*UXO_5s?pK( zUnJKU?Qqr@9VoZj*(=>@#}~Jx$s^o%ffXTQ;|qStY+D$`_X4#s}Lyj^P?((9LP&Xlf)PVld|2++&mp04)5cL25 zpt}{HlQ|;La^c$Qe7)qf260`xxMg(MS9rM0=kNIyf)T`J_R@M2^o7cSDxV4SdcO7& zb#h|g9!?1ok9ps@bFp?%-Yz03i84Mh!Q}Pi&XG2fIYJGvHe)|^L4`KkLpZ4%Hqa~X z7bt|TyCgg}tA5T;Xfrk_k2i|vE9;}j>EACepF@F1tsT{`1WxSzfAhS)oZbcF2V3ThvIx%%{yD#+F(!6QEqD3t=WicGR6ScX(@fM znv?Ksi&BQa&J-C)QaX6;s5dVUUiEB;Q>LF>9k|D{-Y)z@T%}`&p2rK@V)IGs4K>t?hQn%D z`hxYMgg+o!zB${Vn~|NFdOri#;SIt zaU|e6NIX_|N?S5UppD)ZH+9o)DysW7zl}9zG~dFKc)8DNPXBt2@3heiZ^E3fT)cK`^aMW=VBY_-8L`RL~L?yO{C2W+27tRKI7FH@}s@`A&^VI?Y_LB-G-m=wgEL|^ywoY z)$?&XZWJZnGUoyB2DJFkXd$*%u$a?#jr$FrMtc<;)K{;1&U$qkf4c2RYuW?{I?SL!PIF~VUhM1>nk#ALVm1!!fPj=^ksaMnS7H7sS zsxbw#-&toYp(9Y097r8DYygf_d)9Ly8qMq?URqihS&&d(O0WCYZRA#=fPp+;{N>D^ zZV;KcR3Cns>JHR?KC0|qj%8`yA$m^aaXV_+;m69_Nj%I?v8DP<6d5L1a+YlCfEk9+9rckx1Rw$ z>7D`}xm^)CvtMw(>;8&nJ}bGIV)%$B!pWaZ%%{b;|Mn*CJkRf%?^ilJ+iIhzPP>+_ z(x^`SsJ)l1%+&%xs0k|Iy}{z>X$MgI_%YJQ)33Rt1(hY-og1i<(k?aQinWw`Xtb%V zRPf3=leuC|T?X-+{LN6aSFg1WOh4VqgC`eqOGUcx2d!6iI2qlY(Y6aC;`B%5%RzCW z#6*A>|Euc)oFV6qn)7?H(avV~56Q!>XnSYIeEP2pNjx-ia!`ZMD|p7WGC;WI0*V=d ztP&}OclRI}RoZSzbWY}m&5c_SeFHe)$!;~x)*H;7v%PL%YqL7nii@|WyQVzaHSp3r z8n3Ql@J^$5!(mQ5f_a@0tawbTBDUJLR!&k1wG!DdF02W6nn0OD!J8Dnka@0d%p1@= zzteM8m=-*P(D<}Sj+loHTYnX$chhC4J`Il_?Dyn5BaE6Q6h?#yFR4xk;QRAN`65q^ z@8%R+NSo|cdyl$~K@roH)IlHE3lHMYI5nf;m4&V8PV|h=l6qQZ*+%T4?c? zJLc#@yR0)VVJovp)ywWhimsQg(`eJ-Al^TbCsovuqgv0%Y@dweY&v67(!>kJd`yCu3YDb2LBdYvphER{T z^lzYunPp#(eO7x-=s#;M|1>yGCa7>x{&k|&8+F)~U}wZ^x^nqCe}}$^{|}BQ??fRg zo8YxxGVO24P9hvEPfbEzDIGP5X7+l%?zcQ_6KmHQ9XWKonF0L8^3A zKtO2*L^_H}Zz|H8C_SKbr3`sKcFR+qfNSy0iR>`pscLD$SEF zKe(0F75>_Jn!YOdi+iT2Ih)BqCt+5n}UzHvBGk$I` zBJeBqy!=mhSaXqG-5=ptnbXC7wxnNyU#NH{s!wX#F^A1dby|%uuc+i{FYC`-qQUTk*Y;>5!wtIC z6h&3w%#NR#SBa};Kg)NM5}^Q-FSEhe$+)NUu#E{_Di5$E>4x+@AO;W9Oc zw?Q2x(XPByHYSFR%>w-RRFdB}N(rmvm?~OD+T^(30HPNg&%I(YjT8Xe zKjc{E^!0xNwExczd6Dhj)?+hUI3<(Gndy9IKAGRFi0I9PL3oB#@RE0L+E7oF%s^iL}fKnUkyP zl;7E8ao%-?2b>o-TjANEI~Y!qeogesuO|L(#LEWxVHeB2GH#T93cPM!8CbXHdk6Pw z-alf+V(4Y(vWJ|<;MtK^&$%80CyjU5HC#b)t{u{X-DAPVq%b3yC}h%lfdsq>-$+e{ z6^e_C)1TsP1@7}}{%gKQTg8E4rQtR+oNFH*$Yx9~DAgar3v%{OM;Ew$mtRZ;%b}5P z2ssXBjQ^>=l;~xH=0nd9Zncwv@Oc1ZugG0gJBa^zeK(t^KjwWR?yKKbtiEqfy`G;i^2AX1 zMTP26<6#5!^#a@qqMc-o9O-*7Cv9p+ZFqL#RUSv*&=jM!b-o@ zI$IOigvW&7`|DHJ-SLAWkRaE6rWvH`l$84D4=*^H?-(mGEbc@dpueqRfPzAn{^4^< zc_V^IfrT0QE>DUqbNhd(qJ6dDYPus$oQquX?)>?IO=`dyCq4JCOqW}DK-3VLn0(gM zS$ReOno};F>C|#!6fs@hBW)Iwg~T*Vs+s-r_pEO{VWH-&;NgZu0^iMi!{Ue2Jvs%e z!mZj|_=3CyJ_Pl6(02Nh3UfoA+m+->)%_fM8pYA)6q@inqHARg zb+t>Qe=*a^SBnw--X+goh)Q*RY zZnjcMtAb{My4*29eNi27MKX|a{sEeZFow4aEVxZ!+A zk(H(2B>J5)TulvM%ET&S`|`U|mnixo4^Q$%+_37=`8vxd-7_*uDXp8GuNHk%GFUH* zJ!%`~nb8khWDz@B?o+^Ho{21XO{FgV`HIP>pLUeVw(y5Srj=5HD9Q>SKVs)MdPFW&n8{DhEos-fsT@I`o`{@gaXND zaj`$&6$0^s@;ig1jXpPnPCy_*mrjrqPX4zC+HAb0l)cN*0S(j;$Y-ko!AB9cy&ovb z4w-Qqnm73%kl{}T87QIAL_+7N_Rb>9x1I|kh3YXDYR6;4_#RMp$g)}qJ@;6`6@96Z z)UUaPr;kTKT>3Z6{I@``K?qA zdD(D+GOqIqT0Q38pdh~Y!4V(;(9YR_vhd1_K%F@?(BH^A0HB* z@BhiIKiYTlUvH$YeKPZcAw1N?#AI252}tjD5E;A_Q-`{{Q7;-lFDxubii>|%<4Xsk z>UVv8zg~Fz8ZdoHY3Xb$@tm}@^VqFtm{*_|L9**o%0)#*j*lMQTKxT2o{mS+Y~!H$ z72L_*UX6UNt?l&#L&HN(I#ADY!w}>dz^7zIf0M(*!;~WY+S(A<o>#b7L}U8e?t zh0ROhSkbnhY0MBo;_lxKpUh$6?lue1fzBXlGt>vpQSG@Mub8qwU#25GM{hya~bLBqWt?frW5dNg+>S1b59x~_@<$Rql(PM`&Qs$L?t$GJk zwLDqpJ0M5X%Cx2<{8*sPL*wVI;xl_a*An9r^>hW%df;QP=fJEn9g_J6_vC1yv2YPB zy;f;_Q;d^?lOQw^=#)BG&nJ`}&i%@UZq7q-2)i$0Zq&Nhy=|11T0y1aui<#3`K{iJ zM9{4Fqn)$Dp0n5P88?4~K$M%;LGMLH^UBNnHa;p`sSRuI>e3Mr6&>t0H7fO~E`!sk zXWg$CeLrXgg6y>{_WUgN92}f4WZS#mR7dz{-D~&KM3jg5Vr}iv_bzd*R(_t5aJZUk zsE81zwJbf6d-Acaws0zs;e7|%J1+;M%n1lYo^vW&ty{uUxV=D%5a+K&DQ-`m?A}y| z8mH&@FFMG_fm^o6?-TUPW{FSl&h0ty_ZRkndS_`f=33l0`!x7kh2yL9qrr5NWB^Zc zbF(a(M``u>I4sI#M*ki7UxdYC6ZUCZXL~ye+}d&0Rbw(+SZ-mbu7a?eXSVrie(R*j zXRZ=duzZ>Kj9ZFbCY`+QylGA1-oy_s%?CBT1EW0f{lzt&X2Rq*0ivFq zETFFOm4REG(wY8FJ{47oDN2DwHm%VEgVxuxYHTGFQwAbu-8%f*lF(n(7eD|ijk~w;E%MIS z{BgHd8!&yS!(A!LGBQ+jQ{kzvDS!>mUS3&gk9`DA(&KGp(pH~hzO51*m{^M^s79|W`Qzwwmk9i+*2;Q zjrE44s~L&>zSUK|bu2HpjYkOq&hAvD8cO^z-1cdt4?1y2gYDUdT#OKiyjc+j?-p^ovz{hlVsU7NRkQiJbD*%CXt5Mbs9XTG% zCnKV%k3lAi{ew+0$J!n+9Y3h?ebC9yKcb9!9~;YjJ42uUy?XNXr%hYi+p&XI_FCCj zzd_Fez!`sK*@16${kGymP&%&7@2?~t^WieltS!3Lhe$4ISo84DUH`;j`KPm?vl}%6 zmo5PVF+Y!<-Pl!xk@FCjY;I@67{fzXr!d92xk9=_+S=Ns=b;L>EgyiIb&P3^L@S1J;6;D7ncx_h{9Zi=k<9-Ja<;>C1(Paq$ zt&o0ob4oNo4sBL3i~g1fR{RJpIP3Lx?JxdHUi)9c)IVtUJ`ZziYld~}s|4B1bJ8`$31f zCf#GW4J3_5?;_^eD`WCGg`N1Rqwyqvk3@Y*KiT?=6r?K)#mDQ_wV4K>qz~n>g|zBo z{B?o>wJWap8tZdn-m;Tr5ZoSBaKm}^!j=`)IDau@Y}Z>pTQv%ZGD1A$lLAEcWQ)n~ zQtGztWV*8Di0}ClFdGH>Qw5qP@fBG&jpYS#D3wG{n&E4$W2Vt(F95NN<#DMi6y4(w zkYfqWww;enM-NWLyn|De*-u!PQ>*$~d5jTGMFW%aX&8!DkgP?z+~}>{Ybu6(NgHj- zh#yhCOy(!{RD%pvY}`)C!38WAqz~B9VidjNu;#Q#0IOb3z^H{cFPI z%+6_hTGZe*#FYn${uOb>{-%N}LooEVaogvlkPHQ7jY%jdQ#r%^3~FcHXho*2R-R

    bLEZ->-l2BhQ7RtSu?5qFkqElvqg7s|Zy`0UeKOtAG7t1v~A6h&Hw5 z!7B{cQmOsgLYXEYNjvYP$a>!0Q9#kV!fI<4Gl2i1n*aQ_a&4Ge?q)ll_Lsolp>`K< zw#*zDC>nDKRdrycL|5?NdO#B~*lG4$=QPNeE-9PM;Ds}fuIkL47)li`ur;Ja-#_*C zT}POdPJ}JNdK2|A7&N4_MHcEn`=*GrZ6QAQXb8-^8riX0y#?mjS3kBNe)Xh!M-R}E z{gbD4DI3G(fWa*Tg;>J#pbr{r;bsPVZ=4WX++}_YoMeqHrB-V_oVa2qbhhHrGn~M$MIlLAk$X=A*KDl+_tBrM!g!mq;zQ()C5t#t#hmBrqzr8 E0@U8t#sB~S literal 0 HcmV?d00001 diff --git a/Doku/sample-WithExternalTestRunnerDiscoveryType1.runsettings b/Doku/sample-WithExternalTestRunnerDiscoveryType1.runsettings new file mode 100644 index 0000000..dea6d6e --- /dev/null +++ b/Doku/sample-WithExternalTestRunnerDiscoveryType1.runsettings @@ -0,0 +1,16 @@ + + + + + + 600000 + + true + true + TestSuite + + C:\PROGRA~2\BoostExternalTestRunner.exe --test "{source}" --list-debug "{out}" + C:\PROGRA~2\BoostExternalTestRunner.exe --test "{source}" {boost-args} + + + \ No newline at end of file diff --git a/Doku/sample-WithExternalTestRunnerDiscoveryType2.runsettings b/Doku/sample-WithExternalTestRunnerDiscoveryType2.runsettings new file mode 100644 index 0000000..a875b9c --- /dev/null +++ b/Doku/sample-WithExternalTestRunnerDiscoveryType2.runsettings @@ -0,0 +1,18 @@ + + + + + + 600000 + + true + true + TestSuite + + + D:\dev\svn\SampleBoostProject\TestProject.TestCaseListing.xml + + C:\PROGRA~2\BoostExternalTestRunner.exe --test "{source}" {boost-args} + + + \ No newline at end of file diff --git a/Doku/sample.runsettings b/Doku/sample.runsettings new file mode 100644 index 0000000..d93bd56 --- /dev/null +++ b/Doku/sample.runsettings @@ -0,0 +1,15 @@ + + + + + + + + 600000 + + true + true + TestSuite + + + \ No newline at end of file diff --git a/README.md b/README.md index a5d5177..6337da0 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,457 @@ -# Boost Unit Test Adapter +# Boost Unit Test Adapter for Microsoft Visual Studio +### User Manual -Boost Test Adapter is available as an extension for Microsoft Visual Studio. It makes use of the Unit Test Explorer (UTE) provided by Microsoft to visualize and run unit test cases that are written using open source Boost Test Library. +## Contents +- [Introduction](#introduction) +- [Setup](#setup) + + [Pre-Requisites](#pre-requisites) + + [Installation](#installation) + * [Boost Unit Test Adapter Extension](#boost-unit-test-adapter-extension) + * [Boost Unit Test project template](#boost-unit-test-project-template) + * [Optional One-time Settings](#optional-one-time-settings) + + [Uninstallation](#uninstallation) +- [Quick Start](#quick-start) +- [Supported Boost Test Macros](#supported-boost-test-macros) +- [Usage](#usage) + + [Add a New Boost Project Using the Boost Unit Test Project Template](#add-a-new-boost-project-using-the-boost-unit-test-project-template) + + [Add a New Boost Unit Test File Using the Boost Unit Test File Template](#add-a-new-boost-unit-test-file-using-the-boost-unit-test-file-template) + + [Display Test Cases](#display-test-cases) + + [Run All Test Cases](#run-all-test-cases) + + [Run Selected Test Cases](#run-selected-test-cases) + + [Group Test Cases](#group-test-cases) + + [Find the Test Case Location in Source](#find-the-test-case-location-in-source) + + [Search and Filter the Test Case List](#search-and-filter-the-test-case-list) + + [Clear the Search Results](#clear-the-search-results) + + [View the Summary of the Test Case Results](#view-the-summary-and-output-of-the-test-case-results) + + [Add and Run a Playlist](#add-and-run-a-playlist) + + [Debug Unit Tests Using Test Explorer Window](#debug-unit-tests-using-test-explorer-window) + + [Analyzing Code Coverage for Boost Tests](#analyzing-code-coverage-for-boost-tests) + + [Boost Unit Test Adapter Configuration](#boost-unit-test-adapter-configuration) + + [Failing Tests in case Memory Leaks are detected](#failing-tests-in-case-memory-leaks-are-detected) + + [Specifying a Test Execution Timeout](#specifying-a-test-execution-timeout) + + [Disabling the Conditional Inclusions Filter](#disabling-the-conditional-inclusions-filter) + + [Modifying Boost Test Log Verbosity](#modifying-boost-test-log-verbosity) + + [Utilization of an External Test Runner](#utilization-of-an-external-test-runner) + + [Tests discovery configuration](#tests-discovery-configuration) + + [Tests execution configuration](#tests-execution-configuration) +- [Limitations](#limitations) +- [License](#license) + + [Boost Unit Test Adapter License](#boost-unit-test-adapter-license) + + [Third-party Software Credits](#third-party-software-credits) +- [Appendix](#appendix) + + [Version History](#version-history) + + [Reporting Issues](#reporting-issues) + + [Building from sources](#building-from-sources) + + [Troubleshooting](#troubleshooting) -Refer http://www.boost.org/doc/libs/release/libs/test for detailed information on Boost Test Library. +## Introduction +The Boost Unit Test Adapter is available as a free extension for Microsoft Visual Studio. It makes use of the Unit Test Explorer (UTE) provided by Microsoft in the Visual Studio IDE to visualize and run unit test cases that are written using the open source Boost Unit Test Framework libraries. Boost provides free, peer-reviewed, portable C++ source libraries. Boost libraries are intended to be widely useful and usable across a broad spectrum of applications. Boost works on almost any modern operating system, including UNIX and Windows variants. -**Pre-Requisites** +Refer to [http://www.boost.org/](http://www.boost.org/) for detailed information about the Boost libraries. -In order to use the Boost Test Adapter, the user must have the following: -- Microsoft Visual Studio 2012 (Update 1 or later is supported) or Microsoft Visual Studio 2013 -- Boost Libraries (tested versions: 1.49.0, 1.53.0, 1.55.0) +## Setup -**Installation** +### Pre-Requisites -Installation is available in the Visual Studio Gallery: [Boost Unit Test Adapter](https://visualstudiogallery.msdn.microsoft.com/5f4ae1bd-b769-410e-8238-fb30beda987f) +In order to use the Boost Unit Test Adapter, the following components must be available: +- [Boost Libraries](http://www.boost.org/users/download/) +- [Microsoft Visual Studio](https://www.visualstudio.com/). The following versions are supported: + + Visual Studio 2012 Update 1 (Pro, Premium, Ultimate). + + Visual Studio 2013 (Pro, Premium, Ultimate). + + Visual Studio 2015 RC (Enterprise). +### Installation +#### Boost Unit Test Adapter Extension +The pre-built binary of the Boost Unit Test Adapter installation package ( __.vsix__ file ) can be downloaded and installed either by: +- downloading and installing the __.vsix__ file via the [Microsoft Visual Studio gallery](https://visualstudiogallery.msdn.microsoft.com/5f4ae1bd-b769-410e-8238-fb30beda987f). +- searching for the tool via the Visual Studio's Extensions and Updates form via __Tools__ -> __Extensions and Updates__ and then clicking __Download__ as shown in the below snippet. +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/boost_unit_test_adapter_in_extensions_and_updates.png) +- downloading and compiling the Boost Unit Adapter packages from this [GitHub](https://github.com/etas/vs-boost-unit-test-adapter) location. + +#### Boost Unit Test Project Template + +The Boost Unit Test Project template as well as the Boost Unit Test File template are installed as part of Boost Unit Test Adapter extension installation above. + +#### Optional One-time Settings + +The below mentioned settings are optional and are here being suggested as a good working practice and are by no way required by the Visual Studio Boost Unit Test adapter. These setting relate to the setup of the Boost include file paths and the Boost library paths. Rather then setting the paths inside the project's property pages, it is suggested to make use of environment variables. + +In order to set these environment variables: + +1. Select advanced system settings in Control Panel +2. Select advanced tab in system properties window +3. Click environment variable button +4. Click new button in User variable section (or at System Level) +5. Give __BOOST_INC__ as variable name and boost install directory as variable value. Eg: __D:\boost_dir__ +6. Create one more variable with __BOOST_LIB__ as variable name and boost library directory as variable value. Eg: __D:\boost_dir\lib__ + +In case multiple Boost library versions are utilized, when naming the environment variables it is suggested to include the library version as part of the environment variable name. The same concept should also be applied with the processor architecture type the library is targeted for. Some examples are the following __BOOST_1440_INC__, __BOOST_1440_LIB__, __BOOST_1440_INC_X64__, __BOOST_1440_LIB_X64__, __BOOST_1490_INC__, __BOOST_1490_LIB__, __BOOST_1490_INC_X64__, __BOOST_1490_LIB_X64__ + +### Uninstallation + +1. Open Microsoft Visual Studio. +2. Go to __Tools__ -> __Extensions and Updates__. +3. Select _Boost Unit Test Adapter_. +4. Click Uninstall. +5. Restart Microsoft Visual Studio. + +## Quick start + +- Double click BoostTestPlugin.vsix. This will install the Boost Unit Test Project template, Boost Unit Test File template and Boost Unit Test Adapter extension. +- Follow the optional installation steps as described in section [Other optional settings](#other-optional-settings) so as to create the environment variables. This is a one time process so if this has already been done, this step can be skipped. +- Create a new project using the __Boost Unit Test Project__ template available in the Add New Project dialog. This can be found under: __Installed__ -> __Visual C++__ -> __Test__ -> __Boost Unit Test Project__. +- This will result in a new solution having a project which contains 2 header files (viz. stdafx.h and targetver.h) and 3 source files (viz. stdafx.cpp, BoostUnitTestSample.cpp and BoostUnitTest.cpp). +- Set the Platform Toolset property value of the newly added project. This can be found under: Project Property Pages -> __Configuration Properties__ -> __General__ -> __Platform Toolset__. +- Build the solution and make sure that the project built correctly. +- Once a successful build is achieved, the test cases should have been discovered and made visible in the __Test Explorer Window__. (If the __Test Explorer Window__ is not visible, it can be accessed via the menu item __Test__ -> __Windows__ -> __Test Explorer__). +- The test cases appear with a light blue icon, indicating that they are newly discovered. +- Run the test cases by using the _Run All_ option. As a result, the units tests cases are executed and the corresponding results are updated. The green tick symbolizes that the test case has passed. In case the test case failed (due to failed assertions or memory leaks) the test icon will be red. In case of other failures, the icon will be a yellow triangle. +- Selecting a test case will provide additional information regarding execution duration, failed assertions, test output and test duration. + +### Supported Boost Test Macros + +The [Boost Unit Test Framework](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf.html) supports a number of macros but for the scope of the Boost Unit Test Adapter only the below subset of macros are relevant: + +| Macro Name | Boost Documentation Reference | +| ---------------------------------- | ---------------------------------------------- | +| BOOST_AUTO_TEST_CASE | [Webpage Link](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-suite.html) | +| BOOST_AUTO_TEST_SUITE | [Webpage Link](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-suite.html) | +| BOOST_AUTO_TEST_SUITE_END | [Webpage Link](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-suite.html) | +| BOOST_FIXTURE_TEST_SUITE | [Webpage Link](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf/user-guide/fixture/test-suite-shared.html) | +| BOOST_FIXTURE_TEST_CASE | [Webpage Link](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf/user-guide/fixture/per-test-case.html) | +| BOOST_AUTO_TEST_CASE_TEMPLATE | [Webpage Link](http://www.boost.org/doc/libs/1_44_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-case-template.html) | + + +## Usage + +### Add a New Boost Project Using the Boost Unit Test Project Template + +A new project can be added using the Boost Unit Test Project template available in the __Add New Project__ context menu. This can be found under __Installed__ -> __Visual C++__ -> __Test__ -> __Boost Unit Test Project__ as shown in the below snippet. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/boost_unit_test_project.png) + +This will result in the creation of a new solution having a project which contains 2 header files (viz. stdafx.h and targetver.h) and 3 source files (viz. stdafx.cpp, BoostUnitTestSample.cpp and BoostUnitTest.cpp) as shown below. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/boost_unit_test_project_files.png) + +The relevant platform toolset property value need to set next for the newly created project. This property can be accessed via the Property Pages -> __Configuration Properties__ -> __General__ -> __Platform Toolset__ as shown also in the below snippet. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/platform_toolset.png) + +It is important to note that by default the __Boost Unit Test Project__ template does not have any value set for __Platform Toolset__ property. This means that by default, the property value is set to whatever Visual Studio version is the project being created and compiled with. Failure to properly set the __Platform Toolset__ version might cause linking failures in case any compiled libraries are not available for the __Platform Toolset__ version selected. + +As soon as a Boost Project is newly created using the Boost Unit Test Project template, it is suggested that the solution is built so as to make sure that no compilation or linking issues occur. The most common issue is that users might have incorrect references of either the Boost includes path or the Boost library paths, so in case of compiler warnings of include files not found, undefined identifiers or linker issues, it is suggested to check the __Additional Include Directories__ and the __Additional Library Directories__ as shown in the below two snippets. The configuration shown in the below two snippets assume that the steps as indicated in section [Optional one time settings](#optional-one-time-settings) have been followed. In case not, the user has to write the paths of the Boost include directories and the Boost library directory respectively. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/boost_includes_path.png) + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/boost_library_path.png) + +Another common pitfall is having an incorrectly set __Platform Toolset__ version. This generally occurs because in case the Boost pre-compiled binaries are utilized, some Boost libraries might not be available for certain levels of __Platform Toolset__ utilized. In such case it is suggested to change the __Platform Toolset__ version according the __Platform Toolset__ the library has been built for, which can be generally easily identified via the library filename(s) as shown in the below snippet. + + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/indentifying_boost_library_toolset.png) + +Once a successful build is achieved, the test cases should have been discovered and should be visible in the __Test Explorer Window__. (If the __Test Explorer Window__ is not visible, it can be accessed here via the menu item __Test__ -> __Windows__ -> __Test Explorer__ as shown in the below snippet.) + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/accessing_the_test_explorer_window.png) + + +### Add a New Boost Unit Test File Using the Boost Unit Test File Template + +A new file can be added using the __Boost Unit Test File__ template available via the context menu __Add__ -> __New Item__ and selecting __Boost Unit Test File__ under __Visual C++__->__Test__ dialog as shown in the below two snippets. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/context_menu_add_new_item.png) +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/adding_boost_unit_test_file.png) + +### Display Test Cases + +In order for the Boost Unit Test Adapter to enumerate the list of available unit tests in a Boost Unit Test project, the project should be successfully built first. Once the project is successfully built, the test cases are enumerated in the Test Explorer window as shown in the below snippet. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/enumerated_tests.png) + +If the Test Explorer Window is not visible, it can be accessed here via the menu item __Test__ -> __Windows__ -> __Test Explorer__ as shown in the below snippet + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/accessing_the_test_explorer_window.png) + +### Run All Test Cases + +When the __Run All__ button is clicked, the test cases are executed and test explorer window is updated accordingly. The passed and failed test cases are listed separately. Successful unit tests are indicated via a green icon while failed tests are indicated via a red icon. In case a discovered test case cannot be found whilst trying to execute a test, the test will be indicated by a yellow triangle. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/run_all_execution.png) + +The execution of the tests can be monitored by selecting __Tests__ in the drop down menu available in the __Output window__. + +### Run Selected Test Cases + +Test cases can be executed individually by selecting the desired test cases, then right clicking on them and then clicking the __Run Selected Tests__ option. Their execution can again be monitored by selecting __Tests__ in the drop down menu available in the __Output window__. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/run_selected_tests.png) + +### Group Test Cases + +The test cases can be grouped by any of the four options given in the table below, by selecting the __Group By__ menu item in the __Test Explorer Window__ and selecting the desired option. + +| Group Type | Description | +| ------------- | ----------- | +| Project | Groups test cases according to its project’s name. | +| Traits/Suites | Groups test cases according to the suite it belongs to. | +| Outcome | Groups test cases by execution results: Failed Tests, Skipped Tests, and Passed Tests. | +| Duration | Groups test cases by execution time: Fast (\<100 ms), Medium (>100 ms), and Slow (>1sec). | +| Class | Unsupported by the Boost Unit Test Adapter. | + +- Grouping by Project: +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/group_by_project.png) + +- Grouping by Traits/Suites: +__[Available for MS Visual Studio 2012 Update 2 and onwards]__ +By selecting the Traits option in the Test Explorer Window, the test cases are grouped via the test suite they fall under. If any of the test cases does not belong to any test suite, then it falls under the Master Test Suite. +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/group_by_traits.png) + +- Grouping by Outcome: +By default, the test cases are grouped by outcome, with execution times listed. +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/group_by_outcome.png) + +- Grouping by Duration: +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/group_by_duration.png) + +### Find the Test Case Location in Source + +The source file name as well as the line number of a unit test is displayed in the lower pane of the Test Explorer Window. Clicking on these hyper links will focus the source code window on the file and line in question. Additionally, double-clicking a test case will also navigate to the test case source code. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/unit_test_location.png) + +### Search and Filter the Test Case List + +When you type a string in the Test Explorer search box and press ENTER, the test case list is filtered to display only those test cases whose fully qualified names contain the string being searched. More advanced filtering can be done on also other aspects of the tests (such as on the Output) by using the search filters provided by Visual Studio. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/search_filters.png) + +### Clear the Search Results + +The **X** button available on the right of the search filter clears the search box's content and resets the __Test Explorer__'s test filter. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/clear_search.png) + +### View the Summary and Output of the Test Case Results + +After a unit test has been executed, single-click the test case to view the summary of its results. The __Output__ hyperlink will focus on a new window showing the output generated during test execution. Information contained in the _Output_ window include: +- Standard Output Messages +- Standard Error Messages +- Failed Assertions +- Memory Leaks + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/test_case_output.png) + +### Add and Run a Playlist + +**[Available for MS Visual Studio 2012 Update 2 and onwards]** +Test cases can be grouped using the _Playlist_ feature. After selecting a series of test cases, use the right-click context menu to save the tests in a playlist as shown below. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/save_new_playlist.png) + +By selecting the Playlist option in the __Test Explorer__ window, all the test cases of the particular playlist are displayed and can be executed. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/myPlaylist.png) + +### Debug Unit Tests Using Test Explorer Window + +The unit test cases can be debugged using the __Test Explorer__ Window in the following manner: +1. Select the test cases to be debugged. Assuming breakpoints have been already set in the code that is going to be debugged, right click on the applicable test case and select __Debug Selected Tests__. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/debug_selected_tests.png) + +2. The debug point would get hit and then the unit tests can be debugged normally via the Visual Studio debug functions/keyboard shortcuts. +3. After the debug run is complete, the result of the test case is shown in the __Test Explorer__ Window. +4. If all the test cases in the solution need to be debugged, go to: __Test__ -> __Debug__ -> __All Tests__. All the test cases can be debugged and the result would be displayed in the __Test Explorer__ Window. + +### Analyzing Code Coverage for Boost Tests + +Code coverage can be analyzed via the Boost unit tests discovered through the test adapter. By navigating to the __Test__ -> __Analyze Code Coverage__ -> __All Tests__ menu option from the Visual Studio menu bar, all discovered unit tests are executed and the debugger will analyze the amount of code covered by the executed tests. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/analyze_code_coverage_for_selected_tests.png) + +Apart from analyzing code coverage of all the tests, tests can be individually selected and code coverage metrics can be identified for the selected subset via the right-click context menu or via the __Test__ -> __Analyze Code Coverage__ -> __Selected Tests__ menu option. + +Note that code coverage does not report standard output, standard error and memory leak information for executed tests. In order to minimise executable re-loading, tests are executed in batches and as a result, standard output, standard error and memory leaks cannot be distinguished per test case. The difference in the execution behaviour can be seen via the Tests output log window as shown in the snippets below. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/running_tests_not_in_code_coverage_mode.png) + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/running_tests_in_code_coverage_mode.png) + +The top snippet shows the tests being executed __not__ for code coverage analysis purposes and as it can be noticed the tests are executed individually. This is done so as to permit the extraction of the standard output and the detection of memory leaks. + +The bottom snippet shows the tests being executed for code coverage purposes and as it can be noticed the tests are executed in a batch, grouped at a test suite level. + +For further information about code coverage in Visual Studio, please refer to the [_Using Code Coverage to Determine How Much Code is being Tested_](https://msdn.microsoft.com/en-us/library/dd537628.aspx) MSDN article. + +### Boost Unit Test Adapter Configuration + +The Boost Unit Test adapter can be configured via a [Visual Studio _.runsettings_ configuration file](https://msdn.microsoft.com/en-us/library/vstudio/jj635153.aspx). Selecting and using an appropriate test settings file containing a valid `````` section allows for running tests which cater for specific use-cases. The configuration file can be loaded via the Visual Studio menu option __Test__ -> __Test Settings__ -> __Select Test Settings File__ as shown in the below snippet. In general, omitting a configuration option implies that its default value is taken into consideration. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/select_test_settings_file.png) + +A [sample](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/sample.runsettings) settings file is available in the [repository](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/sample.runsettings). The supported configuration options will be described in the following sub sections. + +#### Failing Tests in case Memory Leaks are detected + +In case tests are required to fail in case memory leaks are detected, the configuration option `````` should be set to ```true``` (or ```1```). By default, this configuration option is set to ```false``` (or ```0```). + +As soon as tests are executed, in case memory leaks are detected, the specific test with leaking memory is reported as failed as shown in the below snippet. If the user clicks on the Output link, the user can see the memory allocation number detail, the leak size and the leak contents. + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/memory_leak_detection.png) + +#### Specifying a Test Execution Timeout + +Limiting test execution time can be configured via the `````` configuration option. The configuration value specifies the amount of time in milliseconds each test case is allowed to run. By default, this option is set to ```-1``` implying that tests are allowed to run indefinitely. + +The below snippet shows a test scenario where a test execution lasted more than the configured 1000ms (i.e. 1 second) + +![image](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/test_execution_timeout.png) + +#### Disabling the Conditional Inclusions Filter + +Conditional inclusions directives such as ```#if```, ```#elif```, ```#else```, ```#ifdef``` and ```#if defined``` are by default taken into consideration when the Boost Unit Test Adapter is parsing the source code so as to determine what code segments are to be included or excluded. In case the user for any reason, requires this type of functionality to be disabled, (such as when utilizing some of the unsuppported lanague caveats as mentioned in the [Limiations](#limitations) section), the conditional inclusions filter can be disabled by setting the `````` configuration option to ```false``` (or ```0```). By default, this configuration option is set to ```true``` (or ```1```). + +Test discovery for Boost Test exe modules parses the source files in the active solution in order to perform test discovery. In case of issues with test discovery, the conditional inclusions filter can be disabled via the `````` option. + +#### Modifying Boost Test Log Verbosity + +To modify the amount of log information displayed in the test adapter, the `````` configuration option needs to be explicitly set to one of the following values: + +- ``All`` +- ``Success`` +- ``TestSuite`` +- ``Message`` +- ``Warning`` +- ``Error`` +- ``CppException`` +- ``SystemError`` +- ``FatalError`` +- ``Nothing`` + +By default, this option is set to ```TestSuite```. Please refer to the _log_level_ [Boost Runtime Configuration](http://www.boost.org/doc/libs/1_55_0/libs/test/doc/html/utf/user-guide/runtime-config/reference.html) for further information about log verbosity. + +#### Utilization of an External Test Runner + +The Boost Unit Test Adapter supports the utilization of an External Test Runner for test discovery and test execution. This is useful in case a user, for example, wants to compile the Boost unit tests project as a dll rather than as an executable. + +The example configuration described in this section will make use of the sister project [Boost External Test Runner](https://github.com/etas/boost-external-test-runner/blob/master/README.md) available at [GitHub](https://github.com/etas/boost-external-test-runner) but a user can use any other compatible Boost Test Runner as long as the test results are in the same format as those generated typically by the [Boost Unit Test Framework](http://www.boost.org/doc/libs/1_46_0/libs/test/doc/html/utf/user-guide/test-output/log-xml-format.html). In addition, with respect to the test execution aspect, the same [argument structure](http://www.boost.org/doc/libs/1_46_0/libs/test/doc/html/utf/user-guide/runtime-config/run-by-name.html) as the Boost Unit Test Framework needs to be supported. + +##### Tests Discovery Configuration + +The discovery phase of the tests can be done/configured in two ways: + +* The first option is for the Boost Unit Test Adapter to issue a command to External Test Runner so as to initiate the discovery process. This command is configured by the inclusion of the information element `````` as shown in the XML _.runsettings_ configuration snippet below. + +```xml + + C:\PROGRA~2\BoostExternalTestRunner.exe --test "{source}" --list-debug "{out}" + C:\PROGRA~2\BoostExternalTestRunner.exe --test "{source}" {boost-args} + +``` + Before initiating the discovery process, the Boost Unit Test Adapter will read the contents of the `````` information element and replace the sub-string __{source}__ with the full path of the project for which the discovery is required and replace the sub-string __{out}__ with the full file path where the Boost Unit Test Adapter would like to have the generated XML file generated at, containing the enumeration of the tests in the Boost Unit Test Framework format. An example of the command generated is shown here below. +``` +C:\PROGRA~2\BoostExternalTestRunner.exe –-test "D:\dev\svn\SampleBoostProject\Debug\TestProject.dll" –-list-debug "D:\dev\svn\SampleBoostProject\Debug\TestProject.detailed.xml" +``` +The Boost Unit Test Framework will then execute the command and upon completion it will read the generated XML file. + +A [sample _.runsettings_ configuration file](https://github.com/etas/vs-boost-unit-test-adapter/blob/master/Doku/sample-WithExternalTestRunnerDiscoveryType1.runsettings) configured for this type of test discovery methodology is provided at the [GitHub repository](https://github.com/etas/vs-boost-unit-test-adapter/tree/master/Doku) + +* Alternatively, a user can configure the discovery phase of the tests so that the listing of the tests is read via a static file as shown by the XML _.runsettings_ configuration below. + +```xml + + + D:\dev\svn\SampleBoostProject\TestProject.TestCaseListing.xml + + C:\PROGRA~2\BoostExternalTestRunner.exe --test "{source}" {boost-args} + +``` + This type of test case listing is useful in case a user wants to manipulate what tests gets listed in Test Explorer manually. + + A [sample _.runsettings_ configuration file](https://github.com/etas/vs-boost-unit-test-adapter/blob/master/Doku/sample-WithExternalTestRunnerDiscoveryType2.runsettings) utilizing this type of test discovery methodology is provided at the [GitHub repository](https://github.com/etas/vs-boost-unit-test-adapter/tree/master/Doku) + + For reference purposes the [GitHub repository](https://github.com/etas/vs-boost-unit-test-adapter/tree/master/Doku) contains also two sample XML outputs containing the two types of XML test case listing formats expected by the Boost Unit Test Adapter. The difference between the two samples is that [TestCasesListing.Simple.xml](https://github.com/etas/vs-boost-unit-test-adapter/blob/master/Doku/TestCasesListing.Simple.xml) when compared to [TestCasesListing.Detailed.xml](https://github.com/etas/vs-boost-unit-test-adapter/blob/master/Doku/TestCasesListing.Detailed.xml) does not contain the line number and the source file name where the testcase has been defined at. These sample XML files can be utilized as a reference in case a custom External Test Runner is developed and integrated with the Boost Unit Test Adapter as mentioned in (1). The same sample XML files can be also utilized in case the user wants to define the tests via a static file as mentioned in (2). + +##### Tests Execution Configuration + +The configuration of the execution phase is performed via the information element `````` as shown in the _.runsettings_ XML configuration snippets shown above in the two discovery configuration options section. Similar to the discovery phase the Boost Unit Test Adapter will replace the sub-string __{source}__ with the full path and name of the project and __{boost-args}__ with the boost arguments so as to run the test. An example of the command generated is +``` +C:\PROGRA~2\BoostExternalTestRunner.exe –-test "D:\dev\svn\SampleBoostProject\Debug\TestProject.dll" "--run_test=SpecialCharactersInIdentifier" "--log_format=xml" "--log_level=test_suite" "--log_sink=SpecialCharacters.exe.test.log.xml" "--report_format=xml" "--report_level=detailed" "--report_sink=SpecialCharacters.exe.test.report.xml" > "SpecialCharacters.exe.test.stdout.log" 2> "SpecialCharacters.exe.test.stderr.log" +``` +The Boost Unit Test Adapter will issue the generated command and upon the process completion it will read the generated tests results in XML format (in format that is typically generated by Boost Unit Test Framework XML format) along with the standard output and standard error stream output and then display the test results accordingly in the Test Explorer window. + +## Limitations + +- If the [log redirection functionality](http://www.boost.org/doc/libs/1_45_0/libs/test/doc/html/utf/user-guide/test-output/log-ct-config.html) of Boost test is used, the Boost Unit Test Adapter will not work. This is due to the fact that adapter internally uses the redirected log output. +- Test discovery for Boost Test exe modules makes use of an in-built C++ parser specifically written to detect the Boost Unit Test Framework macros as listed in the section [Supported Boost Test Macros](#supported-boost-test-macros), which acts on the un-preprocessed source code. The in-built parser has not been written to support all the language caveats possible and so a number of limitations exist (and hence are areas of possible future work). The known limitations (but actually not limited to) with this regard are: + 1. ```#include``` directives are ignored. This means that if for example ```#defines``` are defined, undefined or redefined within the _included_ files, these will be ignored. This also means if these defines (defined within the _included_ files) are utilized for any conditional inclusions or exclusions within the source code being parsed for the Boost Unit Test macros, the test might be included or excluded erroneously. + 2. The __Stringizing__ (_#_), the __Charzing__ and __Token-pasting__ (_##_) operators are not supported. + 3. Evaluation of __Multi-line defines__ such as in the case shown in the below code is not supported, but any symbol used in the defines (the token _VERSION_ in the below case) can be used on ```#ifdef``` or ```#ifndef``` conditional in any subsequent code after the end of the Multi-line define. +```c++ +1: #define VERSION 5 +2: +3: #define TWICE(VERSION) \ +4: x*2 +5: +6: #if TWICE(VERSION) > 9 +7: ... +8: #else +9: ... +10: #endif +``` +- Defining a pre-processing symbol for a specific source file as explained on [https://msdn.microsoft.com/en-us/library/hhzbb5c8.aspx](https://msdn.microsoft.com/en-us/library/hhzbb5c8.aspx) is not supported. +- The support for compiler predefined symbols as per [https://msdn.microsoft.com/en-us/library/b0084kay.aspx](https://msdn.microsoft.com/en-us/library/b0084kay.aspx) is limited. The only macros that are supported are ```__DATE__```, ```__FILE__```, ```__LINE__```, ```__TIME__```, ```__TIMESTAMP__```, ```__COUNTER__```, ```__cplusplus```, ```__FUNCDNAME__```, ```__FUNCSIG__```, ```__FUNCTION__```, ```_INTEGRAL_MAX_BITS```, ```_MSC_BUILD```, ```_MSC_FULL_VER```, ```_MSC_VER```, ```_WIN32R``` and can be utilized _only_ within the context of a ```#ifdef``` or a ```#ifndef``` conditional inclusions and _not_ for any text substitution. This means that constructs like the below code snippet +```c++ +1: #ifdef _MSC_VER +2: ..... +3: #endif +``` +                 are supported but constructs like the below code snippet +```c++ +1: #if _MSC_VER > 1000 +2: ..... +3: #endif +``` +                 are not supported. +- Unable to evaluate macros such as ```$(OS)``` ( that evaluates to ```Windows_NT``` ) in the [Preprocessor definitions](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/unsupported_preprocessor_evaluated_macros.png) property and/or in the [Undefine Preprocessor Definitions](https://raw.githubusercontent.com/etas/vs-boost-unit-test-adapter/master/Doku/images/unsupported_preprocessor_evaluated_macros.png) property. Hence tests should not be written in a fashion that their inclusion or exclusion depends on such definitions. +- The C++ code parser of the Boost Unit Test Adapter does require that the Boost macros (and their parameters) as listed in section [Supported Boost Test Macros](#supported-boost-test-macros) need to be written within the same line of code. This means that macros along with its parameters cannot be separated by any type of line breaks. If this rule is not followed the Boost Internal Test Adapter will not recognise the test correctly. +- Running the tests via the [VSTest.console](https://msdn.microsoft.com/en-us/library/jj155800.aspx) is not supported. +- Test suites and/or test cases which are manually registered are not discovered for exe builds. +- Any spaces in the test suite name and/or the test case name (in case the test cases are registered manually) are not supported due to a limitation in the Boost Unit Test Framework in the handling of spaces when specifying the ``--run_test`` option via the command line. +- ```BOOST_AUTO_TEST_CASE_TEMPLATE``` type lists containing a type which contains a space (e.g. ```unsigned int```) are not supported due to a limitation in the Boost Unit Test Framework in the handling of spaces when specifying the ``--run_test`` option via the command line. + +## License + +### Boost Unit Test Adapter License + +The Boost Unit Test Adapter is released under the [Boost Software Licence - Version 1.0 - August 17th, 2003](https://visualstudiogallery.msdn.microsoft.com/site/5f4ae1bd-b769-410e-8238-fb30beda987f/eula?licenseType=None). + +### Third-party Software Credits + +The Boost Unit Test Adapter makes use of the below list of dynamically linked libraries for which we would like to thank their contributors: + +* [Apache __log4net v1.2.13__](http://logging.apache.org/log4net/) distributed under [Apache License Version 2.0](http://www.apache.org/licenses/LICENSE-2.0), which is used for logging purposes within the Boost Unit Test Adapter. The legal copyright for [Apache __log4net__](http://logging.apache.org/log4net/) is __Copyright 2001-2006 The Apache Software Foundation__. +* [__NCalc__ - Mathematical Expression Evaluator for .NET Version v1.3.8](https://ncalc.codeplex.com/) distributed under the [MIT License](https://ncalc.codeplex.com/license), which is used to the evaluate the pre-processor related expressions in the conditional inclusions filter. The copyright statement for [NCalc](https://ncalc.codeplex.com/) is [__Copyright (c) 2011 Sebastien Ros__](https://ncalc.codeplex.com/license). +* [__Boost__](http://www.boost.org/) libraries and examples distributed under [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt), which are used for the external Boost Unit Test Adapter. The copyright statement for the examples utilized on which the external Boost Test Adapater is heavily based upon is __(C) Copyright Gennadiy Rozental 2005-2007__. +* [__NUnit__](http://www.nunit.org/) which is a unit-testing framework and is used to test the core functionality of the Boost Unit Test Adapter. The Boost Unit Test Adapter Unit Test project was written using NUnit 2.6.4 and is released under the [NUnit License](http://nunit.org/nuget/license.html). The legal copyright statement for NUnit is [__Portions Copyright © 2002-2012 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig__](http://nunit.org/nuget/license.html). +* [__FakeItEasy v1.13.1__](http://fakeiteasy.github.io/) which is used so as to easily mock classes in the unit test project of the Boost Unit Test Adapter. This component is released under the [MIT license](https://github.com/FakeItEasy/FakeItEasy/blob/master/License.txt) and its the legal copyright statement is [__Copyright (c) FakeItEasy contributors. (fakeiteasy@hagne.se)__](https://github.com/FakeItEasy/FakeItEasy/blob/master/License.txt). + +## Appendix + +### Version history + +The version history is maintained at the following [link](/../../wiki/Version-History). + +### Reporting Issues + +Reporting Issues can be done at the following [link](https://github.com/etas/vs-boost-unit-test-adapter/issues) + +### Building from sources + +The process of building the Boost Test Adapter from sources is maintained at the following [link](/../../wiki/Building). + +### Troubleshooting + +The troubleshooting page is maintained at the following [link](/../../wiki/Troubleshooting). diff --git a/VisualStudio2012Adapter/GlobalSuppressions.cs b/VisualStudio2012Adapter/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..5cf8c1d4dd7c8160c3eb76a068983624e47050b6 GIT binary patch literal 1996 zcmd6oUuzRl5XI+N@H;GdQn0P_wLM{IdkUB&7a?Ac4nE)Y-Obdo^Dy!R`BHehPQ<+*nhV@zi(~JPWG`?mgBp} z!+mRPnQeGmVyh2pW>ahIj?a#BfzRZy=C+KHp4t;o2uIGT8o!ck4NvmVSXa>^yJBcn zyfuD~%`?l-kto;Jeqfz*`qbJCpL&*)SnEB0Yodk$&XO2aL{Jb{(F;yz5sl7dSXHqq z-NjmJcH8KakS;kX-wI2MB4-zjox;TKj_2^9~y=o>{CTC!caSx_-}`iyy(W^f-htiqme7rk6qgM&H;N|{!(FT`ijiGMd_(mnCa%b; zNf~t*&Fl+k8c;1Fqtb^oQQ_BBYGV3f#SImmc=q|K$f4QO^trl)`z!CnuXkOxOL9-+ zgld*H_`UeC}G`_uc3`X@1pCNA*3C93jBnbJdrhx#-k$Joy8 zrCsp7 + /// Adapter for a Visual Studio 2012 running instance. + /// + public class VisualStudio : VisualStudioAdapter.Shared.VisualStudio + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dte")] + public VisualStudio(EnvDTE80.DTE2 dte) : + base(dte, "11") + { + } + } +} \ No newline at end of file diff --git a/VisualStudio2012Adapter/VisualStudio2012Adapter.csproj b/VisualStudio2012Adapter/VisualStudio2012Adapter.csproj new file mode 100644 index 0000000..7b1e2bd --- /dev/null +++ b/VisualStudio2012Adapter/VisualStudio2012Adapter.csproj @@ -0,0 +1,82 @@ + + + + + Debug + AnyCPU + {30ECC867-CE89-425F-B452-7A8A320F727D} + Library + Properties + VisualStudio2012Adapter + VisualStudio2012Adapter + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + + + False + + + + False + + + + + + + Project.cs + + + ProjectConfiguration.cs + + + Solution.cs + + + VCppCompilerOptions.cs + + + VisualStudio.cs + + + + + + + + {62347cc7-c839-413d-a7ce-598409f6f15b} + VisualStudioAdapter + + + + + diff --git a/VisualStudio2013Adapter/GlobalSuppressions.cs b/VisualStudio2013Adapter/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..e6736fe2b1db8be3b0abe86767a6b016e6442b96 GIT binary patch literal 1996 zcmd6oUuzRl5XI+N@H;H~q+nZHL80J7QHn((LPCp(4{LUttR|b#yIaYZSAXYDmi-gz zn@~b>_wLM{IdkUB&7a>Vc4CRmY-yzho^DxJR`BHehPQ>~?7!QN-*>iQC;Np}mf^d@ z!+mRPiLH5CVypLSVpD5u%jb@BfzM>WX10itp4t;o2uH@L8o!ck4Nvk^9M-MY`amd@C#+ii};L0^uto=ktR&8E3?Mz-JSEwew1KUhJ=lpg0*mg}sRO zUG&wntZSGQYV8Y7&wFficxJJVjC{)B=!QLWF53JZ)2&_o znv}H1XkuSL(|{_Ej7lHUM1@~psV&nFD{idlmS>-@iX56fO`oe>tU{j9*?_18tQ+<5E<#2kRQU4@H(ZmJ5w?tJQDN}l=@KB#pa$MM{ zy|gpF=RDuzUBc8S5Dk?a>;{W;b4i?E+)u9Ru#Ytbwa-LiZ)5DkY4EHwVt2FYzSqPS z^I~vHmIe&!s&Jj!E0E>bwpcVdsXe!EadsaQzs{L-zZmiRh8kYO?-f<(-cgUG9@P@4 zcS)t1AMq}APN-G)!qPtCvx9BjU^%|d;IQ9{+H$T~e$VCqwJ*bdNRj=#kFh%sss9X( jX#%AF{-mlq!`^&=S^aNZv+5?zqf#|v>UcLXojU&l4n|s; literal 0 HcmV?d00001 diff --git a/VisualStudio2013Adapter/Properties/AssemblyInfo.cs b/VisualStudio2013Adapter/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1926795 --- /dev/null +++ b/VisualStudio2013Adapter/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("VisualStudio2013Adapter")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("VisualStudio2013Adapter")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(false)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("bdbc88e7-c383-4c64-adbf-84aeacb7d198")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/VisualStudio2013Adapter/VisualStudio2013.cs b/VisualStudio2013Adapter/VisualStudio2013.cs new file mode 100644 index 0000000..7c737a8 --- /dev/null +++ b/VisualStudio2013Adapter/VisualStudio2013.cs @@ -0,0 +1,14 @@ +namespace VisualStudio2013Adapter +{ + ///

    + /// Adapter for a Visual Studio 2013 running instance. + /// + public class VisualStudio : VisualStudioAdapter.Shared.VisualStudio + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dte")] + public VisualStudio(EnvDTE80.DTE2 dte) : + base(dte, "12") + { + } + } +} \ No newline at end of file diff --git a/VisualStudio2013Adapter/VisualStudio2013Adapter.csproj b/VisualStudio2013Adapter/VisualStudio2013Adapter.csproj new file mode 100644 index 0000000..2b0574e --- /dev/null +++ b/VisualStudio2013Adapter/VisualStudio2013Adapter.csproj @@ -0,0 +1,82 @@ + + + + + Debug + AnyCPU + {82DF0AEB-582A-4B38-96FC-AAEE773BEAFE} + Library + Properties + VisualStudio2013Adapter + VisualStudio2013Adapter + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + + + False + + + + False + + + + + + + Project.cs + + + ProjectConfiguration.cs + + + Solution.cs + + + VCppCompilerOptions.cs + + + VisualStudio.cs + + + + + + + + {62347cc7-c839-413d-a7ce-598409f6f15b} + VisualStudioAdapter + + + + + diff --git a/VisualStudio2015Adapter/GlobalSuppressions.cs b/VisualStudio2015Adapter/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..221754a4ada668e62d96198ad330b1f6297030b0 GIT binary patch literal 1996 zcmd6oUuzRl5XI+N@H;H~q+nZHP@&*MQHn((LPCp(4{LUttR|b#yIaYZSAXYDmi-gz zn@~b>_wLM{IdkUB&7a>Vc4CRmY-yzho^DxJR`BHehPQ>~?7!QN-*>iQC;Np}mf^d@ z!+mRPiLH5CVypLSVpD5u%jb@BfzM>WX10itp4t;o2uH@L8o!ck4Nvk^9M-MY`amd@C#+ii};L0^uto=ktR&8E3?Mz-JSEwew1KUhJ=lpg0*mg}sRO zUG&wntZSGQYV8Y7&wFficxJJVjC{)B=!QLWF53JZ)2&_o znv}H1XkuSL(|{_Ej7lHUM1@~psV&nFD{idlmS>-@iX56fO`oe>tU{j9*?_18tQ+<5E<#2kRQU4@H(ZmJ5w?tJQDN}l=@KB#pa$MM{ zy|gpF=RDuzUBc8S5Dk?a>;{W;b4i?E+)u9Ru#Ytbwa-LiZ)5DkY4EHwVt2FYzSqPS z^I~vHmIe&!s&Jj!E0E>bwpcVdsXe!EadsaQzs{L-zZmiRh8kYO?-f<(-cgUG9@P@4 zcS)t1AMq}APN-G)!qPtCvx9BjU^%|d;IQ9{+H$T~e$VCqwJ*bdNRj=#kFh%sss9X( jX#%AF{-mlq!`^&=S^aNZv+5?zqf#|v>UcLXojU&l6Si8L literal 0 HcmV?d00001 diff --git a/VisualStudio2015Adapter/Properties/AssemblyInfo.cs b/VisualStudio2015Adapter/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..44f65da --- /dev/null +++ b/VisualStudio2015Adapter/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("VisualStudio2015Adapter")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("VisualStudio2015Adapter")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(false)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("bcd49beb-00b6-422e-96d7-abc7806f6e79")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/VisualStudio2015Adapter/VisualStudio2015.cs b/VisualStudio2015Adapter/VisualStudio2015.cs new file mode 100644 index 0000000..c57cb9d --- /dev/null +++ b/VisualStudio2015Adapter/VisualStudio2015.cs @@ -0,0 +1,14 @@ +namespace VisualStudio2015Adapter +{ + /// + /// Adapter for a Visual Studio 2015 running instance. + /// + public class VisualStudio : VisualStudioAdapter.Shared.VisualStudio + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dte")] + public VisualStudio(EnvDTE80.DTE2 dte) : + base(dte, "14") + { + } + } +} \ No newline at end of file diff --git a/VisualStudio2015Adapter/VisualStudio2015Adapter.csproj b/VisualStudio2015Adapter/VisualStudio2015Adapter.csproj new file mode 100644 index 0000000..4dacb2d --- /dev/null +++ b/VisualStudio2015Adapter/VisualStudio2015Adapter.csproj @@ -0,0 +1,82 @@ + + + + + Debug + AnyCPU + {EB0051E3-1DDA-418C-ABAF-C1DA5339114C} + Library + Properties + VisualStudio2015Adapter + VisualStudio2015Adapter + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + + + False + + + False + + + + + + + + Project.cs + + + ProjectConfiguration.cs + + + Solution.cs + + + VCppCompilerOptions.cs + + + VisualStudio.cs + + + + + + + + {62347cc7-c839-413d-a7ce-598409f6f15b} + VisualStudioAdapter + + + + + diff --git a/VisualStudioAdapter/Defines.cs b/VisualStudioAdapter/Defines.cs new file mode 100644 index 0000000..e51a1f3 --- /dev/null +++ b/VisualStudioAdapter/Defines.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; + +namespace VisualStudioAdapter +{ + /// + /// Manages the define collection. Substitution defines are kept seperate from the non substitution defines + /// so that whenever an expression needs to evaluated, we do supply it only with the substitution defines. + /// + public class Defines + { + /// + /// Default constructor + /// + public Defines() + { + SubstitutionTokens = new Dictionary(); + NonSubstitutionTokens = new HashSet(); + } + + /// + /// Copy constructor + /// + /// Defines instance to be copied + public Defines(Defines previousDefine) + { + if (previousDefine == null) throw new ArgumentNullException("previousDefine"); + + SubstitutionTokens = new Dictionary(previousDefine.SubstitutionTokens); + NonSubstitutionTokens = new HashSet(previousDefine.NonSubstitutionTokens); + } + + /// + /// Returns the substitution tokens + /// + /// a dictionary with the substitution tokens + public Dictionary SubstitutionTokens { get; private set; } + + /// + /// Returns the non substitution tokens + /// + /// a hashset with the non substitution tokens + public HashSet NonSubstitutionTokens { get; private set; } + + /// + /// Adds a token to the define collection. If the token exists it gets redefined. + /// + /// the define token + /// the substitution text + public void Define(string token, string substitutionText) + { + substitutionText = (substitutionText == null) ? string.Empty : substitutionText; + + /*if the collections already contains the same key we remove it and replace it with + * the new key value pair...which means that we actually redefining + */ + UnDefine(token); + + substitutionText = substitutionText.Trim(); + + if (substitutionText.Length == 0) + { + NonSubstitutionTokens.Add(token); + } + else + { + SubstitutionTokens.Add(token, substitutionText); + } + } + + /// + /// Undefines a token + /// + /// token to be undefined + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Un")] + public void UnDefine(string token) + { + if (NonSubstitutionTokens.Contains(token)) + { + NonSubstitutionTokens.Remove(token); + } + else + { + if (SubstitutionTokens.ContainsKey(token)) + { + SubstitutionTokens.Remove(token); + } + } + } + + /// + /// Clears any defines being handled + /// + public void Clear() + { + NonSubstitutionTokens.Clear(); + SubstitutionTokens.Clear(); + } + + /// + /// Evaluates if a token is defined or not + /// + /// token to be checked whether it is defined or not + /// true if defined, false if not + public bool IsDefined(string token) + { + return NonSubstitutionTokens.Contains(token) || SubstitutionTokens.ContainsKey(token); + } + } +} \ No newline at end of file diff --git a/VisualStudioAdapter/GlobalSuppressions.cs b/VisualStudioAdapter/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..3a23d96e45b2ae6c81504550807c2e6415181fe3 GIT binary patch literal 1230 zcmaKrOH0F05QS$g_#Z-63ci=_iXysDgo+^IBDS%OwyAg%p?_Ze&Rj2PQKEawZWGjLY@a-;&dA=lkIF?ps(-4xx}>vqZ2s%9 z*h4Mo4M@uR4)@q^iCwJRlqjo)ggCZ+%GxPC_`o#TAf + /// Abstracts a Visual Studio Project + /// + public interface IProject + { + /// + /// Project Name + /// + string Name { get; } + + /// + /// The projects active configuration. This is determined by the currently selected platform type and configuration. + /// + IProjectConfiguration ActiveConfiguration { get; } + + /// + /// Enumeration of source files to be parsed. + /// + IEnumerable SourceFiles { get; } + } +} \ No newline at end of file diff --git a/VisualStudioAdapter/IProjectConfiguration.cs b/VisualStudioAdapter/IProjectConfiguration.cs new file mode 100644 index 0000000..033129a --- /dev/null +++ b/VisualStudioAdapter/IProjectConfiguration.cs @@ -0,0 +1,19 @@ +namespace VisualStudioAdapter +{ + /// + /// Abstraction for a Visual Studio Project Configuration + /// + public interface IProjectConfiguration + { + /// + /// Determines the fully-qualified path of the project's primary output + /// + string PrimaryOutput { get; } + + /// + /// C++ compiler options. If this project is not a C++ project, this property returns null. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp")] + IVCppCompilerOptions CppCompilerOptions { get; } + } +} \ No newline at end of file diff --git a/VisualStudioAdapter/IPropertySheet.cs b/VisualStudioAdapter/IPropertySheet.cs new file mode 100644 index 0000000..9719acf --- /dev/null +++ b/VisualStudioAdapter/IPropertySheet.cs @@ -0,0 +1,7 @@ +namespace VisualStudioAdapter +{ + public interface IPropertySheet + { + IVCPPCompilerOptions CPPCompilerOptions { get; } + } +} diff --git a/VisualStudioAdapter/ISolution.cs b/VisualStudioAdapter/ISolution.cs new file mode 100644 index 0000000..8dfa182 --- /dev/null +++ b/VisualStudioAdapter/ISolution.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; + +namespace VisualStudioAdapter +{ + /// + /// Abstraction for a Visual Studio solution. + /// + public interface ISolution + { + /// + /// Solution Name + /// + string Name { get; } + + /// + /// Enumeration of all child projects + /// + IEnumerable Projects { get; } + } +} \ No newline at end of file diff --git a/VisualStudioAdapter/IVCPPCompilerOptions.cs b/VisualStudioAdapter/IVCPPCompilerOptions.cs new file mode 100644 index 0000000..6f0ee80 --- /dev/null +++ b/VisualStudioAdapter/IVCPPCompilerOptions.cs @@ -0,0 +1,14 @@ +namespace VisualStudioAdapter +{ + /// + /// Abstraction for Visual Studio C++ Compiler Options + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp")] + public interface IVCppCompilerOptions + { + /// + /// Lists all Preprocessor defines currently configured. This includes all properties, even those configured within property sheets. + /// + Defines PreprocessorDefinitions { get; } + } +} \ No newline at end of file diff --git a/VisualStudioAdapter/IVisualStudio.cs b/VisualStudioAdapter/IVisualStudio.cs new file mode 100644 index 0000000..f0c06c5 --- /dev/null +++ b/VisualStudioAdapter/IVisualStudio.cs @@ -0,0 +1,18 @@ +namespace VisualStudioAdapter +{ + /// + /// Abstracts a Visual Studio runnning instance. + /// + public interface IVisualStudio + { + /// + /// Visual Studio version. Identifies the incremental version e.g. VS2012 -> 11, VS2013 -> 12 + /// + string Version { get; } + + /// + /// Currently loaded solution. + /// + ISolution Solution { get; } + } +} \ No newline at end of file diff --git a/VisualStudioAdapter/Properties/AssemblyInfo.cs b/VisualStudioAdapter/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..abfa512 --- /dev/null +++ b/VisualStudioAdapter/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("VisualStudioAdapter")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("VisualStudioAdapter")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(false)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("03397212-1fe6-4f51-9cc8-8d1a807f648b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/VisualStudioAdapter/VisualStudioAdapter.csproj b/VisualStudioAdapter/VisualStudioAdapter.csproj new file mode 100644 index 0000000..6727e37 --- /dev/null +++ b/VisualStudioAdapter/VisualStudioAdapter.csproj @@ -0,0 +1,56 @@ + + + + + Debug + AnyCPU + {62347CC7-C839-413D-A7CE-598409F6F15B} + Library + Properties + VisualStudioAdapter + VisualStudioAdapter + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualStudioAdapterShared/Project.cs b/VisualStudioAdapterShared/Project.cs new file mode 100644 index 0000000..128772d --- /dev/null +++ b/VisualStudioAdapterShared/Project.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualStudio.VCProjectEngine; +using VSProjectItem = EnvDTE.ProjectItem; +using VsFileType = Microsoft.VisualStudio.VCProjectEngine.eFileType; //descriptions at https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.efiletype.aspx + +namespace VisualStudioAdapter.Shared +{ + /// + /// Adapter for a Visual Studio Project + /// + public class Project : IProject + { + private EnvDTE.Project _project = null; + private ProjectConfiguration _configuration = null; + + /// + /// Constructor + /// + /// The EnvDTE.Project which is to be adapted + public Project(EnvDTE.Project project) + { + if (project == null) throw new ArgumentNullException("project"); + + this._project = project; + this.Name = project.FullName; + } + + #region IProject + + public string Name { get; private set; } + + public IProjectConfiguration ActiveConfiguration + { + get + { + if (this._configuration == null) + { + VCConfiguration configuration = this.Configuration; + + // Cache the adapted configuration in case it is requested multiple times + this._configuration = (configuration == null) ? null : new ProjectConfiguration(configuration); + } + + return this._configuration; + } + } + + #endregion IProject + + /// + /// Retrieves the active configuration from the base Visual Studio Project + /// + private VCConfiguration Configuration + { + get + { + // Cast to a specific VS201* VCProject instance + VCProject vcProj = this._project.Object as VCProject; + if (vcProj != null) + { + var configs = vcProj.Configurations as IVCCollection; + if (configs != null) + { + return configs.Item(ActiveConfigurationName) as VCConfiguration; + } + } + + return null; + } + } + + /// + /// Provides the currently active project configuration name + /// + private string ActiveConfigurationName + { + get + { + return this._project.ConfigurationManager.ActiveConfiguration.ConfigurationName + "|" + this._project.ConfigurationManager.ActiveConfiguration.PlatformName; + } + } + + /// + /// Enumerates all source files that need to be parsed in the solution + /// + /// An enumeration of all sources files within the project + public IEnumerable SourceFiles + { + /* + * https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.vcfileconfiguration.excludedfrombuild(v=vs.90).aspx + * has been used as reference. + */ + get + { + var activeConfiguration = ActiveConfigurationName; + + // NOTE If this cast fails, it will throw an InvalidCastException. + // This is expected behaviour. + var vcProject = (VCProject) this._project.Object; + IVCCollection filesCollection = (IVCCollection) vcProject.Files; + + foreach (var vcFile in filesCollection.Cast()) + { + switch (vcFile.FileType) + { + case VsFileType.eFileTypeCppClass: + case VsFileType.eFileTypeCppCode: + case VsFileType.eFileTypeCppHeader: + var vcCollection = vcFile.FileConfigurations as IVCCollection; + if (vcCollection != null) + { + foreach (var fileConfiguration in vcCollection.Cast()) + { + if (fileConfiguration.Name == activeConfiguration && + !fileConfiguration.ExcludedFromBuild) + { + yield return vcFile.FullPath; + } + } + } + break; + } + } + } + } + + #region Object Overrides + + public override string ToString() + { + return this.Name; + } + + #endregion Object Overrides + } +} \ No newline at end of file diff --git a/VisualStudioAdapterShared/ProjectConfiguration.cs b/VisualStudioAdapterShared/ProjectConfiguration.cs new file mode 100644 index 0000000..6d96698 --- /dev/null +++ b/VisualStudioAdapterShared/ProjectConfiguration.cs @@ -0,0 +1,55 @@ +using System; +using System.Linq; + +using Microsoft.VisualStudio.VCProjectEngine; + +namespace VisualStudioAdapter.Shared +{ + /// + /// Adapter class for a Visual Studio Project Configuration + /// + public class ProjectConfiguration : IProjectConfiguration + { + private VCConfiguration _configuration = null; + private VCppCompilerOptions _cppCompiler = null; + + /// + /// Constructor + /// + /// The base Visual Studio project configuration which is to be adapted + public ProjectConfiguration(VCConfiguration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this._configuration = configuration; + this.PrimaryOutput = configuration.PrimaryOutput; + } + + #region IProjectConfiguration + + public string PrimaryOutput { get; private set; } + + public IVCppCompilerOptions CppCompilerOptions + { + get + { + if (this._cppCompiler == null) + { + IVCCollection tools = this._configuration.Tools as IVCCollection; + if (tools != null) + { + VCCLCompilerTool compiler = tools.OfType().FirstOrDefault(); + if (compiler != null) + { + this._cppCompiler = new VCppCompilerOptions(this._configuration, compiler); + } + } + } + + return this._cppCompiler; + } + } + + #endregion IProjectConfiguration + } +} \ No newline at end of file diff --git a/VisualStudioAdapterShared/Solution.cs b/VisualStudioAdapterShared/Solution.cs new file mode 100644 index 0000000..7604fed --- /dev/null +++ b/VisualStudioAdapterShared/Solution.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using VSProject = EnvDTE.Project; +using VSProjectItem = EnvDTE.ProjectItem; +using VSSolution = EnvDTE.Solution; + +namespace VisualStudioAdapter.Shared +{ + /// + /// Adapter for a Visual Studio solution + /// + public class Solution : ISolution + { + /// + /// Constant strings which distinguish Solution item kinds. + /// + private static class EnvDTEProjectKinds + { + /// + /// Solution folder item kind label + /// + public const string VsProjectKindSolutionFolder = "{66A26720-8FB5-11D2-AA7E-00C04F688DDE}"; + + /// + /// C++ project item kind label + /// + public const string VsProjectKindVCpp = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; + } + + private VSSolution _solution = null; + + /// + /// Constructor + /// + /// The base Visual Studio solution reference + public Solution(VSSolution solution) + { + if (solution == null) throw new ArgumentNullException("solution"); + + this._solution = solution; + this.Name = solution.FullName; + } + + #region ISolution + + public string Name { get; private set; } + + public IEnumerable Projects + { + get + { + foreach (VSProject folderOrProject in this._solution.Projects.OfType()) + { + //Call 364853 + //Loop through the solution folders (if any) to get all the projects within a solution + foreach (IProject project in GetProjects(folderOrProject)) + { + yield return project; + } + } + } + } + + #endregion ISolution + + /// + /// Recursively retrieves projects form the provided Visual Studio project + /// + /// A reference to a Visual Studio Project or Solution Folder + /// An enumeration of all Visual Studio projects (only) + private IEnumerable GetProjects(VSProject folderOrProject) + { + // it is a solution folder + if (folderOrProject.Kind == EnvDTEProjectKinds.VsProjectKindSolutionFolder) + { + foreach (VSProjectItem item in folderOrProject.ProjectItems) + { + // it is a project + if (item.SubProject != null) + { + foreach (IProject project in GetProjects(item.SubProject)) + { + yield return project; + } + } + } + } + else if (folderOrProject.Kind == EnvDTEProjectKinds.VsProjectKindVCpp) + { + yield return new Project(folderOrProject); + } + } + + #region Object Overrides + + public override string ToString() + { + return this.Name; + } + + #endregion Object Overrides + } +} \ No newline at end of file diff --git a/VisualStudioAdapterShared/VCppCompilerOptions.cs b/VisualStudioAdapterShared/VCppCompilerOptions.cs new file mode 100644 index 0000000..e3d7a36 --- /dev/null +++ b/VisualStudioAdapterShared/VCppCompilerOptions.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using Microsoft.VisualStudio.VCProjectEngine; + +namespace VisualStudioAdapter.Shared +{ + /// + /// Adapter class for Visual Studio C++ compiler options + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cpp")] + public class VCppCompilerOptions : IVCppCompilerOptions + { + private static readonly Regex RegexPreProcesserDefines = new Regex(@"\A(.+?)(?:=|#)(.*)\z"); + + private VCConfiguration _configuration = null; + private VCCLCompilerTool _compiler = null; + + private Defines _defines = null; + + /// + /// Constructor + /// + /// The Visual Studio Configuration parent of the compiler options + /// The Visual Studio compiler tool which is to be adapted + public VCppCompilerOptions(VCConfiguration configuration, VCCLCompilerTool compiler) + { + this._configuration = configuration; + this._compiler = compiler; + } + + #region IVCppCompilerOptions + + public Defines PreprocessorDefinitions + { + get + { + if (this._defines == null) + { + this._defines = GetPreprocessorDefines(); + } + + return this._defines; + } + } + + #endregion IVCppCompilerOptions + + /// + /// Traverses the necessary Visual Studio structures to retrieve any and all + /// C++ Preprocessor definitions currently defined. + /// + /// + private Defines GetPreprocessorDefines() + { + Defines definesHandler = new Defines(); + + RegisterAnsiCompliantPredefinedMacros(definesHandler); + + // Extract defines from property sheets + foreach (VCPropertySheet sheet in this.PropertySheets) + { + VCCLCompilerTool tool = GetVCppCompilerOptions(sheet.Tools); + if (tool != null) + { + GetPreprocessorDefines(tool, definesHandler); + } + } + + // Avoid registering the Microsoft defines if the /u option is specified + if (!this._compiler.UndefineAllPreprocessorDefinitions) + { + RegisterMicrosoftPreDefinedCompilerMacros(definesHandler); + } + + // Extract defines from compiler options + GetPreprocessorDefines(this._compiler, definesHandler); + + return definesHandler; + } + + /// + /// Enumerates property sheets sorted in evaluation order + /// + private IEnumerable PropertySheets + { + get + { + IVCCollection sheets = this._configuration.PropertySheets as IVCCollection; + if (sheets != null) + { + /* + * It has been observed (i.e. we did not manage to find it documented anywhere) + * that when the property sheets are iterated over in reverse we are actually + * mimicking the evaluation order. + */ + + return sheets.OfType().Reverse(); + } + + return Enumerable.Empty(); + } + } + + /// + /// Given an IVCCollection of tools, identifies and returns the C++ tools. + /// + /// The IVCCollection to search + /// The C++ tools or null if not available + private static VCCLCompilerTool GetVCppCompilerOptions(dynamic toolsCollection) + { + IVCCollection tools = toolsCollection as IVCCollection; + if (tools != null) + { + return tools.OfType().FirstOrDefault(); + } + + return null; + } + + /// + /// Populates the provided definesHandler with the preprocessor defines available within the compiler argument + /// + /// The base Visual Studio C++ compiler configuration + /// The target structure which will host the extracted preprocessor definitions + private static void GetPreprocessorDefines(VCCLCompilerTool compiler, Defines definesHandler) + { + string definitions = compiler.PreprocessorDefinitions.Trim(); + string undefinitions = compiler.UndefinePreprocessorDefinitions.Trim(); + + if (definitions.Length > 0) + { + string[] preProcessorDefinesArray = definitions.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (string preProcessorDefine in preProcessorDefinesArray) + { + // the below code is to support valued defines as per https://msdn.microsoft.com/en-us/library/vstudio/hhzbb5c8%28v=vs.100%29.aspx + + Match matchResult = RegexPreProcesserDefines.Match(preProcessorDefine); + + if (matchResult.Success) + { + definesHandler.Define(matchResult.Groups[1].Value.Trim(), matchResult.Groups[2].Value); + } + else + { + if (!preProcessorDefine.Contains("$(INHERIT)")) + { + definesHandler.Define(preProcessorDefine.Trim(), "1"); + //by default user assigned pre-processor defines have a value of 1 + } + } + } + } + + if (undefinitions.Length > 0) + { + string[] preProcessorUnDefinesArray = undefinitions.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var preProcessorUnDefine in preProcessorUnDefinesArray) + { + if (!preProcessorUnDefine.Contains("$(NOINHERIT)")) + { + definesHandler.UnDefine(preProcessorUnDefine.Trim()); + } + } + } + } + + /// + /// Registers the ANSI-Compliant Predefined Macros + /// + private static void RegisterAnsiCompliantPredefinedMacros(Defines definesHandler) + { + definesHandler.Define("__DATE__", ""); + definesHandler.Define("__FILE__", ""); + definesHandler.Define("__LINE__", ""); + definesHandler.Define("__TIME__", ""); + definesHandler.Define("__TIMESTAMP__", ""); + } + + /// + /// Registers the Microsoft specific PreDefined compiler defines + /// + private static Defines RegisterMicrosoftPreDefinedCompilerMacros(Defines definesHandler) + { + /* + * taken off https://msdn.microsoft.com/en-us/library/b0084kay(v=vs.110).aspx + * + * Only a limited number of pre defined macros is taken off the list present on Microsoft's website. The general philosophy used + * is that the ones selected are those which are always present. i.e. that their presence is not dependent on the compiler settings, processor + * architecture used. + * + */ + + definesHandler.Define("__COUNTER__", ""); + definesHandler.Define("__cplusplus", ""); + definesHandler.Define("__FUNCDNAME__", ""); + definesHandler.Define("__FUNCSIG__", ""); + definesHandler.Define("__FUNCTION__", ""); + definesHandler.Define("_INTEGRAL_MAX_BITS", ""); + definesHandler.Define("_MSC_BUILD", ""); + definesHandler.Define("_MSC_FULL_VER", ""); + definesHandler.Define("_MSC_VER", ""); + definesHandler.Define("_WIN32", ""); + + return definesHandler; + } + } +} \ No newline at end of file diff --git a/VisualStudioAdapterShared/VisualStudio.cs b/VisualStudioAdapterShared/VisualStudio.cs new file mode 100644 index 0000000..8f3846e --- /dev/null +++ b/VisualStudioAdapterShared/VisualStudio.cs @@ -0,0 +1,55 @@ +using EnvDTE80; + +namespace VisualStudioAdapter.Shared +{ + /// + /// Base class for DTE2-based Visual Studio instances. + /// + public abstract class VisualStudio : IVisualStudio + { + private DTE2 _dte = null; + private Solution _solution = null; + + /// + /// Constructor + /// + /// The DTE2 instance for a running Visual Studio instance + /// The version identifying the Visual Studio instance + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dte"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dte"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dte")] + protected VisualStudio(DTE2 dte, string version) + { + this._dte = dte; + + this.Version = version; + } + + #region IVisualStudio + + public string Version { get; private set; } + + public ISolution Solution + { + get + { + if (this._solution == null) + { + // Wrap the solution in a respective adapter instance + this._solution = new Solution(this._dte.Solution); + } + + return this._solution; + } + } + + #endregion IVisualStudio + + #region Object Overrides + + public override string ToString() + { + return "!VisualStudio.DTE." + this.Version; + } + + #endregion Object Overrides + } +} \ No newline at end of file diff --git a/packages/NUnit.2.6.4/NUnit.2.6.4.nupkg b/packages/NUnit.2.6.4/NUnit.2.6.4.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..379b15bf5cd076569cd68476cd21a17795c0587c GIT binary patch literal 99004 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 >hQImg~$(c$n`hbCh2eY%N!*i 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 + + + NUnit + 2.6.4 + NUnit + Charlie Poole + Charlie Poole + http://nunit.org/nuget/license.html + http://nunit.org/ + http://nunit.org/nuget/nunit_32x32.png + false + NUnit features a fluent assert syntax, parameterized, generic and theory tests and is user-extensible. A number of runners, both from the NUnit project and by third parties, are able to execute NUnit tests. + +Version 2.6 is the seventh major release of this well-known and well-tested programming tool. + +This package includes only the framework assembly. You will need to install the NUnit.Runners package unless you are using a third-party runner. + NUnit is a unit-testing framework for all .Net languages with a strong TDD focus. + Version 2.6 is the seventh major release of NUnit. + +Unlike earlier versions, this package includes only the framework assembly. You will need to install the NUnit.Runners package unless you are using a third-party runner. + +The nunit.mocks assembly is now provided by the NUnit.Mocks package. The pnunit.framework assembly is provided by the pNUnit package. + en-US + nunit test testing tdd framework fluent assert theory plugin addin + + \ No newline at end of file diff --git a/packages/NUnit.2.6.4/lib/nunit.framework.xml b/packages/NUnit.2.6.4/lib/nunit.framework.xml new file mode 100644 index 0000000..450552c --- /dev/null +++ b/packages/NUnit.2.6.4/lib/nunit.framework.xml @@ -0,0 +1,10984 @@ + + + + nunit.framework + + + + + The different targets a test action attribute can be applied to + + + + + Default target, which is determined by where the action attribute is attached + + + + + Target a individual test case + + + + + Target a suite of test cases + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + + This method is provided for use by VB developers needing to test + the value of properties with private setters. + + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestDelegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate does not throw an exception. + + A TestDelegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two decimals are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two decimals are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two decimals are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two floats are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two floats are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two floats are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two doubles are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not null or empty + + The string to be tested + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + The actual value to test + A Constraint to be applied + The message to be displayed in case of failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + The actual value to test + A Constraint to be applied + The message to be displayed in case of failure + Arguments to use in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Waits for pending asynchronous operations to complete, if appropriate, + and returns a proper result of the invocation by unwrapping task results + + The raw result of the method invocation + The unwrapped result, if necessary + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Summary description for DirectoryAssert + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Class used to guard against unexpected argument values + by throwing an appropriate exception. + + + + + Throws an exception if an argument is null + + The value to be tested + The name of the argument + + + + Throws an exception if a string argument is null or empty + + The value to be tested + The name of the argument + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + NOTE: This interface is used in both the framework + and the core, even though that results in two different + types. However, sharing the source code guarantees that + the various implementations will be compatible and that + the core is able to reflect successfully over the + framework implementations of ITestCaseData. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Indicates whether a result has been specified. + This is necessary because the result may be + null, so it's value cannot be checked. + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Randomizer returns a set of random values in a repeatable + way, to allow re-running of tests if necessary. + + + + + Get a randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Construct a randomizer using a random seed + + + + + Construct a randomizer using a specified seed + + + + + Return an array of random doubles between 0.0 and 1.0. + + + + + + + Return an array of random doubles with values in a specified range. + + + + + Return an array of random ints with values in a specified range. + + + + + Get a random seed for use in creating a randomizer. + + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attribute under .NET 1.x + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are Notequal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It provides a number of instance modifiers + for use in initializing the test case. + + Note: Instance modifiers are getters that return + the same instance after modifying it's state. + + + + + The argument list to be provided to the test + + + + + The expected result to be returned + + + + + Set to true if this has an expected result + + + + + The expected exception Type + + + + + The FullName of the expected exception + + + + + The name to be used for the test + + + + + The description of the test + + + + + A dictionary of properties, used to add information + to tests without requiring the class to change. + + + + + If true, indicates that the test case is to be ignored + + + + + If true, indicates that the test case is marked explicit + + + + + The reason for ignoring a test case + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the expected exception type for the test + + Type of the expected exception. + The modified TestCaseData instance + + + + Sets the expected exception type for the test + + FullName of the expected exception. + The modified TestCaseData instance + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Ignores this TestCase. + + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + Marks this TestCase as Explicit + + + + + + Marks this TestCase as Explicit, specifying the reason. + + The reason. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Returns true if the result has been set + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Gets a list of categories associated with this test. + + + + + Gets the property dictionary for this test + + + + + Provide the context information of the current test + + + + + Constructs a TestContext using the provided context dictionary + + A context dictionary + + + + Get the current test context. This is created + as needed. The user may save the context for + use within a test, but it should not be used + outside the test for which it is created. + + + + + Gets a TestAdapter representing the currently executing test in this context. + + + + + Gets a ResultAdapter representing the current result for the test + executing in this context. + + + + + Gets the directory containing the current test assembly. + + + + + Gets the directory to be used for outputing files created + by this test run. + + + + + TestAdapter adapts a Test for consumption by + the user test code. + + + + + Constructs a TestAdapter for this context + + The context dictionary + + + + The name of the test. + + + + + The FullName of the test + + + + + The properties of the test. + + + + + ResultAdapter adapts a TestResult for consumption by + the user test code. + + + + + Construct a ResultAdapter for a context + + The context holding the result + + + + The TestState of current test. This maps to the ResultState + used in nunit.core and is subject to change in the future. + + + + + The TestStatus of current test. This enum will be used + in future versions of NUnit and so is to be preferred + to the TestState value. + + + + + Provides details about a test + + + + + Creates an instance of TestDetails + + The fixture that the test is a member of, if available. + The method that implements the test, if available. + The full name of the test. + A string representing the type of test, e.g. "Test Case". + Indicates if the test represents a suite of tests. + + + + The fixture that the test is a member of, if available. + + + + + The method that implements the test, if available. + + + + + The full name of the test. + + + + + A string representing the type of test, e.g. "Test Case". + + + + + Indicates if the test represents a suite of tests. + + + + + The ResultState enum indicates the result of running a test + + + + + The result is inconclusive + + + + + The test was not runnable. + + + + + The test has been skipped. + + + + + The test has been ignored. + + + + + The test succeeded + + + + + The test failed + + + + + The test encountered an unexpected exception + + + + + The test was cancelled by the user + + + + + The TestStatus enum indicates the result of running a test + + + + + The test was inconclusive + + + + + The test has skipped + + + + + The test succeeded + + + + + The test failed + + + + + Helper class with static methods used to supply constraints + that operate on strings. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying that no exception is thrown + + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category based on + a name. The name may not contain the characters ',', + '+', '-' or '!'. However, this is not checked in the + constructor since it would cause an error to arise at + as the test was loaded without giving a clear indication + of where the problem is located. The error is handled + in NUnitFramework.cs by marking the test as not + runnable. + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + Used to mark an array as containing a set of datapoints to be used + executing a theory within the same fixture that requires an argument + of the Type of the array elements. + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + Expect a message that starts with the parameter string + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Marks a test to use a combinatorial join of any argument data + provided. NUnit will create a test case for every combination of + the arguments provided. This can result in a large number of test + cases and so should be used judiciously. This is the default join + type, so the attribute need not be used except as documentation. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Gets the property dictionary for this attribute + + + + + Default constructor + + + + + Marks a test to use pairwise join of any argument data provided. + NUnit will attempt too excercise every pair of argument values at + least once, using as small a number of test cases as it can. With + only two arguments, this is the same as a combinatorial join. + + + + + Default constructor + + + + + Marks a test to use a sequential join of any argument data + provided. NUnit will use arguements for each parameter in + sequence, generating test cases up to the largest number + of argument values provided and using null for any arguments + for which it runs out of values. Normally, this should be + used with the same number of arguments for each parameter. + + + + + Default constructor + + + + + Summary description for MaxTimeAttribute. + + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + RandomAttribute is used to supply a set of random values + to a single parameter of a parameterized test. + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + Abstract base class for attributes that apply to parameters + and supply data for the parameter. + + + + + Gets the data to be provided to the specified parameter + + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + We use an object[] so that the individual + elements may have their type changed in GetData + if necessary. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of values to be used as arguments + + + + + Construct a set of doubles from 0.0 to 1.0, + specifying only the count. + + + + + + Construct a set of doubles from min to max + + + + + + + + Construct a set of ints from min to max + + + + + + + + Get the collection of values to be used as arguments + + + + + RangeAttribute is used to supply a range of values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of longs + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + RequiredAddinAttribute may be used to indicate the names of any addins + that must be present in order to run some or all of the tests in an + assembly. If the addin is not loaded, the entire assembly is marked + as NotRunnable. + + + + + Initializes a new instance of the class. + + The required addin. + + + + Gets the name of required addin. + + The required addin name. + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + SetUpAttribute is used in a TestFixture to identify a method + that is called immediately before each test is run. It is + also used in a SetUpFixture to identify the method that is + called once, before any of the subordinate tests are run. + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used in a TestFixture to identify a method that is + called immediately after each test is run. It is also used + in a SetUpFixture to identify the method that is called once, + after all subordinate tests have run. In either case, the method + is guaranteed to be called, even if an exception is thrown. + + + + + Provide actions to execute before and after tests. + + + + + When implemented by an attribute, this interface implemented to provide actions to execute before and after tests. + + + + + Executed before each test is run + + Provides details about the test that is going to be run. + + + + Executed after each test is run + + Provides details about the test that has just been run. + + + + Provides the target for the action attribute + + The target for the action attribute + + + + Method called before each test + + Info about the test to be run + + + + Method called after each test + + Info about the test that was just run + + + + Gets or sets the ActionTargets for this attribute + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Gets the list of arguments to a test case + + + + + Gets or sets the expected result. Use + ExpectedResult by preference. + + The result. + + + + Gets or sets the expected result. + + The result. + + + + Gets a flag indicating whether an expected + result has been set. + + + + + Gets a list of categories associated with this test; + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + Gets or sets the expected exception. + + The expected exception. + + + + Gets or sets the name the expected exception. + + The expected name of the exception. + + + + Gets or sets the expected message of the expected exception + + The expected message of the exception. + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets or sets the description. + + The description. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the explicit status of the test + + + + + Gets or sets the reason for not running the test + + + + + Gets or sets the reason for not running the test. + Set has the side effect of marking the test as ignored. + + The ignore reason. + + + + FactoryAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the data source, which must + be a property, field or method of the test class itself. + + An array of the names of the factories that will provide data + + + + Construct with a Type, which must implement IEnumerable + + The Type that will provide data + + + + Construct with a Type and name. + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Descriptive text for this fixture + + + + + Gets and sets the category for this fixture. + May be a comma-separated list of categories. + + + + + Gets a list of categories for this fixture + + + + + The arguments originally provided to the attribute + + + + + Gets or sets a value indicating whether this should be ignored. + + true if ignore; otherwise, false. + + + + Gets or sets the ignore reason. May set Ignored as a side effect. + + The ignore reason. + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Used on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a method or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + On methods, you may also use STAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresSTAAttribute + + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of the data source to be used + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Abstract base class used for prefixes + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + The IConstraintExpression interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + The actual value being tested against a constraint + + + + + The display name of this Constraint for use by ToString() + + + + + Argument fields used by ToString(); + + + + + The builder holding this constraint + + + + + Construct a constraint with no arguments + + + + + Construct a constraint with one argument + + + + + Construct a constraint with two arguments + + + + + Sets the ConstraintBuilder holding this constraint + + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by an + ActualValueDelegate that returns the value to be tested. + The default implementation simply evaluates the delegate + but derived classes may override it to provide for delayed + processing. + + An + True for success, false for failure + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + Returns the string representation of this constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + AndConstraint succeeds only if both members succeed. + + + + + BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeConstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + Construct an AssignableToConstraint for the type provided + + + + + + Test whether an object can be assigned to the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Constructs an AttributeConstraint for a specified attriute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Writes a description of the attribute to the specified writer. + + + + + Writes the actual value supplied to the specified writer. + + + + + Returns a string representation of the constraint. + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + Writes the description of the constraint to the specified writer + + + + + BasicConstraint is the abstract base for constraints that + perform a simple comparison to a constant value. + + + + + Initializes a new instance of the class. + + The expected. + The description. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation + + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied EqualityAdapter. + NOTE: For internal use only. + + The EqualityAdapter to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Write a description of the constraint to a MessageWriter + + + + + + Returns the string representation of the constraint. + + + + + + If used performs a reverse comparison + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + ComparisonAdapter class centralizes all comparisons of + values in NUnit, adapting to the use of any provided + IComparer, IComparer<T> or Comparison<T> + + + + + Returns a ComparisonAdapter that wraps an IComparer + + + + + Returns a ComparisonAdapter that wraps an IComparer<T> + + + + + Returns a ComparisonAdapter that wraps a Comparison<T> + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an IComparer + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparisonAdapter<T> extends ComparisonAdapter and + allows use of an IComparer<T> or Comparison<T> + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an IComparer<T> + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a Comparison<T> + + + + + Compare a Type T to an object + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. This class supplies the Using modifiers. + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Modifies the constraint to use an IComparer and returns self + + + + + Modifies the constraint to use an IComparer<T> and returns self + + + + + Modifies the constraint to use a Comparison<T> and returns self + + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reognized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expresson by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified operator onto the stack. + + The op. + + + + Pops the topmost operator from the stack. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + The top. + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified constraint. As a side effect, + the constraint's builder field is set to the + ConstraintBuilder owning this stack. + + The constraint. + + + + Pops this topmost constrait from the stack. + As a side effect, the constraint's builder + field is set to null. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost constraint without modifying the stack. + + The topmost constraint + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reognized. Once an actual Constraint is appended, the expression + returns a resolvable Constraint. + + + + + ConstraintExpressionBase is the abstract base class for the + ConstraintExpression class, which represents a + compound constraint in the process of being constructed + from a series of syntactic elements. + + NOTE: ConstraintExpressionBase is separate because the + ConstraintExpression class was generated in earlier + versions of NUnit. The two classes may be combined + in a future version. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to ignore case and return self. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + The time interval used for polling + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by a given string + + The string to be tested + True for success, false for failure + + + + Modify the constraint to ignore case in matching. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + If true, strings in error messages will be clipped + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual enumerations, collections or arrays. If both are identical, + the value is only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Display the failure information for two IEnumerables that did not match. + + The MessageWriter on which to display + The expected enumeration. + The actual enumeration + The depth of this failure in a set of nested collections + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + EqualityAdapter class handles all equality comparisons + that use an IEqualityComparer, IEqualityComparer<T> + or a ComparisonAdapter. + + + + + Compares two objects, returning true if they are equal + + + + + Returns true if the two objects can be compared by this adapter. + The base adapter cannot handle IEnumerables except for strings. + + + + + Returns an EqualityAdapter that wraps an IComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer<T>. + + + + + Returns an EqualityAdapter that wraps an IComparer<T>. + + + + + Returns an EqualityAdapter that wraps a Comparison<T>. + + + + + EqualityAdapter that wraps an IComparer. + + + + + Returns true if the two objects can be compared by this adapter. + Generic adapter requires objects of the specified type. + + + + + EqualityAdapter that wraps an IComparer. + + + + + EqualityAdapterList represents a list of EqualityAdapters + in a common class across platforms. + + + + + ExactCountConstraint applies another constraint to each + item in a collection, succeeding only if a specified + number of items succeed. + + + + + Construct an ExactCountConstraint on top of an existing constraint + + + + + + + Apply the item constraint to each item in the collection, + succeeding only if the expected number of items pass. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Test that an object is of the exact type specified + + The actual value. + True if the tested object is of the exact type provided, otherwise false. + + + + Write the description of this constraint to a MessageWriter + + The MessageWriter to use + + + + ExceptionTypeConstraint is a special version of ExactTypeConstraint + used to provided detailed info about the exception thrown in + an error message. + + + + + Constructs an ExceptionTypeConstraint + + + + + Write the actual value for a failing constraint test to a + MessageWriter. Overriden to write additional information + in the case of an Exception. + + The MessageWriter to use + + + + FailurePoint class represents one point of failure + in an equality test. + + + + + The location of the failure + + + + + The expected value + + + + + The actual value + + + + + Indicates whether the expected value is valid + + + + + Indicates whether the actual value is valid + + + + + FailurePointList represents a set of FailurePoints + in a cross-platform way. + + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the values are + allowed to deviate by up to 2 adjacent floating point values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point values that are allowed to + be between the left and the right floating point values + + True if both numbers are equal or close to being equal + + + Floating point values can only represent a finite subset of natural numbers. + For example, the values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point values are between + the left and the right number. If the number of possible values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point values that are + allowed to be between the left and the right double precision floating point values + + True if both numbers are equal or close to being equal + + + Double precision floating point values can only represent a limited series of + natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + values are between the left and the right number. If the number of possible + values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Test whether an object is of the specified type or a derived type + + The object to be tested + True if the object is of the provided type or derives from it, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + Tests whether a value is less than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a enumerable, + collection or array corresponding to a single int index into the + collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + Write the constraint description to a specified writer + + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a NoItemConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + NullEmptyStringConstraint tests whether a string is either null or empty. + + + + + Constructs a new NullOrEmptyStringConstraint + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the values to each other + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + Generic version of NUnitComparer + + + + + + Compare two objects of the same type + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + + + + + + Compares two objects for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + Comparison objects used in comparisons for some constraints. + + + + + List of points at which a failure occured. + + + + + RecursionDetector used to check for recursion when + evaluating self-referencing enumerables. + + + + + Compares two objects for equality within a tolerance, setting + the tolerance to the actual tolerance used if an empty + tolerance is supplied. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets the list of external comparers to be used to + test for equality. They are applied to members of + collections, in place of NUnit's own logic. + + + + + Gets the list of failure points for the last Match performed. + The list consists of objects to be interpreted by the caller. + This generally means that the caller may only make use of + objects it has placed on the list at a particular depthy. + + + + + RecursionDetector detects when a comparison + between two enumerables has reached a point + where the same objects that were previously + compared are again being compared. This allows + the caller to stop the comparison if desired. + + + + + Check whether two objects have previously + been compared, returning true if they have. + The two objects are remembered, so that a + second call will always return true. + + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + The expected path used in the constraint + + + + + Flag indicating whether a caseInsensitive comparison should be made + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns true if the expected path and actual path match + + + + + Returns the string representation of this constraint + + + + + Transform the provided path to its canonical form so that it + may be more easily be compared with other paths. + + The original path + The path in canonical form + + + + Test whether one path in canonical form is under another. + + The first path - supposed to be the parent path + The second path - supposed to be the child path + Indicates whether case should be ignored + + + + + Modifies the current instance to be case-insensitve + and returns it. + + + + + Modifies the current instance to be case-sensitve + and returns it. + + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Writes the description to a MessageWriter + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the vaue + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + RangeConstraint tests whether two values are within a + specified range. + + + + + Initializes a new instance of the class. + + From. + To. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + ReusableConstraint wraps a constraint expression after + resolving it so that it can be reused consistently. + + + + + Construct a ReusableConstraint from a constraint expression + + The expression to be resolved and reused + + + + Converts a constraint to a ReusableConstraint + + The constraint to be converted + A ReusableConstraint + + + + Returns the string representation of the constraint. + + A string representing the constraint + + + + Resolves the ReusableConstraint by returning the constraint + that it originally wrapped. + + A resolved constraint + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubPathConstraint tests that the actual path is under the expected path + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Test whether the constraint is satisfied by a given delegate + + Delegate returning the value to be tested + True if no exception is thrown, otherwise false + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. Overridden in ThrowsNothingConstraint to write + information about the exception that was actually caught. + + The writer on which the actual value is displayed + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specdified amount + + + + + Constructs a tolerance given an amount and ToleranceMode + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns an empty Tolerance object, equivalent to + specifying no tolerance. In most cases, it results + in an exact match but for floats and doubles a + default tolerance may be used. + + + + + Returns a zero Tolerance object, equivalent to + specifying an exact match. + + + + + Gets the ToleranceMode for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance is empty. + + + + + Modes in which the tolerance value for a comparison can be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared values my deviate from each other. + + + + + Compares two values based in their distance in + representable numbers. + + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + XmlSerializableConstraint tests whether + an object is serializable in XML format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element folowing this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Constructs a CollectionOperator + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + Operator that requires both it's arguments to succeed + + + + + Abstract base class for all binary operators + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Represents a constraint that succeeds if the specified + count of members of a collection match a base constraint. + + + + + Construct an ExactCountOperator for a specified count + + The expected count + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifes the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + Thrown when an assertion failed. + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when a test executes inconclusively. + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + + + + + + + Compares two objects of a given Type for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + diff --git a/packages/NUnit.2.6.4/license.txt b/packages/NUnit.2.6.4/license.txt new file mode 100644 index 0000000..def2bb8 --- /dev/null +++ b/packages/NUnit.2.6.4/license.txt @@ -0,0 +1,15 @@ +Copyright 2002-2014 Charlie Poole +Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov +Copyright 2000-2002 Philip A. Craig + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. + +Portions Copyright 2002-2014 Charlie Poole or Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright 2000-2002 Philip A. Craig + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/packages/log4net.2.0.3/lib/net10-full/log4net.xml b/packages/log4net.2.0.3/lib/net10-full/log4net.xml new file mode 100644 index 0000000..2b9904b --- /dev/null +++ b/packages/log4net.2.0.3/lib/net10-full/log4net.xml @@ -0,0 +1,30525 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/lib/net11-full/log4net.xml b/packages/log4net.2.0.3/lib/net11-full/log4net.xml new file mode 100644 index 0000000..689e817 --- /dev/null +++ b/packages/log4net.2.0.3/lib/net11-full/log4net.xml @@ -0,0 +1,30548 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/lib/net20-full/log4net.xml b/packages/log4net.2.0.3/lib/net20-full/log4net.xml new file mode 100644 index 0000000..a0e318a --- /dev/null +++ b/packages/log4net.2.0.3/lib/net20-full/log4net.xml @@ -0,0 +1,30771 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/lib/net35-client/log4net.xml b/packages/log4net.2.0.3/lib/net35-client/log4net.xml new file mode 100644 index 0000000..a2f2bae --- /dev/null +++ b/packages/log4net.2.0.3/lib/net35-client/log4net.xml @@ -0,0 +1,31609 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/lib/net35-full/log4net.xml b/packages/log4net.2.0.3/lib/net35-full/log4net.xml new file mode 100644 index 0000000..55a19f2 --- /dev/null +++ b/packages/log4net.2.0.3/lib/net35-full/log4net.xml @@ -0,0 +1,31814 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/lib/net40-client/log4net.xml b/packages/log4net.2.0.3/lib/net40-client/log4net.xml new file mode 100644 index 0000000..a2f2bae --- /dev/null +++ b/packages/log4net.2.0.3/lib/net40-client/log4net.xml @@ -0,0 +1,31609 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/lib/net40-full/log4net.xml b/packages/log4net.2.0.3/lib/net40-full/log4net.xml new file mode 100644 index 0000000..55a19f2 --- /dev/null +++ b/packages/log4net.2.0.3/lib/net40-full/log4net.xml @@ -0,0 +1,31814 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Connects to the database. + + + + + Cleanup the existing command. + + + If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occured. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread 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 method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.2.0.3/log4net.2.0.3.nupkg b/packages/log4net.2.0.3/log4net.2.0.3.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..14dc7db7417de0a6baea3aa01acd37deba5873cb GIT binary patch literal 1931465 zcmb5V18`=+(>EI1wl=nHY&N!SJ>e7Eww>%o8{4+6ePU;0Ti^cQ`Yzs!ukM|y(`Qbd z>7MR6zwW8()1xd0355XmpBAa?Au)5qJ8=#U2KJu|5sV1T$i)HxWMTdfCHsX3Mq7yW zUqk<|{-5TamXW~Csra4>T;w{fr%qHuGyWa6a|5f)Un0GPP` z8v(SoaRQS4V{rfqQCPdWI`Olx0L`o|>`j2oj!qU1|K3VsSDtvoo=> zU}0xvl;Bq6UN#t14S-ReLz7Q42w)MB;lwuEuZy?-)YwX@|c6YCig{n=&s7Y2c-Yr zkIE(-BpI?{cD!+1D(cQPiKO_jA2EmJ!j z8%h)(O@mk5G#P(7HFxV$t+bj@vXNBVEPYfS1G9~&(wp}7Pw}uNBz!F+Y1h2f@4>;J zmT9g~v}^84r^VFMkMDomKP~1L{!p&$yn-&KArY6KE{P;S+lm~Ci-(&XJdg^UTej^_ z{bsUHrE-_-@Bi_M?C(qcwLgjFRxMlD$B2IqU;E2GnvjA@%ix4h3){3dnqQ-Dxo>90 z_R5-^(Cj%f{41_X)8|?o?PgID-Ds1|h#=&fonzfelY(|-@5tl}PD&J~rG$IBDg-i7 zaGD6-TzsGD&x6Y%ca(3TQKL~}*NNI3{P(%++JkZNpM*A zQW?e)f`N~PqbgHbZ!S=ra$`}QHYQ64QBqq zCYGqM`D0t3#MtxV*wE@S9Yan_wFxPF--N z`fHNY%X7pQbrWwHh6S}}Jo^}-2?2>a#Wrk-e7W=}S3TusaBO=)6%xB+qlgcMM|a+F zI**AK{=FCuvxj=LSIc~l+p4HO}X!KXF79VI%B#_ zcWa$O~{O^&-902%V`O|qfY$nn0JnIIgyXB%xE3UgzN6IB7xs7Wl!wID_ z1w47Mn0TZoMO3U5K|M`UynrOicZd{pYIq`6K14IKI`Fd9?_J!AeL>%59^aAyb-QO3 zrUye(Qh@S2Q4>ZKYcCxhjIf3#S7gw^RF7U zce8|?wYkL2@5S|34zWz^jE_aL1}z2hPsrS+`ZG>=0?BI2Qg!8idwy{WOZ`6I=BKr< z&1e6>ef)Nz@VcL;8NLb8R5ng=vQM&Lst=ON@ zA1+wGWSMX)CZ>)}=5?{Hu60KWkX~DX%T05Ka}@sKX?EWj7nYtv%tm)qfO70#!8%Oo zRr(Zuc{{lJf9iaFeQ`a`tZ#8uond*jAE@jN|ErWf^g z*nfpskqTQBcm%xP8eQF$0y;i3XE)4*S`A(<275OR{dQ`4{f|d$Umbm4&sM8?s(c=L zUCNkspAU)bIct%HB2xo!BQZ%$FEAH zvWe+s$7N;8=fu6V6WBv3k#ETU0#Rhw1D;o_OHPdS1?ZTeTqWA6SJUK{#6nIIj-oQD zs#K~a8w5*cti1}E9S@Xn7bk5_G)8iS%O=V<(bUR6S>z4#MzcQ1xUhkLmGc=85)W~` zawmQ)l0quY81)j{`nzZrKcXlN+-wK_olb$O+B9aMlj2Ur`SpC7coq$Tw+>MvQ0E-c zm@YHM|LIR)cf=AtzWvmZ`3K6P>%PJozx4q1`C1_SP9+x=nV*!}As)3>2q_DbLABP8 zL^zUgr32fq>!(GdW}^W>F>Msmy}XrA;|KP+8-r!n-g8$M z$aEH}f6#pq>Wz@O`H! zN(*|kE*IuOT_)2y`J^sw_8`yaxFpyN0i^UgraFh+0t#c_t*2oP8Dftm)lUb zIfdz~@X^rQAMIpw70%*@#YWT(C$J+YaxuiS#SVkF2ez#@828gfvJi=1WVKNfMC-j_ zG14pLuKb^mf1skV96+DlM1wBAhRYxq2{_#+kizQ{x*%i4E9=tIO=&7X!R}W5DLbFZ z3zN4QjzLZvcWl28?vw`c`tR%CqJ-}#oMuKR>{vxOsaWNc<(~*L9bJV_2FQ^D6!0FQ z@d6OegegvhMQsW)Z3+$N3dx2AG0BU~k-$3%iJQ0soX;xRkf@)+S3`L&@oj;m^s`Bs zRzTJKX>@gowwBO{F{DiSTSKLF zNhKd_TLq%OKbpwGqE&G3q-Fb9Z5kuGWL)S@$FMbSMMDE4Q3=kLXbAP-1L%C7U&wR2lL%E?y z+zRb1C(~A9-C-cpX29>ju-8Jh+k##*{HW>17h>`SUsA)lkmB8pI^Cc`WIc?6_qQBJ zeilY;$m4}2+1eXc6yO*@eP^q3G83Bk%Y%%9NU~$ma(mxIN+W-QT#|tk$Mf~hYow$c z5q30axh?}41}Z$G>6$^)N#pPWLI^O?8T0hH6>R*BGxyDuq`XWJC{j@{0bv~vw~ajo zm9p;kcFh~#n;3u+H_MlnyMG09wNgw@t-kKTC&ZjpQ3{H1s|0)F4)`QP2|p1qz$hgXvdX@G4hf8ok$R!~3QeWhb8o zz?7h+*=m1l6YWIWL{jaoj0L^Dm)g8U1 zy){oPSWJ(C`f&>#+v#uQ+g5!qqO80aWiqrhIp|DVl(poAcpm&?gm)J0EmLF0Rf+E_ z^E!m$}h!z`CUk&b=1Q zJv7(tW{V4>M71w6l571&T^erzisL^j)7?D}`u(t9X!Z1eHoBLv$VpuZ=K~z93Hk2* zwt^(d8GkbpAO!HPVY@@Tb8$D=pIQ(t6wHzn%c4$iu7H80*zzH2#c8ZDI9UP_%{?z+yVzl#a^2Z`{7g{>L!)$1fv zh!NYkHb#jJ^YSfn{`8GM15(2J;4kXI;q{CYDu?_&`v`&t$q$diIb2YAZuLA`8Qb7*$I15!j)3A%|`%M=$*8UJG z;N}8JB0gXyd8xp3^mX-=0$Ld(p1^!l~o1J`SEqFux48jgs+);c#Ke9DAsKf&PgmVMp|q2AzLM3NP62R2C{! z>VaiFgp|SkBN+9FR&LKRq`0Uz`e=fMD64e%Gee}c|ApI;QNC7&DA)ImN?Lz2P`6`Y z=haHgBR1SHoxfLgwp{T-N-->e(|mhp$uONX?Uw|v{iJOz*fn0{2&`!H_TT5;gq;lW zXD`@Z+QnPfvcII0+x(4cz}se%BREO)&@eMJX$IsiXYIk!knV{XCkTyX;U~3)BmZp5 z-XT0f-o390mE9Ty7Blf(uE-ae2B89Ejsg+%{mW!558Q5K^vht%4QT#L%Arjzcn>W; z9GhK91sMH=R>3kyXib-kS!GNb@y=^PfCZ<+ z6m?RENE#yyLA2X~k|%!zp4aS(&p@%`GQw@Wko z(yWcP$VZ~sd;>hPm1$(ncj{vZu)*4&Gw47LG;S)mv&BK(-`yek-S}w;h1zFQZO|X> zg&6}hj}l&T-RgjW79M4gv445hgnZDM<`j_$M&Z)g=C1~{!wuz(9Z4vqsT)U6XKdmL z2l)Ln4BCp&qYh(zEtRHwWM$Ie4dCCO^>aTxVrRC=E#$Z0N8IK{HEfuB;uf4&^gikT zlAo*AAepIUO--%F?0O!CdMf&LY2weCa1B2tKk*%`ISDrZwOhke`L?HWiVZLfA68$c z`oow>WLa*Vp+VQ1-izaTj8%4MYXu#QR|7NJD?8pW=vg*WYRgXLq8Hx2oPxl4Nzw;h zPF1CuU&+iwMK2}P9%Vo?D9#eBICn5B8f2XHZInP*fJoq$1ZhOLqN~tp{~xL+mS+ddRokiJzPZj! zYxGHcu`5s65V(JN|4tlH@sMDREKWV>Laa8qud69(lP7pZ1QlUT_bM*VvTB~Ga8^c# zCzvY9>Bptq{$70flWvjSiO{pIk)&#)qr-V$rIBl*r#M@jongjM&CnK!*DQPe${+Bc z84~nCMoN&c&|&G4hcqZj*4<1zaPe!T%1nWSNxQCFu^K)W`9VNT<+KBD3Em5op#4eJ za08}4t)a`UFLqnSggTa#PRK+Gi4mgTkytwx2g;4^jn)_O zsJ(pqLVC!*53x;_7g3|22XzmOx|EYkOMtaDy@1Bld}{@#G8GPY{VSq{K7^hlX_@JP ze5Kr@pcJ*4&1YU9VI@4H?r)nte9I!Dw!EKmCR1GQA6AJ891tyKryS)W`5P5ssDV1^ zKeTshXG{j~vCVtQU?2&taIZXuECXT*NADi@h!;UN3ufmXAb5^lmOa|j4W=8NT?08xQ zdNo6ker8<*alpK79*wUhB|JOSTi}(aKK<$)NTdP?a)H;g;U+K7yUwr6U9y6;KLt7J ztKJ$y>o0rcWATG;-aM&4zWV$(G@nw6nj1e$1XZb|mA-soan8Q=xLjcFt(+<>2`!

    0tnC9ynzyVx!qiI~tsHB|>%8i~jgGfAaMMCB4n%O%C-5FfW%?P&u# z6Sql9b4j2Mvx#l7sq`TcS2_mc8TbFljGxRz7wgqmRcs~`)63eft>)9Q(Jy~+>riw8>p5cJoqg)q2jz_TzZ7= zga5k2j7VVBjeH-zf~vIH!0E{&gh9e>Y6HaMd;;$a0QzGj_q~jVn7y_e;^Y@Jf#lx# z2=8Dhj)iAMU}3FoQ89j-3v54r21YY&zMyo+jgN;0%S^f7xBhOk`3i8V4sDVRSv2?Q zgcl=WYpOJgry`qFO^J zH|@Wfg^p<&zZ8K7@XI&s1TR61?1&lPG?ObfFw6a9*&=Gfw*Ev%2)RpOYFM&yL{?fx+YCG-&QSU2ln zkT{{&D~tU5vz>>jO6hFi^f;o+qse^%9hb%$+ixKsaZPf&cbodvJm)W_{Xj6E#5^^a zrp*XG0EE9M=x*pc4{+~dv=O95u0pu$OGV7sWmVD4yD|q>%T~;4$WM_o2uX$Nd>(dv zcxC+B09U0tG)R}P9CpvRk>Sf5cd9u7c;CZfd1r)_T;ro%FM{g|M0w;wR^B{7cnW=+ zGpKkcam3c$9RPMzrcAVCOC1F$DGdk-Mf-$@6F%G^-*08Pc`H3B@iWl%Hfo!r+@Di! zG`ejNqqT~_<3h|S{hpEr3fOwXu~z{_A(YwHlR3I$$+fa`>`jwBpqVKG9|vv49X##C z$-G`axUN0*Z4?QzZ`}87U4#-xe9`SS&jw;%;JBz_ra@DA0qk5Z{^U3CDGrnSL zx+RS+Qjr4A`l$RqgU^=!9;t4vmtRK7wA#t^;wyOX!O7}Uar0+u%L(h7mo;epMiK}` z@S|!0hp0m7i%S$00^S}*tK~He|1r@_rZurbr#sm|PfEUIlFg21Ihf--p=V=-(5E6Z zw0|9|s~p;yH$Ju+HweCHi2Nxb{6~T{V`@?L*bmH?a0{+2uznp0hY$7uGUPKv!3#W* zcww={BkeEGI^RzZr>;DRtX5mdI6z528T4d*nxO~R)Rua~rOx#RgWlGr0dnkES!K;x z0M2uI&D0M>*aEr}>Per-j8;>thC_FigJ!{g*SuB1=4{LLif+b6iS3kq#PVfa@%R_< zQ$|lvBZ!&hQ1qZj&8Z?w9N{i3Vd6a4Rks!=mwMF)>ed~BIbn(1B_O5D$mz6^W*C9Q z6fYoA55s+SOuQq~@pCy*OxGdL`sj8c7e2}+{gwbXu zd_(Lu%(uS94;<>7Q8F^cwx&RgXi+iiVafA>iZ6oBZc)S|(`%?ahps!9WZG92ap#gY zdzYi3Zvc$n(2Vv~F~@wz*%05k?8r@wpk|HWID!68n1VXMob9~zeF2>HWZK2NX+wj~ zpUXm#Zo8oQ)tiErtfG^B@8|ZQFW0Fbs3^ZiAeVE?7d0A~tjX{2yX-8HCQB~{=D zHG?lt1d*4`P7tfP3~w|Gqj&X!cFFfQ*?-#})N$$qWFe0u-aPaQ8qYe>*IYZ%Zx&I9 z)!gH^ZLIxYm%a)LB)4C@w;K@m@<;EzthIr9g$al6bb?-$3zoW+c77hB0jNpxy?~+k zdYaVzk6lE;6ZzB{V)6R~fWd^|ZXw2QFic?KjKoUNG{--xlQ5{`(rNejOr_%Uj?sid4kJ$h1CUBQDF}W=!&3$=-yhKrf?=VGIwzi9 zK+o?0Bjs}U;U<$=Begy+iAn_Bu3fARF>{Itu(_b1jTRWO!sn#k8e39+eeUhnuVL8& zamTr>`bp3bViLt(WnY-?LnL3MZvtf*w3PQn36G#t^(x{|)d;jp@r0rs+L}fJ&YO_5 zIp!BCTy1O=*}E?@u}XRXCMWUFoSlO<@rx$_wr&^wU#XT1atR;;{_X??t1&|{V%Zk3 zzo9}-dGn7?f$F%lKA8GtK!^I3rGbkdt>*Sl>$WM^eyM)Y8AfIy0v#)HVA@;L{6!zD zkc4Wq4S;l}$h!y@d{1hLez}n9ZXjD_Ou$U=@)f|H_DqvV3rV)JNXGx^fKRs>s9S7q zWt=cM)U~osK{CIcNVj4LhQX2hDX(`?@XUNN3-^sLhR_d%1yDCjdszPZ^$Hv0StI0p{q`1YV!KgunRJl7F zK>B$8!z|{>HN;=@V!48*xKmh=6}-DV{2o)qd&6gH`9oSgfJ^Z~D}#gWtEou7(PD>V zsZ+n-$=Q=>kgnKmYi`C){kEk?ElpHA(>^l?Y{$|t-(HAogKsAWH{Ki>Cd8an9rB!zp%cdGRPT<#v z|4u8x!9{@K%mc=(P5uw%!+;=oT(04DvW+hawNE=vr7o>v{m+cdqx}`4l-|Sb>EZ-H zA!-k!u{$d){!vCif+fvxnNO`O&&=2Fv4b|z{b9d~wsGDkY3I|)3z0f#Ues{sy~%5| z6#p>WS(0#dVDmRocBMcA$+qpRGSoL{FZ{I26C>%5UbGxcF}lJHGmNzFKnl}TZ(9EyI6rDWPK>ZA{uB@2m_jvE&HuS@)!mH^gLKgk=4 zI=?Pyn;u?4)cZ{C@P*w3JNBXy=PKcJgV&%& z+|_&TfqNmA)0B6<@fuxwi=uB8(RKSxZtgsoVno5|n$JQ{291I?R)my-$#9F@6o^zVR6LWt@TQo9{bWPemJ>%$vvG30dj~B*= zpIRKcBJgF97BJhLer&yVqP9<5d?tA1q{XPdLLwuwc9KME~v~QJ1-Boy+?O`g%6nS6}|b_a zn_K8T_~IOKCYZ*jnoVN3>5AK&{>RlYfN~N|IbxJyF8no1bM)za$&;Bi}c@14CKH zop>KUso#+I9bF(7-xVDCV8o*UVZGy@C|f5;s79y&H;HMOp7OXgF}5+22of&X=4tIMZrP0GnS0{)t9 z-$-4m-6}r&fJA>9q1+%WAwgP^cC>tWTREB(9M*?3-f74n8z|@Bg2Cgh7(G359MecJG7~6 zWGJ8QcY%*2?&Z_48si53br77&}A|+qI zo*q{B{M z=6eqOcV}aZV3ke-e~5mPnt8T0yC^Ug;ll9>cwstcVJqoqUp@Z4MKpp;&0AJJ_lpyD zcQWpIYcpJa?Ou2`z#tZ*Ib4<=BJjcLG5 zdzp-6tmTQfsaxOPL?)|z>pKeljCCRI-n>dPONKEx1esgxtHX)NAng?cYqLL$5Zha= zHE7*F@k8quD8cb<)?6vK5aaO!x36IMBnUT^IN9|0?$|{mU_k{fSLfquKXTS5+e~1l z1H1GI$(359@6yypvA}P(ET&l^@ULss?Y$AyuLb*NX>@+s{oC*+GOoB3kON(2Y=+s; z$s%Z>4al*#=2uq>J6j@U+x`%z6oBa}!?d;9%w;@d=1w_*z}mBB{MZc@3!chOO7yMi zs+Y>zx<()8v!$X6ZNHw@HB1r&2#87V72<+=mu7ti4Y%_$OEuJ#V$KbQsVJBg_0e zJ+aMK58UGwbyGkR4xV<`*g;RMKB)Qqtg0`A-w4oh^C!^KYG&4J0D5LDk8-Re?g_fAWtFxavDcR(_Xl*DKp;@VYBiSnQ-D_pRa#Z0>lOmVCUc@! zppnBWi395j%*SV>Y?oXyJdWlReq*U&s5+!ad!a!0ri{ zzw9p{TQj;dGQ~#p=@FCX9elOvXApUnhInOeO6fiyw| zM(i08<>pBE;S_mPAo1bs$#A!KS*G*};SuKdmLf^@%3du=wE%-mZ^hI`0cKxp}ddgL71#5jD1Mxmow-)5mo!;;}z%dwNH+kvIJlk$8$3Rits+YF2 zx8aa?2ob@CO5*tTK^n;prQ{Kn~JgFq3DRE_XI}0RiWoZ`p7Md0>J_kgK=~p0NaV zNV&o-CrQ5|Br=%=yH3c30w5+9MUoFrNayQk-elUYq%Y*i*l=(mu$XJ~9s*KRFQps4 ztkXDiA<0g81ICvya3|8U1Da@u7oxhiP@DqqrB(CYUZ*Hu<@0)!zSUq42x$y3nessk zboNgpDnF6s?976FY8(pj-q}|`RwYsJW2TkKv1+Kd%V`q*Od}k`*0Ch`IN&&-p1(T1 z$E-;SJ;M{Xl3W?QT3H=*3utOZc7@6(tqPGGa8EMfuEDJmB`D-fd!cmnUxD&qZzPpm zf5VRn<*sdUCdPUid{bK-V>@n zB02owExmtvW-r^7^qX0^-8xJnh}(10=U8XD8vstwBST7Du#tKVjKorH@oWSk{K zjc14Vw17~W3Ma9=-`VyWX%=Z6JRJrRlRF|G1Yln}_G#LKwn(gf=oW~-{ByV5L)_%< zb+*E>k7WWPIrVx?fc#X@eo5Aqna5&HS7q~P?^g#8J}C9L*^GdVi2?5Vs?p|jNNci> zVSFWk^(l3vQWi_WK5R|PvW+6hdDo0}s3GJ#!rjZl>Rjv`1$2N3{1Vw$&D=puC zB8|&SP0w4qxf?mhGwSZJ_>v~fPHOb&^mIUQl`%2O3&%~?@!@8eFvu-xx4^7Uc?Q4^ zKCl=Ixt!Io6QbN*jtq98Lla$d{7C%Lip&B}Ve$U`gc^SP%2qX$VRVbp<`z-LKkbl( z-2`Nb1`M}53u~h6i^E#Ez=1M5h4RPYP1!s;f*35dHOQuc0^o%{v{8M%_53_kl(FHt ztlsOENby_Q+TFhWWHW>kA#K{=p*KYQG$kP)r1R!``vavDfCqIoEOG+mVH`qIHkTPZ zG}h;ueQK@QLJPRFXSTuUpF2-2fT7?vF1H+m{(`b!#E&H0Pfs@<0(dO>DpRulA@m4Q z+FMe@SgHbw7CfrF%P7At=Gn*)az_3RWsIJfSj8e^Pd#iH8`|?vPQ{hIxV9+vZCMsI@|rTDTG;%`)g1n)4q&X!6?a{PkH}N3MI=7f zo!gjw)HcjM5SR($;-94`P01RHRO`sqRSx*XiTtD&kGuF{u`M%I>Q}g{ry=z<&%wK7 z&OYEw)hW$6#b>q>Mm}wCNC@i``)K{?|2J{N*Nc(3uMuI5>-+>+xhueBCA!Gdp9F}d z^DHK|KRKD?2O__K#~Zuqkog(`uOsAzd4m$?F2tD&d5 z1vhACO4|@!dQQuSzllRhBSy_eUW*`?^8|g}o;JZ%uA8sbuWZ>ja+Cf~IKOK>`MbID zoJk2kY6bL#$Em4S;+$4Id-F)4JRty;G-!P&Vq(lD4`f*B7F6RUQk*n|t`85R0>Z?f zAYat##Bfhfbb+tM@w`LAFVwFSVl9Wj1)%0_!}Ehx&>zGrc+H}_|8ZR?)j(AQhZ$ql zguxfvg8k7KAKpX#z75Fn*nf2;JZ{?|vR{A~Pf%}3di%3B&Jf)MPdaH@&*C^`(4?s-eO!eNy>|uk$`RtpCWB?wA}Cr zcwJ!zW5@(7}$6 zM6Go-#tKRNmA|e%Y5x7japzsEB9q@~Z%w*X7)ME+f^aJDvD4pC{dneeDTi^i1w=W_ z?M5g#Z}G6>oWex7BVC|`78k7hE||)?MW$J;&RfJMBnaC0ie^ao39aqJHclm}3g>_t zQb6&81q=$u<~835$qp_*&b$RCRJ<|$Ud-N(Nb(m?2zpIeD$|G+qS4a#81=)7#sxd4 zeG+IGIe!UNtO(?<{1J{2s&-f?Wz68sTTNi|Xp}&_CFt#QVp>rgRVSKh2>#}&>12%A z^sQ4sm;Z+kcb*0D#MsRz$#?|+5NT|LvzkFfn-63w_$RnRg&JqMh%@KKk4L0sKzklW zxjbA10)cWb0I|zpf<5BLx~CTRi{$Mx4@gV~FY)Nr; z4_}x$xWB}(BF!W_&_i4|{~p=M4}aW=8Qv%le{4U*hUp}^C|#r+i!HZ+LSUje)Fjs} zuCUbXH}|v5=`#1{k=GGP7!LXO?Ol?kGQ1SV>XT9eg$h$>S;U91DQEn{NK(+PApU%L z%(woMt=A#ZZoU!=oife~Lbu^M&#FD{TzCX@$ESIjJZB`K7@>&2I~IJVD#I|twujJz z-%B84D#-^gMqSxLd6-Vi<=^09vF(nN55(&rC?)2AlV)NkrOjc&fJVKVMum)2w z@U%O~S|hH%Q18Bg-!q-C(Rjex9cD>98lJ%a5<|VGfPGN}{&Bf)&Fe-5XFVPrNgv)1 zOn|#K@e|KQ$)8)RRv6pYA9Ft{Yv!(>>3Y_8XD`tuNk9j4%>_H*%gF@ZtsHfMQcYrS z3S_*HBDB?6nzXq?ywzzR~CcqZN%Hzcg}e*)06`x*hazO1+RML`8}lj~kCYpav<}i34iQ6fmrPOHjy^c0t68arR-9Kg zlp8g)mu-|A&fm?q0(>zpJ&B(HLwSjz0%D_7y@_lxZDzmP%u<}l!H$`BHxB(14`1K> zoyveS)omN>Aqq3YzFwgx+9wbF`JQ&0(f9!ik6Lzrs5dbWwEDIHNo5(X*M>A|y-zvy zgUiJA{YJ?F5ImD0K31BnpcYuzLjuoyF08THc>%bhf-(CZH2hA46^Ts&2DVeyI3nd7w1^(^z% z<*nPhZ?4U!^qqpW?26*EFuU2&d~=m0z6XT5uZo%UpcplCLotUsWUnbhI!e@}{p3!i zd*C)dT~7?JrlKiraxWBvbhLzK(Kh5tsU93Q#Q5N*9G>Hrd0P+F*}$Qp3o`<* zkk4qFPsV-YP2#Ph*h@ZjN9=CIzj}aa^Zu;G>sFhdhUQXq5!D?f*^?x_7bJeD53945|5i@0;Eq+}BV=d46&M65YQG$e$I)RK0 z@tJ3Nv`5}vKHR{XLzdw5CEoD|+?+OtI@lIQw!^ogV6^xAVHBEr2!&Y}Zqtuf-Z``=vu~ z`yoc-1aTQoT9jJ@F+7&ZamX&Oc%uTSH-)y00gSHOlCG0IEFOch9`m5uv+fc%c!9zdDCHA8z z{zhYlhCc@meA01`Tj5JIg*Dq{S-^>8RMu*0^#dMJPoZWUgnJEP2qzTq4PcU{kl;5Q zBXrqa$McDWtx;ZXAyQNej%6Y9Pq+&R>s+m@)<|iLEObPfM>P*{#w-|toN3U4r3+vKrOUv1P21DYc~mO&K_=fWuE+nH7o9qV$ZAz za;H6CfT&W10IV$JI=EHSw{9z&O{_h|4UCPUMzL18hU%8Z3)Wk^ytGh(Ni-i;YC1f6 z=V)<d)m>ghu4{09OgH6yd&gdjYSrvCSWOk&>i1%IbAI6 zWN)by%5fT@tlnJ7IuEC@G&bGNkHy9mOn!0>g6NZksn!5be#jAO&3>Y0LS`W&-kD#I z-OwmKHn?^oamTD#l7cl~{S_oCn8Gotb0L!+lCy9vlgVw3rT{??5>He5Qtezi>Fn1m z^E#!gWd7`3EPYeSI$3fKlx=AYky=!*L6ROh@~h?T=d5-! zST-|r$xw(O>`sPG)A*k+Q$GP%ut&DH5u^(u7?(laNUKD*f$0x^^@gx#XIOlJ2}<_*ook8&Y0ekwOM#vT=#^rsZr=$u}m^J>DocE~p&l z6yte{Jh$Knn`vx@tS?T!r?haIwaH2cKKMzB5iNFtkRD}WkH6Eh%0+wR;IJ^i&pf+2 zE-o(bcsMZkvJ90yK?~)t5rWw3AeWEhVH6K8LQ$_WwTW9LRD~|ks=tU+oIIACWxlRb zLpxK*AKAqVUb0?W)|2lX`t1^a;)XI%zjXv5`ZlFkoA)bR32N)h4z5GH*>99`Zz;H6 z{YYn)$@v}haL)Pew^aC5c-I^J_?KL3XYGObAa$&(GRXS??EKfZ%0Q)Am!7knA<)6e zN*SqJ%~-?a?b%B*lrW-rDV@ zSeX=d95wz#jBd7l>>2=70idX2-U-16cGzr3Kj443mdV_3xYky0tXB792wQyTIv9k) zr<2cO9(JB!!ziQ|->F%D&v*L)o(>wLb~x$KAA2G^EP{v!qa8ft48W|0Jl*5Z-&-5% zc(xZekUv}iGRP_cg@4C285iq~CvtL`Hvlh{WdJQMyfKbcIIXfcU%_{2jhqZR-pc(W zsc-Z!?U=6`p3aEbkZ2B&SxGEy!{XWThll;TmQMAe{SPmJyp#J%gD>wPy4f7+z4(T` zpdTN%9oP>!X%9K&O*rg7kaq7CMpJM1DhWGdCLZGx6e_}2+qNN7D{Wakq9^cWK-Jmw zC})ktS19Fy=zj#VswsVS7fi!lg0^2C77FpfsV^omqZsdGwg>%vib#Jk0j>? zio@sqM-xuMCqoAJ!VW#>89X7aa!mp2R5HC`PBM-&N&|T;7wd!1PaR|i-s;lIORDg- z!LttD^6aBGFUp9_*-8o_;0&bn=63s~VJz8CID>yL*f@#i*aLmtH95s#(%72iN`qMY zVM~5}?*h5xz(HZSwlPZ6?SLSRHIM864EMP;hWA9IJ~xv^!6G8F-)~L5FJBM_N zk0dw|F!J7W==nHiUk(@ur=v|Q28}__W6WV;hLf>q7KE4TyI~9qP)BNo)%!asQv=|F==7$ZSx}c^?uFpJo#Z0Ek`wiJ zoO!SklX7*O`D8TM*lAyN=iI!2g6kJEKJ)4qf3>~Fst;xAkk2CJa#PQ?J&~+Xf5Xu-elTY4zE65#wiI{?M?At$gImJCbg1>^DzzRFDOX6VBlTH zJoS($mDE6j^}XaqM15}Bn|W-iV4}nxox(u2Lg4{sLYH+~*c42vFo7QRy=d&z%MWHl zw!Ezkx2ogIthckF*PPxG^S`~7QmsD-D~+#%mnLTF>2kAaqDxbU1 zP^D!d%ZT+fM>V>&BdvjM7>&$0E~N-+kiV#}>}M`22fJuQ%npP%jK$7j zMfMjhQwr*_udb^rj4uE>&>m*kg<|TQOw%L~Nm+xVwEEDxJGhe!W`KCpFSnN4c)e;m zy0V6i8+VB6md4ykpzl`5zy${8!Y8w_e|A=6AZoi!frr$4NhPQhsigpOqR?25%X$j7 zCU=@0w{Kpf@afVN8FjpV=8o|WvR&lFX5|K`W0lZg(`#y=w=dCJ;^w>Bt1-&`#t~qM zxf)==Dvhh85#TYE^zg)+0BU7WPgrh6qj%)d_HmmRLWw8;1F2bW5TNusN%Lnq2k>yL zkP30RCA$xH275C<#E*nXX>t_t)6m!feu6oL_RxT~aOvBtydw!OHdv%4M0`F?Swvk7 zfSp4sz!4Pn>lSsT#oZV)UG9x<>WXPD!|1*DCrj_MV+&~Y`EJcAC+y?LAJfH#{?f1> z`MaZR5(6J#KEE)9J}7T}a-t`8cL|nrTFemiI0U0FGvKjc^+}bNc)i7}$od>q3xCru)jZ&LCCp>d>uV>SEBo8q!crJdiFjPK^|h5ry2s z+=;T{Q(|o4o;b1uDh;jHtlNjbK0>K5SkmdJ>{WQQhb50+L${>0y8Jz>oIYy8G2ULI zahm}q{RpiY#Czn$^+icFs^x+zc&Tm#DY(|8uG7@B&XyjRDC=@kT=t1pKKlGS+EF&Av8gZE4p9f2A$s?x2@~lHr?TF@E(*;Ws%Ik* zcpbX$r(qORze8l~{;i0E8xLgCLUQD;SULYdkgwG8I==AB5 zq_EEP`F^-5)#J{k5XzOkD{qJB9-d~wv=4)6((=T$u|u3;#BmlcbOo~9(ehC%&Sh(F z9m4LQK=iY0o7092g8t~t3t7C;J6b$>b{^qC-q%uDOAjzWfFk6eTAmj8?HE|=)fV|H zcK=Tr>c|_V>&@|Nq7nr50dLdO=`5stV^Ya;N03`i4qF}!6Y-a4uJfHA3aAaodX{g4 zovjdaymE%R`bAMbmM@28$${EIY&|=3>0eIqg=nVn{9CEtPo8&<^R!oqA)X_!l820; z17~GoVpys@BE5u^0ibmgcMqvM{&PpbwRc}Y#UUviQ-ICfEo!XI%g{0N{3H1w{+-5p z3vK*Uo-xV)0EIw$zlZd|EyL)6{r)fL0pMM;(ofXlOWt?2bBeuy@legS@sa>YR1mTa{Hwz`raVpZA4G&?g|qP+_?ljzk1YPUu8*&Ve_ z1RCS&)oPCo=MOfvQ$0?UBA8&n&Z&@s3{#?eDx^l)@pB8YJ(N}=-b1|zJyb~X@6thj zu;7C^0PU9lcU65-|8#q(f7)-W`=>iX{nLK`vHl6<4kjQr2)P@-Yan;I+Jar9r;3v_ zod9z#N7%Y>A@`>48SDrJag;kkkKGk_ghueG{<(6we^<3lv~M2dSY9Fdg?a5`>oQMy z&56(JFO-+9(uNg+aM}%m5L*l#>(0g9hW+G&_&W-NKKP*6J{b7PM{4X&!Oz1MN)Bqx z3~VP!IZOZMYWSu*{!Je z*Dcib{v0lZjN_DgM(ap_Tc}TRIK}m=_eAZ$$Dtb5le>kcLV8{Q)8Lz%w&`W5>z@eU z^Mih!AlSKAvMKsnS{C%R?heO(0jTEhuBQwuzlia}-Gh~1c^=pZw(C;qFLwZYWttK3 zB@WB9%{&uk*Xrv4WP0)*^2^$^M}(J0b3PS&4s*N}sPab^n;Xl!7e*Eu*RK+;JTqJ_ zHOE5#;R%X&+yly_R8;M_Jwg+_L#)tP>TPZ;G!{m#TQTEdl1uFUaYOFhb9qT>S3;ym zVOl6N_f!tZ(1wnk;It6US)i*qMVa2m@iVo(_N@04$TT|zyTbdh40;LR#rL&q_Y{dk z=UHhh$lG#9@V@ax1D3E+xC(CN%$DX%fqV&?GehH=vy|J@d*T(gYT}}h6-A@qQ$7_A zCY@TykdFXQCP#SN?p2pePWJGFEzNnJFRXGm=XoiGLC~-_lrq3?kQ~id77<1t$0+3C z%9{EWM7xlub#I>k2tppa2#~e8*%4}PwihI4f0jL*c_drkW|^1dylbbC>ozPpLu6Yc zx3e*h;71yhE|%~28o4J7f&YP#bIfu7?wsv#@(t(Ve15a?y(A*vhoF2P;4~DQ?egxK zg1vs#J|Ne&e?tmf1TTfAdl-Kmnjob6i;F`#(!4LxyZ~tiq@3yc2b<7$|G?Df1w(@ZhNt%lMeoRiqx9CzcWi#V zWG0Q5v@zL%YD~7&NL+)~=5EyR>3&PVBBMsqO z0siG*6!rB{Kmo?AOtbv87FYa}>51wOHnc%bQ%8sw|75TRjZ&`MP0^}jMYN(8jc`9S za%HrL4Nw|3@JFptw zQv;_P(w{SQFRAVQ)l@zOfq%$qEpL5)(5eWW@J~;GuMU*~=Jme>d|$mB?a>zRU(m&h zbRGN!Zh`;vDke{3sXvoZr@_L#A$Ld9gex^ZguM~vVr{p@(BJnh7P^s6%#rs(G%LA* zbS8qP9FEU%`Lh%Mmya05Tgxamy@)Q+P%9cAQ=UkIPnQJb+Wi=nMLTD7YHsajc10Z>S z;|Z)e8m4rg`H{hDPbk?cpIvHq+oF5 zZx^^P*9!Yc*rx%uvcO@T3I-zK1b zIwtUMF8Ucu@;McpUx4^La3xQ$)N3#6$<@kGKXf)%KV(pZOHu*N+fnt0jY=;7hF@da zJ(UnPB?#-&!@!rzp!VO1*R24GwO;Mr=v4Gl_{4rFZ>g7xP1yDZD%-wNUm$T5xNgPF z5hejjz1}#Lg(&BSx&$X8cw&x!!;7ovQ2l)vUzb2pCA6lsE62S@(b8vHc&oOu@ZwSRP4wnx2h@C9$W@vWh(ug?dwRri+;App2Fq>Xat% zYgI^BkkadwNzZ6DLvX5ZDZ*M)!eGfEEkaBkYf1^qcT70{bt{6*8_fVnIfpY{w<44y z#~MC69OInA^P8@f7Zh$>c@a*z`n(>q`EmCz1w8aefMOOqg?}BhQV^_gDyP6e3x~wc3YZj06cX}q(yqw(UUaJJJujfL` zIHWHo*U4ceFW=e@DRbG$I@UDPg1J_r4royOp<;UnqCYSD0L#x?+TJ`hez0s}X@jNO zin@>43b?J?1_jyYi10#8xE{YL6dsdzbC7p%j}is7SV6kMIE>Ve96!#0y!;><6)TCv|_W(j~NC5&Oh`MC=E=fNO-aQ1!RxA`W0;N>g*S1M^%> z&J${KklMkZN{Mi>ZGLDg8daHytZu2Ru+F^cny%8$UnqKxg+A$Pgf7wVJz0ZoC~d{? zo5E~qfJhsGPcICva> zAw-{*EQcbz>0{8bi0Y&VV>kXDa+dkK7{8<=;|Gcj~Az?vIh6OJkFKl!1;zW zvPIs(9r6(5`v&e+r?c4a7x_FE(5+UN&NtNZ2=>*{J5!6SCFXpGy19-PZ-3c#Qg~(y z{Dt$hXxml?f~?xt@%OEL z^(HFS|CrEIh8Jt7OdYIcdc1!K)XRgR^*7`vtef?vtnj6>a*eFHJ$?<2Gn73PqIH=@ zYd%7&Rt=7bQjC_x$_?eh4g|7H^A3vl>-ig;Mu>V7^?j|6Q!#KMND#eV6ue#>yj~K# zUJ4}4y_Y9b>RV~xA<^Yd$MsJmSLepGUjsk8KA>)@dxMqg&wBT?R9+eKTNXA!QcqjcaRQDqaRdp=PJtUP!_AJ4n1QV>5Y5}VYH|%e&7l2wb6?;LD!51zE^>HgA&vWku<-mH=&UrE;tf}7h;cmD z>F{xp_&5WS$TVewQ+SA#V`*_YTgdX7gqRx&*;40Jy!C*;@*&VA1RT}rN#JO+{~`jm zcg~Z*4zvGa0*>jNB7wLTjkNp2~-8FVhw1way)3;smk zLuChG(Na{X5jK^;CP5f0T@yty990TO7Q#_waAXl2RRTvAz)|!&0r~ZFn-?1KbDkF^ zz%NdKUy=a7Gy;DF;g^NrY7YJcH3xsWkuV1j?JQ-0=RGTI`n1CT3@GxWE!t`YAGHJa zRTYE)ZvciV0H{saPpr6Qow=}ORUEFp({=p4CFc}rXJBqDLa`Puzoi6gvePC2b)Dy^B-d{}2z8ZxWkx#kKOoOM#vG5f2iOZV6J%?$!p zwPn+HWO@5ufO)kmgzZTCMn^KY$eJ#|uJIt2J4)_jxR7Pmew_WpbWbzn^TGLgS=wnKM)rm=8Ya7u3Y}-QaT@W{MfS9;eYJ%-STgi zFBIQmvlH|G?EbO&gIH^c)Ta@qA(F-e@oAViPxu7v2|XL`NQ6Ty-Sqmbv5;64&z1(8oyC z*ffCmH`npr(o$sgX`YpoX1G41X+9K6)4;LiMyN*!_a8NN-2wLRli<65h3Ym~sBaLO z5NP;3|NaW>yMZe*v$z#D=hU9uU)*`=qDv3H)?SyuNlxueg@7(TQ3UG%@$Q`i2@I%I zK*>v_2@2_2{^JiyBpw7eKZ|#~_);7z!{D4-N9tQ&+V*iUea%(a5o^O^B5X_jYeQqA zV`Q9`frkv7t9}?BrGZD($c86$KUyNGfd|MELCg`(z=QBS=N|r>8d#^^xy5p&`oJ@i z2d-B00CTrIKao#r;2vQIJ*?(JQo&qH>UZp{oE9hr6=xTtTCpjdcmq9isgtLLq zfon9RJ5_?$YS70N^m+~YG9>62p#;J*M~Vl*t#H$?kasM2m@|Z$C~|6dwhU~K(il2r|)21=^D2X zHEe6p+|UCNIG&~1|6l}8{t6F;+K!y}uqtq+-9t*p+!HPXh`~JA&q}1uU4yTXb+w65 z@Ss-|m-6uxvKm|sD{Zn+3Peb|5G9ofG914A>(TKQP<@NP5^7OT0zH8=u|(2>exqNu zn;@{#Y-wM33SapUO02Sz6fuIpmJ1%KFhb^RIh@ik%e(+Zh?=H*;fPpL4y$| z0U`e`Q6zfjg9g1I+^P`2(xiRROve5q&h2j9ozob1XxmAHUxup49Vo^HdKMQ#H^Jk~ z3CCetCPMbfFKG$uJe6&GLBx;Bf^&`8*MhP^+pQicWVqM6h@7U{9sgn&@ir3{ePKH< zH|i1tkfHH{@aMvWYZy$+OkZJ@Vir45kq*?FaHhZD;$P!p1+3W##Wz zM$4`LLHph=%mYx1)izOAf_iTQ%mM}q6OnXV2>QFHgET%Yye#y zKtX%^pF!wl0rZ*x_s#%%Z2)~NfLI5iKLY4=5*qj%d>wezwaDUP zdb3qGfBSW^O>e|0-g}IY%@~|5eM`uuUK5rDpt*XCkcC63!>H^!j9PwBspacKY8l~I z$PPQ)D1t5=^HXI|bIfG;+$iVCr4I<)Q$yE@1p}-iLVCYQYGV7|@6j;}#tQU3?{m2^ejrw}F=Z3Bi;IP6ga%fDvRr z-o+Dt7T4l0c6f!|s~RLYtp#8HrEoRyTfEH{{ogwoLm8$lN z>bm+6MrV&!GKG}?OB3AO3w9;rW(qbIfTxCw;CBzT792Xh*wxRkCz4$>M8!P*uI$iT z)zY!1k1aNz3A;_xr7hZrcQQ^l}oS} zSK$c}e6*n~yYC4&1cahCPfz1q56*#8yr~KCN^<(!-r(p-Fi2zja2hib(rDAtD5YZ3 znIBGPc0xL%>e6W&QAZT;!wd7HGlqYuaGV5QKfZ-^^7wFd@^-XN9^aBWc{^GskAK`c zc{^Gsk8e$#ydABR$G5gl-j3GE;~%3=p4h@Vd1AOac_&&YPi#q@yc4aHCq8bSyc4aH zC$^?e-ig-96I)v+??mh5iH}hy8@I4dHV#)O??&rnJ=k5MO2Zeg7~Ib5B*7p;>gx1>(qi`L1LAGc24i`L1LTT>_RMeF3r zt*w*yqIL3QT%BlpGZ2@$9sjrC^{{%J$F~6Ii7mj{xCJ;*#^A`aU@W;q-ZiC(6t=rg zRd&~-hVbc8_bupt7Eb|(inxV$;H!q(7ZA*uzmE$Kh$q5=IcDzz2((2+97CxvbX2gs z4`KQEpB58mL9FIs-(>Q9FVnx$pu^F?eLi1oC{J|U%zFPSSj+Xf%?}@+g~e06!UWwX z@Or3p&rgP0o9)4`8L(Zl7jAfxXWngsqR@oyEdH~K4`qW`c3K!c-z>Za z|CCWb*ZCa6ziPy;!TXBeUo(a|ixuXD;au6lr;UU)nWqiuZ;%up?h6}y%8ZQ9;jhoJ znIqBwenSbLulKEa#!#*^&%$dT)bYS`0rVU2YN6K%40D1h!DlD{eM_Fj(L;@<<|aDi zj8ZTi%@+mJar*uxlZS)JpNA^@O>b~8x$xa+$P~?fh_E4}d^a*}WTT#XAqMUBOa%S{!kBQPeYSs_CsFY)dpR~dJSx4MD&wqjns%K<%V*_xU*!&v)RkyefHGY zkWSqBj-jo7eHT9XIB_go`7sWrAigK$+=6?Y*tf9^c1yl|dT^}7cTh^-RPJlD>B!(I zn0_dnPQ?(T(SAtU|2!NqD2^F9jNw57jj%NdZXt0j7bAoZrl9hTWG9>+S3atj?_j-r zCsZ$RU&4104yCM&q^IQ<;ljAG-6F@C8^c*qzh;lR+ojj(-w9JLeIAqrnxlIX8^vM$zEv z+I%{UmL@bRuf_hwpWg?a_mZJbSmZIUHPoYP&Gk336AxdOZOIM3$dR0>c|=A(({d5t zO%G2qKp~(LHmWNIH$jTcHXYiSfHfDfivG(eh4|rjan8^iEK29Js3a858X#jR&ATP6 z0h_M>v^y*Qbwu|2RPJM^rJ>va1SY5t&V%a>?EpwQUvIMI?0`q88N-a{@822z99)n& zIsaKa5vjr@{xv{69jN$Ha(|`!^-h2r4ZSy^RsOfM1#DQaL_NbxWDh47T>@bCLu8J9 z19TEMs+Il#gNNM&;BZ8^W24Is=9kHqi z!4Cr-NuAB$hSCepGjpDwRg!`K8%TG)w@2f$1OVYa@VBSCE z9_{TY`FbRPd4HEkjZ`+=$88tm>vkxaFGET659wtk`{nf{+}CAU7bTPx5GvE@iEGc5 z36_63mIgt81yCbVgC$9~Ce`s9;j-A;T`s>gaG9H4#`diTW8_!LrVh&dMp8N6h?e;m zNw~j=;{GxT_m`4CaL&n#F?%a;RS6DB$NZ{!v;SAp0y~1+Xq^eDEgEXNRUJimN#**rEY~Cads9rk147j; z=I30?5iI)l?}Wly{yJFFfu%qPR{?WwO!4#e#dkx+&uhic^Wx`&;=6Ul&uhic^Wx{r z00WP*aQT&6FEuYXFa*FVX6ZIbj^1HVHO0y5D)`wb8Op`x=mZ8VXJteDxrJ4*j>&agS) zIsvEr{W-AW=%WjIIb4|ZZ*uV>UVu_8diQU^ogDtH*fCS`J!8}2Z5ciM+YGem;XPM& z(`cFn7L-fmO`An5{`}n@ZV{_8=Wn;TP3HnbNSKBD-DF@5SCL~2Aj8k(H+@y={JDYaCD&a z4w1U7b`qCLjLntiY&z#7XV!cPg~+$VEXpw`!>e`p9TINSisZ9q?JODI9X|8Hs*JR- zt=c9zDs|Y^2GhF>R$h@wc{Aj*B;^d(6Z`*?Bxiq-HUaPr=2$w^<XT_)#F^&! zCxWC*sac1xmB9jM-R6bbOdi^IJE%axN4eLNa~;<7HQP_uJtx?*{mcD*-WgCa4VL!> z#c60&2=@J;T+uXAc&9U_u>odhb~61#c~E66Cjm4sLJ8*IDFvZi)I!LN*m_0V6Nh2^wCK9Ux4;bw^~$o6PazJQiD+c zi$RWGQspQ`abgQdb4Di1r|cE&Rq7g^eB;c-ccw+X5S>ZGWTy>yvt`ewI$K;2`c2{d>a)$ z+jROo`86~pH~2sNSv%>F(54@nwsmTb?SG= z%74rJ_;ek*S-NaI7Y2QHivw>#KSb)_Xi@n`GCb~X_z{B8eo8_(2%h{c{f+#-w_w@u3n z+XiocB4BQCUzneA=*GySVPMvZ?|G-_mX_g_ky-wdbAmf18%oV~xyk9An&Ai!!$dJ1 zO_(Y6WZ{-i$auyZnbw&jEr%{sqrPmkIV_L4;`IF0o7eNE+BaiS{V%gLU&p8(2&I3`=F$gSg^yy{&+BXz zXcUj&Qj)Y;{+?*FbaZUSX1PQ0Jz&%_a1d|O=KJWo(gMCRj z9kGbv;Y^nQhz&C^bD27LQ?4}w?`mi9s*Upn@Bc^A_~{?fd9nACaNpN)XTcmx72j|uob1bikY z;Exb+MNB|uIS*JH6EGP9u8#>QCk4!ffZJjMc1#L@ZNaetpMn_cVgeQ?1sn_kSH=XK z1OZpY1o%k-XF0fbS;-{0ahYjtO`(DF6l&fwt8GK7bgv!~~2vk_X%x6EH3*U>XG6 z6caErDPa2}6AHLitmfMb#ZRztuYF##7P1zeXD@OcQhJtpAp zXh3(cUmW#b?J17qJuQ7e)LvookuXfq@DG7qQu3d&(Oc^yoTr7~YL224$bVR~4Flc$ zQIfv>$PhmJ8~OJu(2w>lguMhvy8n~`=iZc;6jF72BXWIf9oWdhJHoYcCEdT0g8%}X zBvy?A$Y&ksb#~_o3dA%np7Z2zD)LKaKa@>oQ;uZQAR=2BnLi-uP!j*;aO;O#f7oZh zePypgc}*&@|18*VyTOz^10MD>^r;%}tiFWdwFm{*|1?;u8MBCtEptP)m!?==5p#NQ z-qTBB&EvHr_4D8L6%a~zq{FR><=E4TRQ`f=^-7zA$NHm6W7EY_CM^FdM_fKp?W(y) z!3~fAsqJ=@IFXQ|-AeE`aJW9q&0? ztTRkj@(3np-+sV26Bws`TPTcQQ}&d%rEx4N-`Za1e!%p5U2UzSMaic31d4i)WL;cq zxVTShaV@jn=BCC(b>1DfHgBr+#&AtrG$EqKt}%WAwyDl+g|kbB>TI!o2>qn`+GbZC;ETostw8CR|k#;HZ?ok``= zPAX12xm?=GDqkCY&E@&G=mZrDoQF=j*iXJaeK7{G5a(Ywk>IWyYZV?E-Yh~Jq|kad zbi5SW?1m<#&;@Sj1Sxc#8#+-HcFMn273EbXFOUTLC%As5HIPobclJ*y;I|Y&8&*HV zxt@ihqAib77K+*_-zC5RcIcLF;D>K)&o!<&=WNDg*L%sXIQJDTS^_6rbf=h}9vA(Pgc?q8YZy0*+E2A!r)_w)D_CVh z`iWkP;5r&qzYQMSeT9Xb=7rcSWTO{yEeko-4WW|QSJ(xw2s~J$mbk+!&u_05?MVv( zxA3 zkrL6ZW!*X2O_%25X_9X|C3tR3$0H~s8&tD=gKDBq*SZ-xkr6|9DwgqDp7B~=##B+p z)OvT|VMfhahoqJiBTRr)g(^d&FbqzCuBY8>E?_DZwx?}9@CikX=5)G+77cRFuioZA zEHI9chKWf7Bo<0f6)%|`qB*-w!?ZCPeP`8!LiNa~s!2Q|IZu zHOv{oC{+uSy-?6n&{F42RWpepIDDesYw~AI(=kpZ+g??nzt*QlEAF-*`3U}QbB z?x_l*V*@=NOiA<$9r}EQ+hE%dLZj3+jR;C6L8&%?$i5!$hB@=vxE{cCY5O6jPR?r9 z^o0E|06{V{s*R?`1wCUXO*f@T=Ad`>OF_wM3F#1aFG0^XN>9&aHcsgoFgkHaFchiL zKI~EqH;H;V=rf7(t!uTB%nJm|5cF)TFycx#!tbw}?b}RK-McLmU_AoK2P|)Wh<7~S zptT&chf3>4EH&0!Ek>bJEouZ>D3T!~%J}_|?@i*jQM$xo_aM0fRZQohU!@6#dc`ux z?SgK92#oh49tKATr;-}ihFcEaV~_>b9ki5>Y3XW~CLNQ~#&qX;$Q|kIXTdeFI&PS_QC;pb-4T_{j z%C&X(22O)CZ}Bne?TDbc;xyIuKz=(dsT*f$Xhv&VW{?gO)l|f^A4N^gY<$~jGzO=m zhR!qccb2JdupG3Few*}os}L`B?<~#!B{mA4+Ks_y0i#|)5I+=`pZj~Mn&V}90oIWf z?w!@t3ZA3#=spaijJaSZK6B5Ry$EcERatqPD3|rNvxs!|%&b^Hj^Q}=-{GEDA?xJ- z4Xm_dy6W2Hp`P+PMJam6>gb^2^OY&ROV!AhT20@3odf%H; zCDPl8AiiVeW`dCE!BX#7mB@?lSjibv!4mISl`50HV>zhi~z%fDlV1<*?+n5^VGR+ysPJ604|^p4d#WK(Q4ks~NfQu-Y$il5w% z^{rjcs?Aatzhl+tM)Eh88Yz=C(=CG6b6)|%$rMcQSmBS7?^wy{We((B!fZCsm-+8q zTJmvnRKr@&V1J}0G}v#-4!;pIp)dQ66(Yd*sPKhE-#b=_VVHNU{P~Q+d}ZFTnnA5L zT$^eP!pEVgNBAFnBZ`_?yko_?i#IcGWPg+LaVfoHH9lDK9V@vT411Ex%j_MiKS(^q zOWQ!D6_ScHroC|Y9jpIU_&Zh}x47?E`N>t}_d*Wl9jiYgZTX{uvJHs$jumTRPX@Ag ztp33EM2Ped`%CXwvDEH6Rz$VnGnvIygLss^VR@I zps-K#-mxk*J23jCcdY7VeM^2zikft6&>bt%J5+9K%esN|jupixOT^3h$NS<-ls&;K zTYATeq9z7CywW>XlY-J&6??~OYVc#++Z zSQ_sgt7b}rDG5{IJ65yVIGF8XVrgk?mVU=-wp#R#)dHW-c0-@RkS$|=i- zJbwHqpyS}fKiNB0fArdHYGHdy{b0#)|4Dn53U_^1u=Vd8Pl4424&&oMyb1NEqO)r6 z#iKc@yK zOM06}`}}fcQF3hGr3$}~qFEWjl<>`C9ih5wWt{7y z$S>)M8b19|OHY5`jE{*7`xf~Pkk>rF0n_N-RSBO((wRKkAG}9;$!O-L)AP}p57DL7 zu%6%Re^bT1zgjzRG}bYH4Vq;vk;DUg&i<%^{(F!5Z(+IqTc{SDogQ5-?a?AF?jyX9 zX(Oo`qkjQvab{XKW2q4aE6HeltC~MTA#neNa4#x{dyz~B^B1t7T-pUH_sMfC55qCN zro!8L!B(-aCl|PjRpuSLAMf@qCN^A5BmDvh7>e<nQop)m}$cVI8N=&wWcuH20(hfFJve|jnWX^pn!hUx|N7yd{14|T^( zK?|iTIo&(anyH!^s-STM?y*x#vT8@6Cp!*`CyV8%__1p7*Q^v*raT$J@ zca*d)3X)yiA?%LOB``8^^S{v?JQA0U0Zk8%(CyvmO=xn2!klA0aaK9S3!*C&B;W#k zvnrYN}i<*shuyXAosQ7$5 zTQKH73}32cJzdp~g%ZwosP4W{t!nRtWcxy+orfr(PPHyY#p5~(9YeA9yo@Hv`CKb1&ivjKF8r>?<&$AU3#F#6A&_W9hts)v4BgiLX6b9-9j;T9#Pt71+?MbLcnp0_kI8FAGdta&X(n+VP6aF7E9HH>{}H)`t7ZT^3sNB z<6Dv;`y23We65UJI^x(;<2mTwD}&)d<79+N6^9{91D5=Kj&swf_PMCMQ2*ed&hNwl zcA2zJ6ZVljseP43Ubrul*Sh#`|BqdL8jy+#=CSxw&2PZp$5HSqbfmb96r($F);~d|?dRhuH0UO)eXa2_k+WZ{3N z@Z*ZYzeC~6d^F%as}E?O<%h_cr{V_}u+db7X&+8I#k6oT?IYmZ_>Nj_?-zV{n5Zk! zV25d28`0Y*l8J`bl&lRC_D_TKB-|68uI=fN$CqozN$zr~~LhYkRFGI%Ke|0L~V`?FI0b0(ffy zoGXCODuB-}fIAA{&H}ir0JaO@?gIFn0@x{l^8yw!c)A#CMF+5tZS__G$C8-0BZ5CQ zlJoy0UBDcC61rnlfC)!f*M(4sPcXbPFzvqz(yo-!PAN$HVL{qeQrhWmTHpTYlSOmJ zFWfofq!N5|vd3#bMLs&YY?`*hG_q{%M&0ZMAzQt@To&=7G}pOtB#$*IPFhPO2G*%$ z-;3fJ``}%#5A=c6B$7SLjWue~dUIX5@sAO-w{RT5|E9ESQSX}Ly}M2DShb&uskUvB zajM;iqRAM*Sl6*COH4{8(-}r7Qw}TdfAk|NZ?%uMgv57f;N`v_zgo=M8m|B8t;B+T zxqhs;me&oj%Z2KJ?5{Kre-BWZn9_a<_u6LDaS98-%{Mw|sYul_TQ$&+5DBoD$(=s4 zvzAwes=0v~8ZMb}ogKFro<_oaK5I}gTcitrvlExP>W$PMnvyJCCylj_^}g7t!1E)r zs}3mf!BcS7i{+GV)&5^d;MumYx3{d9adx_#rWvfDaCT+iOMO_SC#r&}+PEGM-qeGH zM@>o`57w?n)7UtkM!mwZTmYZq9I+5Z_;a|Pu2kzj;$~L&xyt6xl-@VQ2jc<(+~nrX<(Csi-CkKT-c`}Z-fbciY`^I|5rI-wDYSGY! zb%kM4q-ck`J={_E?f5kA<{tI?dRdDFc5Xr=fa5@+U@T5@hqX3d1Y#A0+TsN)15w1d%71i(w z#rbgnImj1h)i*ujcAeCo%$G?Bd7Y+XVC@Rr55I<%i)`N2@lKl(CjQ>Z6m#+@lZY7& zO{Q=SLw1KoB1|4%uoBc}RY691JV>pC#=?ztTHeGcQ$)pCwNfX?4Qi39P&|~5)yA}V z$nJpxQ|lmt+6M0nMB`yT8dH;*;O>BqiW_7D=zKoM&%*Pdd$0|haHE>4lD*i36GyB$ zaNt0wF{W{$+~et8%aOkVWb1JRaOg9rop70+$D}(+9^seVn>JQyJOXh5v-gmIL|Ysi z)Q-sPyQj0Y{ceS=#gNaw>v5L-5w32c&M%~(4nSaEcsm7 zXVQ}f(%Fe?7g$4eQLBke__I-!{C-I9r~6J+PF0zwQ2c$GZ_j|W+iAY~q5c=6d9E34 z&l6{fu-NYL-jYwn(ebzV@m zMJOFE=?I+n6N8&@%x3|)H^fsWG=L~W;-O!^QV&p;*iPqUtWHm-k6p>$W z(W2xqVOm_I>RBN#vOg9?ssf2{wU=6N^W2vxkM)4H1aFDey-hwiLQ>cYQjSZ~ISJ~*r z>>XQX+G^0&$EhJ}6lurl3QjbCdxU$p5PI86W!447Z-nAm(IHU3kyL+|#E3>W9VB7H zPIIvP6VAwPm~P_HS_3|#ojDAuGvUJzapF<$6vwQswZ4U8cZI^6G8QsySSI;KORNQ7 z@`%U0(E@UUjg{9SBFu&g=z@%GmvwWtop-N7Hx}KVs|to_Wkt=nsfhGePI^2@w10-v z9(81KDIUFMr4n)4Hf=V#MFjMpu|c_ZOGOZ4ltCOc}3>!Y3Dv!J@r zo?WO<#dXoeI_XP{M?)0&6ogqLYiBX&PD zqn4vHg;f>9SFJ=FO5qDCbD=Jk0lXu3LC`-!f-P@hSwU}vM8s?Y?5MEGBx)9nkMsqw zv_tNVncf(w2&GSu*#d@2!WosvMlou`@EPqaWKf;X8`2Q1W_SZb57F*GY7Fbl)AD#p zYcTI~#yFP~gzIY}sIiiV+?W?6MpaV}S~WN?h2SR}3`{Q0kFm)oSmGUIoec)D+lPZe zv~QL2uMvR~vQEeMx9}}*;Kgs`Jz4i)zLcyZj(R=MIEpb-sE09=>Ek1}MU4Hoi}|eD zS_lDjeG3-!V_6f;?D6wEHPJlIJ9h;=VHu+R`=LWBSU#u6r|5+}gE3|=wnwS|nsP|7 zy;x9L2O-tOPqf|+rVUaSBJ8SeQJwL${+1p(t*3+f+vzt{H^gfz9nU+@BUP*m=Lgeq zM(Q7XgvZSBEZ`QZ^U1yP7}weEU&{}HN?m6s%6HRt(@A1?QMXZf=bHMw0un#pOC*{| z;!o&zol!_4(Qq1N948);V|5Ed-NK`tAr9lSa>YM z9`>XL)9+1X1&rjH!ugXi`61i5uG1LBLlIIL8cnYFv-_^m>R5FJ%;cugFvot86y!9h zJ45g*9S++sp)Q_ksIE{=!>Tj*YvCiIL-BdU1bYt=IP5r?bF1Q231>RiBwmG_TQ%C* z!=O5Ly5el9{c6G1eyA=dl;Hm;WsL9IfPN`ngKyn0+C^2NweBM9K5uPRd1nECB; zV_w0ax;VSYTHKm6|3WPJ>)KEV=5FZDQ#f0C_O&&ISZBt$1s#~u0Q=C=s%R1YSDnl8hfAQANr%awKfM@&1r(~}Rk3(1eLAQd8;h{s zEwIMCtJ{QsTpw?skO(W$K=BwT{R>Q1!n{YI2g37ygE~ZEF^oj z+{Yj&55A(P1PKYy+TK70XYI+RZ++e?rE2&RuOSTU|D!6#b)B9~sjl^ELo~7qze!fe z>#IhTt+DY5D?382Y-&Xj-um+n0&kG;;<`@YrKMfVAFw7>BSYQ;uFaLIX4T@xNSN-J zSB*@KsjeCovPPp|&_Y$CR4oo*J#z5K_{c`CrK~s)t??GSBJWyayL&~a)Jqhniu?Yv ztP*wckwmxL0D`ebmSU{^Cz?9vAN@jO=f8e2A>Qbijd_$}Kv9{?2 z`n^}5@;!Y$`wa^C7=wpDXiWK|arz6x*zEl`|L`mu{YoV0Y{Q)zW2p(DB87c)QEf%g#VskOlg{5`ko-Zt5S>W5c{_{J*QRsEu4BLsfoShPV;TrX-roe z_U|w}X4voGU)-y8H)L@SAKywHjrwB5`2nzrP9r6%H5_XHp7e|=BT;3hPQ+F4O|U}$ z10p$s@vtGi29mC3VW#{-2!x@|f(p!)x!Ptrs;Y{cwd+x@kE2iZuUCuLn2{FTAFl&i zyiFplSt!eQlZxm&%HRY1J|w$fch88XBAQOyfxND`*18Gb>j>bz1$nmv_j#C})}%L1 zWjLqyE8Rin-{Q0V{vDW5%h~|iz^7&i-90iiiEp0bq-%Plg!psMZ;z=oSlCghCs3k1C*7_q5*oUFZBZl=SCRav@vl&xkPyP-~i46{lg-XcMk#^8Q zDX4xx>6X{|{4j6TDy2%;ov+$lT(`3I{FPhJ!Qtw8I>6(+dN%s%*}x#{T{fAFGTizY zygt#v3q*ZPUY{5X!uo`Y>oa$*SD(4dKS6zd?bhdl;p(%2hgp~5v^bmo*q7t)Dc)~; z7Y5X51tF|X8QI2MmM|fxR5R^x~ z&#^PqdX+W2!J41kVx5NWJ7HP_E%JRXKw6Ddi}EV^Pl!*hIpW-0s`$_M%lM{y#83E$nWF;UmPX|V59pu zPFOVuE>g+<{$gyZ<1awbd+!AW&p%N+?|{Eav{~Fqwn#zRv`$1)ODLdWlKno(t%fl( zMm8)m*FO={LiGN4s=;iSG^4U%CPZym|3rlrX2Bt?VLkog4rGvy+20$&eFWP59;&I* z8C9=bfTyhPdnaR=oz|K&J-ec_&MJNrrm#Q7UD*6zpv)ae^Zpmzp1oMir_x+IhMLBG z?-AQz0fdhy9niYORgo_Zkf$>C!<7P;AmtNxl$HX5_r{O^7~UIlDZFGjxm7UV{na<$ zUHV_lcQ3i+Us_!LY(wZ8=*y67-Ad(JQ(4qJ)kUnrP|tHC_X3nt0 z&!A6Lrk~ffMI5f#Qh63s|w8q(ZA+yFoLmXPrGD94Jrqr1B z?nHlA^vkPmzg!0WLPjJzE=QJj8*=~4B8jyLFz=t>M!e>asBRbt*`~x`W@4r=)qOt{O<^I?GA?YTSmWCqe+F8j8|9zSFl*<_ZdvQ*)K@LSm39j7S} zITMOSPT6rcTshePS3vwUxtuOB*Jh2uUAP1B51bolpCD#fPvKf|=u~`e*7|^H`<7|{ z6WcM#{$dx_u%C&W(oylNVrUAe$lf^9LL{orlR{W!!s3qbWF_3BXrH6Dt5Q~Hhu4|$ z-%QXbXDiLhp~@WPFlhT0WuB5zHY=@48_2i3=x#Z2C>X)qoA3n$!N#q-C(wQrez%>RhLMd6C6gXl;1-3zyv((hhOr?ODa;ftiI zZgt@{aoC_&K%%LT?knp*qkpx@=y#>*f60f!m#nXxsKK|Hu%x;ojxSe^s{>UJ>?R!u zgqwJGp{7)vsu3XCa7^hm)~!H^Na(kJ-L00ff8AYWNtD z9JPNB{*J3G(7p)@9KawJL01^&;uQvbtwx2&p^4GKy(pXxzX*4{&=#j~FJefMuQ>dK zW8O*Eve|wPlUqxa@QPx&g>>H`(cO2EYx{g<4rK530JFebcwlXFOw|%MS$NAnmKyj^ zt7i=w{}_C@o7<%v zPl2zJYF;I(cTBC#4`4N~aKkiv4_rTd7+T8>-h!PFh&7w=zUGZ*&p8Gx(F!*#L`(QJ;$pj-QH zr@S&ur|=Sf0j)tbXN@9s`Eg2Ua_RoSw`iu5FAQFn^iBp_P?NZ5c zs4#}ntBQ4zr>y$c3%_&q(!FY--E;N8m57_}>I__^x<=&+n?q5@oLD z@2AdmX`YYbh+PAfve0deNUDQD{9*?Z9%X*iVT8_%>jm4!F@~{H^_=NfGB4nC_aV;x zi9aw@6W7_UIT|*b@gTp(Si50zBr#(T!@{&YaVPG`{$jh%;pQ8~tJF1er}^dgr^?Ci zPpQ&fhuxI+>T+qXR{0xo?tP8^YuJD;xccG07k-TopL-90?JIrAW~Xaa`A)(j%6Dx! zI<6JGi+sJrO>6%s4&j(@*R-lJpYE*Qr)0aT;JC*UmQwvwr4NyJ!t7D zkBYhL;etG$QTRQL!g8(;h;nrA9tDfjgZ2e(pBLtn_X8)1xWvHqv}UueGuVCR+KavW z%+{9-sgG1@hwIdXx+8p@UpHWPpRZRvUo|?-FWiUP=M8e@!>~KEE=I?ssCP2kH(Z?? zwf0M@f6pTvRwkF4lgGPw^`P|y#9SjVuLH~yCT|Zn8ZF*;LR`~58gD^NNgs`#X`YN! zqAyuWj!W-2Q`=jgHC(+<2r%5!_#*BgCe9kTK^1pO4Du~AoAx%WuNdUd_y$^>B16}b zsvb2H+RdgN0A@UEJ>|uQwf5oTfWtSepu4H5RJ$6q4~cCNOw2lh+V-o36d?bpQo%K% z;4Q=;}`q9>jI9?(wMt*ZwFpn`?N|PTW(~3KEwXp z#5x`4)9*kT&BeO0>lJ|V_hY`Bd=Pmw#~-!pCsz>Ou-cC$H=ClI{+sBFfip%y>YFGv z6`o20e51&HV?pj43v=t$(V?hs>%;XU`Khm#-fKCF*Gtp{UsgbjiCN19DH{e@5v)=- z`l^Uf^}dfI(od2i{C951l%mN{Ku{}(N;ENwSVy_!^sKt&m; z=JI767VvzgYKhrlja7X%y6#KLHP_a&`fa+YgkRQ>GJSSwzpS|SoGX>VkoZuzIKuIR z#c|Uo!clJT8ZVZ&;6CB!Trr`P@?Toc4{wE1>>qv_^D*g$VHxO0+L~%1u07O zp?633^X2BQ&&xVIOZ$a#X}=(+W%}DK<?b$E{l}q67QG^G}A-_O(?mdG|zEVgG&qH{Kq0&pU0Yy+p z&Vx)AVwm`7X0>Ii7-Yii7s6k(ofgOKG<+~q@w+;COEsyLL_50rdSc+K5(`tk>jnQL zthdRjqqljH(yPTADw?-WtEF_DZM}6at$$q{Cg(A4?e32^410^|o>{Dd_yyEvNM7S% z*6%1)<47$Xqvd|Yu--v6A~rNF3X2X*HTX4L#LT$_?R89M^_LD&;uz5F`AJe>l#iXH zj45@tUCrro-n<0w{y@9-8UgO+Nw!;~c-4xid=2dGG5y`$WBQtqA7VW@_&?OrELuEcHD+K-j3T*7vAwb?A)U+gjaR%o^iD@X;71sElL(Z&1q_Xj?EgUYkMoO5 zC8Gnz7nRDQHOlBxYbcygalRP5P1ZRi{e)r_69 z^8yQ~wgM*ieKX&eZ#K(!NMSxb9o3mBu7pKrSiEy`x2+QHagm?4ppUkzy)t5i_3Co8 z1%0#?n%F!0`(e|z3Y5SIswtC*TgeQs%ANvRzWHI}y^>9_VJ8&4Q9~mQn#{3`9)9C-ANG5UCk3UPvJ?MDQapsB9t)Yra z{iB*b+=~ygziN7s5jxX6vl8^}N-cRn!F?`kjLBZ7P0VTtkEY!zJ{_=VSavS``UQ~__9`57O7UXDQ=jW)=1<_tH#8G8zL_? zicc39##nu^JZF?&>n+8#-d%qADAqBY)ZZ?)um@>aj@o z5C3oIcFUfGW&f~5*_tkRkZ3Ph(j7UQJI}Gd()J@MTpe|d;Yp|Km1)rwq7BvN^iLxNwCjEfkAin;wV9D&x#t( zoXeGNdoGkcIabqDnN(ojfZ#-kob5$Yiw)=Sf)r3+IYrWN7Rf0_K?-G|lmez`gNlwA zm6~-s&e>+z+z1P;23FT&FGri?&dX){FpYbwL79zLmX=dpqRx*m7yI0vfsEQzu|MDf z&88M>xrCbh47Ms7Yj|nxCv|?1{FIJsnln_pQYD`gTCKI1mN_S=&f}M(Os=DI<%E}c zU)Ziv$(U=BS?#+LiLN0ubp7Doi1e0AG+yy7-{Y|k^oB_ymRhKByE?r#mTE?;eMW2r zkd`&*=2t9LuTdS)myfA3(lHqG(_6l}@_E2}0^QF*Q&e0}6H-&Hpf)fVUO-T7a=cM| zBBPzm1KSz;SSVc;GI+~`RBD-u)H2!Y#cwWWUN2OB!&o2f)a_!fFEoC)Qx`W!ng0uC z!7gFo5}wZP*X;y?R!|%Csp4)NC%ADTu>va+9W!j&MUEL%bj)xW{f2_*W?OiS^9Tia z_uBN>P>Nk>iw#YPGNyWM7Y-ozq(|6T=)6zZ_|cS8PcQ8!<5l>(66dZQHfti<@=N3> zr(riNjO}U_uRhi^H<^tgwaTD7b%tuP!EA0Iwztnh1%wsYsO73KI10TKW>h8ChsPwF2odrxG9>NSr+F(X*13Xjb0y9L*dW{?j}=< zgC+>S$WV-o2g2w@g$fSWu8+1f9XN0xF7_)b6!G?=PIr}LJ7rhC1zh>|fLNCo>?J)a zPgjq)x*mI@cNO^$J{G%ORr@j4u#Q9By#FCpynrd>EZGtFKPt&tT{#NEPYj4~+TY<1 zA=9iQ1@mnm1NV3aAH%sSfuZibR#RyJ#qT8Y#n}SdzoIovHmD~+2b+zKWw9q~H#FC& zz@YCVpDiN;1q_a~Jcn0_&D!;L8-NXyo9iK!X>5RiYeZ6W^!iB4Z2_F5FiMK3T_4Fm ziKC9An~{Jb2vK8mG*oLpXD~0HsiQ;o(`eH>!weL9xDt0H)$D7vXxr!tQX*}sCUw9DL#<^GzL`>TU2_t(Rg zyN`t$8*rPgWfycO2$!2EEIf0&W+0SsgV^HsE8^a3|Y&eJ5r;>4xfHyZb2v1o1QJWUfHVHH>BU+_wT8D!LM{-cTFj8e z-*nBF*=ZRh46Wmt?#5*CJxbN%N@FQq2HzBUg5&|piN;D*)h0&<9!B{wfFUUe>3^7N zidWw#rbu?FuI&0{Io(XWnYzZauhr>K6xLrR&DztAMx1~r0#p-Ajb#@&D}c%92X&G) zjb?wEpQSa!3S2Wh#@7s*ayGAJ!^r$yXgvKmF7)x^9Dk+s#_qUl-W_*=;!(rZ)!CaQ zPjFwUwq!{g1re@$Hb&3f~jSpPkRBqll8@8LvfR=MPr^%eD_V*!%Eu0>U6hhU1>V%Q6)-EHtn&vV023#htvKc zDv{8ja(*!FBu>>&xqLvn8fD?9bDO;?_|!C4FJt?6>^3aCgJKue@ka>Gzd+ zzAXhhtfx~x<=a!-1mP!pbmB0mNF7t?;~~OZoXrNj-D75YTqr#z#Jn+$$5mv7W?BnEB9A-oEOu4kr2%Y2zg`GpxyZ4%3*~8x(Kzw+w+1$&Y8hA!!PYo2lEKqQd z;%TRX=;(( zJj*k^e4doZBhiY=Nl98!cRYpm;%=sky0B`;+09M^5^a_V8bYI5e8*j^J=k57^|&WN zJC8e_0|NF(-DS)3D))1<<0aH^>!4>M&Q$nDoul{ib9$KdCkxl=V+S#ZligdwVSmK= zn#ckRvdLk8mgn}O<6eK3aMau}ge$HcFRJpnJMyK~q$;xA!blNL530^^BQdVp7dI1i zhgtGCaP!W_sAefID-UJ5b*NV!+B%?bqYb$3{tb{e|2lxIIgnxpfZE8D-OhX+R~EypS0UTQP=eUei5g7|%wQkNIMFH*w)3E!YhO7gbi zm-y`sc%OeBR`pQa`Ds!lT@BA9Po=gxl;mGS+Mdt0RA+^agvn2X=qQNqk4X2ZsDX%^ zI6n4{8QE%4fq1dx+wN(;IM2j*Ybu!~=u$N8$NdxHPs6<&PDstdm#}xWM9@B*EC|x3 zQPG00Jyb{8AUFcaB}O*W-6nfV?@W41FBX!r9ZLg5c9y>U8s;orBWLOD45|xJLy)ud z-PaU2OE)Tp&hWj-ccY$OAftTDhw`5srRt%aaIJ?je*i1)}?EyJ{V0&wm zl!{r!V@r&MO=yd-K$hV;&5@_meIh--(2H{KKAnN>npmrjqXj#xh!&~LM~<}^eypvH z4uz>56Fxr=nsUhaQnoZY`Hx{Z&stXk>Cy0GT_I9&SLl!lrEz+6t|@_X3H(^|3F%~h zcyO+6?{H5t6;}BVi4Urk@pDSqA~8O|^|5t~ ze=c|5j1rq*FEew1SD10Yt3sC?E5>m@CFrO4evG#65~C9PWGin!tr0Hui+b zy4>HoVcm_Da?Y2c8?)|jIy#IE&5E+B?zs+aa*?^5cdx^FVDuC(f_C3|IGZ1My)U{* zsT1|S=yT}Gb-4LeC4a9e?8n9tn)PK|im)1Xs`i6;m9S}~#?F9w_&UuwdxIcZwI5=N z@2uHs!hRU9;aT?pj@oEyoJMm8PiIPzX6^c@Y0Q2}bNbu_(_Q=JLrTzcB#>~NicW`{ z(NpX7JeT41i1R-paLUlgDVp;g4^)KTl(-V97d}Mc_X2$K<{*6y#$2WRwc@h`?;Zo5 z8{t}P@O4y*M$jK|mqD-g_Mjvi@Sm9_Y{2m!!x7~;gbg_JdG<56j0*Z=pYAJy(pCEK zL|D2lp6v{@GudoYL}P`Pj*!v!4g@Jok_q0v=5kz(y-~P_?(V(xW0ZZoyq@;fR}^=G zSYP28&*p&01AU3P60@oddjp|0_j3ilEsg%LDR^#=0o00K5RoKKeyZww|iP=!d+f+y@#(q)1PT{|?fmzC# zuN2yx@`}Er@_VmA1z)Dil8-*M{~a0+yUE6-u_pg>GA>}DhJ6J-A#<+TJA#}@GDWa0H8I;oY-UPur#G7RB+OY(75 za_)8IO5Bwzzb}?6VxJ(WfR3-U;~c76&tX9gv09jzfF$dA0M~Df!aVh)01c9bJZ6mH z{7OV@TptUWGh?b@p9rnrvKyI#u#hEJML01d3~?txT53+`?UDac^RlZB!3g`x%^4>?)|tnFNuM7X)NNtz`%R-Qpoa%uluoc6tPY2Q=1eU23NzBp$*!yTJgeB;TiOi(~)e%d>*dyfSjBL%(B zg3k1USWcFh#anOUk>+1qIdF`^>}YveE40V*gt-lU{BmP%w{`)=}F&&DK#Wt)uoas7|9L)Q=cc zZ`ySxy=ui4Q|oXsMc8A;=t|Xk8&S_B)D;G!?WefBHx2782%F+O4S2$YgY2;xf>8cs zVz`i;BgAr)!V=dx7nYQN|M29xH-}=NeTuk0Rmz@0oM-2s$2+JWU=N`yTIaxK5CdPt z`S1!u-d{Tl+w}u^z7Hx#Dr}$FX}MA99^-BnfBr_=EOx$0e@73Vh|A>&q7E917G~s;&|rorAy$pKJ@7Tqj;QZ(0lgB(A!ZQuhAaAhnqHoyaI}Gbbd@3UB&T=dxzSxHMd{IStDyFBP80$ z>#uIDIP4rv)~CGu;S%|s68ZCP81~br#U7J2GE}ImeVTN&5oN;t=?@N9Rx2IeuF3k~ zC>fV()fVzW={Ol*Z<%s>edWYNxMpqFq%sa7yzk?~*|@zEX+6&^RuN}P$SZ@2hDJAI zU|Q|zR20?Y7oGHU8~N$V+?{(VG7(LUG)&dJiFj)tEiF}aJ}14yz|OB9Mq2WZNp;oS z`&`u@8TF7oUjv2a>)^8ki6|$NG+H}#5ViikO zrc74k6xJf@%y-Mmf5w{*@?bzKJ=dsO>AB`dIJsaZ%E{&$l~{=ULMD^RMctX!t=VLU zz2(rZY)=G2j<&n|oZObJJ;~WKXCB%(d*-a>q*$%rq+m_7qu;jyGOj=uedb;P&n6Z8P z_NELaYqFg!Gp02~Hl>N~;s0^WC*)eQUHNQen3N}HojeveyJ==RxjfU=n{oQ6;$<_H zrmTY%m7l>HW9jM@Ym$prE=eA}YUPq;YnQEBxh8qcs@2JLYnG;ytCya*dexG3M`LiB zQY~4wX6@=_i`QWYA(+*aT#{|ib>*-%@=Xy=%>-Vf3CaA{Oh-quGn?s3_CQU0vQB3{ zndxdvw%T27ELXDKc9OmMY&z*=dB;F-nxn$BZMl4pliS=&O`gd^Cqa?WMVtGQYqG5j z$t=L{*u7h}Cg&yXb^xH8+w9if&TLmtAzijpL|CiKP4@P#tdj(iAY-nlFPZ7>*=jqv z^Qb(Ir&Nxftr=jbd~%DEfs9>SC=qW5iGb{uOhC5vfM$TS z9E}YLIDt9fUMdX?sd9t;25t}-3}LhG=XE8Kvl^nt=u%0)!v?U($IYl^b!)0>test$sRk|nt@Ko zbQ}wdq84zHotdu8mMnH2mYeTw-O33|C%13SQuU$tsoV_VmRn|f4!H@iSUI4Cx+lLi z*NvFkbM4TY-C3sLncS6#Fy!gwRFiq}t_z&A;Tdu7aaXCquKRANyxj=0$kAwi-ow-PRJ()?e<{@-xe+4;?f@;FB z>CWMRvWYle%`LzQPzMP1Rall@P}6Npdgl=j8@rv^wp=FJ)7LFm`xM(byGST(hd`p3 z&R^G5aVBxOKFs*$bhXG&Po|qE(qxc%>apA z@y4gjHY^*(N>2~YE!0AST8_ek3S`gCbaq3@Y|aHXXBm5FR_)G0$>+jg>ae#@^IBm^ z*2!&yR@|0NVuR!-6mkHTQMwIy?Kvja27>U-nLKu07Y)TWECab8xQEFqEQ-1d$HMll zxz??cFo4eLfjIz1rjy;4qpn0QhNj`;B$gVbP?+68 zg95VUw&c2?l;S=wmd8R)wflyDI$79!y!DWqdEXIwK5IDH&P>i7pV{t=L!5%`Le=QZ zI@yjs7zbTvQ^RcrZb3fj%5-L@iB8XfAadF>tu#rbr8&}V)FPs=b+UH5*Xu{4DCcv0 z$sR8p1MZNO%5xi#4>&QGx^y5iU!M>Uw{cBGV6s`;P%elsM|@fu6g?>QZ78}!i0ypu zW{@3RcnH0NxQi$!^7v4of=G@RsTHD^X}TMBwvZJSl*&{*^84m2G-f+AMS11r;AZ>e z1h-BTI4(BdyJ8tKWjkO1IyMO7H1@*gOb7ANb_eryk@C^o#alm#qd;!-tk+Q3PCa>V zuu%Kw)5A_huI!S_fd4$2KqBTkFmnf}lz>f|vRqXt-S@wwd6)mOJc;w1yXBcyMd0|+MB0Yo=WT_dCAqtQ%K@@Q&aX_(Fp#!3VwvD z@RN25)D^IU7Zv<7r1i<;v!BTe?X011n-5QNxzxL=;vNRziDclJZz>novB1 z3-oKZ+F}HLtjZ%dAj-$ifv^Sfs zQQ?(_9}`5go07+(T7|`W>r0_oCD-(_$(8eJ$;FH`%w(yYg;_EwHBb^o2+&Mg9O(t1 z96~KY!|TrWK+6dB1JT#fwmpZsMwi{yNIjp28Y9>UT92~@7fyCxrlY5?vE9i6lmo?X zo85|nyl6J(>pv_|thOKrjInOy<047tiSzE>&5##b5g4_*BLj@?h5*fMs?AdfS1jap zo2=%$vY3?Rq7q9?=OkNL2Q^C_bYcdD?*9*Z$AWCx?j9Uqu;l0wDiRQwXA7cf$!=Cx zsrNu#2V`3_+p?tP34&-HZMV0ho(Gdawgbd3`+`KVogUUPt{mWsGS>=8%!ry{6R6tU3o#u%USgjU672OOf{(;IHk@$o^$Bo5IUTvb47pq6YC; zt23Krz1(hhz?z87??QIX7xS!@nZ|0`3!JtE=|%F`dIP#O2USF&C9A&f>Ja}GRWw8M zL*Yu|aGFL%nVY3D*~X2hO5-{T*Y9jo$3Yf?E=|N+mnl9vEP0p*KrQcv>9*MTM1<3U&+h7$S`$%$pt4oV(K~7TdC@H>D+If>^Z2 z8*aRAYzv|UJ%u6_|9P4llb!+x5!YsuLJPADRuh|(jX0;ro48m_il=ISqqR*#q2>0! zyU(2g6>inqWk)Za0E6$`9%^qKcDxK!xutUC(Itt15+kLkWvRa;RAT9wfj-Q%(HhfZ zx@^g2MWK|zeO?I-7iuIKSVgD`>4Rxk2~Fu1F4?ZcY=EO9o5|yHO5UaCS-jB-iV+k# zUyzv*GTY z8zky+2{667w*r&f*BQyYz7vgYqzph7|O5WW|sP!ln1ty zb~pK84dE?bQA6>Q!^aj$tUlk~ygO}V+S>59gXB zh1(l#ZP~82-cF&m`Zz`i7PkHq-B~EpsDZ^M1~fy-!9=@Nux4U z#bRHXrHH&c=ME*pheb=fc^&~pr&YdL*wwmmFPT(nTIkVjHc8GNrgBRsLfG*9K#i#{;us^-iTh@*MuWRvS!WyW>2nZh z5(naxSTL=iSa6EBOm(v7^yc{K5l-lN=o6gMsY_wvw>$B88mWO+2EC&dD#*LSU3B11 zZPEU$7)_$z_-s&O3SccYw<)C6*mnEm#A`T+`ja6?lj!j0+Byq(VFD4H4~DH7p+;gMl|jz z%hn#ZYTer8DT`LGUbJ%UvZZU1t5(a$@~e(XE?T)EdHk}KOF-Spu@m5Pad$ND)g(u9 zrA^u<^+piwlV*gR>VritH5Dz0oMI6Rjk$K&+7p(hq19J5E?arb>SZgBUAkiF%C+g_ zilwWMJ`Si{w0PMG%hqln7CL6x+LcS!F!O;$9LI@^RzruaJ7Ll4@@3pe684tFy>)3z-~hotS? zd;>-RZv_XELZ$peVYlomcX>ab} zyHKRJ%s{b&nlC$Qf%@Qh;p?lMkf81Y<2ZXeu7uc9(rqwmPYJPCKeA})>X1%DT%DUA zi_j)64@N=iiBY1LG#&30#gpjXPLae0d`}qHOu2R@pK-vm@lI{i?zT-^wjGu$EC*=D zZ6&tOGfpQ-BB5Nnt>_KsUdQoH%lOVQ$YfZR<6@ON?Mj1Q-=L-MHCpUgUGJ)}O?s+_KIdSglZqIm|92uu|E1p<0X7COZ zPwj($o06vz-9Tr-DeERm&Y7f5S~L0CCoLO;xlcdIYR@2O;=D9Q38+bu_)9AyG6lLO|qHH~&DEIG$-)nmC zSSL^R=X(Rnqc=j>x;4sQCbN4G6OUcD41K!lQ&eSZ3&4vz?9JRx8=a$^a^U+5!Wsbo z3^e0oAXxgJ;QvF=#WRFAg%suIhC*+WZiM(Z;4k{m(G~LZMd_V@LiXc$zXkopd==oE zReDz%sAg#^c-jCDgJ}M?Uxe4#P|jA`;5$U$`GKhcLs>}Q6X?4>fZ;dN@3e})pHd%E z4dr?I{TKSaspEG+unn-j5PTqLD94!?ashq2Lu*2YQa2KRZyJSoYO4@KUlsm7yc)mv z(|27BhOZsnri@UY8uP%I5lUY@es8DmH^$=kC*vL%V<aIvvC3r>3PM%2SOGHb#_{O@{*~bTvKLXei&C zF)d{%U!C2iR4Ome**_6V9D4CSSkht!1fn|TklM3hVBBmR5l zBmJSn5oh9Xq-r*ObBAMDE0$uKJB~RW^4?#A)PDasq;~4E%4HGdgXPaJuT;Kv!q4X< zl*d;h{_9UdY$ujJ_|@_e1(l?5yfElx3ZmYq0YS_Kj~}q;CB*zTTddcqu<+l zuxB5q-;;as_YC^3pznJ6X6So)FP8GzUM&5my)??U;qMjn-M$Um=O^1R&Exd_J$-Ao zQ|l2Af0usWaW2;P{d4!vsZ>IJ$eA_dLuL%;XY_l*TuukZFDh6m~U zw?3?I+j;nX>%0eo5hc`*V|Hafmetyid~5e3p7ZFto4((MZ$f#t{~;I!uhaKE`Wols zcNBeR(|5!9I4Lz`eEa~8j#CFPn( z^qsc@L%y{G`~CeLNNwkZ&o2k6=)2=W95oMI_;YBDH!pnZ!b;_D@H?V3?i{hRQaNEK zhC4eq?o24hT!d7urSBaV;rROb@rXHh@ktjO%6afjD9x8(__r>>vVM38j`Y_lWd5ZX zvWdRez_(TnU52uA!`YLjM3fsY!; z(*Kv;C`pdGV(Jx!a@`e}@)z{|f`T_WZw6?zQlrcz=$n*sg0h~VpHa$b z$`(b1qF)1yVWmmwBIrGW<^qH`KU78pg33aS1E?P2XDW-JT*T5EK%7gJeq|rdr&NjM z%B_kCzpe`)mgP{c78s>`Ie_!h2^{(kKrPBD0uZ0ki%dfVKp7LcVDlw#!w@Rw`jWK-VdsQqCdhID)Q*c136{LDwn$ zR9;rY(m$>2An06zZd7&$uwC|O*e;(_K10xF3Hk~`kn$TE*5OA0VZJ*l-+jvG2zr2^ zA46Xu^lO5CuG~h@pE>lu1pOPJpDB+h4@l)bp*$g#_dG&wdG7;+`6_kn&A%v52asPT zqT-_bLwS+n4uiOh0U9DK%XP#O2}D#Kppyw22@vKxlk(L9q~TjZI<{bKAgWSJPzkkx z3Kg+jLir{I8Y%8ZinBQMZ5?aW7&t=J0lJs4%nU3c=n;aN1IJU!XDQ{Jz)BT+^Ibh0 zoTbbSoU8`Mk5Wbl!@*I3mcRxz0DapCP*75u+3Y?-LWpxBy5ja!BzMV?Y-oOqm4Eg2( zG+wzfu#-|Q4`C~P1|h&QNGZPt5Z3mJ(5FD-za#KfD*Z-?`*Prpz+;s17E1ZUz(1*k z{~_o{0UQ9Ml)E{k>zMK>g6<21DehH*ei0a@W9jdPumv9q)KHum#<+(9bvl+_86F>2 zlt%*%6gL;3AV5iiP6FtKz>|SV1Z^ScslXJ1&Zm@51uVkysql?}<>|n59qIfUKtX^S zb!@@!1N3g-nZRtKKlP|1kL8q$wbQ$5uB^u2%JLDibz{zwECyO79CyW^aC_jeK*jd?|``L zIn+gQw*xc@pmPX%j6->Xe$Sy^f+A4{ZP(HBr4?mZ`Y7&5g5C=Z5OfNME+D9fLl+Ws zHHR)D=o=imgrNI5bQ#s*MGozvxc3}g1yoc|7nc?kkdSVqmXIz<=>?Wr>6R{GSwK=k zX^>c0VriD8rDN%okZzC=>24H6zx{vb?EdD?oICSo=Djm-=HC16#WJnNLcNzb!mTs&>~`!adH1p(>u^OLyLV<96%up2Ls5$A>km@2frDWWwE3-wyJT zQT(tmX%{{?NGm#K4Y5@TY6$2gDwj*}#2?F-g~XwY1BvzCV%Z4NCV9eAqqzPhtIso)l@9xUNn zm<;C&gm?B9w1>(3k_~mhYDieV`vHWt8I@ul1#(5BayZ=(#VN%VkB`K_rwW<|_$KEg zXbPk%fYC;ZGXGWM;p|KD2HgC>2KreuLg|EyVAF@huq=hd{E0GomOb)t55vvr;wzdz|&RzcS(VNzEbsX zyHb^4?MITe@$>`B9?vzH!i-J-@?XuZxTlom zKb(J33qI8qZD_s2Oi#7Ptjeq(RXHhHDOI?$#9ouVW^Wi%%H>RV{-}kCF+1o)b-9|A zW|Pn)meuHN)>k?9PsU=Qb^54z{r2|Z!Rp__zv~st+pqq46T31W#`~^4*Tp_1mTCbD zIU0P~(8A9ANC8l>-xu|lGvwi=C$SAN2PHPKSb3T&mFg?hdaJwByt5DvByisyXogVF zd!uoxC#~hP4rHDT$n|2oZs!QLRjF>3gRm`_uWP`|w&AlEfo1X2I<@A^9R(28Z_m3bveW6c$=n5o7w!unt?+orTr-OhBoodds z9Nf*KQ&e6qO3q@a@hjA~*oCAEyVmUCFmviJtnLaKz0(5He%Ln7R=zoU_8yh1*2Lw6??}8bH3oRpk*KV&e*)Ytk2$yyFkd|f$El}#B`;Mgh=`) zkN&#o$bZ`oq_W*_7$Um){MZauDLns}-YWC?p;{JI7yw*SLIG$?dL!pq|s!d?47eDw7J!p-FK+i53BoYA%S35z9g$yWCdOE_BZ z+K5+PG|jm+WEi-s{WvbFaxDB_GZ!pNJ!Ip|YV1p(mrHN=mQ7z0Z;1k#W0fPG7ZLXOu4gr9v) zTH{XAc=yb|$;T!l%k|p)d*aafv4)mt+GVNTwPPo2KKE*{tm)QnhxNVoSD{r!xwLKY zN<|-Y3#^S1pDi7=qxtWG?YGhUWSMt?RcfZW@`3K%Kh`^%SjOt!ehrqv4_{-{$c-qI znT|nZhTO23qQ+k^YdWTI#StET$IE*jPAp^>&$77g&z2~!daUEaxyw|fBX`uUPMa6m z9@9`T9R`#D$d+Ce)=8wBmOna;k#u;R)&ou~hA^bflp(aYWdPKAnZRuzKtjLu(+DG& z4Pb?YFsDV8@fBZK04DVP!$$N0^0%B-ZDEIzq26%ZXiPBTm9ovEVZ}h#{+)JVP(+NOQ zKu76O0&=f|2e2>87E#8au`LNe8AxT1_=5!sh0{jTz#herCuy%rmBF3BZ8-p`frLG=TK#`^Vj(nB4V)2a(}h zNAu>fs%QkTuh!UQxwX^J^BV-PV1St*3-C!%T{nEz5%NwNUWQQIW&rH|H-A}ccAO{q z!e5%1*KF1c&IiCD)7i8CfTxdmtF8p)%OmOGCTBXQZ zutvO<6?x)mHfclJLD0GeXBCP3)v>a7wAc@yl6Nxc+V^7v(-rGM?S7w07e5-^e+<>& zB&}f!-KuBbsLoAyGBK|Aua-}yeV|`c3@rw@?ySd^*X z=^O4FdS8VUc3o^PCvc+IYHwCM!>T8sVfqtEd#fYpydVwmu4y26-sATs@XY({i$ma} zNQ(Q;K4#ndslNRH;XiLyB@Brr#Ax%<6}R#ESQo_+@2~&!YYvFaDl#58&8?NA^gV)knMa(YescPh-#sCeumIQW<3A@iPWDO)C z@UJ6r+aeIx_JVmZ=Fd6J_di+s-&-5wfaIIcQgb@cDen9PLBNV&tP34u8Gi|Jmql7D`-yysI({8BsR7|^dK>7b3fANK8W z%H_`El$(TT{lKxv%8I1w|9;DVh_ktG`b%T%lyi$P%T*(|^R>M|np#=V=aDDi5Y=rs z*wElNMOv3Z3@6#Xy1f}7P)`am;tUojx!?fYYO#s^aTDJEFdbOwv0N&fC9`A`ltnJJ z)Po}$7vCf?Uc{w&I^=l%$?MBdSC+x@avH71&33OkWT5}%ghX#ky25WZK;y8lK+o=P zVhkG!Pu$n;%hkpuy5gS?!EsiWh1v&76_9P0s?@93XO5KnAAE?CwM(HnuMd7oAdA?O zbzc3QJJ1v3n4ZGcejpzO!J!SKP|6j*o@Ue+#mU05Y6NtqMJucPlTm-P!}@XZuauJTmlm8b)p!t(iB z^79^5=3n>P?B-xz#yv^_cpcy!Mf*4A2X+rNl87S>tsuEF~b|7Qb>3u(1dU*g!hbf*d6j7wd?V ze57N%74u>3dsx#Jrv|-oT&?VQfAeAL&W##A=Y6oA;VI14*$uc`wbFu{d=Enepk*S4 zzenmNY0~(2#mpGP2{W)IwY_3`DMucsppC$YWco0?8SylbyI=8OiyfazCCJmOwSa!6#NYdAUH`TJ&C_j(_VV?l{UM5Fi+3V!zbUy(8m4^GU9tRe zY9jW2qZD#L+ZpX0##VVyZ7dR&XoFf;sglPa<~B=$M3&?kc(sHe(!1R20berA4Mb|u z)d%h#-nt?7#OFYmwgg9&^~NOtjhZPpun(kUe;OtZ*RvO8dNg)F$MwuQ^d&XmW^b7s z!*2;Q&KVI>@h!w1S`;T3$jNX_UUMg@hOl+4Fg$uUpI7GbVX{lGKOm&TjDC__S%1}K zS+hz(oZaAd2b4i1MeKeOS@vMpR12{){eufk@Y+padM4g&1gr*{ylm${eOf=Cd(Z@x@en{={e+&RC=j9 zop5~;&^%Sc-o5f1d27apm!rss(lOKexWfrNRtSf$N0+RPiHLk(?6ijrp_JpNTd6>sz;g#Cyl zMJlcFdn`}f%vkzT4Z+avmC`7KmZRiDqK|CP8xXL9K}!sg)rcku!n%07wS0ijX#{#} zVHwpCN{ZqUh!Vv6E!1`6!72H{-%quwXtJu6hv6ycafIN6T|+S{aI@ zRLh_JK#x}Ksy`?SqDJOpGT5XZqJ3}_$WZ~6^pAukmyD@^IEo}(5~Ji=pMq7!uoX?@ zUsq^ZQgLaCJt*toVvGDv)w1SYv|D1q!(M+>K#yzdgAU`-MCD9d>z2Uf|Xt z!d8S?c3(waiK_2S1o)x0rD=$!X?qs<1B(k-%uuhLX-YTJf2UIlGRSN|m-Sx|6C~o$ zSkxhUwnodoLo5UEl`)YZ`2MB5Rv<%t;TN}lQThX%;7v=2jW2vRbwOM50(9$z)?>+= zVMpvbZ7>e0U$=063X=qB%Xowe<%cIX)~gZGJaLg~M18~;8ntASK-PBWBws)Kd}zEo z!9%$#Oy#zluE+F7U(%DYa*ENJVQ6xn%UP!8sg3ANAHLQjEJW^Y%S-J?!!W~8O2jU1 zjUr0E__6M=Gx5AOcH)*M)&_6JG3#imA`AOrJ(DoiE~qjMt-wU+#?FL!n506z@~HSr{H9>r-wge!JKwq0 zq@vGo#sq-G;Pk-8aW<3BSqw1~EUr!uxZ}gJ6Um8re_`$!PH{fpnjimvO#ctNJ!sfB zt0u5ss)oKlyktqjl=-t@xF-BrGBNnu`W4q^o<@EshW?cQ5rZoEDR8wvBDAw!E;_@M z-}quaaN_8wa&G1g|5tg!?pY6i%!iUt<(w1sI7NJ}%?M2e0ZbE`3S=Bjk$hNbu*JJp zTxC*}^1=i-N!hv4`Q3^l1TeG(p7f>RbpI~z9;j_v9ykPd=NcJ>uHL$%X!hio_P3>% z-VctbX0f5d5I+hXcokSHo~&jXJ(>}T9~y7Res3U6sX29zaiIff%9`7RB6$f|AzK!7vvW1{Dl&BQOFVndclgq2hXR}?Kv zxouvx^bb+43E&+)dV_FiI#RdynW1TI{UtwwOx$ST_v8DGE%!X>r$ta~ZRSnn<$sXHmq zN=p^suo$5X_nx&-vJRdKmc~B&=|>|IZOwGy7Dcj0Y%P(j2O)T;MMz;1HI3Tto~#)GAg0{X z=P4K>t>9ys9KTi!8`=*BI>V;5^PqcSiDAbG58tz|FlL^+J4x;sO4;`e8HJ*B35gNL zIc$?=EMl?Oal@m8h({)fqmJ)_+d`TK-d`xsNF@8p>W!pIgh4izQ+t@DNp!%Klk*N$ z()ywEi8<==zaZ-O-dR7d`2g682>p(ox3L*)L1&a_c_RV2SJOPt#$&Gfd6Gom#4qxA zs-na;GP5}b&YNwkhX=n(FdQ0?+yx1G9#`8IKHfE9o zG$tJ!(TUrL$TEN+hD()Dyct0}RgXGz+`5UMftP{ihd$lg4;BPyon8}`d`+6Pv{i^2QKgAYxh2f6>q2Bm7y~ums9OI##deG{55Z5aR}qkpxLaa_TPgN4B#(Y! zaZDWAHqsSV+q&Q_bywgH8z(@k{w3;_N^bqlt3F>w+(J;tQ|mn+9GZ(%o-iR*c)=bp z9`J}rD%pGfUAHKlOv>>A-_|FKO&-^ACl>vO#Dz9<(9gHmE+BF0YTP5^yA+4-Nx>|R z6-e{d{aYf3kA90`Bg`x}QuDrba&7(gAIigpP&NQI5L9rsH++y zdx*LB{pVlq2yDlS@x4_(Wi;)R25qesh(YtdMt^_R5Y~wp>QJJmk5(0 zl5{8L;@hN5-kh5*HJ4T{;x)R(=3-YA>oBWZ7bH?sO&Gr|%6ypB3kHqWRP%iAjyYl+ zvu5I|^An9wxg026R7`rIIzVE`5#v>}`;cjGvVweF8%3I;T$NMcAEv(hw1X-dDiDBf zMh8{2bcf=xV=(X;x&Lln8N>`F#DW4wn zPE8WUl8RZkCSpin8QV}FD4_!F_|noxfGF{Mz)AHdD}q(4yA#Sv+50y3Y;~z$>GNj5 z_*Cnk_rt3LT+Ni$DSr%C+3>Odaxr?{$WwS+Wz%izZb+PB)^|3rTuB$n<54SK@dx}w z%dB#&{BK4bm1{jf{W=scPQ_xm`y*IyqDfHXO|}&KY|~__CAPeCB?%unW3I3 z7N-xpo#i-pZpus4r&ZHY#@~Ipmm^~y?h0HP&E~U6kt?mA?t4v^$4_x2AC}zNOLRdb za-eSdK`)oXpOHLi20D3%`A@!WUd2xkYxyH=gE|#0e$av@?#+9^gU)#4_4GmA&QCB2 z)T(Fi(fAC(9R$$pf7fjd%KPPJ)Yj(&N|S37dgFOF%!PLq>VwEVuuL3oNLi>4B-$h7 zM?}80(AjHCx#p63`MdWlt@lYlk8;j(=$c?E8De=A|CeIh8!feQ>yVmUeQD#x2cJe# zEpVSh?$1P1!4n!6r_@#P60jmWBuqOnY0tEm{jNnlpA<9_KDF^42;*r2mxZD|m_0LO4o3-D$u%9PDud z-Pd?9Xl+8<7kmVn93X%L9~=V`6mx)2UDhKV&w#~If*B5wVMmc3Zsq1|;jNYysiaRI zI%d*?ph%%I`?0K_;7cyoi5Kr9$t()E`h-;lE1T&{QjGe4sr1JFAJPBe>lu&`iQZ(L zLA(;>)hf@R4bju3|1f@s^5-sYNv|Df;x}e2TgtvWP8p*yN8hH-`ax5XG&FUZ-x8f` z-ou@yMBk^8x0z<)yZXgYX-Dm>7Ve^yCjP@d#A+pO9p~5H=~cD~W8+3M81<7PEBkc2 z;FwP)Ut(K@aj4qM)BJE!T}e33I6T(1GIX5rel5QXpW|~{?kmMNV2EGsJGjWUB8ra6 zGBR46N9+yHfBl}Q$s*;K9vh@Ap1CyC5HvzjR^Uzgb*b`JQuRL0 znK$F;!v@m#u>7ksjI$XF5wb0tgsE}oBpR1@_TBy7HRk`c=3gmq@F!<$TTn>n%8~Bd z2!*?Pgo=M*Bd@hduG2A*@tAYkKfV_7aGdz2JLU#cLPpYP86(9nIBXMd1UEwW;82Z%SAAocIhk!B z2D&AGI<=3U8x_3CFTGZ62}|BD=%Of*0nG=07kusoIsS<&-Xjc>!|YZKy@^gzvBi}< zqo*?Dwlf%batQ1g>a0&##hKaew~XCCmGsd)ST{1>d1l4=d{G!B6KYx#+=wo96o2Zj zP^-4M7&5cl`KC$k#P9CWOogCHGZg1bFGCKA>2^1{YRP@DLyv4t3dLUFqzh@~PrKCx z!gl;Iym-Vt+NO@O=0cq?&_)%@)ymARl{)=-H2F<0fy`=6XT7yR!>bW)YzL=6o?kl2H@xE983~~Y)XFA(XS&_f@G}b}#u%C=EhfhJ@y92+ z*31i=P7qT`-{hYXRYvW1-MBeHT58tk*`|aGRf)X^&7v0aGhQ^mno8(h0w^q{3-(`Y zzf+p<6SYX2dnLG0yyN3h;%CzYk}F{|_DeCTJ`P+xkli!xcY3$(ZRlvNn7jwCKXXZ* zZ<9C9`Q!)^`arw}hy)t^IyD>4dXVthnN1;;wR4SNQM$Fw$ru#`FV@ zQk+Uvg*6*;ZUfr2uH9_i>pvCwN-$r!p#Z-G9xeXoQ3cRgTJuBdHRiIv80IKNxss7v` z%|c}WEt~hH*CoZoU#qE(YK_-g!*S@5w;@Ae;gFa<5Nb+&B2mZsY%PY$#2FEqgV)Wc zkT<{|#(7EBEaxW`*4gb?B=Qenvia(D)6t#srKu1n1szv*F}x;eMp{AAjBBV04t7=c z9@JjpF;}K6*5tm-FPCo0LkGH^11yoMW1n(*PdX`$vOJdueMd-olZfy`jHYKY5!8ab zBp@f~F4&k%E?L#T#pAxwfM*a`7CpnHWjXyubz`Xe zdOoK(RQQMNn!b(HjCW(dx8nCTwBf`n|@y=>~2qm3$u*T+9c;v?r(k9L3CkSu_4XhjH9*Va0>MNLU=@ z%i>cHrkJnbN7W*1?|7ajP18;_JK+OYF!B}H1b?8vc|8;Nb8kj}O`Cl1a7;T=P?zXW zxQVL&_XZN!_#SjLAZg2>U`l7&y6htbhAA4X64N0eqFlbPPs*cC^gD&j|D8iAOf{wh zM_6mbUU@y6R^Yi8+v%7LyTx|;R!8QueJrkvwQuUf*ZAz1lzTXj0#l=bay+J8f`XF+ zf?HN-W|+_*1!EKp!*N?E*mQzL@u`l=}d#O`j=!ehdnw?DHBj zoui#oUZHMaK{QyKJ~PG7s@W|iv@x~YJ+fef{4opK@TNoPsI(yW3VMhT!Kjs)7*PypmT&3{t}^V2M15}(lg+iZf~4g*<- zQI71Z0KE{F1+c;WN62FYNEfhirD$!Hji*n@(G(((RL)&ne}=uUh-1<32kXvI{8-2B zj#p2R(A&CoC_3&?0RFb`)TJjLS8SRyxb#Bv#E*ubUUYy{C3e=iWQ?3Ad*(?5#)B0Q z4h1%uaL#!zN6zrWu{#%>O2&wI-k{RND~d&=tD5~4UyH@xY?yvY4w7VKxT>mC#ni9R zj)e8>Q_feV5&0~;)Pu^mz_Dg+mI2-Sq8?V5Zy6&>R_reeDbN0&*1;+dZ| z@oc0fqVvFS)*%i&HgvU}Pm$66IsO2@BWn0uZT_+;LcV4Rkml(k_Y1p(2*fDl4tL>6 zuDE#VW|{oWZ$GGp6BU<}vTHF0FIhZ+)jW`tK3kOb0I^<$|=E{!rD6bXtK z^Nh#-GPFXS z43aE;^65bg5$-2ZYCAvA5Gx*sssne>b_mDLt;;9bQkhEadY#blWM|TO#`L-an&-Mi zztYJ3@7@~|wSV2CoI`p8XzLbkYM?O`{@8xT<(ta6-Hho>y3+D{m#kg+62%0!Cj09o zQr2cHQgV}fk2$SCT|dYZfvkvciXW>XE{t{&Wriq-R(01@=OC1nA@vV4xhWRfX7s1N z80rTM_`z|X6F;X$R-ko3B=*U&s~PuzzU^g`?)v9|z~=M>=*o?D4!&&g!i_u5YJKom zh3lqMI(6|bM;5b7lblYPMbp3C3eD~lhm@Z*xrHWWSK{!?n>*}Smj1+qxsB!RL-F9A z0~iMR1s)Q(=a|B+TbH12$1xl~Wh@Q9PRxjQ{H|(y1t0BhRy7l3-ph!&NR<$V;WLIo zo_1*dPX&nDlb(rYuj%-mH2+tQKOXskO&@4V*KU%-?CM`UsS~T96Epb-C90Ws_QL@< zDLB&WN+CseG@-<`={mZA$knL%OgFm;`BIJ-op!uYd(f46J}xh|&ROvI!hUX5j(LSa z$FV`(zdX8O2QDcKF0=aVAdHBV!>?5zwbI0IKf|ut4>uhRlU}XAPMYy4Z+7Rkn${3+ zhFk0_g}iRs0YM&fZE9LBeCiH`iLlKrFwjhUEHXjx>o7(J zPV%G==2#OCkE=9(`I|US@aw33B)P+=n4zhxV+O|m-F&6MR)e_O&CV4Yk_GfdH+G9s zjIT#V4YUajKM<}`A@tsoah-DX-eSw~urA-+w`BBXd@*#5xQJTqwsTa9&T-B|$`-6T zVooOC9gST;vyTl)jom{mQE05}F%3vlf}v%Tf0(&LU%=*34RYrbq@4elW2P(eSnOp= zJ@@lIdgEqwxxW1c8=n%prKxX0y_83GpeZ#DfnSW5!Hujl>dk~?7(e7OihrWTCN>1P)%r&695&>gZ9eG3#WP0_T;zNu9ZlXeY>CK9^u%7- zRsf}wd1UlTU3a4yA=oHZ<7Oq0_cLS{Tbp$3wBN{Dyw(#>bPnVh3Msh?lIqnf9!IbSSa=ON5gP|;moR!+g~Axinp~vgZaE^qfgQLt@HV9d`0uG{Y-A$_@VZ7 zU5ZAWYBW%zt&j7C!A4iP{{-!LO6bZf3isvUPxuNO7q&F1ga8X$E>C#FirYAGNcDPs zmZp?oAr?2ndw{J+5!J5~MfW_0V(?dqrAG5BV3$wPz}CV1dsBS(k0-86QPZkt_Ufvs z04a1rO*;oyBbj>_#{$jtY6`^)xirCCa&{JYl-6Bkr7P8YCDyz%bwW^6fv+o7ME27* zqtt|f@mg}6j0&OORt3IAg85ILfErctMhY~u-K{U%D#nGmqMs3o(B8>N>#_2_{IKKG zbou>2bE&4;GL5)o&<1smv_$?IarC!atF1a;+wVS%4>_N#=wN4Y<`Y1IZT9qVEBh}u zZaFO5tEo6rJ|&br`%B3l8RU}5)2E~Rh?Lrs&i0ND<3Oe%yyJo8O9cUsm&<>%5ep^_ z4-&uQK^_@eYi?EdcH-9^hb62@MWAthAyBcWrHz7f^50MWf8-55p3D3_}{IwEnlxkgqQP@)=eq#JU{B>IX)fN~nopnut9b20Bq3;F{*Y09m|V6}0!f zAl1e?;f^wJa*`@}4e~NxAh+0TAUZTH9LX)rt{9fpk6-~k|96Cvq#E`yT zNm0HDW4iIJ7vL_HFIwmu7r#^-eozsR)nj5mQ(1Hz3n&EUREuA#G~&<%Q~TDNyxWr0 zEixPXqkEu`zDt_%M~`+U6DA}tei-4>!Vzp3b%agZno!nxcAhFHrfNmXZwSRqWhb%|JcSbAF{tTc(-zi{71 z;_;iOw!F;#wxTq1Lg8P`z8~SUUs@-$A4TRrQ@x7Wnc+^P@Xxvu1@1zJr&mv$VHn-@ z<~s?>vhgfiLRTAFsE94nJWzEG`!f0b;T;>Nh;sYgz6f2Qzn5~a(G6dvXN zJnUP*t%P#+wb=^;$!olwjI@a#q8O{?{y=m2>_XX_4=|58TQNxCi?Hd4el4;F9>wh7 z!n&j7rV!DXgA!L(sxC?M3msARDOybL958`0m2;gyiq?|sn92aiE+#j~^5MUZi&FN+ z$V?%s1B*YHSx?8vO;IZ6YJt?eL{|X^jx$rfz^xcg!GS_H%#1kj3Cs6I7ssijI~vDf zdSkrxFMf!F>XUrmJoToJh;AXs(pN-}ll@Lvgk;-`O^zliR*H-{UMUR`O*)8?z>=N! zyx$sm{EQh95hO{*tfkO{h+g2xmjv}6=Bm(Q=rI+k|4IreFev*O=|dug^*_XDZU)o@^Mz6T!xm6*=XUEO8WUJ#(j8$fU|=P;F`CJ)$ZM0Oh_FKB6kv zNOn7JwW0k~2BRqR5x!tT9-Dix;Ng9?mD4dS9N^BP@W=5M0@~sZqZ@GTJ=qTR0n4DW z#jJMwlvpCkgu(Q(()Tc9WO^Y{&Ue9rsmhOwLLh5e$SzEBkT{i;U17v55o3sQF|9l7 zR2x!KP(D@2HT~?deTZu3dM)8VKF zsh1UcLZbs{r*DdFVx{3TQE!O^=OAbqPCPpn1Dc{QgRr-dUGS?x(n=Lp#8&OQl`555 z#L?H>Uf8!7nO9~};+||>TJj~S6nKKQez|zB)+yGd1I->GnD< z*J}4rQ3{8d_|m%KG!>>0VyxJG&Gg1_9i-m7=^Qc+iM=i=v8KNG{H&;z{*#(h(Pm^! zJlxms;tgo)WQ(y)_CL{!{L1lMOgmm9^MHzzoSrp2YMM5)`l+OoUw%&rZ}j`t{Dnd6 z`v_@9`U<+eZ^rduLuNSPm_Nb5zTc$5O%yc1CMi3(6SPtz(AD!d#295j933A4(*7$Z zj@MpbFt7;036`I?{h-XnA){k!*E1{Ko)a7fS`}iPb9QQJeh|tj6l7d*)_bpW|2jw9 zI>6v%*!Lg)nqM44eg*II!xHYZ+9xCe&0pO&Ptt-$1v?VTB^haV-9KPwathy3m-r<~ zaAlv%9_tk9f^q~q;!-$W>ZkB23$$`i++6=|A)k%tFz}?_}Z^`QtwakymWqm!{9~00*ann16#DIFhDh;$BN8W3W&P zgHaf@Ee3_T>VK=L*3&%qWGniO1^B6~dMOjo9TUG3H6)utMmt7MIfTjJQI2A80MjxV zQngNGr1)HXgKZ?ymOo3RvwBGdOf}$eUU=?({E}7h(-cta-|IC*lg%BCik3~_IDLkk zBB4Ql(95~e%gZiKTIbJKWnn2tFN>b0$CcUrA-|u{l|yA`jOgxD){er8Trh)%v5USb zO1m*iQb9G|bX1s1>46+=SL1WEv~XQNPiij<=+73W$l$3*qIu1_wu zOEirM83Z2e6SVO|nWc1ip3CBUp|T~JZffK-}-VGWGSb#&;ILFy_)(q>z<-so^Hi6O8XBHon48TiVWmn*%#mQkh^ z6_J2Fogv@=VJ0x+5J|wuRAd$lV)XlX+%G(%95A0fxHykwA+U4x4`{-gIip_5AU{@; zyZh;G8algAq%y#us+@Hs(kb#O)p@w0Y+P7e_4TU1UOYSAD5sDjY>`l3s8dAG6Hoh# zsxMS4qHi#inEFDQBDxwVUL_VNKBdiL&LLCLrvEx-mHGtZE0Q{WHSGX8MIrnADqMZR zz$;kM_y!ELdY0Y+ql>VAiC0O5p%8Pu(>gq+{Cp2E{Rm_pd8exJjUM^J<54-_9o^35 z7OfsLGK0cjb=IiNoE<`_%S1Cxtox0&un`B=|FlRzR;idiA8Z#rjgv-zKdLa$ZfJ}T zpmqJ^QIpbP2op3e6EY?-yjX~liGbDluvsMOw}FiDdB_ewZR>J4choSH+f`DhE2Uv{ zN!G}5Yud^TVH1lXi!tkgIEvN^Df5_d%Jd0t4PtI3E(xtA>EO?*+@D~JE57V$ny{wu zcX!{sX{x}74gIWIF+s`WfGo$BlwXCVjxC!H2VE(uC4DdjVoBtO%R5%|g;KGC{b zFGc9cGJgtcXoO^r-D)KJlcc6;B2olZ0M7Kvu0=2eabcqYtd6)a*kJ#NCGc1EkdQVW zV|-8_t7)0|maw*vJ7ueu(UEwJct4;sTRFEDc*dD5U>LLVVtP!sjyPQ;4ZE5hIRVDJ zH>MqVO2*jW?+0A#hwPikTTQlv)igwn$MwW%_$Xku5!>}6bNJw9llbHMSl4t_f~p-r zSiBYoX0tEF5k8ZkE}=ze!Uk97NFdWKT7#;C|1>*+x6ax(ThbC@1HrX@G8|Ce3ffkE zEqw^>6z>2YkY^zolf>SOt8M|k3Q|U6%y|UBO1ClRzb5|M}C-4o1d<_pZ z(p<)xXhFU{P@1Y z#(lQn1=DG6poLe4QpLPn(7W*;ct|ZSiKK$rli9oN&OXzDlrdA~ke_ZHn-ejA2A2Xj zQf87%DU-@x*vF9zr)e$~ex!cBU{Uyy7}zVIcbEVi6wq5!<#-1lvajE4HQP!-x-IfU zmP#@#?UAPqK@m;7RG?Eei=M6f^7LKe8l_n?I(+p&F6yp%Y?oW+e);KvoX60g z{`MGKS|)C0@Q#e?wL?_=rGSq(d>zHrFhT3z_f0Pdsm1(MzS|b#NSpbbzH{L^5@}wQ z8=Ey$K{=-kJh65|}NOX}C`m<&2zaMa@al=D70% zj56uVFUYbGlEL6iu2z82Fy*FpN!>8J4@kvTx7=PJv-ovEhg3p0|HTn?t`AsB(fPT8 z!CS`90Q-9t`b5C>edCz{JW(I|nZ=%>}eI_SY7VVUt&{l!DvP zTxvB3I21K=YT&m-#oH6LD6LrC8k;t&gw~OK&dWs-BM#$c{q446tfuxVjk^|Ms`k|u zxHJ3YP=K3WlDG%`1So(KtZXZ#^vX)`p-$6RwSEI_pHU-{{02SDOZ2@{KDWaS2;{QC zi0or#P(XoZzV3AU5!&iDVL`$foSbw?3q9<0>vYFj%zaHE^X&GwG{6{SZeD%TKgXx< zN|;&)NKoFg$NSo#%aoa>?zUA>Ko0mc(WH3E@;NUuV_&P|t@x|pA~1uErCO)iLqa%F z1N4hc&ZlH&yKh)1z(ALR89d$Ch$q>cn#`N=yM78$fAp%pFpoPig6Xnkh94P9rXKH4 zZNRgD>__;Zt3EP6FEY^%j`<_LyqrOrQ=S%HWXsrILCHKf-y@7_0}kjlx%_J8PdNcJ z#_x#~wh>7WM$53HD%l?%q2~%ZAxv9ItA?f?5#6Amk}^bFy%1CyZ}~cr>sW*XtY8R zX==)~f}<-bVR0#g@=TX!2Tb?2E}#_bSsw4z zi$=c|`o{#=k)VB`e7pTe_dLj8_O5{ZSBcZQ62~8H@sq=n#@=);Nqg-}XtmMw`lg&v zYwBel@N6aCGG~63wp0p1RC4W=KAS`lzm`q47e7mY7(wB^GAo-q70mnRvFzmN`aFly zN2nq_wQ%B_iy-@%)3SkfR;fn3*2q=I4yVhGhWIN}t<$i50P1FDRj9xqJ_ywo=1?wy zVx8fVS}EH<6*`b|LDxqF?8xe&i%idR_XyP*Z)E2$)$rwZk4o`#snW+?lyLyE?1QT& zRkG~M8zx8BOxvs!YggIAv^-fl_-InUs<6MB$E@t{0N-j{3jx0i8^^`>zaOhq zRxy@pZMG(czGXR0)CS#*ZoiUHojev{zf^34%>MX_X(ul&i_3Er}wV7y<`a#M31$67_ zytdc}?ttcOm*2Wq9ujl6N@IZ`igGTGIht;7btxp1{~nb&)Ig!9r^uZU?z_t7fd2ue zKv}=$L(ylw)rt>ApZTfvEEjr8@K+s6M4$Pq!6l;4`l^v7qR;xOStX*+`l%%)qR;xP zRVAX&`m5}RI#{3eR~;{iKI^agTo8RWPz|{tdTF2hKsEgW^K$aG)<89z6M0)} zpjyC*tmT1f2`9gat>r+q;)2*$2C1GGMPCn6gLU#ogVabypye2EG+0f%$kLIkmmzAJ zA>9x)hg+VUL8yq+B}!$SZcwV_R7;8d5DCd;vGWksof5l_3sSv5($?}7&QGfmABk0C zn40jBSQ&_=K&{9bC_DB)5p%?YUQVlR?oWT9HBnoba2*9 zOpccsU7A(xJXwv?>8^8>TBOrG=c%gQXM87_wHn2!(VXaSm8sR7zM1uh^K=!IY2#;W zp00Y83D26ThL*7%s71V+%S`nFC$IRnF7aw@IiuvTE-ndb>J>(F!g{;RRn4D^u}xIH zD6zACq8jkInD2>d?B`;>Kd+{JF6R4uHRp4&?k1@voXDI`Qma{>^yHtUI$jkeEKq%~ zvbjQ5sRe52RgrFi8pkO--U(AKr-=9=E(_E;mJ5i&x`nFuHA<$0_~9-K)gVsG;zwhO zxF&jOk(zjo&FKyCMbaWQjwxyxr>pUV+^=hv@h&N|!hVT$8Kz9;;Gn#Sqp*>0G!I6a!} z1Xip0oSM#Y!*qrd`E9~AYT1{pwPZ)nPy=tU{v>C`3^j|=#=w?y&bh2ragd&xTh6)U zlBrXNIiI_1(y8a13YX1l@=dJ`cU`usSvN(0Zd3DbieB2Lp1CR7zD=#U$ybIU_guEA zsFKl*IUm?;Q$s6_mT{G$m$s>?mBu_bRBE~SyKYnSINhEz0MnTUxl}huSI;cLvO$xu zrR!H3#kg)){dJ0WeMODn^unO|uGwmmPKz;Z&}pUXE;XOiHk{{fwM3^F*H_hQo#I{h zsHU$q%5>eUdh3+snyZHBw99p$n!t(tEh!I0P_5BvtIZ)5e8Xt=pgh-n)m^7iHu8A)^ySJJ+-Dvc*tqh?pxs@ zr&Z5yS)Sj8twyKSP)_X=uDYI46F8|J-zsO-bWUGe3cxuv+mOpSwSehNof3A)=hUkW zEbBS>Cfsm6r+VIEG%%qGQ!uCS_z!G~)kIDa@!z`^tJ`mBr5At?)I3hZ5`J?1K&`$d zNv`4jwwN8~RqxxP?dS2FhG6boB9~CP!VqpO=NfES_%@a3xxdzSevbTv z6$_7l?(cFo%2|fol4%a>Xw24soI_*D(%zx6j^@c?Iwlg?Bay@mN|bPT4vpEF_)l{_ zl&DFmK~IujV{h2Ejpbx&6HR42m2;?kmdfX;T%bz{ETQ2&x|Dc6`=5VYGVS9rTDiY@ z3dzdK*QEsBpy9KP$~D?F&WFkKRQq@g1Q(wd?QPtm|5PcB?T!8aklM)e9uG55FwOgG zt)ng_&|=9)mNBwNR z$Ok>wunrO!nk2%V8_g`^Tz-oEG`yY4 zb#%_=&~o=7;i)46Bhin{XdB@_UDtlx3SL{{o(2YlIK@6x4Sg_>jIMhRT@)IW0Zv?hPCTS zWBNBEZh@fNLST`=WGrPc9ZN)eSOEzOMGjBO|DTlj_w8!D3ox(vpX?@`8|`38dH|rJ%jx{Lk=P=Q!N74%l^6)%Q6zJdY;P zoMV>#wf3^!!!k%))-Xn!q3dW4WOZeG0Rq=)JUc(LRre6JIYx7MXPL-Bgk`!fBWel3 z8AD4E-E%)&Mr=M^)-VQwDk^VLSxs~M&xZf+9R9y?_P%5AH{*IP&lCBJuyNe+nQEEl zbr6hMPHZBV6Pp>-e`YNgp2Ozd<6()H#b%#zRsXMTB)+b)cozP_q0E%IBcbrkL7XXq2{?#xQ9-udMkLHb|DAh4Fkzmz6Un~VRil>ZNxa?CLM{{Pgj z|10IcTZ(bLGOq30sP;93e9Lfk@CA*jqVi6fh-Z6*@f5*4?HFDE57R4OV^;_(<3E;Pim zUBH<3?_(O5HMdc@jpH8=%i!G=|2r}Nx$r-U`R|68&@d$QE zJ}HKrejCR8vg+}eKMgUx^t%UAgBVZ4{a){MqV1C|R;2&CzWCp`zOXUe!x@||r17qf z@rrnO`s49Tvin!YD*|J<@japj_a2{c-}RqdFN-^t619;VoadjEmgWENU2E@2f4u(2 zHg^2S&%FM-(m&)sUoM+vuhSN>wl|i>yM=uk-5X)GdMjNEOFaDd^(?04vYc7?)AYy7 zGM3m!zrUfax?fOxc4A>8@(s<0g>O;$Q=^(RmaJB6{b6a1PkA1ti_$}0AaXX9i>b_@ zGV2AcTp7IjLc=;Yj+ekbgAH5jPOla-#dE%x*UbLw)g*_y)wH&2h-?=5?|bk6o2eR~ zbN+d_-z4mE8J3C~;8Ff4OR7PHKt%~+%5FVPs-Knkr^`svkLSmNO) zoeKWBCA+81$}*lM*b|nAbYJ-Ur(Nvs1e@0j_4^glU(B69^>b0f`2HCp%$@`8dH(U| zfNVsDWjvntpW8RKj4^0uWQexs8}`sWjl#y(iT3_g+t1Qe&t{MkpKnz2$8%_yC+jP= zwmivZNrvcoi!D4?~ZwsvdD-Mp4-$=$s6SXu$^wZxLm_m2#7{IBoNKlzURz_lbM zcsCs^)d@$1DC z|1;~!+bn0-|6Q21ls*4#e2=Jc%u|_<$FQDRr(aKL;lE#PjPDFE|KCP;kp49P;7qY1 zu~cjw9-B$ZjilPK)N);>=CKlZIrFdA87A4R+(A>lM)NsL?a$GeQX2C`Ch5=WOfs+Q zGReF~FA^I!D#>4Ymw@k!#4?P=%zRPv^MCf_;_ofR(~AH8Q;f#pB7^*&Jn3L(-5oEA z@RLS%&x>MY_rE9u6YfPb{*Zs|aL5ic1x@hB9)Fzh#|?*C;!gm03d^T(oD&EIZ9qr- ze<+Tv0fTU8F#Ze!y}(G&2aE>(a17>f5CX^HPXvgBQ?V`@=Npalh{icY<9w&%e5ZqS zI0NhBK_W~5PlIRizjHw${v^WrIDQeh3K!$g5?rrTPy7W~P^pS>VM+Kd0q z1KH9+kSiU+|K{V*Vf;A`N~E`NnQ!4T-@;|Sh0A;gm-!B;kcvQ=^d6`HXF$F5K5obR zAOW5Sj`9WIjz1Q;9Oro*f4;<@N}TUE`139P+`^yRV1s-c|67eecW~ODasEH!{C@%C z@W&p1oWMPt?ji1jKfpx%X$k(s9{^*a45I*oc0hqowrLEaK_VR(bM{xZA!`hp`$5oa6C8;csen+$S1KUl3a<(jHxL&pC?cYO ztg;BAB7*Q%K>pw7Ip=OOQ{?yg{M%2y_nhbK+jE}hZ1Vx=<-U7TKPfNw{Rp^A@GApc zGrI)cm)I*FPrU^C=BmGz*ZL^VCg0q2^}PG}uEPqZ%<|F80lP(48tICi=`-eqnZAqD zeNy~5{l$5+*gvIv(;-iaz3H3hy&#@SPZKYQ7l5yc_tJOF+ofuoZkE0#%Eq5U*oyJH z=DjBFo>z_@MmLJq`c5DJ>g*>)Cny_y{N}Xp>haIQ{~Pm;)?O1;M^K8N8=uB${b$~j ze7ET}@ze1mD-ymt4lfr8-|r6poEG){?eLp`fg=bHJ>psT`9tT?6`Or@4`s^NxN;f% z)9tERKHp}_`L|DOtC;0GaPuRZC)xI3q!MWO} zN&MO&V-seo3{anQ? z{U4iOuDH`jH(BrW{rah|IMtNuOV-%fj`PTE*|wglKDyblN|qRz%%FXLu^kRy3eAuRf{&TaFoWoF6g!>QG%pJjq zNYsAK9}%Cby$5Kr`I6cn11X+}_)P83VZOHZDVV=n`)ioLS^ImU%q7>SYX1oH^R+i= z5%Es#6e#*pgfowN5%hVCHAns4zrjx_ZV(ohGrsO8e9OPqe{k*+f7Jh}@Z|ic|M=V| zsy4%aTUC=rw|OZ4r&rDLnYq2ewaEYGsFGdd)Vh%-#uH- zT(HMaFCN_Qe`?F71(ZV*e!4OG_WJ*C%hZCsetlvJltsxYF{MqPcscl}pK>y#B~QF= z!INAMyEW!l8r7txU$*623#O2(?=GO)_`!m;{)&l9P;WJiD;ZCppgP<#@eurMn|LJn zr2q1XKf!#$i8QkAo46}Ty(m~c%lC(ggR0m1-<<%*@Xwok;?P?E{K;LuC;fGkFQbQF zhaNbk^-Mm6yq!5YR6V7o*gVDNix@w{l+UyIW;TC=%|DtP20qM`-%TcAes}IR;P+d0 zmd(Z4B-6&zgEUu+RU@ zvKy--diAllqI8v0Pgn0i{O?w8&`z0}72Ki4ru++cXroiliYkrje}|TyDqFZqyvjX+ zW|ke=1yc?1GgZGFxI4TCNUdBOzz7XB1!#me1!#n>Aj-lh_t>4v%k6*MlkUnP)%#-Jo1Gk^kzKHys1l$4oUh%_o`e*DFzlM3IMz|sH zpK~5q6b;NjmwNcSm3IYqY7OV!zc3LX*WKFZ#(%pg5uiCm^Ph3zG^KPoy7ogeye!e}X1>c?cdW{wgR(&10`pbFqkRO`s_wXw+Q4#*s$&2@ib)Ska zj`%;^I641L9;bVS`KkUH+l8F7p83=z{ylt$yEI6nvNSk-o2Y$Lo3kxcTk4y?4KsDH zY1>nnLrHFVQ>&SnBi__jf>P?wY)j3b6{LKY`gd+SuC~;_8(0e-`$%orPiZwVuFxLa zc585j_RO}xQ7g1pwoN}u^Z#>OIgr|`lwW6z>i+W=9u?JP3(h;g>8SGHDMv3mswzm7 z724YK-zg(}=9nffMU_r3OH}D}3;8we`{ysKYYOf?e?)6y|5Mug=a1H{2nM!quA9=9 zZ-3Fhn_oX7d={>&wuArcUE6~gYjK!MA*Fo3u2er~`vY}rgO_Zd!YqID_LuASX(Un5 zTzU2UI|Ze9r=S!!1pm7I{kmw7=ICgUB(Yig(x_fPOV=+5)hB}C3l6B?4A)zOv-Aru zD6iih{0t-cCw@YG_{Iw^@i%ENfnzsmw_QMZ*9D>4Chcbzkn4RD^XsRy-(OG?n$ljm zpss#J@Lv~fuA}_FU$##xyYS@tedvJ$^?R7p?%_9u_V9Z_B>#ZV2kD;mj^NORkJj%9 zrY?M3lxPTnzWNH`C{2? z+6yP#(6m=fz|UTBA>)@X`E%228kt|y?qtd@FL@V~$6=l&KHS(l7ZSpytC!UJ7hZaa ze_!x~OH)hs1^X_2N;K&cksB(SSni$D)?d1_tkf6&)Q^^s^zy_KlEB~z> zL*KphuS;fy>Mrv&?`HXMx1e{&b_;rMY`36y#&!#OUu>2(c-f|A!YRhPg8MM%-q^f? zrL{d8N$E6ZUu@nd8s^{FTothmtYy3JzROOnXbNc_KXTbF)aUD$ zJ%^k;escLCQ`*uUFJsPHx8tDdy&}4UN;+rTDJ{e;Kg&43o?`x1%L_b@@AiGT@y9TK zb;mDSNUD6eWd-_AsI@k=iv%oYYFC z>uV*-X|1LHORk8ut_{(QvlqI?&*w&Ty0g9(xw^P@L+Ig=&$jLkK6S;HfPcE;cHm#G z_*UzNz(23}PHQ4WchC3nY(;YN!>yY`EQ9G1sXuSfiCb>a2NU1}`tmCYPfb8m)6FYs zOl<>}>Lh(d^*1}GFC{!^X%oj8C2eSFLO=H^^eDuaODh$9+9agw zLG3(W33P0VZCs<+vKqxRsZrRi8pU(IMsZ%GQ7V^dt%&ER9M6M@2mW=+&!kQA}b&BU|o#MQK{oly`Z({$qu>Y^J|8KDWJJ|ns+5bH{)y5C>tpU`M zz8&~e{Sx4V`W3*3^{auu(XRvkPX9dc37yLOwEiWSpVw~zzNFs{d{zGz@UQxJfdA0% z0luyO5O|DlNw7pT`lzK^eAH5Fe3Zj3ALX#mM>!nyQ4UY_Q4UY{Q4Y`YQ4Zri%3+fI zkF)04j+~1yFMz>Jw7VY4}4Uj`+QWQpZcgo5Bj)7e#%dypYqeV1D9|7uz(}NAu;6F&Al0gbJ9%TPPs+q|k`P>?$o_~Ij zdj3U0>iL%isg14-{swq;kkY+2_$K1HA^6U;8REv^d%&B5hm~QJ1&;^5id1HZ_c^UY zLzHe~=qJ->h?dY}z~!N*r=z?fs*}@06x&%L%FneSO67*o5{%XdLl++~L;NGO3;1^E zUSMU($c!0cVaXQY;*#yaV@j?DHkRB9Y$G4R zlEuKjl2+hg$tvKfB?G|IOX9$@O47i1$yVTK$;H5A$)|ziCD+eHPbi_9xvzxEGFeJF z*;@L?Su@1>rGEupRQdt%veLN+%@9|XRspXrT>`wel=5&xDaCVRX&Wdvm0l0?Eu~#B zf3=iy^^MYXFyB#nI`F%tn}PR~UIhF>=@)?am3{^I)6zY_2TOkre7N*Q;BQL*a}dT? zDb?PqrHhcOYp0!eFyf!~AK)$1X3atT)9QiK%Vy8@i37_j=7J-YQHvj1wn+Dh%Chxy zQTDP+foGLn3;b@`6^9`8vd|ILVhs4$VeN23fzb}eA`1`v0z9oLh-`SdU_kj=6w@iDR?bX^z z9B;FB8-FXbe>44P?ZRdB6G&|s^Yqa1TiV1tddkW4?Wkze<@ZHhx?flV|E0#ln@h;w zHvW?RMgIDZ1QX_Obt$=*^Ox*xY+rk1OxZ7Fdvei*%Kl=hjK?=k+V_^peE6oz^e

    yTL!~#Y(i>6fjmqy&6Dr)zktQ z)wTDjuSm=9`6hi|KjuDD_NV97cj4z%yf>U+NW-lx9R`jb^h;;#mOwfNJ;PTx(3>0%dSN04w2<6cH%M%z)k*l-w`ql{M_PLy5q z>GxZgVw4`C-BtdB@?VrcT>jhgC(55L|G)BS^A4VO=)Br_jq_UO9XoI3yn%V6^RAlr z*?Bk2`|7;!&-?AXC+0mj@1=Qvo#(GOuwrgSMaBGzrixEgoKX?07_GRV;+l#tR_w0$ zO2yYJ?yR`0;s+J?SNyW#sfyPt-mG}1;)9C1`D^EIm~YHKdwzEQh4XjMzkB|p^J^-P zsa#U|YUST6->&?y^1!N!s)bdHs~W48R;{gyS0$<@syf2TKRQ;&x z=T(2K`g_&eRsXIkUr@cEX~FRedKa9!V0gi{1v?geX2F*h+`8Z=3x2!cwFPf2`1gXc z>hkIZ)s5B5s>9W*t52;qt1qd(vih^tH&?${J!fIn!rFx=EbLwQi-iv_{N2JA7QVIc zgN4(NJov~X7u7H7U-Z9=ez@qtMK3HWtvRu#rzTzVm72S2eps`&<_|T`*8IKZ?HaMT zeDN`hn-{k&UcdP4#h+b#)8cO}{_f)MFaF8m2NyrG`1gySUi|Xn*B8IN_<-7)+WOkb z+E3M9T>F#Sy|s_m&OU1XQAZth{829-GqY}P-GaJs-P*cS>NeKp>Mp3;S$BQi7wc}W zyS?svb-%28wC>5e=jvXsd#7%8{gL%6>Q~mER)2QAS$}E$)%8EDf1v)C^-t9Qt-iFO zy5ZP{aKlLreGSou@rEr8TN^HHxV+)&hFuL`ZrIcCYRNTAZdmd^OTMz?f0z7x$)ii&S~9)) zu;$w4rOhWcN16wljpohG+nYb#d`t7!n!nS0Z}WZ4KW~1h`M1qaG{4dOVe_n(xh;pa zRJYW&EN%Hj%c_<&Ej=w~wWM37S}tw5q2((r_q06O@=D7)Eg!VZZau7ZQR^|SD_U2! zu4_HJbzAF|t+%x9Y5hs-W35lM{;BoV)_=8r&>CEN#L}jvpImy@(&44arRLIYOD|e_ z`O*QQi9w-@bA-I>UNQ8%kKPUmAO}InO(954CE^g|;czis%ohiUN>COe zKSv`!$B2WV5zU4!bTCHf9I;Hy70X41I2M!4@d$CEI6{OGY7Ig~L={-|0x=+t6sL+> zu|XUqK8et0hH|oFhIV&P9w{5#tqNrPzsB zuMutHTG1}9N9;FXOQx9A_M)*6fcXMcm+B5Gji~%*d|^R z=R@Y$F8(eqfSz_C?Asa*;^?aOGVo5cr6S<`L>i~PFqYu^?D?G90*-3dA5yJEWb zJ#m0`mzbg5E#_!@#9ZxOaftSPaJL_bO6`YYfp$OSl%GN-`5CmlpNkgg(4WwLDNfXW zC01#_7VX+^M2Gg8=+yoqR%@?A2mGsuXnzwYX@3{p+8bi6_7BKSZ$cCNr&zDOB~H`c z7IE!gVnlmajB5KtLi;y#!uLc@dtYqPK7eNUA90>0v~8NMU8MQ7i?x7ui5Ap$Xd&%# ztxUU8J3#xKHbc8!o2l*6W@%s0W@|TUbG4haL$ux6q1u&1tN9m zcY%|K-Ye+0FYg0hedy1H<$C?050k`JPWWay{V4kT<@7V(!Fhyp<`KPaUM0-S4k!O> z7}qlnGd?zNJ6tn|lh3c0&`)h#z~*ZXr=M-e9YKD6ayUKWci|EAxZPEZ*Bn7QT?ah0nkWky8>-3A zK=pE;g&#kZ%)^7#18^;0xXDI$4v($;wU6>fxS{f~Jl89ZeAqUZ))0LbV-=&UpSl`K z>%r=MKFjB_MKk?Y*nicu`>pnpuJ6}GK$%ucG0dzb%9_QW_gk?YR(li78;&A+lrh1W zIqJ`#Pca6Lt_fIWdG%TVwVd={KjgG&U79Sln$|QdL zP?D3(u3iA0D6_H_cyO4~J%X`@aS7w`jGf`t@YA*G@o84h|JD9TnKi~QSw$^4x{7>$ z*#0=^vpXpDs*XRFS>Xm=8cROGfqTCp+{afI|c0Ta?1F*F7hAlCQ3KsAmc~VSN7!7Wh!z+l=U8Ahb>=A zSh<$yEsQayY@PAJOsjs1^^>y?EZ(~|A86sn4>h~`)1bHaUw5FDqU`5a^>ZH>coy^v z2FU+a15}?U9Qe|KR$r2w%{x+_wd1*R#<39AUYW5H=qu@*W%cAegB06O2fJoj_3WN8 z3quw9FWbPS*g$F3Zg_l_H6CR=a#YIP%6z_XniIp@rypVGe0KHYvn`ZiB~Os4$QeO$ z*Bj1w6Mk+xgLwtd5%-?Kv&I7AoU^MBI~cwCOv*#%D8f}|)*o!uzibQH3aidMsVLpu zE<=Lqo*qlgl| z+CdoTB%IB-GI|5K9{g?KO;Jik#<1$lm*-HAq8wg)GGXIN!aJj{&mq_MZP%ual&j-5 zQXW=sbW(phc)(mC(lHvda$Lwf-)s;?)_|nQF(Tu??TnH`Fw#c}vy7i+yk&Gc@VjjO zA>-qt#Mxe9^BasZHW~8|5~mzumF3lhO#LEIR&9Fe5R0?*Y;xwNJ636j3h~DiDV{r4 z^}zhzra|C9aynDAa!Dx>-_vz*ptwsXEx|8*bY4@?>BhTtKj`-Wb!ZC#I#03v{~V}6b14V?7+{HbFfb3Udx07> znF`SBfhFRXfx|$52&jn_(1&#BGlzrzMBoU}p9E^qZsvo2Ebu__??5G7_W^ZiJXLf8 z7IuhoUjH^&44LVT`%R|pPa;ifMBRmaymj-=_@J!K6r|N+kw5C=%w++<9Mre0BbST0YN~1xKT0y6=Q34J6 z({V5-kzXCU(}|#rGn&Yw4lRl>i`;3@q}pKKg4}6h0;r2APhJP}d>}@F zc0G*j`mIX8G_cUi!&LM(0ny921NU6-+}o`=)k(T0;q{kLl4%)RgBj_ zAJ)Y#Xv3QLJWv<^1C3Y{UjpjlChf;`t{SL|TcIUu;wy|_)gA!lHpbhbHEZH)jNj0H z0m|1IzYQ%~7vIqy0{w1i(Q_h^q$4`KYi_9!U#GX6k&43r--{#bh)lpitPr~Ltx z`+?{`+LJKv)&2; zMeWa^yu|nl^n3I-peA00j<1V912yp%==r*Mjq!Ep`kMGF*8;WZ$RhQ#6N(# zn5O@WdXD}saa4UDaa5otX6f(2d?4dN`UjxQ2I}Hq{X>}N0MVm#O+)Vj>f%t{2Xi@N zg&qK99uPfE55asG5Is#Vh4~1^O1%t}DxfYF=m)@D&3L3f6O@IFi}YEb)BwSC_1Q4j z0(Eh;J_qIo{ScVz85{L-P?~_cSfW?J+zix3i+(uFt&Gd``JgOiJXWs)99wG*WgO6t2Bn{Ion8mZsd@v<>lsJ&CQuTLoAhQ-&SpGEZw2LCpf0xR z%V0i_ahtvZlut2Up&tjzm5iU(j|b%{#?R^}f^rSxAN4ROPcc5Nw}J8u5IsTf0RCBD z4SZFP0ROI^4181X2L4m;1-_-P1%`YBz-hj9z%t)@;B?;x#B%@;E$BN9c!=)|Q0DoD zU@m7o#uuep^~He8dJ<;HQ1p1F!b&qMG!50eFq?i@uryAAkD-|fJMd|wAX?E5D0SH5pkP5SNxzU})C@L#^~0pIc64Sd(P2l%1y z`#|CUA>s`9e+;vqahm^rs&oGXROkMm0T1y10yx9J7kH5WA^4vS)J28=SJbQhkAQLv zW2663P#PFp{f~jNlySNLacU7Dc&z^qFdxTwy#Gn+$&4%ge+1=3#y0;mptJ*Z(cym% z=1!n4PV&D1^T|N8k^e<%FUDT~%b@fy_WS=#{U4}{Q~j?|+xcGy<&%u3`~OBQ$Qbv( z0g3^{i15EjBLavy*Z&sqTmF9mzwLh)c!z%<@O%FE;OB1t2Qc5oc#r=>Q1&o>->*S( zyqEFEexI(1`+(q|{s7E-86Wb8K=~!(6aG?Ao@9L4Uk1ucKu!GFe*ny{FuvxW3H-Z% z7U*vPb@31XY?$9;vkeBv1~V9;g7$4IBoeOG2?N8qk$&|>VTbr2H@&I6L3wS85jw)!v9G?)OKJQa3HV( zxGr!U=%)ZNQUb>VPYav~914U%KZ`LQXagn2I1=apWfZ6jGq4)wEKnD@Km_J3KwV4( zPKJ3Z&<*n><2iv|P|gMF;=I6G;01vJ;3a`|z-t2Qf!78$z|VC+jGDk{!0Q8N0B;Bk z0e1zWaQ!?`7rO&7n7_<;OTYl-X2!1vMu6W7BtX9l2)Qe;3Fdo%y4VvKqqYvDf!_~o z2L2>q!u0{hp9OND{FL$Gzyv7I1*Twrmht((xxg0!=YjqwAmpgPHkdzP{4lT`l>ab_ z;Dw-QKuAr&i(xJcUJCOx#>0X;fR({3fK$P%;Cc>F7v~2*1H3f26O=20*T8%^P!pdC zUI+818Ltjr56Vs;YAm=5=FbJc0P}T>*9X5ybrt*))lzUb)fnTKgExb6Gf)?|1aAd? zGk6;)-va95yTRM3#)4l5-WB{N@Sfnesg{CwQY{6)1N=ddbgcV=cTqN1@8y`D)<2K*TJ75{@(XhgO35<4n7Y2SMU$OcY;p>-wpl|_+IcC_xA9}9v*s&+9>odU{&Z{ z;DXRT8h4@hXxxQ90Jela1h$4WA7=TG54bE804@)OfSsXI;6SL%r-?zvvqA@eGQ_ws zG!wWvGz&Npnhn=U#>+!;LV{L;4PtAguNB0i?4)^hWR!i_*p*G-Kp$_2Nq1C|Zk_hma zl9PdTCEdOmkkx(AqEFBQz?B;9=B?67f$druuv4QOh-_q(iP)vh2KH!k=>DK~ z2=why#IQhoOD~5u*cB`Tb_N5$HNg<@q+ltqJ?I1W1nJ&kUvMU{KS=iv2ZOVLrv&Ff z_Zki!0^KY-jqV4=rv-q+(?Y<}X{Erkr0;B_}dxPz~9X{ z68QTWHNXdFQ~;lvaWwGh8Fj#CXZV26&u9R?G@}Xl$_%%qHN0GwHtJjWd55cq{Xl z+=4B4T{-=#x5`hbt7=@|*r`3D?Occ%Tzgczg};w!Kj81<+8^*0TAlAVM`LX14ZbJv z6QTGA4}yXwe)>x>;y$O+mbGY{Y7N2-s`tl1Qx_+~c4{=`mbo<9Hi zbSstCUFa*s0p(YhNYhKx1^?5aOAC=tix;8&VqQM2D)h6~LVtUg3nA?AcU&c)olEoG zFw?!mGW^j>5cS3b)y>$0@OOxqD-Ok9IsWG1uL6Jb#S!S0RbnCVNPHLJuLggM@prU1 zN*sf~I{Y<@C87m?t@v9emWmZ(xi}Vo$Kmf2_&Y%yFT!G_SOx4CYef|ObtC>__>1H3 zZuGu;@V5tl_u}tI;)miV;y&?9^u$NRuf@Ni<@+>Uo2kvv4#eNV+H7qO{*KTN*SN5s z=uXFTN#g{OOpmmrjBI^8nG})m__&dZ8yTBw6C$f}$xV)}cRZU&r`AMM@ubUlTRLNi zF*BCVBoiCOz?7La#zgPNvyE6*SYZb?8A&6XPKi~y;b9|_NR1S@gyZQRBWow-wf03b z(J>=S^pu%sODEHrK_fGkNJW!&h>lcljGe>TY$mZWmo-esx9Bpq7|HJF_&Cz;NM$oq zcK+986G`dJK222wlq;D;8Bk(VM7k1YRzw_67A*|Dp;Go6`;X5y}j7hGB+ z-iGp}lZKaUic_M=oG~~xZiu$t-u`wm&>imT8tU(88w8lkF4F;m~&F>*kYuzU1^8FwZ6n6bF*-ggT`cbeI|kSw!L;HT+yl)iu8(s zY{rO=iAa0G98a5E=B{*X6UwPv5GI+3MY+}|V+QwNL5aC6u}uTnXx8wO5Cukykz5ru z4FRWQ&P;4E$VGG~Qi-u>lFgA6a@m(j#|+bCLXnyVJ(@(Gldhsm>i{YM<(yL1&S)%= zBr8{p?bvOMr89On5NP=Um~4A*E<2vfa#f?y?u6IH$8B>zBFP$gxnQC@L_~T+1&vT0 zCQ_S3Ke`?DAa?^O8dVUR`_hRN#z#A9aWFAv$P(MOfw8QU54Pm8qiA#0E==l6#5U!| z+Y?TU4;smoiy;i4a*eFTe59={nLsqcI}YsOFT%-0)a*CVF%ns-K-AJ<1lJh7Jd8M-J z%Lu39>!aD&sGY7;X9EVYH};Hrj%ACuv>U_GT(X!;M<$a7heUsj3}zA|Bh2-fvvh0$ zE0es{8sH8o!r|=9bS5Sdtl!w2OMo?k?WZXw>$^UK`2*H&WC4BG#F$GOBk1Kqx;xow z1MiUuAp=(IYzb#Z%#ZdieGmh%XC-?o$s-h*Eb@b}-6^j%4e|&j50TVxTIHuZnu?Cd z-r^KCGB%zRiXCwFFsh^A#*>}N=!iX6_UAB~$Bg;`RC_d;I7jtK+ba386A9O-)yc?( zlj%0Hqv?2rLlTSgAu!N3ag4>)vnbJicGb@919$KESk-_L>ezO zyb*I+PVzFZi^bu*)QFj0zO=E)OB_g`g!vx9Q{BlbtNhr4QM-|v3MZ2u$95x@Fzx2; zrU9kgnb03ijTja|wXNetP7-bksuLBGol@5BcubjkY*Qa+IfeSiq~s!WMW@oatV6cS zBI)(Y7fr*G5f;QFMVbA?CLP-#&KUa%XmyCBjy$GE~;QrHy#|ry_ z>N^Dv{YDb8Y~cY?;K<{a=k1ShYB#dcL}4`yj$%L;7L_DNs)PcEb*7Oi?vRZYZR&{Z zhIxHi$d5fPJzZ9`Po<(`iI|sY_Zel6^hYN=ku9+a;dpeM(^lE&%%sOWDoQ<-&(5PM z?2xV+k4{*vp;7^bsvlK4Htvv6?tH3bPs)PHTbfw*wQY`R0ON5iN>aty&u2H1 z#Q^fi_ROv9mVvpjN6K)|clnee6J9|eNuYS8$!;*OXlrCpYbxRHXvQ3kCRa`M8^cO- zEs%qGhEjq+zLez5YQta1hCtABtq8K*q4E zA;OZaOZf1}xM<`3I5{PgG6gHqGL@5!DG|W4SPAWx&~=S zYD*%MPK_a4XFACX8QIaosm1YCgy#dJg-o!=n4syP7&|6aG*ZYPAr!>ZV={{cj;qp8 z+oLXmG|5)X4&=ti(;&wk71{RLZ;YVP(G@yUv2@&Be4CdIrZJMk@puLqD-a;^>P&dp zoY&^k>^w^yMw~|ysSVV6hGK#V!xWCZs3^?R>=;@4bygeP3lEAPugxWltjkARnnc~y zNCAB+mQ2LtdW+~78z)iK;bZLyHbkkK$jxO};vk~r%&bnPH%5~M+4ihoQD=qzk(3i* z5x;4uFfjvjZ#=(`li2NYwn~{Ff`?fTPv5K{xl7>U!95Ue_Un*m&6ntjclV}ZhDQOD zD~ttwq!0YruoZAygzYj?BiT`#=;=_-{9xCMtI|J;I3+n7Y*{p4TQY4Lu6CwqNjV}5 zulLC0Y}XtwLV1W%N8;9%M(HXWUhJ(=kd9Qqu+BQz}#&IBZ6mF^8LB zlNb1mu<4}Vo09dRYNIcsmbKbO4Ya?MnLK(lrLUGNOqKZ9P|`A_sP4vwvUdDqLx#IB zV?(1TgvuWLLE5%0G0F&q$WWi5wa?YLXhsrJ_7GqOE#gKj8KpkWw)z-XxKk=m1-dHF zl1RPzZ|~>~uj?AL)|Ce$pX`v;oHorVS<7r9nydXyua#TUUI{QgHaj-2hddJbA_mf# zm<0dHCZb7a{lokSH`zlb*$;g?lR0x#(26a|^lFA6t1^xaZFI7Ydf!N`Wak2{$)#1_ z4wu8QwFpE0k$QK|%&vmkKZ$0ORphD<*AkF7p8XYrvQ9<8KuyVMOfgoo7?FIUs}2}E zlbIwCnuR29eB4>gLXz|~HiiyEj8}Pa>}t)4b7|4@!#PoV-JuIIQ;e#O9kU3H{N*!B zvj|O&y_n2=Z%R&-W-(%_Jp+A?qfqa6Ec`VvvS<>H8wPE zm5Ms7nOB!%LveQ%afMj{<1TY7zhq-WQEwk}`{7a&!Rb7XO}gds8lU-{xAh8YGp|?Y z)vCLz=69`vo{`rr?3TCZKraQ|!RpD%XgWrYAY-iznjRbXY0S z*oIh@1(_`cL z(T>LS*qB{A(VAYXVx+EgoB&WjufJHGI9vg|o~;SIE!-Dwiwtg{BGBRh=N{S;o9Iku(8r=TzrAz}_prDCY?6ncr2wTM6~3eugH{7uV%jvz%W!Q1hy`b878d5?yj z>>b7zN`ze5*J6dpRLcO5sVSG7{i7p=L}+tsmOALf7cK^3@PN4qxn>%*$% zkMO|tzh8INF#p9pTs#KnI7Yp<#bmF_>q>Sv;u>+czN_W!7UD+FWimA7b|VWt#M*fY zNmyjH*vDPmR{M!VQiFd)ev!j^cl5Gf;luHb<7@P0_@XJ zM>CX~z_YSq^5Z#6nO@ENHx9Y24}!5pq6ySl@o~Hk#E8{O(N->*7|?g)Qoj&=xy*Qy zc=pIB9nDCY)PR$M7A=RNY^TRXzvSHMY&Jb6;uGBJ@d-45na=dl`VlqVgqu5Nr1lJ7 zP%9H-xiM*XxW(9*5l_(89*g>BAqhRfOUQGV8p((~>sw~ksMZM<+dZE~{<_gzsCV0s z+b*>sbg)QV=|a*h1xU6Hq;r{=J^I=c(UBCU-$cx`kL@_;b9jVV7Sc>clxPsm%h%Y@ zm@5}bPeHof;Zuh?PU+|w?CM=T)ZH;K5MJHEn%{{4HT zT%x_K+^a1wZZxZU^Q+NaWmXj-({@qqYV_2GS(HkCRW~;sBY!%K824S}VP> zJ}isrw#W|coT5^_+C|{<%BZ8mMlX_Li){cSSi2r_2U$#O#TJ>#C228y)aFzwf20m4 z?QUje12U*B1-cXGAfEDh@X`gm;mgee}3TCNdvXLcn zWO5pjSx{zD5)@#v#BQJzGj*8g2;}OviTRS zyIGx`S1PF=bz>r!ByQ&Zw#gMTo&nTGzU2Lug~yq7q|bC)Xv(rq_pLTkBnUubPNbQD z99jM_Z&;Cy4UO^)H<-5LPb0J7y~5-}eS%l)$Y6W0)9Zk&0c|7(ks(PkSQ`?e#ag*E zC)P(ZDJo`98dO>r7-j{K*2Rc2fNAY-GB096%wxx-G6+m#U?`dS>$8B}GCT!)#FfgH+b>ge9E~IK6Mc>74zxAJb!#Avi|U zG4^0)lGBk|q2o?xNo!VE<+Ed#T8o&&fk5!SIdOTG5|KuaU3P3tmA zW$N8{HqF*KBL^K?d6IfdcQloYCY|kSTH{D(HmxPEypt%YoCy*?WS8dkA$2wleTLKp zISvYlmQU-PmYHXlg5@MhO?1wewEx_=spQK7vhvMb*jiX}+m$?-2ZSvvk zUT}%XFtyq$R8Txh=SkD1Nu0v+Ohd~xzGx$&H)U8+Qo8HL<>G|n$(l?y)YO%{%sfHPnUIw+f!=~;fcp)E^4Pr$NB_OWrQHBONzwC-p*NTbz7 zX}uA8YA$KePL?&3r>wwahVBL?VV_ect;Fe+Y|C!~u#LiYQR`Pu50sJG-A!6mZpo

    tt*vGCsb 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 Po4XIO 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%0ATk_P`a!f1|?Idp$~~ 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 z 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 z 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 z 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 z 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�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 VkBy)nG#rrBr z^qs?ws3ioCs{)mpm%2`Z5!F?Mc1g2ULUhcTnX=tPu*@=;BacFk0THX?7D7m{j++3( z)~C}I)UPV;)9G!VrP-=T?kB1Nl%SV;p!F;-!L2xVG*hn11f^Lj$n9$^#t>)>3)O(W z0jCr{Z<$OIXex`#V437=n8(y3;c-z?3!k*Hbo8fH3hnF_AxNS`;#3@HaNA!Y{Kta4QY<_s<~x#QVe6Hg6?U$nAe-QP6X?i9 zJA`HN;-ZQOn^K`n@oie)(Y1J5sbZeXab$5Wr4Ix$eD+60&9Xv z%;|5#uXL%*B=M^Pf*={;G0_6y41}TRB;!UvezK?%Ruqc;fb)*^C6GY5X92{7Vf_it zvC(Fk2#L;x1;QmPntrLnLLG-F|M93p}I!s-Uyj1 z|7{hm1b%sL==vrbz11?`vB5Y@AVWpfn9zQ5v7~$TE)-BPZan6oN|p|QaTDOQK-WuZ zSoizqU?b0<$Y>tjg!v2#?fByw8HKj zX#p&dmMFfX0W6VC9wCEDRhvDz+jtP{7-2vzH?Oy4en%Y#6)_A6)W{bmm$$2Omfb2RZ>nS^pu||~K?QQp&aC>Q9t~gR zqi@1A78?CY`1ilB#8s6I)bq8r(5)wj>l)-RiQ&#ZTJ>(QTh9;E(Y&3;uj6RW`_%V! zBVzZq`Ku4)zpW0iUVGWK4eVG48S1%HaggT3{J;LYZ$c)FCQ)4CrOzm5TLCK+x;?7b z8NV_`YPYpvt$o29&)3+n!MxyRI!;?d3+sYyKdY<22jjxQxNtBo$Sr-y#syDBK+is> zxwQ%;h15SCspo^-9ql^Zo{Q6%19^e8$8JDW)5hp2T2+VvTLtt)ifPlpERrkD6yrCc z@ddNm>Mk({Y_`?3p(AUyBBDRcsr0gh;&4o(ibAwo$s$I!Gk}BOh*nuw$eRpFrX=oV zIjSS4jo+i%o8C4hlzA=phgMB-c+*mJuq+K@S=z3Y`#KWW-!YtDkWjrtG1P&rHk%P0 zr+j^BM{_e98)PkS(^;RDDEUHXDnM_tSl0p~x17Cmi zs;pPqWoFeu3TX-x)9GmOE9~j#+&AqC?)lH3K3IKUJn3RUhy|6mfS7wA;)m1lZmRiRGTF{duhqpH&6?fm?{3ykqYN%cDXgsfnchxfET*To=@1Mxh*~4pSX5 z29h6(aNZz0j#TK`9dhG``C6TF?cCo*N%9nm)ucw;6UvQH(|zd*DM{KkrN+;jik532 zcrv5`+E3UsNlsB;{@TT20yMmadcTSm8$DQTEL&+uKz;ol48Gz5GFHv|=2n+=EugPI zn^4$QMjW-DWS0p|QgIpoI=IT>LX(-SvsPiKE=!cR4J#i>d8ltYYz}TrF@({4O+=~1 z4?MTpWfeM>vSKxOGDLOS?!b?Eax=78zKfHnWpuBK#6)hGi*aye(9<$1DnBLGK?lD- zT#Vx9bynUEZ^m*g1M9p2SiVr1BT_A2l%ZJW=ZILZ))5YP=6a=${qMYC+AOtL1X|@EOA~+B)BW zHr0Ba@HB3}bcg6&%W9q<&s75`7htQ)Q+D`BHF{D|26{#nr7m>q7T2oRFvoC{uS#4&LO)zY zVX8T3)htvSvza)=uE~fjsaSR|rhW{(bROM7SAdubJ#k2j_+=i2;8WC%+2XNi_LDU( zR!S`Im*RT6UI{?!swQ^pJ}yhB20A0V4H6<616XCQFwmYdE=!0_69Nrs3V1XqLn@28X+q{ zj73!7sp)i5;Do?ewAP{#67Qzz)+4EqlspLR9b_|x`3+w2vAN))S~25090KDOq(%eF zzehPH+T6xBx7gSnnxMisg5P0F@w>RF97+akY2=Xmu`4-9b~7q@@w zk$e$1G4urxLjaqB^OdEZim`*l97M>RXBw`Y<&_*Gp9o6084y`nJ_y;uT?_s{jNYgj z3ynKshVNzheeDEkU29hF377~{fMkE?TZSpd_F~c?!Xb?_ahe-cmCk#0IC6*mFBn4)c z0{1|L%M=mdtcF#!^MdntC+m<=6TvFfL}nioLJzoC5iiEnEJtXQNNG(7a^@8LD0S(R zmR7;EzLj;zwdhPWAUNPq9B|9fKG(IeUYXAkpm^i_PcufZnsfTRVrFjh9Wbu>2 z4DOc{#t)a*j9l+VjOnCyiWSUNg=<&~2P(-$)CrZ(aqTiO5rJW)#`RezLN?GeSns_- zY&xC|0aEfgDfrLgVjAW%8UEF_#ZA-QF8M&HvvP49A!H#gF@I$SEurukL5K-Op;wQV zc7`y0isA{rNnOAf*;hhk7{I<{Ih^H`C>;Z7C}@D+=y0gJUB}14g8TN_agIxLm~LP^l~qcC^)O7WY-~9VE1PS}SIeSSv8^D{;KzI z;GPl(#Oo5}P7`i_jDFSvW@Y(LV!Rmd0!mm;K`~bqFy;`6)dFIS-S1t*vbC3_WR>>%SbtX6`l#*Co(?)uA zIL6O)w+w+x(J~A=M#+=|h3dLQ8~mkz`$gQQfb;>w>C?Y?q6(p|I+%i%8>?*V9*!!? z;*#6|Ugalb34xVW`KAR9cnp}o_9>HFXnlICKX4(`xFjXUK2kZlS83@xN zsj~AdC7lCd31G2f_Tq&;Q~7-n-lhbQ5efOvQF$hK&N;FnNg*ax`!_%(%t(hH_iZL? zhZwatp`iIz4Y#3%DW>yT5VUM!dgT}blP`2rvjPg>tTwc6!WzgM!2z`Ds4{>K1Caz* z89dqeS)q}m_v3UDoJ;Rm-AtyVfMRx3Hm2_EJyI!};QBC!nMp@TV|>zh6#ho?tdmu4 zdrf^~;&=p%|F*^m9;35>BPn$H$GZ`Y@I%zk_dn0S#K{com>dnl3U1dkO^rRkigU-~ zD(^n>LRLs+Ea^PvL@U<51ofG31mZftcEw%?#W8f*qT8uDLcGpS!#{Zs_uHdtO-Jj z2PX2KQAT54^c7*e%d^FK8Z|3u?bz{~j7!X6auT?&R*R+Nxs$U(h@Ky}{B+9YTx)CLc0UibN>?HmY1^43L$B(m_a?FdpDX5IkS8={) zD)tUA+Rf#$08l`$zhU!v1>*}c70=RmzME&Az#ibaD<+sg^Fi=jUkbVkzeKh`Nd~9T z62Fh|(Ov0PG1`_0<|E|M67 zp=x8ojrlDkTP9}sNg3>pEqvx!2xYN~sc2Uvdj+v9j8=U#z0Ha!m8O^K3v)zOm!Vid z5SJL95vi-y02YRLu2d0ZeHG@2YUhJ^B90*ELK>?^VUi3w1l@fU=0{?6X?c4j9=*5D zJMeMZr}!Gjc*()GXf8Sw6CJ3SsFzZ; zuk}Rzfd7q^6!qNEu2n@HpJ7}Lsj!Kz+6yTpSz+pE6)dP}w^d{NBi4oRrm_k}stTO% z*k(qe55Qe?K!stHf!wl8LN2&MUGSD_d@VU>*RD+=v|I~11smTG%5w)PL|j(4FTBJ! zc=E?buO=^!g2|8Kf4@HpqH@|CM6o@~B!uWc?&c1LA&`!x9`?9+f+C6{^)ke$X8x|L z2lli8FZQEXoKcBB)Yx>xR@soTUi)T^ceY(Zd5>j&im;GM-C|}l(NofPXtg!>8HA?d zYTl^#Q|&aFG=HfISqofCymi9q$fOUEw!9 zZfH}yfX)60td=ULQ#9|o+%0eG8zi*uzT!7bsHi2Xg%NW_+T|FRj@K30>aMigiB85K zWn&_c$SYV2H>_&%xL~BF(Oc%(cWp%DK>#2*2I7)4o@%-g4^DL) z#ADRrj+Jm6X4h;&ib7b-!BdT{8a*OfP^L$#qEKY;6Udk!!KXNvmP#v82@~{5iI=(i zF;>I}-N78=@yqEehyU*9pJ7<*)0fYtubyZzJjqP(2y-||XEMR-=~Jw;fi`bF4v!Nr zppqW|JT>x;9Z^UENaGOzCHSYL{8RA!h#+!AZu}qd8tm=l1w1YU?aAaQke@jg{S=@3 zPwUppt898f?`q5+t1+#eYMcN^p9CMXJOU9?!GepiHE}tou?AB0uvl{U;u^Z}$W;J1 z<0Xo}LKJ0=9x%vmA)8y*sc7TebcEarLN#G(D1dOJ2+N61`Hr~o(kX(BmdG?Sv+{aY zHCPL=L2f=FY>5OI^#B&9f^%SVt-sLuzyID^3Krhlrd&|U!4cW`5+nR zfer1F4XrWXv(Z%0W_tsqA#aglnk#9PK;1Q$giv$zhCn9Gj5SBVb9wqfZ- z39b@pH#$&j0g;jHtnQOj zsry;Pn=76|W``L3=ANs=7OQKDy^*0Z=xr;ixMqxpf(u2czCshTD`P;Ql=KMGs#NTb zqz-JTMBJdbMNg=z1Vag1f_({4?1AOJYGFJZ2^*bwDU#7_7QEo+&5;Fh37!n2V&x9O z^ln<6rfRaW7>{Q<{o>b|I*oodD$U`@e)S@-&+#+buHcxpc?x2gp@6kaR?xl6y2+)# z6GADnw9K)G4)A^KKt#2ABC>^QWia$|Lgag$QN;ptbX6#s9Dl2VK?c`jp4`KrShE{; zOdg-fS#~#8UH-;>P$4FsTVVzoFa&JmmD%qY1>3J^lFc>1_50uXS@+ zD9}iFjyV{?GrVm$T+}>}EifYZ5C~i3=`7jMriJ|J{u(Mo0ExyW5SYb2vRnn)RraVn zOpAGx=fqUAv~sUn!h2Ql*Unb*aZC+|%T$UMEpUk8j%B!5(#aF7u(*Zf3c7rtcp!vt zDXe&Arwq8J?9OvF?=wgkkryaMYr8jWT!=NX#eWwx*#-|}J&=A>n1yx#pR_PjY8+Up zzREfYNAJb+kFU49gl?&ASJ;9>K#Y|$4bAKN-hIoAyOO%f>U{$4pqb%4?!nA5JyaEL zp(A8a2+b|r>bWpY2QA1<9*Qctpo+h*>+xeB?N}C9Z@+*A$VIC{mbhM5Ty5-CU^R2U z6`X**DwrqX4N4aAT&i8Fj04p>*!mh;a4VlRc)C>v6n$#B&3=pd3ktBD(7-kSDDNc; z!sITzrxppaGY7^5#Eu@OW3CM|Sn{utwz{`6#bJPD%Hgd{50yn>6x7@5!cCjA*Fxpv z5T^Jwo)LR6>s4}vG0-U`#ZpXTa=*RB6{xtp_;3I6yan%jLCF^XBTQG2P6uzp@;+ak z3;=kGz5t-;U9v5sYqu(83xR!*W^@^ot}De;3_$={`p~hO*q5AG~IXy$^;9g~_gF87FXawt7!8PI0K7-xtUQC`NQ^X(! z(3@?PwJcpY`J7^3nrdk+LZ@79wvJO9g`FRy5r93GyXX|^Nm80fJY|mvIC#P282j&@xY+G1WrOu?= zRr{}WG}~f_&MO_6tDR;g*%Z*v4VBT4q|Kg6>x=VD2lH;^$3G0b9dmf@0a3 z)&bVHnIPvk7U*kNO=LMFbP-~Tk*b$}ZKpXoi4gYn9h=vn(<3lk3AMCRE$;*moLy7^4if~z6uUNzjPk9s8rT;7&-uD z!eI{C094O|a5|SJaMK5$S7pv^7dsc*t6B|M%thLUD@Q#?CQ>vdHIo|zNcYKm z64KjE2u+t%!=FNBLelb64i&}JA-Nnd1c`~ypr*M^JD30(%UndEZo#D`c#1f9LMlvz zEV-oGj#$t-#KdZBf>V)(Ib;krs}voELo^rRJ~4eRXGz|nbarLI%j;LL#V?;- zzX~)@)Qu3omu42ZHO2L-G%M*fFz{w&SdU@aK67empi`!pIu3wA8ml z7D+INDpvD({7o>lNB{cz(NXZ|!5k4(h^!Pz=N+k3kj@ zfWj>t1>gJjnD-TeQb9os6q@nq#dEPHC8g+)hj0jg z{KIo%=A$0;9^sa-qv&p{Djsk*0b_ToDY@At(g{lBXUvX2rQc}TF z!x*ht`f{AuO5cCyjBE zcak1-2l^Vx@-l;s0@}>cWZfd;$*xDIifJ-hl;TkWh;r3c^YIW01I0c+u>!}jZj2al z@Z;H+QXcymuPS6*e~7U)-i>(s&epS~Ed z7I~NU?LApl0fV#?x2|fh4f!46(P-mCgp_+-_~kd#EK8?o!F z{-S@>fpMBbmPoe~gn*wrPumnz^C>UKu5MXP$Il!V{^;Npy7kOFt)QuB?G*gGW478ZStKx8%&ZhK|0)5@Z6CeJZe z(<0=2?P}mA+sz6peY5j2u=7*3DOlW0OZgpWcUoK-Z8McHw^K;0tA*}Nt-65x01V~_ zY9k#&1rPA}gTPDO9YQo=7t!BVQ0r~@Dn{djxC4HGdo(#svGRZ0P5UI1r$NZXLc4lB z=ItLQTFh0pJfDBWde>dnffWPcI-`==J6pl~Y~|Yy-VHz00pA7m@55yNCiIPjH()RC zVu<*`O6iXm@eF=qCFgjS#y7Wvbb9Ny8yy#f8zEP-<0bqOMZVd)^)=jymv?uVp?-d6 z(6Rdd_HMo^K;HM}lP+}34B${RDu}UM3fTn4dxi-cTIFqNUuYfQ-MeYn&f&#$rDYxq z;GnbsntdQ>km^G~r3VVH!x9l<&P5R=Un49OkI@SeB)YhIJKWO{sxpL6>zkpBW2btm zO&h})A~k-+#+H}Q;#cmBi;cb+*C4|rocMycWvhmn=-`L)H*8v~rw8@Sq(NEIl@H{( znM2W`fs{_PcwKGub!S?13^E`sdVsiPTCAr6`Jw%Et8^&sm(wiEXK{+r>MIF3H=zG~ zbuvh05>I-qA?`r4=7+=3?B$|dsvFtU1PpHAFb$%oi!e^O5u>bJJymW1u4AcUYg zUnP`+F(r-(Wx}FwesSF?B(qSz*=e|PMf@GFAS0%fgM;c?D0?+Tpyv=zbdlwh%7oYt zzY6-nm9X99F#e!RMn)QtoUag!}q4V+3RC!^*BjVeg^$3J!zMeuXjoh*NK z7Eixq!AU6ib@K8Vf9QVn&jOaN#V`HDGGBSe#bzJfOg7fC$k z7_ri@dCbHQy5S$o2eIYh2fF9q!ZrWbfA=jO45LYvLfpe}y~`$hx=etH07{Z%{@tZ& zJ4qqb=ERarFbN@@Ioh2Jg0r^(dbg7GC`bcNB7ONCR?ly~&Sv*qvR?cafcQh*^q}cq zB$NALt`4}^#8IxYZc$&;Og!|IK3K%lEXmTRAlWTqxH@Iu9u!_=c9 zcns`My$iRz5-qS-1&oirlLT9}%ihc0?cbb=UPEG%npqOWFVXenqk#9xPr>op1=`E% zdQT`Qew;j4P@IWfQ&14X2ZErl8vNTt+A!8;$c zIdwvDIH&uIv=Pqf>uJY>+UR+0Y?)QsYU}~Byjsn-td$5Xa(I9x(!3=qt&V6;^^Xnpm{#U&WOP|^N z*XX$k-o@Xzfl8rjH*7}8nkikoE!R@n6nC`|met&ED}Y!R+=GVCxn*6JHC1$?>$P!C zzf;|j;O|WG_E!7_f`V~?fiHZp&j*|yu46L9-4m}QfVW4i#5W7xRcW;REK-r>#hM7Tj6<01ZfyH1mEI*bM zc3&_18qWo9Ji=bq3&F&|6%Bs7Bd%itylo0{s#Kz6gru=DuhK?iFg~??{w#0BuQcq^ z_r&y$yPkv|w7=lIv8t~-hRZY_{`L-Gt+2yDoYe%bN^UN7a#4l0Zqf{r{&q(53fulP zzvNdAG=HFZ51LoxvOhEr-uo8x4(@y`Edsp>><|KhOcf(DJe6N+kx}E2c)Jy@X|5ro z9$rpg{rE?$;DFB}=urItVF$Mc6#(H%EgbFSiVxfz@3lpe$>S`K%g${~mi)fk?$g86 zabDSyTm=E8bsztu79n^5DJnyoEH2ltw~*EQWgqlf@k5DkGoD5cW@{4b7Adp_$TaU! zri!adR&jx5W;<4;K%(b(T;Pr72&hkl_rYCArGsS%l3I|>g4ZtSeSCAf<=T$M8F-69 zl$S-~c?jtF04o?5_$x>Yf*>w0KhWvtu*7bsVORK5IeUZ=*j|=Svxd;G)%yD{!p1qs)#r6^y}t7&=YM=!PWw zwwt>KOP>p_t?V>K%LW!I6%)5gOv&u9jw7AV&vxb|A`UKrNbn{T%d$2jgV($dy z+ubfW$@cX0l3C&ncVtvvy5EomwIN}uYuZZvU>wq+Hsk0wm>1P@*9KkF*7x@qx)ur1imE01 zcHWe4vC>ba!?V=9M!j3SwA68-A5@r^PP4f|qo=f}_d+gDh^@~c_6{ofp>@d;PiRe8 z6@Gdf$wuVb@STwgUO|jMBj=zwFJ_8RJ1s^aK^KH`Z0lB&SG4q6D6edfM!gv(!Dk`A zBtwA@h2IIty3wD(#p+o=;!uWu9;f2jqLj_5aot!+kxfv2T6d<(EzyV=F!~D}n}pnQ zt^c*xuClL}af7u3c7LW%vQ%8@l_VEJbLf_z$-@YFVkyQTr9vneD^Ohiwh9wM zE_~O8HN$(vm~nJ5_LSyp=EzvQ2VZdl0Z64sI`bD^GW);)u1Zy^R&TyzK>-x1-o{pt z3ALGx>%Dx-@C)dR+Cxew)}=70K5Egg(&e^oL#k8T;@2V)dTm_ZpOCcJ!Zk17l!B%V zNtvS!ApR<(R&X`L@v@u33{-o`y{4|&yaQ$7d?$HFyUsSM@9QD$X#diV96HA#|L9@l zAFZ=Bb=*8D44^^NFa?TFhqnf{oSzhsswWPTo4}C6&>5B#9nDQ+$k^#+;@tju>vVtD zP}jvaX-_R=Y8g|`J3!@im-yxyv8Uw;-YKj-dBNv20j3=ewTMc@y^ZpyZVtC()+X$s z%54pQk!N3_4ex|aTk>yKDgU;L@|e4%*W48ivY{DTb{z>7IL^>yFT%2cnDb7qqcxh@v#)=WKk$Xsv9jt;MGxM)dJ2Ci> zr8nDm%vh`a4SQr9_7)2{vuK)xK$}o?O(6{v z>K(};*Hes+fw?O<%po+!H$=q8X0kg^Pm-+g#p$`=FuCAZQei+Lg6;dj)L|%+LWqyv zlK)|F;zXDW)l*S$ROrow`h~{2w`q>H(Av$nbShYIENJ!bku-!7Z5ln8q|d2^0P}#o zOdIgJx9+9QaR0XaN*?>z)uH6#4?ImOU)s^>K{?ie-R_h$$7PNfjPCS6Q_ zA^av^FhS9JgYOo70~oVwB}N9?wqXcCU?( zYsa^wHAD%3m73D&1Uri7)8G&7D>bu=yE+|Hh z??~ghGM-8124}6q2Gi@0UR9%qGsor*j=xXQBKsO`4TUsag+&!fHy$2yoN^1OJWo&P zl&JgR7%s6-Q2`B{e8V}zBthqlb@hfC+g8k#m??4I4!8;{@JOW2@ppOV^($EBjAv}|Hj7}Q%D{1|?LASQv|yNIpio>OnnoMB?~eOR1SQ28oG&}$jVDK3=I zatqlXQw;HKk7B2~Q|Ut;CmTYEQtjB}nb5(aq%#{bOBk<#c@)TgeB!@J6vDwx^(W|i za~L?|at;I~ECrifDp^J_xk~)l7wyfs=DbgASa5V%9xZcd6h?ha=u)bLDP(*V<_AB_ zLjkfg(Okp5se6F|hQ2NMr}qsj4el+?Z|lh7*(+7vqSAPpDutO~chmIf&L?$%HuDD= z5z_yHW=)kMNhoTrQs`Wv8hb(@-4!{sR7T(0+O_~*DJS}K8j3=e`J zGGiN=p12|VCk!%+O01};ErcCAmS_X7HsRFM6a1Do5>^U4w^X&pWg&_Nh$qMv9ureI zq90E{wljyP-~$R|K$`iXkP$yv7l(_3nJynyh+JHmH&Dg^IamZ2f;l?tjKrbjR2>oV z^7_?Dwpfbo4&KRr&d_)M<#ldfmav%Gvw|2RZqY&Qja!`zbApN#Skq)e=JFw8TaF8% zhnG}}RVxr*Iw5N=#z_*f5u&~c;y2Ot>ZUr&L0*-gsSDm$I)z%!6`UFsYq8LX!nHvi z|59t&>)>Aqh32CiBG~awwz?6B7sMDOVQ`h@dDJiJQGawp|6cvkPhzM4oQK!hUGXIz zDwtB|_pM?ntC%b4NPxmMVLEjer`>SVICg4`NX)H@ignaJHXVeMQ~K#E7!HkcizQ+a z_fYqe5R@Hc&V=2r?(N8G@@{|FHuWFEOE?0Yh%wB zzs8G2G>e5`@-A5wx4s8jz7)*iEg`CeDO*Tj`4GLBCs_VV>b<$lf*^g^KEPyA!@(dF zkcI(c7Nk~#2aOJ0B{~exb?r4l@?(E6ssj{ z$cHfY=G5F7y%|EyJ~|JR0xgk86sbw}ePC9>O_t5Dko`2Ob_j}m1@q|697q6ENKFU? zXb}GFWdMmoyByRoAQoJJ2v%94xLTXaaF}{b9*Q0A+!fXtO{LjkCtE!_Qk-v>#DPlY z??`9ZOvIh+{Oicb4_2$z1L2yh{9$08I0|BeSyGNHA=n&?j+5g|BX1buAg{@iY@FO8 zRs==XGogt4>bSWNn9k&Z_lAG0Wc1T&4yQBJO_Y(d=6huG2iXIV3A*={HS6% zML3U2t8k3a>}S!_Y(5u5f6bDwlmaKzf#nilMtHGh$Em<+G&>^hAwRAalff6^G29ER zHiL>5mN2wfoNnGh>J(hf9PK*dR2@njn8n2xH}{IZ#SodLs?lSqd2_5~9#2vAT!!~J zD`~v~WxuN-bgQAv22VI?$GNWDwu?fOct|m3lf_sXklMZidNk$izs-kW*Zm82JwXHLAY}^H^*xrVZD1O>o%T*XvkN8P(ltr=XVZN~ z$(1v4Nr)-J3LpUvhWuWWB@v?)!~90bBJzo@+(%nALP2y9rq~8eM@U6FuyhSC*VfH$ zlzPTU2Dy2vx1P?Ac^x!-cQwG6NblHH8G+cbm6`9nOMqNK|xR;g2DL+(g=#O z3-Yf{k4!#gzB1!Qbj~`(&j&ZWc4S44(>FLf(x_-xENR$N??T#xKl$b^jdJ?e?C`_l z0BRv|_u5wY`S#hsM_)EzMhvx!2y;y_+cd%)fEAtG`{lEpDX^)%EV)^9_)|sj;&RRtU}_Leo5|C099m~ zHL95_j7{FhQ6A>gTkW?|0v3*`zL*ed?`4s(WuDy#I$4BeJhh_NsHqOZ+EMyDPqCkr z=5}DYS|Mkqx51ri_^*{mi;PxCVDD%9ah_!=iRV_L4`oOY1KI6sj;33gA!$bS3X*-5 zROmogA)enaScETxfDY(hP;JL{rF$@0Y!0DsfCh?MsY zFhbK9Y(f}fKLIQoHO1C~T*V2uW0_N=3N1mbOY-FEy4jw{R^J!-hcCtJd&4dum_P<| za%kABim0nDq7gz!8i0{8LJSmLO%2y~<)ahKQb1)O26 z7Jb*bXIt&xAg%`zyl-sRZWrcu7yG^6`*9mRc4$|pA5g}rKIyvgo7A}4L{!79|IMaT zN2TMtOqoj19-bDQro_V)`F&rJ>!|x^_3 zNGPdB=FlTZ6z{7+&_Ei67Nm2J=`s-7{snUC-^Vu)RHGJV&@nz5eT$~6S}iRekg|@{ z+gUnd<1|k)s;)*RrBBg3;VKU@0PJW;9Z5~tgLl`9$utI0c@>LU<6e+YxW~J0U0;z-N&Ng(G zhVx{&@Z=Ri(1+K_8azCEHAw$y9GyGM5VHgCo(vVd%htM8+#(T&1^~uwo_U!;vui=u zim}F!o>fdE>LY{9e-h9di%Knro|n}-HPb*Irn77T{%Cl=yCbr_P&jV(fS%jT5h9YG zw&kL&G6ps#3v9>}7&1kG)~R}-fZRW0jYY$YV2^JhqmHoz6$v3~HoLRxhsd|IXc}9j zZH`^#@;-J`bwgB9jyxIDQ|q@=3z2J#juQt-6+ASFBCYj+HRjZ>LJ2(P$}OqGP&b&W z&(Irg8@fygb&t1pd1idFflX5NI!VwHTc`6{OqQ`dG1tSX7qj=j z7f&;1+#X-k~yf9BG?Q$+@sfkzjUNFDcD%nPF*U|#IC;7 z*K@W3a;h4X)HRY=!x-pK^T-0&AQ)O=n92?4BR5G&tzmy@p);zrQ&$4av}}GD< zePhTn(T-XUg_a^Ja<=}cRU)N114?TWCKS+=^VcTno&vty_j#NbrRGG)(54Q^r=mKR zrEv#2bClpY}{Q1X0 zG6`c-s+GYYQTjE`vlK584!=x;e_JF$nMZ?E>8qRi%>~s>{bF|W0c{t|cl((6HCOZI zl*%E;oHy=orS^}GI3V-^a1hK_+dgL z{vZSGY@aF)jy*8M&wu;)0qt$Dk1FGLzDlWo)-ul)%hDrAEXlGjf%IPC*i^T%;6_}o zV278}S4=3_1B|-!W@!mNL5CT87M9^C*^P}yVbH9FwFjmL+mxroA`|ft6$!Oyq;|@X z;0`BDL*3zo>1bZF=l$cIhdit-%L}T4|Gg!BzC*m6yu4HnjfupF2L4V?%!e$TnRm8z zSY&Hlpkn9Jp}S2&!GX2lG=9MqljcEI@@;BBAnh|y8aOY;CMK^8hM_2K(CB*DD03!8 z-S@)e_nBk|%>39T^~+$!^T|7L(VV99tT!JuiL|>2qN9jL0T2mGu;F+!;&mC$99J9= zM}LFI{wUv9^%VjFWRl3&Fo}^ROoCHR9pU@mQp5EAxsuqpnv6?`xXqH8Bksg~Ae~}G zi}f`ebJ@gCoUkIkP9ig=z$N)M30P{l$5D(C#$w4I?~j*DaQ{uBZxPFTxPFwn%#l(^ zZ%qt2QT)Fcp(^eqHGg#$(N43c>;`-`5@6%1RTsW1Ep zsFDi8*H!c+<26Bjr&el3@RPkN_X=K4GwiXJ-u(RNrbvn6xUk!?THSh z^`QCJWHMRzbu;$_ld$BQkB#{*rA0%~mi+y%k9cWM34u=mbC3T0$&)|X$O9~SdEH5% zn7%S-54Ra(#X~SHXXb&W`d?ZLFlxIew!F57F3Qw4P%xWEK~zk`WiBd5XU*dSikl&GZ@|bFi0UT3#HJ{F zd=C?Vk6se1oWS z{iNPObvbkQ%sIOr)&W(NgZ#Z`^7ldRKFHk%x%(h@ALMTN(Ut^;&cgX`Ph5~{!c`?I z9u$S$DGCP#0m%0_o&6G))7!Bu-*_vlgL)J!vJ}oxQGE$A3UnEU`gztyW1G=Lc|FV> zgVw?PB6VLXqiN|#qd%C_f9vABV_h=9oXJtuXSCw@%tJwc;c;=)j09?(MGzHH$cQi1 zQW(Qd!?Hz{Y{zHs#6XJ-%LP$cNf!HWvpeHPGEboeWKcvfbm_v%QBW)HQON}rSLj}6 z1wR+VWB-BmQ;f^(9+XwYW})U>>lvy)3pGdW$xsibmIH4-@a6+=-k6IpT=@$f$(vG9 ztYbS$YoopHVQdvAuuBfePDU!hte9rYh+{daj)6Ize6L$|0>@`6`DCyiHpho(R;X|- zLsNkz)^nIX{$!1#*-4(%#w5M(p|$hegu3tdgdPsTjt_y$lspeoc8Sy>spZTzkt%IGLk+0kmYij1rrH)!I#ROSz8!r70VUxl@ngRlZ&&H4qo`_AM5)Czcn41R4 zUBN8QBgj;{|C6~UmQIhCOS-n9YJBuYK3wN#10cnTZdIii^Ff4=QO@IU(ix*z8{!A< z0|!(ZX)2WiJ#>{@ZcN00WG!8cVmfptg7{=OKRFd>h*M%RlBWp zY@Ti4P<;q$4HEt34_LM!K{&-XEAd2HMnr#9llki8C<9noWsWNS+Wye>g8f{)w%y&A+~SB>t^^C_ z-^HCo2V&-M0SJZ;1?_8cV5Nh{e!a+>7-jTr8Z9Y{*)(e(=Qk@b(4Vi$^Z6$bOy0^z ziAsDBt%}YuiaWM_hbTIpdt`3&PF$QIoNkNj2oR#hvQ(;J-H*f)mbhlw4~Kw#pX_AR z9o?48)w%&TwT7(ESYs$&+dBv=Z}NM>k|cOShmTWIb~D42A-><R&j6-4F`N!6TnhypsDY&U+0u9Y=~^Q@Pws~au)mNM-yL(lT1V9T!JSW0g9 z2Xn87L)Q5PBY83_7Zi45vGH?cu+Zj0hQZI(Iv6+^{2GjqL z2F2~w6>bGs$D%#W7z@e8ii~x;(cYjupKBWq8HpE*$e^fA8T3V zvC3!{Mn3FOT-w13Wc!%K#TPp;0i3aC+0(0RCBT1txqz-ZCrJ#Iz#!N%$?h@2R1g|# z=!^i^~e<~l&@FT zJ>EJ`W1hnkf+w@ya6vXDS}m7ZURI@GFE39%oYv;@^suxK=>j+8SyZ0ruw9bQ{$5}w ziG2MbC$bcD9^J&^3eJ^?pbFn|QN~6wrk6^1)n=w3jiMPsi#<0~!ANt+TS9Ny zwijWi*bbRZOW!hiITC6mEJUje;Ulyvs6YJ)_b5;!I5Kb7!}5|}t-uOlj6JCRJDZR3(OQrpi$q8i}5;(CHWV%A(keku?0MF}Wf1tywp>3`1AGdCWX2&u$ z>h3*y?~dP}Xn;CLa6>Ys>?e5%n!5uDOGjg!)EbYvNLDxFwb~AYC613_SY?T7M7Fje z((sJ%(%EHHhm6}&VasC$WIeXl*#nO(OFWdjX_bvp$Av+=Fgc~4)a$)Xo2vZ@b81@C zyO1njzV|M#oEw+Bq58x4%6JKi!f?4dMSC@W+IMa)hzFVt96l=;Jq`| z+zNT4bfVd;cYw$-+IKYK)O(rg{8=rmtD))_G#4oYwhaE(@B@Slnjc9w@dv_`P8s&LBi#Rij0%VPR0kR0F zB|d%v)-;(WP*W+?)!%nzUAFtU?W~=sq2`mTQA6L3#Zp~vkbb+gCEhUPP`!sYOf#BW z)U^eD+LTu^(+GRvGwx6u;xku2>1&-E-FY&M3{=Wq+FrlY%V@fSFaS2|UF6wU!Tq*h z$smuKKsnSi_#W#S^s`R1mryp*d3QDBL~2`bigD1I>}?3#9aIN7FkPg&?T~MCnwBCz zdn*xF`j}S!QL(z_7RMcrvN@H19jQSykc~vJ>r}o506UP(0|?h|NtROW3M=AN+L!V& zt-E|T?*4^-%=Fwli$X6+DgyM;w$0eVS?~^pWV>4n2TS|6N>E8>KhDZB{blRED0#%0z0oo1^q=oM$O| z1v%3%h4iGL%%d?3X4NGZy7$7b!0S37ABqRey}_*_fiCj+D;K`>FSO7fM74`Uv@%zL z4=84#txW}dn!~JXV@jlRyTx?sW@PbzvQ1B> z10y>yvI8UQ&B$~sMfdXhLozTk`0_19AGuUeVl09jV6Y0lk9;CG}*5UA6^rAA>_D)`2>)HsFU!vC3Ur$ShPb|34+=pNwVx z(@ps&1VxrA&7rvj3%_g7GpVwrS=2>^DhzNTdgXG;lHMTt*>buRY#Zb?xwNXDA5M#F zuz?mb7Sw_OUq(I7#!i8R1aC*^s3FizPH)8iMm4$a2uEe9ZirmU#tg-^$&zhAwrOnb zybXDYF1kE)2;QR(!OeH+p+oSYL-4?I+2=eSRUZ5Nsa_$$TO1R>J$iKvV{E0zZe0}H zWoO%QL^0QGc_!#Z2s)plzpbL8#M0vAsKj~~2n=jNF})RQ*+qQ5k9N_yg|$B|BQ;R> z-|jRm`$r#dvwQUSPT3Ejck?h-nVq*WePG?%fAb3cL6JWw@&`r!pvWH-`GX>_{v8zg z??{nvBR+Q1_O~WBb~F|YE;at9?G6Wf!*IG> zwfrO^5YTyan4-UsNFC}N(8w%;VADco4qQjK;nz6he&`U{>7BOY_zb!!FR%=@I1>3n z**R{rJ9i)_F3DE>iwK4;U068^VC_b_b#(_;XR&8koEg>KG{v|q=0O=>ZN_EJwVsXn zGcI$~o^0%3(N+Hr9Pz*r<%fI25l=bSSj_}|0mVbxj}>0u?a^t59)cm=${wksN7dp0 z4>Yp9sZb5;72>y5QpV!kMUc5fJni~kuic_{TeXR|Sle1A4$hi2HKX75j??emp>eYK zwIVI>R{codN=c(#i;j=sQm>%QU7rMwoP(-z6Zl97hJGkU5$0t)T_s`eI(POE;>B59 zEI}>Ipo2^i)Yv+ePY-ptVtX5*PyuhWkG#+y?OW)F`F+-R*p%8|7nZwpnURH}sWp%0 zog5)G`g7qDv)9Wh02>QB=3r88h6APDO_Y%MI+})%LAL;|hrTotoztuokCDI265XJX z7kGKY7%+0DI#F4jp^n6C&_oK`3o!C5z_JBYPUMc8`h-AO2(35`(EIKyT#-~@4n{PG zxeMWpgNC4CYvXBaqKV0sm?2x0ABF4~7l>Ergmq2bnr2ZFf5m<_b#WGMAxfUaVvYgd9W&!I`^-7UMwD|7=&K-`F}dz2eJl+^tT@fO|)@qSF~S(_du;zAg& zBKJ^``?FtJm?&IitCTt^0l^@rh{ebA61zD~qxdUqiN1yAU`%49+M3NGe2v>9qG$1| zuC;n$=RK%>xC+%QTvgjwGL++%+VMJdxw_>#HF@GX(%Y|XNrYIlD&!3<$eMUbwOp+@e$H?ncO(=Yo-P)fI{g zQnmuw+ECyUi^mOuxc0_EqdC^tmcxEE*4&7+{dJBMcIZ#DB}1XZ z#w8`v{%ZP`_i2yZbE-*M!xz7vrzglEX6^=Nh6wi-7~*k$Q}~__e8K4F2gRdTkV`)dqS6<6y3c5y7r zB0Fz3`4*I+imc00^C5sRj@5P1?=@Y2ieT_&y5{c>M13IYJtOM#ly+$b+eYl!q+)OD zy)yDvI@6Q($tGI+N z-R4xFM1UDh^#Pg^>`ndIhbph%ejz44u+t}YjRvEFtSXyWtTP^DIOg;yDE6V&zXx&oDuYJjMdl_>N)pub zF-*f7W!)w$b`C!oqr-(4=&Pc+D(||pY7tVV5}z=$Axq*ZkqY6ZvKZz$ps7=YPHjr= zt;8u5=nw52SlNOg^+$&+4D3esNHbG^UDT760rxOo(BW&nT zz?BoJ#N%oyx3~+$Z5uYXMTA=Z04+newl$uY*n5cUp*3dHm~Lfx>ALh32UP-K!`#Q< zz7t0he!?Ziy(%UyNeaAx)7uQZ?BL&ay?wUGAB)X`0`V z^zA-qSG6v;mWu%)J+gb#k9F|sq23j2~-xagE%lp?mgzx1HAHVw=V!o@Cc@Fp%um-wKJPmwX+ zv%R?9y4(A}+a4ru1B?#D*$Ngw*Yh=`mq9t%NJsSTx40;azH;_e1e7;d@}IWI2qzfe z7*=AuMg6zY^vedaeK~yvg(xt)AfDR-CV@Bv4R1oj1bbzz7g&{C7)Y75W`JU`tHuPa zJ8A8uOm-}={nk1kt&8>8uKstNBhyrSQ~Ra&&NS3}zs*F`8KiDKY6sm zLwhdFZwh?M90+dqHMH;CWFh{lAPu~*p~96p?5&DZ6)Q?AW5Xb(qLG+oqYt=8GwFsK zMQ%`s`+H{l1KnMu4fZjtFgsA|UtoNI7U{lrpvOVeV57|vJa`TP?^z4U@aIi&lNpKB$<9rh6%bYnPydf6Re7r-g*p_a-6 zw*_l=qyB19Sg6~JRNx!Y7OaX*-t|ZbDd1b0rA%PA489Te+LJ!Fz~`7dK07X4dJ98a zZELBadVQ)WAXM72+;6b6KxKbF<;R{@kAcdz`+Id5S5!|=)POp4?ee{^d{X=5R%*~i z`nvQClC;TIC(zBL8JuGhqj9;LBg(5@N|sf@7ca+E(BQc`od-^fh!#y17bSHzl-DNu z*2Hbt*(i*k4<-s&)Y(x6u+;$9%%y`l*Jn3TH}>_t6&GO}4`J=%81klGXW1^dVcFim z*4#elgIu5(P4n^51bD$O>HK1qBMKKcM{@`Qxb>QVk;x!)*=1fP%Xjto9VDCfT&S;$ zu9@-Z>a)cCK%$MwJO=XB?JGlb$peD&2rj-z)gf#=ck*cMls%5+_NySa80NUnKNp3M z9@fw#4~7Y}o{$bGQy#2rvED+Vd*;rU!)7Ub*xTVZC)1kSKekMJ@Fwq@H`&%AEr()f zU$Vvt_sf&K)`-)`pByBhPm3G9({)8zUA~knX~%ZCen|zN?ghYi?F@eBOA2F@m1~^s z`z$c$eeBNDbq;v1LMy%($C-4L10mjs;~M4I%0~Q>Mp!yIENymeJI{OFE%o9iSnAiB zqPJi26S(3zV~3pP#0}p1?#cR)h;`oz2?Bmt08tfyv5xgX%kmftv%G74@oG&~;PP!%p9AB$K`Y zL5@KCMj@_yNRS@c{;)!V4xvCEwvsjxK)4*}BX}p|*`FVQ;ez3_#)nB{%kY<$%6*joR{~LdyXw$w`<&bda z6rlETQ$t^@$uI;XR8WVpj&CpG3uBoYI+mKzL*9gMJGZA zuoQoy0i2G>$$Gz`<~`H=hPHdbm9OnS9W)d>I;FF;@oKe$=+>Jf8fNLpnA`hw3^&d| zI_+@GN8iZ-r293l(Y6tOqjS9PBE-)neH)`Y%Ylp%igQStf8g;mdt4S|Xx*(Yo4Tma zM|EpdAbj<>n&##@KAU7_AC=5^TxIZaYF{4fJ?LT{x>$oPTs8dcs){w31#0&CQSAfJ zM9OvN`6)qWRFr*GLnBO5;o2m}glhuYxK$X$O$4)eK96#A z{sHU3;I>eYNsiOa$H+qAF|-)%Xz{T*g|*d^EAtX$n-FGR^^4yO-4knR$sqPbg53}G zxuY<7tIG(381(Q+ zj7yTVG2uh6`@HESxuK9Y6a!Zum zVcwC2r){UY#*u86)G^t$AGh+$cJ0qk^mNzi;(Y77D{Het1rd##yxK;%IZfx;yDXRH z5)Tg_-FN?8H(vbr*1@#e4x(8W1V@{%ZKwaDq@Tus%Qd#QE{?G{eU`0Cwjzkz2y#T7 zC}9h@?e09{?w>(%iwRi;)~1XLd9xYTesLQ7fV{5)9`1*k zP}=$ZT0S>42Gv8{6iQ_>Nt{4vtEwj@xbk8P}5 zjE|57MN1XVsR_=AO|ZzO^V2XewT0lNAT_ErB&F6S3jPI>ou( zhv`fxur#sqk}3W#ew7fRkBj={4qvqBFBHhPC2-r=e*MZ4wY@$Rn3F$)oiU!i3*$uS zSH9kq;09h3d>S`?^LBKH@0UC-qju1}rKq&qI1xNSybc<0wknsaa!f$qC9C4L9iZ?u zk=qJl}#W0ahqqCX|Y6 zonK);Ngl(^iOQ3>f7Hk*%MN~LV0VuS0+c=&0vV2?%g_oMbCl}JF|V8AiiQ#dMt&!d z3gjR42oeAVWOr1-NKlTA2!)GHSg$^kVW%+evuDq|T8?bEzTV_QsJoorh7m;icDcap zx`q~d+7gcn>S+k$P?DdV03&Q9eL>X4w7!=E5Y?%X3s4a8h|SeP`I98O3#L&H`a7iK zMClAYg-}Ov8qX|3N1+-{v3Nbp7hH%A-;pe6%8Tg}w@)Jk;v8H@x8c_qjwE3V{O(my zywvlIW$uH3WVf58xv`h0;RgTi^XDDib<++mSoDvWNCYP+hmb|1BhWD z0u@IlQ*Hg<*WY{Y9_}64u&_^*WaK_Ehzltb_QFC<`q#U9N=qM5bM>`-Ik@fztT>j2#)5`zvcEkCKRoaU5e?llysj7Uj@CICm z)!(@ixrpRcXu*?f$?GAd8p4o;E@=cJuu5`Q{KHwRh)43#w!~VlzMn=HPUMnzq3p#e zd>QKU>3m*hS#xf(v1Jw5y4Ik#=x`H%8a%>#j+F4+o)mm>{%8K{LI;t=u2^q;#7^LE(;O|@~xdsMv~><|M7M$R?yTC3qGG42oZY`DsW z^KZg!?$&pIiqo4gen~&6yL()Qf$@{s&uSN}q)!?$Xs*{#K-g*@<0tk$gs3$TJkCv; z{kb`0G~)!smwHl9CfP-2P(t(?Hon5Qs@+8RF=Vn67J!^Yib=a``Ee8eBjD+2R$zet zmRnz{MHWX{LT7JAQcXcuE6Sb~){?`NXX{6=HXVWNO;XfTm7GA=s{*l~WE$se3HHn4N6O2%sHb#}C1fbst+jBWjKx?c zisltF8(geho6IpUw*dIu^cLo1{4%N}$8HfZ|AUoj2p$tmRau~P6f5+IyXH*rgS_g( zMYF|Kl5swRGE+>BQ7}rgGk%b~%&cIs5|qxCblPSd)u?D2f*krZdTYJ38ceU6Rbs{3 z!yeTquok$z5l=Bi0ldGoi-_xWwvrGBSCpz3U>slIB-bAn0?ehzqrS^PA<4Y6vULTR z9_K?5&OiN_mdS#D{ld&Azs9mc@sW|>A_Nnu7PW42z?b-{!HrlJPM;cH_Z(p(>c=4K zm!HMQ8bdmxgW-Qx=OO)_phMixXFaD8Ah|Y-f$=K(R1`r`s;caPmN?`0pU33_xdrDQ z1e_v+k(|NL+~m*)rie^!Omo+Xt-k?+*`K2OnHl}4mkQT{JqUNMDq&e;{k`q)OSnoU zt`-lhEa!unrWzgh&*DHiL6Urv=7plyE!eF9S(8GX^lL8JlbZRJY9X^51}E7~4gUDU z;gnlwVxp0ZcOylUtUmPPUgobz=Dy~pb)7?dN4+7?n5)DSQ7d6d^e|XO{NB5A$|TiP zPK#bHiyHTnG0}a^@T`v=xi#)9@^9is6ghS0{5Xnm25Q1(9c-0~XbZ4Lp@<3gzn^g( zDtIUnk-8Q5+CB9SyA9;iqVDI~Z^fQPJ?1Xzy$%d*t$wB@%schpN{?!kMc*gd zl4f9pL$X6os@Sfn=c9Hyve5P`g1TXGnyhlyd3vJ6Nx^npQ}!1U*q%uDW0*6|xI`Jk z?Kmm*2RCN-?AO&4J=fN-8^xN=#Z&N9xjBY-xLGTY#81p=FyF9sge|c7)dgIn>t+l} zH(V*I$)I$DSBIlk`js1L1jawe`OIZ?pO;DTVjalG0Q<;Np0x&V;)`LfUteWAa5*J7 z-~x(`AqmB%1Yv*|D#aLTElTj-$2g$Cbgbv9Dfl)^=e4pKA$o z?C`x+HNzbTJ_rdoQV+Lb-u)yH9-qTE?wsC6P}#f)i?AB8(AdPzfqos^*Yy_n=K~+p zT%F#Qb30MM&;JcgK%z}!LH%9?ZYuU4t$<@MlFT;0W^GN0&MLXM{C+%W>kQd{O{xy? zIcV!Tfr>9t2eeM0X;CkWpEtFv>C9Z6JheAVJrIyaGPd`lRqd1`Q;_qOj%Ho&JIGiH z_aKKGODvPe(o@ldvQg5AWHU=>atRtcER$nX2)X{>8%B0X5OH z$M!pgyPDr`2o~$`7AFXl8;m>b$Wnpt&#>uWsyljB9fQ(riJ6JU6Vk1H_>> z;Fj54D$k%&-dD0d)Z7Ve1SQT7v~2pDU8 z^F0)1-6vVlQo4rBkpmyBntmnDCu*f<`kAYgEOTX%k>!N*t|Jos--cT>$L*%+Gx?gK zogomX=_i<-wgrfxlUKDc?RAD;S#2`p6bcXqm+xL*>4rLeibf09Fu_%z9oAL|5iy~O zGl1sCZW;rtQafEJYmwdv$EE(`5uD=De_}kOJ~gn4bKC9?&!e5e*<_>~6MyF18e0)A z17=fsshFN9K(Gn7T_KI^k5;KQcXrbDMU-#juo}aYKo5~f#=s%yy>A8aQ-WS2ki0e* zQOZKVgPb(b9H`*;}{6>2S47+2dg8%f>tL2kZWVp?OX#k{I&i{(sZUqiA3Hu zo27`>JXBK(z*|Iz>-u~j(kko&^*W*-!yYLL4B(m1jyRMBvO)g(=%$QgR!i{v=6S@| zvp@XiIk&6lSw!s+_hJ6ka!FOP`j6~wp1SrKVDs19_>YgbJ*I#kZ~I@uEIHopg5@1) z_X~DYu8z0;dE620o<9Yu95%M1e|6xbI=ZdVq~J0se*Zi7?DKY|Bg)G5X;z1yJ8~=_ z`xM-qmi)%Qo(1b@wU&R(tIXbDlcGL(3n5IQFZ(97RbwKB;4-7?2rrMd7Md)i{5@TK znfI7cq(h80l`?1nGO0@Ss5Dlk{J~PaeIb`x^9bq#YNluJ^u5cx8mu}-Go&uJwJaqi zp;0-32!{n=Dp}KQGWh8JjE+&DG9nMFU~9x7X8o$G7L{wJX%wZ&MkMFS&yYcw%W`W>wD7xu{2XFAvWFzj zNt2)v?u(uMs>PPJqp06--fn316D$56=Ia(6r6s+D;AL22iGE9tabEpW1#4SyfB|V< zyF-wd5fy8}kxER$!oQ;5Dqf`-7cd*DBEm4Uxgtq;oGBDXpO{=3SM2H$&^c3ePMI0% z#j2$H_OM7Li10e?$*x3VnoOC1#;KJ+ml;Dz)iNryJ3)yG<4V#*S>-w>ZK>02zDF<4 z+prW+&YLEuSDaKh=Cv!g%Md>ge*e4gZlWT{qZN3LBB3(YYOS^K0R{{tN}0F4a+eqkp#c7EcH3fwSl^*G0P=t!%BwrT;SRMPuF9r9>s?^5Dhq#=!;Ef{i0*)HhsM0hT7s6y=n81-3#+e8E zGZ$~{5`NMbbI{wgTsn&YseGRjfT>MLU_ z4TyNTl$0 zjRf5!h7QGvWE!N$L#3CB8&1U1TcAvovV&5PKBD6O;3NWf?m;9nu7J6lD)Gx5@EZ>0 zo9$b#k-cMW;@M0>Pnm3>8asu~;VpFi{3|4!%Y=Oiq*Eo4boZ1`#6!emCghmw?Ofn% zBOh^qVF|~$RV(sPLE(6Nvl;u8wO)VDWiS?MB1Bv8bciF%ELE=jA22*UQPi$$w zUVBO*rl!-Lex%9E*dFNgV}*1M$^3R&jj4+dKR#=o+JrmE z9|lQ83D?K7GD-Yqf^>rmmah#57EujXhsriBpp6;7@I6dN+bql2hDcPD4Q-Hyy6n4@ zQ_zqYE*5lMSQ}===~%RQc8UbhpkhQ3DnU)To}1^|3>AeKq6a;yT)8Oe9t~JnS~wi2 zWZk$gpb#|XHmv|PPs1!{->tH+D(4*yRzqu{vaqraEhtV_mohA2pwAQivbTj_K<>`*85_>^ADEYr1_Be zBUk)lKm;$I4{7a)1-}>oK^^^&wxHYgp>7>_N^#*TVV*~>GM)Zoowa&Fzl%BA%ByPI z{l~-4_qUaATydx#;vQQK<#XIo_0$sLDg-wi$bFU^3g$k0jS6(Vp-)TD8|@ATeSsD$ z5A_f&wjAm`ToJ#QX$&o6v8uuAHO`@iF-=zS{dW*mTX4%ouHaekA+iU2-)x+zhSue0 z?^(FGN@7*y_iYu^fWmJ$KQkIQKO zfHo=^F4RPAxjb2Xk7vUfoJ;J_*fh>@Gx(bg!EgqDLvZLq!-fi=^K=`@siWrWx|i_7hVVLa4++02DQ*oi#Dy)zYzE&Lu6 zgxP4%D0pS{c|N;*Xq4yC^{Bdb7lKS{ZB7M0_u5r@rExdj$MBUo3h|JmtU6z1k8; z_RP3Vvr~F?c~{70^cE)6Ek0ZT*qRUs+P4}!C!?>$4%Af1eNs)Y zfreh=poUQTdJy>q3?AO#5A2^PPZ)MpELZCRuuqw0d#w@eX4-0nPo3Eqw zgG?!uDKZjnVrXVPJLUkM;(vs3wBR}fI=uEM$RnzdW2=u3TXk%HBpH?bF->C@I+)b- zW@EjX*Pecyp~|$cC&&?VfW$Y7J+QVG^+070x}P%taG%V%&4B|<+uU(iBhC375h=BU zIUEIYZM)zxw{{?VH4m5UNxOt{h(>^a*W61J^1C-PJi-`%nAP*l`vMn0`#w!up$@dZ z6qB5!X{Zgp)h^Tsq(d{P%UsrA3<$oXDzf0?b)-KKu<#wAwoD!;(P|gasCKf8) zVtT~DNhrPJw2gP3z2zr<$3FW?@AJhiwxbm0bLHWc>9?N?EqL2rX5;7HZBMlWKnN!< zQCV1)pnZmP(uM12f3cfwYuOo&wSkpwAxn2r^Gi10t>F@l()2R91*7R|D^O`?bW8Vi z@WXA=1t|^TvS67DG*q>Wvw46n&6-*I_Ry&Y_!SZz)iF{ z3J~)Z+LbvtZmd_{)!AEJ)?WnrQpEU2Z1jpwq}h!$hd|&S8Nquord5_}Yt%N>+lp}% z22TK`P2f&gG^R@oMk52=c%qckqLex~%x@d8@wEOxVS{Pt_7n|mEkY8e2{n4czjdGx zV_git;ZmvqZEq?OKkJ5Zfxi%wXmZ_3vZqz1uu2cC@(+;NZNh?h)^1S%CoER|=%bXEiYu1fAjeV4!J@qDR9JNK@ z+i>fNef*nS>Vr_+K`nh=Ag{(2htMbO4ZQ-Ulnk!7@7vtFGvUmET^q4D|Ian!l$A3$ zLBZmCw6<6XWrwZ}-ZS*Eq}l!K5^#rQ)hBhI?X^NxJT~8L9_Cc8n1H9|wjT695$lyh zpWCe*Owic#cLdRPNQ3of+T}S3>G*;{bq6UlLTV(t7cSb$;+3%xjSq1!4R5x(_c^Gd z2(W3>>4GP|vYp`hURO}0OzXOg9E{b&;#VO79bMeQiO)8 z0{(8$7x{{Bsz<0=lS_ibrYyKMOnMJLaWz})s+yNu-iS;6=MmNK=a9^t$fLslCfW+{ zEiC`q-g97eMuiEIY8$j?;Gy)sj)44_ zei|Taz5Jk^)KwVeVVT~LSn4c*ZPa{YqUIh_lgv{`_Yp}=Z*kS4g^Ibzjw8+_S5lZ9 zS^B<)zR%|`k`nA>Y8ZYrJUfqL{O`O~iwCr5}; zh8lfuHI}z5rO8JvM-eJ3G-EJnmoq+*0=Nw3{Gu?eS}d%OXc|87jgBr%tb-CSRSO_^ z+eH+vk~A-(dCvJt1=UFSFI=c@m|*4oaw&;EStyWf{7_*`Tgc5jq@{T z7RMoN-Yr<9@GOL;=JLj`WhD$9T6GYFVc{Y;2pr;!^P@!8*_@%CGEd`jlhhgrR?sM^ z46w?n2BR4vhggP-Xn>R~PXEjjggAl}P@3}>j?us?FYVmkL(upp~? zo-QEf8Ya0qo^v8B_CMo4Li;}57SSg9jd;|f&RC04)-Vx+JUBc;^Q9=AkLXJW--aVC zHu#&TkWtO8?KHy=%?$t?>@x@p$g+#${{au~LACQRfuHgnG8TivTW;|i_VEtjrq{pv z6SoI~i!1`^F@#576J)b@=bp0c7vSDIc%8=HC>Im6yzM~H{KdQTnz9v$G*D}N8M&0q z1>~~u`{y?={`UOo%_y1iI*5#c5>Qs*-^aa0;RJqeG+jYNMZ*6P6juKA3ƐmA# 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�ho8H9CE;J@YcGC!ux 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 z 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 z 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%0AS<|t#y7PwlWT(_IT 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 z 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�JEJbvu|3dD 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

    y_ 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�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

    {&Rq)xX9$7)3k;IpNlN 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%0AS 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%0DR``4)W9DaWv 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 !-f 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 z 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�JEJbv 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 Wpu(#g0s;~ImjhmzLZCG8SN{hAmG4*p literal 0 HcmV?d00001 diff --git a/packages/log4net.2.0.3/log4net.2.0.3.nuspec b/packages/log4net.2.0.3/log4net.2.0.3.nuspec new file mode 100644 index 0000000..f41efb2 --- /dev/null +++ b/packages/log4net.2.0.3/log4net.2.0.3.nuspec @@ -0,0 +1,20 @@ + + + + log4net + 2.0.3 + log4net [1.2.13] + Apache Software Foundation + Apache Software Foundation + http://logging.apache.org/log4net/license.html + http://logging.apache.org/log4net/ + false + log4net is a tool to help the programmer output log statements to a variety of output targets. In case of problems with an application, it is helpful to enable logging so that the problem can be located. With log4net it is possible to enable logging at runtime without modifying the application binary. The log4net package is designed so that log statements can remain in shipped code without incurring a high performance cost. It follows that the speed of logging (or rather not logging) is crucial. + +At the same time, log output can be so voluminous that it quickly becomes overwhelming. One of the distinctive features of log4net is the notion of hierarchical loggers. Using these loggers it is possible to selectively control which log statements are output at arbitrary granularity. + +log4net is designed with two distinct goals in mind: speed and flexibility +

    The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. + logging log tracing logfiles + + \ No newline at end of file diff --git a/packages/repositories.config b/packages/repositories.config new file mode 100644 index 0000000..de4a1cd --- /dev/null +++ b/packages/repositories.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file

    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 z 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 z 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 z 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%0D|AqP6|OEjXJ5KEtgQH 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 R0uLr)@O1TaS?83{1OO<3`N9AI literal 0 HcmV?d00001 diff --git a/Doku/images/select_test_settings_file.png b/Doku/images/select_test_settings_file.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c159e5242f68204f2429b2e5f3304b5c690c5a GIT binary patch literal 22520 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 T2cGGw$9K@zy{l89?Hu)ARBiaX literal 0 HcmV?d00001 diff --git a/Doku/images/set_as_startup_project.png b/Doku/images/set_as_startup_project.png new file mode 100644 index 0000000000000000000000000000000000000000..4f45973f38a01b439c2544104a7ce16afbb1789b GIT binary patch literal 45686 zcma%jby!qi*EWcNw19LeNSAbj3KCKZA|Rau(hS{*(jhI9ij;Ks3?(_t0MbKu*U&?J zhu`x&@Atmn_5ShAbqx&roH=LjeOBCSt$PviMnj1RpB5hj1A|CKSwRZ}O9Vd%^;YZlE5hOKclWz zW_PDPcC&S`!Vozl!2^!q-5t?(vUc+{bG5=Sa=yJgo#3B~+k!3Z&45!~G3wiD;(*}? zcf-17u8y{jAdEJ;wJ=}|_g~+4ceSv>IJphk{?BRhP7V%Mj&2yIuoNgThI4n?J6kt< zD~!Uu5q1oW#~3OKFWz}&?92vwy*tS~y9GUbrJh@h41G}6`CvmB|Kz2ZZGC#u8!W4c z8X71j*TcGjB_fY%)4zV6c|^L77MpYP-|!jgod*VY*)Rvb7ytOENBI*^{kJbWcO#Ei z&)Wb(`6!|(kGBFk#R>aNVE78mG62K|^^z&$))iduSw~5LJO+?wXp{u|ZpRl-+=rwX z8s6}@(}xNQPd}xd7Uhng706}Ai+;@PF+H*&d2U&fCc7It%=jrh{Im03DM7BxX90&1 z;D7?~3e|j(86Ff1NhVO-kUe<%*@Qo-R#+Z9eJv$)YLSm3 zBne~+G%TrM3l39NRyPhYF)`98m{6`b7ioM%as636hTrAi?6s!tGK>Bs&RprAmGWu8 z#W^@QFdjTufU;nJ?Wa$^hv8Ed7v!s`L2UW1}AsC+GxV|IA&^%>ldhXZ5^FI(KJHe1T1iL zbaZZl_+}(J&8vmd#SXcu*_fFrfqhLd?T)4y9UXn6t=$Qns)f{7;vRgp?XTbbBu{&L z{ehK^6GNUNXMIh3;`Cu;cyIWd3!SGgtWQfTD+Tfqoy*-if+SQJs@^5sfz%GQ+D28G zQ?;|B>%sMl0V$YPD%5%5;n9p%TMFISxK=T~RdDA;E52v3H3!-H21&2wRYkE@BC%n84f(LzV)c&!NcTavAd7zE) zzU;=j7tv>ysSWaO!4rL7YVg|eLi#&qWJ>p&*MkLB9tRo7eo?KiA5UX-6f8TM@Eej+ zQcm$83wwab_P&0R+50V3(@Iw?dC_BCXLw3SiV3;_lHVeegOcuh~#=fTc z;lp%K^bc6(-Hq|#y{uyLfLvSj>YU$eiaX>L&HT*YASC3OOFP3^2t2TU%IAO*=z(zD z6RBa77g#MdH8pWc)lZ9aG@cSiK-W|i6xf0ma^Qp;uz6eHl}$)U=qF7ZqWzDykkQ$_ z0TFGCL__}`V0+lM^{^Pl>ip|SI_G_O0l|&b;HA*WsvfpGpj*t9jgjq-`Rt#8F3g@{ zN&R~ak7D!-!Nv$IQIV_Szh8CklN^ZvSun5;Qc}|RNwp`>3afFz57}~r^78WhlluRV z140D6%)t~tguv}DjGUdtOfN1tbpC5@LWKlWL;4|&!8uUepkQEO!S7^xH2zV0W&2Md zlG>AvZuhM>VQqU_Tx%2RuRTJT6YO{2t;1L*j`vyCQEP8=010mN-teePbQ7kPP=B{MS%@4Ha=_o8$)`>7`GAnt_B zQeYrPD4q^6b-(${M|^Qoxkw-aQRgG`s76i<>x~!6l_86NR9*U`X-8dEl-QIr&YdQ$30PkJN|^X? z)Y*zMkrtqIRo0swRvYFYu3zJ?jjLZ`V}Qi3FH0vuPjgjBRalW*CooafB2lSoZ$6G* zp+<=rNBc9z#R^|e6bi$Bk|CwUNXhP4>-Qks{>)=5=FyLOvx5F|W>*P(;`3C<@4>!@^v88n_de@dtBfN$6M}-P@&r^@~rDC z^Q_GH&p#rgy)Tkdb}jX-7`#vH3hifuc*pVBlOd6);>;PDUX`SwU=Qtj`vkfxTI{CnU&;lPX z?{4BEgi6$5c)17XCjK@xaN*Ws-eizk!@!Il5Sf4uUWBZ?DQbMTlAgTf+R1zTRs!<) z&C?9+ER!JBJpHRY zfZ_a7#v;dUGhG`b>+AUCwjI1!7X^6maLzk05T*mANK+Or&`_}48OdnsJ^ude&TQa4 z|6jelASU3gf#YcyfN=*dp@#7=YeiyCsif!0SSF z>fX{N0S-xk3mO^iKF31u!EY5%LL&jVIO_<}f=FTua1Tq$$S%un_xoHoV_Lv4U%@bto7j@ z&OCX&0_H4Kr17K)9*Z5#Sh+F};wzVu)}{Xz%s!j$d`KGq5Z>w@Ohvp8ny#^hWk@8_ zIb|p+D&i!v$En3`h0>Mz-aBVG_;DyTGmp2+L`_ZoUM>Hq_RX0$J{gOn?=BFR%3aQ_s-#zGP$4&qOID{=%x#ACPU^_fv{R zfu!+fT6exKmUsr0TV?3Fd(2opwfDe6T`-I+6_qUqD zQ&K?uyVGOee`kp5t!^LE$~~z*^psDA{`xTeklFO;Up9^f+ZmAe&g4K|^lLh4QaC}X z(ecReJpz=&(3063*Gn{yt2L-9o|s{@^_8d4X|Xs*g|rdgcSt zZ0NkqCGaV_4%=`hI+W_WzC>r@aM791OUej}^*ZxXy7$okag|w!|cNgs& z*jgAhO#4=*#w*HtW7bP55tZ>;7TFFbK9Tp})%SB(5r?55n{~*@wjYafZM^P-GD*8} z-VPDBZ!|6HDW)ULPMEK5&|~oU#BM#OIfY5Nr{^~4UKM?ZM-9WEar^cAY+;+wX_g&(91Z1=>XFBO3S-wOJONl({@TDMQ1!- z7aFRwoswW6i=a}Y;AP+m>}DyCgeywrv7&lK>Lo;v)LP4-fVQXj6Zg|*vmvNet#(as z>ysURh0EW#T*A58CamnarYXOcZrk|ABJs~~2T5w;bvN3^#u>f&4Cd-NkUFrcjNJvj z*Kd2(7$B~PCEk9i4sPEW+~36;++-Y@0oH1&?eZPuD;mITbu|Q3a}41p3v?gn)K>Kr z6lb|_5hwq4S_vh~@!s^DL!WTt5BFvas2b4wx9oj1hFQ4&dA%C zf=OcL7jHCdZrj?P!vyp>09)SMwN`2|(bxWmo|&0E8Gx#3InkiOWO{Qm_ma3EAbNn_ zxg<6Yy5g;7eUUp`Me_s*x&CoEq#;egnDcSK=kREUPQ>V}OjIz_jMWv)++mblb^!R? z9+%%Ug*Z+ZkMH#+?Qu!9+VON**i%5NtTo&r-z6$5jm)%sRf1OEOZ5znQ0T?nTMxSI zKsT|2*Mgy^`ovd{qr?J^Xy+wxGtflU(6e+)Vf(`;ap}8J(WL8hP0yy~f%ym>e=C|K za{AE~qbsz1#^emU^4k-`|Ef4CwjL0g&4}jr*BDu^e140?#!NQ5WKh1o;Djp|*9)cU zgM>d-_1*Xph66cDzVKV+#+LW^j%ZU=MOkfy%KDvG)1L>&7?`*Up-s?Op6bvDauN-z zl*2=lGbXD(?llQ(96k=Z_4$bb2a@S?)#_5Q)?Z_!UiLMoCYM2B5I-3VcKH~7aqKIhJsi5=K(l@|=Eko7h1Fcuq)X^_Oh!n?Vdz@(ae2G(8n z^~PH9EN>9hqVKHbiks=^Tr)P|{aJI)_3(6dhkUj#vfk-d3U+xEW43mwzW4*T6orYt zfXB78T&&XR4}c`z5C)=h=MR|HDleR&!%QZ1VGUUu%S|V8GQZN=ks;Y@7unQ3dtrg+ z1IG`0{;Z{g<#G`!S3Ce7`)l;Koans8Jod)_nfhz#9HA3bCQ}+_H0h)|^t*v~7#rAe zwsHO-&PijjjxKB}ne!tWm>z-RN0y0WH*XlLHrx5ML#DhG|Pm(lnbMt@Qbzm#r40C+}}LFOzh2!W2>p2yWb z%F_1S6Pvjm3AZ2%zZdxy z`0TeRfAKR+Cs!GbYI><_wwuNGsyGAt{&VN8tcmVt1-R?OugJjYh-dv}^Qf1VC#1aE z4QB+3-fovfGidfFmr)?Y?#d9>iLPi5MZ2H=v15&%H&GW-zc0{h*-KmJVv>lgqy24Z zUwqvj=;7I*oYhV2M|i7Hzzw&if@O>N`I;1FcFz`+iiLA&Yl4GBI9OM9p^j;0RW25g z#cMmcAw)v9;a~*rzIhHcOeu^olW82`IX!QdGbz3|=y|St3z;82&X2i0Sum2el;83&v(Sl9)oxCc$y$!@*Y5L51u#$z~OBq`4|xFhw^A(0c(}S zI1qb#TGvd$_ty=}5BCEOWV5p+W1#4$^23Xwkdtfl+7-=I+TZg-{@a)d1oTgw6!D>4 zBt#-I7XV)aFQ&f`?1viJx@;ymP5e?>d=E9|ds&*49KkU@R$hF1L!JrJtXhUZ*Rl-O zKTEHD5sRx{1l^|3q=PC!tM!R8?|^H>zK1I2dqN`#<-5lwp4RXS7@sD=S;TtIIZHbU zo=c701;XhodkJ~DADv+mI&KQmUczOpAF>zsdGJHrs0nny zvdON`-;+gM`7|`}QDq}qA`qIHDbLG|Pv1F$JRHQ5y;BD3L`teyhh~%|w-<@R zGSdeU%Vw~E<@0~8Ji>|a{uHS2w1%mrA{**-+RBm7vu~#s_i$7ldLxvy>Q58|b-Lk{ z^D+xG&-96No@`CJ@E#^PVK7m$4R-|rAe?OJ4urEbk3G|4=5;v0*+YRKCD}1hDI7Gd zG~&*?@9n+|ou;zRsAM45BP-nlA_EZlV1rAtUK#()h4FTSjM<(A;h9X%wf8&E&vRnG z;`GXl6rO4T?xL$*;tbK-I(24V-*kKas>^~u-~e*_&DSwA1iY8cI#(%zqd^k#NU9ki_IEJOeEI8D=P zB7m~)5iYjOVh_#r2LN&Mt~oCT1gg{s@@My#IXnVlY#^rRy<-2trNJAn0FUO23| zEBs8RA`{*nlfhAczts#KzB>I%VM)w;oHv`U%Efv2)q=b_-@6$}<`6O(-eJKpxP*lG z`pUCgcE~!yJxgYjZX=lg2_M=j(xS~Bv14TkT{r!nZP zq{xBn-QKLp^}U$-?l+(9O~7H!Zp^>(Y8UoG|Acn_o4uW$ZcQf36I@#h9e=UnJMn?# zHr1u~r+3B(h1wnZi0>HpH(hdIMLXZ%^(g+1A|dHvo~@324Rr~aIg?@h0X%a{uXh0yG${L$5A{iFM?b)Ir}rmR96YR1 zGefRf?(Lt>9)!(Sp4fRd9A=2fdeq<~bI#H`ie2J~-InCSwGvK7hL_evn|ZIqEgC72 zew30wGw2Teq^f6;MPhrI^=6=NM|MeQ$C|)j7S8B0>t#lTEtV8JDpHl_YEDTH^B@_NUY$Bz(d#y>iGh!awow9FV5llvyj8#0M>Avm zZaZC93~EC@&zlxDAkH^)kz5-x;chUc7%Befl2V~%-x|Fp3#4N;>CPT&F)jA6G7Hk% zIzg{bzfL-swxzbAR}xh*3|+pE`BX}-N@&(uNHPVSAKH+-GPk^j1G)a5W5ozSeT()5 zSW_lGr*WGhT2Uq~0XG@9B4&V4k{^he0YTSJ*W7sxg`@~ph< zv8Z%UzOTM0wOa^aYG2MxG;Chdab(D_W0w;EnFkuKKQD|Lc+982If(H(V5AO+4d<1> z&W6IA{FdpiuGZz4tda7KhJ40;hp%qe%L7h|Z)BCUN-!s!u?p@^c^enukv+K2e12xr z+i*#n0d@_wN3?pspX|v{qrZ6PVN3iC$m%9kWRO0px=l2EJz}vxxZC0w7b9`(*RQY+D-!@YpaJ<9e9f z()f&;x{yxL!RCEP)U4zBmUzEb(Z>lJna4Tk(~xl%yv-VMdyxPz!St--;w7=1*z$Yoa<|gg*Vh=o3JSpct!Gu{eAFzh*-I*bTLln)6`6c3YdjJx&blSar?g5kJ2` z1Zn_vnEBhAvqLXG&1OwaO?DZXObA5wbQh@v0ngvVE6qcZQ;^&%( z+q|_(+Q8?vei!%&Mv=3?ZY~gPF!~?AeP3qSrwhH*xxG0)c6(o<*G>|6-We3+B>Z_` zG!6EAA4w9B4!X%BJ+RtQw7`r63J}V#eJ;je`DvI8=b!jcPJg${p^TMDv}Lo1z#G() zGXtz7>6!nEaj@0-6*N!WD*LS*?f zD&vS|p~_2F?^h6CmPKeT6q*f#sRf3@xunn@BY*#1qjowj`gQTom#CmCw^x7o12{iE z2PLPa;oUDg7h&2bE8UMLT$cSh`u=>=!RGX=+Z6uS}|{ok$+A z`TE@O`}_L~q&{CJT7&%|1yo=;R%-9y%mSxn9Gjl|eMxw+gEmjFAy2!0gPKvx?p;tT ztU|ms(hGwTdObTZaB8IxRbA&k`$P7a$U)2yc~~nYN=Vq&dNwxzNNAyV3ERp`yaNWI z7TxPmYoq&z*ZYBT3okk!im&sHCznTrpMHC^edEQLCg@_gvI2!h_oz+g&v#Hkh0~+M z*RN7cTAjZi&+rRzcV2pKDbb0CS{&=wSu$`cjFz~&=eq64zMg{F z_(EM`>sJBV_O~;#UuFqIeN6IJYjrmVn-WQxe7fy#uCk_BW{ZKcrgEQMM;YXj7BE*7 zhwjD^_l=7_dh$?HD=#1RFvTq{b{187?0(p5SSG#=36&q5R~>7%4Wlbm#K+f;|APkh zEOp2`@Q6KIy`m>7!*7sk2-~t=&^itg{dWAFpo!F=FV&OR-`@h+g0EGcP-E{^9kpy( z85nAbj6_3g*zuP=yw}QS1h}2W#Sw-4S}74Bq1-`4m%Wsjm{?8=E#KovcOI6vlrg74 z%kO6DZ!gQ=R6PJl2>;>&+`isu`5e*|)p~rQxtgME%gd4o3SFv967!8?SZdHGAIwl) zoS{2RrQYxTwJ&1gyLl?NjsRIdG`u-EBON+>w>Cr0iZ$Vz1vyrO*x zsl}sb&aXs;Gfj*t$`a>!5#dX9i~VNRAIEMT{D~L5P{G&LfqNuX#!HqyD~%@lU@Ds6 zNd6%S??c7q^Rojl!HXrCsOW_?YIY$gtmH=9Yh+#PJdZBqa*svGGag!Vc~lf-IY_v7 zE+d^8b`ZoLbX-rm=O=!#&;K{|V*L@ZEqB7%hUP68f4}bl`-6P9UB79HKNqh*^b61Y z%^U<}IZYK$YNj@fpdh7@;T#x^!DS)!QvMjd=6MFFyY-6H?tVe`v$6iD{oy#)#8iQF z13^u&><(V&oUX0+Zp-1KHlb|En)c-WGeM2Kl1+rF_doaj+E`o3pL$Dxp zWAdAJ51#R!v?jmU<-LCAbrU~CYGyQd4(cQ^%{GJlW6OJe?LNOj`T-}2`M{`s#?aP$ zYB(^XSE=rA*b~CL*1K6bSfXIZsS@)9`hEEHd|3;t6Q*#PsNN-J_SPB3S0Q1rMsu~3M2>OSOqss>#&eDP?4;Er+~nkgC|$8h-}$4> zjCH^Lh10+O+G(_${agD5^E{izJ9+%3Mlj#w6C>g2qrvs+x?};=fZy;9=Ovo|5-sb$ zWxk^;grXdg=@IviKUfD@#-}m}IkU2UInSwamPcZZ zZPAk74yJ(-M}|i;-_Zs_N~Ac|4-2GHr0lVazS5%AVRff0g zwd88oBRduAh|3YfOB3puy@47U)ReJMnFyFGZLtYYV(#o-TwgD9V(Q^9#416`;TJ~j zH)xvbM%L?xJ!z^x%q2-_utoqYzWbz691IyzV!AL64OmUqjov9#Q0xN&;C#(yvzjo0 z$m5_{uVY53t_#>(pRZNDRvZ6@!};pz-2fA%@vz(0($eyo_fhXkp<}~h6MK-{JtkUc z=XK`LO>pocZ}RACOwxD-L+N%~-meei1)i1-iLxwDzl)Jqu*`UtoxRQt=KjGcSe38V zm|$0y_R{B4#BWP`;%mIiZn)J}cN2%_i{hsWeEecZUwoMd!^nG0$5SZ<>}tZEFq0{) z>i$zndHe^6Rqj5;=cxUgkdyX>*#g#B&li2i?CFjkKnrLeM$nJ``4A{mml_$W8$;q* z)nv`uj@VSove+rLc~aey(P0xu7Vc~4QsXd&eCe<&u-5Hs+~p#C@Y`x2v)E3L=1g7v zz$f%aeO}5mz8s9SPgfdcspGRoI5D=T#g-rCxC^u+j&KE?^u zw}c+?EKC}IH1J6?`1WTeS!A?CIJU^<$7(S+rmZM-4(9stV^sx?fXHh5t?-#^gB9PZ zh=?TvQuS456g@X#7C)7(A%sxt!Z7-IK}yQEfgrHHel_il(D1wGsZtAJF})d&t~_zwX?E`F`S2!k@}E^e`Yoy+;TIaVi&y#=M|L!OS&ba!E{$TUO9^YHCC?wC}rZ!B=BViY+v1p3PF@~ z>+#WVxo4Pr8CaIsyr#Y8Kk_mg!JhI zb+cG@?t2?C;{lWe(2qOOf~P;gTWeLWCoWuEv<+bQ7}ke1GjYxnajg zXFvJjZCq-|7c`1oez*0@B%|wP^cmH-&)L%STg~=>QfF^h(o7f$h@#4MQQ%`7lf|m; zla&OI_~q>Fb9bC%1Ver?h9vjsw^1k)W(W^4k%Et6yeh z|8ijvTTYy#{9xRgC?WszzDZp{Il_M5tBpmmBeL;Yf!@LitE5byh{%`s$$S2uSUM^@ zOYyK{DnvtvzbC1Fl?6nRgQq1?myT=FE(Uv0r?+U-SJpW`8d#LoV>|-Z{1M%^FTPw{ zz{f_?G`_-G1}#Lnn`f?F@wzrYHN9u zQZ=!wdba?X`%+o*Bu6;Cw_z>xVvjjSEJ^}wwtr}hUmeZwzW4fLzYwp#xpV=1Lh0O> z8WPuW^bi+^KWSq-SIiFH^}EI6|CXwB;>CVrMQQ@|;B!aR&~AP5Zb3k8>Q+YPBwe<3 zGVcZkP#p$xg47?g!^7_@`=WR2!`|uR;`rgUkldb=VrZ8&kp)FZ+bKEQkfp~5wmIto zCTs6YvVe@CxOePs>B2d^(1O_OOK$RJrgBD9bZgkH&o&3|VFjFUrNws!2o~@`(4`m=>MsP%?QnxFsGW} zDw~>T8rD_e>r0$b*ZL|Q(YW-8J94rxAq@r=OFD*0oD(-o!o=u397W}jirhKmK<&`} z9EeVMs_+MR%OB9;f%R?mhZcPe;rD&}-2i^n46?}nAarumN^?`%73>F48rRk&UxQ!T z7i4Z_pr`%{G(bnE9oxKh-0mNb0klW9?=H(+X-a!6yKgTe|4zNJ5bWNLaV}+MzQ<9R zj^T$`PJffeiI?zSsZt>z(@hC(aF)vi>gpcu+G)5$|E4z8xr;ikC^XVgV>Y<#e)?#^ zR2CNFzxyr~DDCCC81wGnKX{5N+L=})1xlFBn==Va@+Os4(M2AdP7PV+%CPanM`ilR zPh~m^3Tk)7b!?ylIGEG-V5bEjLI63;u@~gSKz_6$>B4%*!l1K>SuCr14U@S4_k=0I z-1>=g2drZi#sZKu<_;7h;6G0(xCg!+QNHO)_X=r-Ou-!n)9(pIF*7d}+|ffS0bUdA z1=zqhf%bSw#`d};sV7=Z50sh~L&pM?oA-evQ=g({+lN{%Mat7CATKQ zC|V1v!qiwwv3iQ>HfxI?7E;Z$kXKnE1|Wc}xl6xU$jnc2FkV^g&ADCo4YxsJX3uKu zBhs{vpQO!m?&~RY#I)|w)O)!>p&89p8vYgA#**IEH2}{oU7yMQg5LVi`R@CVjIhN` zZcSA3HQr?RF?NBfvHCU-J&xeOtrJVUUWr`l;?$4On6D6l?E7W$b^`fS#}T<*|)Ls67KxYB4`3069t!{!jUqGh1Kp-MgeA@4>-A z6~?=gZf{rKzah*+)-VY1McFJ^w%##;8WhJ$*cuXE3B@9Py(O&B&ab$2Ts-W8KzaQE9m8dUm)wcDAnN>WZCamfB{g zt5Y%HL+j}o1C{=~b8KVn_V;3YrSkP8^+s|CM?*(;4a1$&M^7hDpItH$BODj(R6eQ! z_q1efy_!z+u1@ZB)#E!V)X!@y74_>w}R}Vlhi5 zJ|qd@>;CKWcn=IvrpYFN>bCOlr>uoSLf}dqH(j-?E{a6<_!J=P2*Um%?)#C0M5i9L z(@j&GL1TC-Bv)TKRT<3YQ>bsBLJ|^7goL=v>)3E~w<4@m!$uWq$qowfQ9gKvnY0aNVsR19aA=Y`=t^SUHS?A$by) zKP&ByW#6RnQV0HEkw`!H?cu+7`X@iAbT5QQqQc9@w6+1Khgi(9p6;w2e}--;ty-t; z{TXqFrMAmZjIW*ZCI1Js%xDJJ@h)=lSAn%IA^18vr)#mT64T=x9X+c1+25hL&}HYq z!Lxbl!^7S0pK2?;4>42dg{S8*%Vx7Ckta2-L99F#Sf|)Lix{Qj3sZu7ABcx6ThRtF zva?doqK)_ViwQo)*yZJC%x1m04x?!v4)wL>-3!m#70TFhQMm5D6X@T+l1=2X-7tFM zn0i)SFRH%Zc$bwmHp>Zx?R<2arI>@V-*Cvf@LtgK>WD0D zkh$Z8u8)zaW%~|~-aV0K7|*or%oN49`d&yKVZn*z?NTZcW;>&$_FFs4ac2L5#cs!% zO3N4hY-gAi^@|0hfxxu2cwOI6buLW+4`b+hC9!QNhM=%C5h03+VZ@<-Tagzvyy!Gs?Ob0(CUlRYObywE*qx6m4-HK&RKCZpl$;HsL&&J3i_&;9d zN!>hx(TS|7Vylo@43u@K{Ypt~S=E#tAVwuh1}w|!2mH<@kyVr8Y$$)?29O>{LUUpz zfBVh5kL<^VtGTK4jiv<~IX?$+p^<`t&bp`dR*xR>D7RGC&8CcGgpFg#SRyjac!X^_ znC87bmOoZm)?8UX`%5cbTYKLsv?ILn`o8xEiJ`6XZJR zev3Bj@<4vD=`UNz5h-+K`o)Z-F21Iumk~K9_iQ!_Ih$=d|MRy$n9;6NCWL@bx|Dtc z4~)o-mT97a!D6WeF8>IH@pVclF*qw6}ojznMMdX3zDHvKt}mw26Y!d;u)0M4a#KzxuY0+5v32VlT)mpZ*FeJpkL~J&Gp5l9#Y_ih zb=R7nT8ss*y4~(`OoJHLl1@Mk&M{PpL%+*gfgI8j*-#CXJXUS@@G}=FDY~WuqsX)v~ybqoEy9EJMiIlY^#?Xc=pWt4kFtyY_mu z^Q@xA&Tp2yi1cd4Ie>0Cb!BhR`CEXII>t^6*;v{*mO$jNu8h)J+s=wozW1-_8+$w$ z)1>6=1|4{R;k#YgJ=6ZA^LZ|72-{AU?;hp>XxmV;0b_o=i9QTzq)?RmC>@jg}Uf2v)u8iI}au{Yo5@AN|3_$a7|}G9YkM5v_-|_U@=jt9i}q zj|Oe0I--91bqTvIm~C2&+rK|4t-1VagXw({hrl(iQ?7C#qAovSJDtoq{v5xF#vI=; z-S}@GCfRq~-j2OOZp^&=d>Cc}-Fa_VwvN%jJ9_@993f`&5BeDrhvY`i7FtF^{23(qB6Auq-UIhz=I`?SO0^|^uV-B!R5SJVl_T;VK%XwyKvU4n z-|;V5N)dwomu`1umm1r@y}iArM=MFtlSe^-YdytVh-(W2NXLQfHG!t4kB61+W4#r0 zkAP~L56PU(bl$yzti)uEE&16DI8H7{NJLDGD?y$|ST(M;qPShvxLxZzGP===p)|v}ZP8=CZ|+pyl!Q3?2mon_j+CVw z30nZY*@HYv^;2ehBaXb*d{?!nYGatIr6r#Zg^xq-XoxNjcl_CR-x>n|Lj3qekm&m{ zCyTmmPDy}~NY7Yo5;7?5LG_OAn)DQ+$T)$ACfO7Ysed@%KD1n7zd|7??$Yg<0X>#f zsDhY~ruAwuPCHK5aIUN`_r!s3ug?maeB+Y@s@>zOJo-#7zH3@Ja5uW|mQ0&Z?fjdb zdvMFHJ$$dX9*k5WF+P$&p0W{4@Gc#cv3Ths3UaY2--lf)&3FI4bbRj(0QfW|cYqKf z<}2Q=HJ(Nq;Xt$`5N8OPFL!WYh@R0$_~&KcDlB|v^?>b;;(dax^3`9Hm$_gs?MY=f}PT&s+qaWj*T^{#M-+{g7{ z{y|YOCgWj31%#twQ^+N*&+V#@l z`{_2|H+k|1)av~0mBN+Sd|l{Pl{}A~U4h`c9DyHRhgqK&p}G8{o)23-N`yN=_NBJM zPcxrhpef?<*f-1Z$QupygxnXiR3;`TH*QrJ>56}gx&E9HR2sAf7{>bj{vkbU6djBG znHd}zaYS_9Uz}Wj!Lh!e!q}!Hw|Mei@iXu`I#wgEc9{h1vgRZ`zGMtJb?!MYOW4&- zyjDx(GaJd8 zI5U`=S%e23p?17n*W#n{Vu0$ob&b;=Dp?||Tl7EeKqk+0Ym(Zn-dw==r@K5=*A@jS zUz<)*8K8&H*GALo7wW1Uc;EJP^sRAQ zy|OI%yEW0vJde$~rSS4~pP>YhlrvM-xA8sRc)JJmoBgWQJy0-Dw41&W9gAB?9Z+{& z?*U-%Q>Fe-O}LC+K|tf2>twKz@f@3Ev`#?Scx|`)-cO@=W2N!#wVc!*DbEI#_U)Hg zzOy@~^5JI*R=V`UbJ6j?WG6{iXA4-aOy}`lu8u}9XZQ2TBmo*zC59q z@ey7Wy)n0tCsTU#T9g7e<}8V^q^;Eqe4L8tDUBHh2F6&BaN6vTXb+HXn=P5n=DI|kF~Y4 z`*ZR+D)drD_}X5semD%61Cqqhsz%ITC3D=CafkL0)14%^DwnFDNMZk`aXCIv&JVidMPxlT6&kqZ*5Q zmzb4B{M_1_OOl+Y3=Isa2Zv zw5Ae?WoSs}0Z+|HJzi_HbFeq|3u48c6`l&N8x;5SL8dvA2Zt+Ko1m`A#YrR<+%VZ%)+SyaMms@9+%!8W)9k{>2Ri%2R!6)k2b-L@ zoOVV?ha*e-d@F$lk}r21o4wyiHwCoGI96ZG4(BQr6&Ei9&y9#~D2);6E@=LoN~2KC z$UfLel*0PW(p1df#g*fBwsBWlF^zs0bw4CU5Jbca3Q|T}!=5(VV!_k!_^q~+M@sZSVU(RuP7$k5-`{Gwb)4t`60LZK)8`t^%k<56@*JLo;|_#X`6iAg z3?lONep9Z%E!($7bj0_$*I+dBC6#8_ZVTK-rjZdS94U;RtiyxDgYDELx9?0%#)+)4J>0Bbh0o zv_&Y%c&IN9m7x~^MajKND}lZR0IPFbIVF9Q_I5SI%;Zc-*gmov(1-9G_fMYdt&i%z zu6$H+Vu}s_LrkCI57A@mfCQ1{Co(unnHCH+1`|awjEd*VNWtxW1&FIdH)n#ID_B1^ zOW82{_O<8yF3iMMttzs$wXl1EY2YdDV(&b3-%|J8!b;Hat|XUXl>Sa(usu6GNXm?2UsC+gQiM9XJJ z*%GnWggvWgK}$CKK$awaIM)-Zm{QgJ6&3`ax9$>C0QNfE5Wwb1#XOu65X1%40GW<_1c+WIbUX`qz+VW#F@{_ z2+!z$+Ct9aPls4OHe}B%8dn3v$)q_k()b~u87UeU2qnOghb7zj)dS~6p|NkXlfRlS zi2a^e1`5hj^3jc%KDu4F0+(@7UH}nt)Kg}V3wfZ($xOx%b>D!D;AnnEy*zfP zDAz~WPiUuH8=vm@Bvy&M;NA(Vq1yWHe^zoCkLK;s+czsjGk#1D?>+cs|Dy{~na1t1 z=7e$McJhd8_Lld9{ht>qz~Ilb-UdyZGxs1E7VN&`E4azG|6wsoZj%=i5brMAay8ez zfNSi;ST|Pwga7Pz^5<~e-o2e(V0ChTlTBIqFQFwcw-&3c2>wu-%CjJRo{g!Fzd;1_BIzY17{<)OWmBZ)8eFn|N z@3k@T%d1I8NVqbg)~RB||8#Y?25e;B=gwXZ_8#`semazpde&c;?s*RB4E8p(O)||( zkJVLtI-HQ!xOCyCr;)>c6%{V~VJ&7Xcos)H-Hkx_!#0hTILipXXVzI6%jG(dEhH-* z{kW&2H?~yuSx!_D2}XGsd4nwTW00`Z z(-n!HPQ5QL=&cokK#08UM5~Ich@IwW;o}aV(ZZ>JO>t=n}+#zNsn_w`pMqba#&^-8L#fD`R?c z$Jrc0R%=>(VZ7pJ()}MUz&L|A?{yE;5O&@6`c%xoZr7#<(QN8Fv&%Sr(WyNmdyP|~ zdLSluz;WwjSf)0+Yc2!RZ2%M?}m3#j&UIX8O<)hS6(PU_V< zat^M_ucz#8V!(a8I(a|9L2>`tZ=%#cuHU`Q-3xaN(1#5!}0`nwKZ! zJtx!-=OMCA49(wTB)otg(L0vrsW+VmajaNAB&5fMyX*2ow}0etlHJNrUdd~e|AtEeUX9T+TwW=N)Pd*!Re9YT>={P`n*1n}L6-THZf zr#Y$|6?S$%`t(Khs(}32rt`wHfO~?k&Ca|hcWWHQR9j?5c{~=vS$Qdj>e3{lYmG=s zaZUT~Nu6S=E}A_VPivUz;h?Pt2lzS0q+JYi9@ zIIrs({v}3dh2~mkoH({V;Z@3E_oU~6yF^MAAFQQ$XcyZA{M2mES1I`xB{)%Pc1cAV zp*al@3uT@<(orA$@u8YWV+2KO8WFW6aaNWWJB!md%tCH60+%A#3yX_$YipCEqocp} zkl?u9E|F}EG-V$n3b?(P&cBeggSP$v)Vu zHCtpgPFTX{n8V%OUHWn(*9=SYuSK&)DB;FW6=`iyrnVS)Y8u{AMt4l&OQF!J@;um7 zXOYm`)4~74*;{}`^>*vSASF_QQc_9?NP~0>sI-WHG?F6Sok|D@(j7{PAjr@)lyrCJ z&@nUv4DmhV?|r{>&i|bAUDyAc>lzthX7Aa1KYOiv-D}-zCCR&vU@MNZr~vk_uQ#SO zz(nSrcz*w%+2WGpS~SB;V*r(YOqrPvslfV+jr0SAcX-prV`qAcv=*0%JM+G~{wh)4 zt_Y^~NYTql5^mtI=Fasx5Nc!}Xac9cXn zSnu?-$e!K8fNV94+SMMdS2ejY*Vn#i7Z(?o$u)}$4y9a1@~%n#Ol$uWVp4jev|CwP zm=}_f(smuQvYbNu{=;YJS?hm6OdW?!SMH=m+4Q90j{zLuWKavNUF!Q8&Y#71<%rz+ zK?(MoPzDMaH4}?lJPdg(`p<^>TJLP2p-8eW^ELbkxqHgxXZb&O+s8~zztQjVO-=|n z{HCXJt1n>q59-a^?6sBDhQv#`N*+yMYdk;fGs9i$u=yM3V=1qZMmE(J_RT^0 z@fhL(6A#2rUm}=Vg32l@Zy~U)66~@0eo4FP;yud1WB>>wIF9rivuXylmXt+U?n>=n zc!$@(D_pNnf9Ks$6LvNCIhBM~W*CB(#Q%jW?u6NR@CVx*# z_kCT5VDZfuL}a&Ho8!P+5`OH$vp(-I;o!2{Piy~XOif7;s3g1p+a=^)2R4qfl&c(; z3L(W@adt~ZQd{JMPS<7pf2gy_)*%!8j@?G0<_Xg4jJ76d!gLr0d+~vtkr4&$>VybkO=_fGF03^XLD{ngD^;{00UV~@r zmSaUI5J>o%Z1l>V=W?!@5z|%mTJY_zSC1?`5nZGy5@UZg%SLrCgzm~hZ;o+Alx^{P z``L~=xdK93HB_GmNxj1rEJ-j{jA76fVn`RV?5Fzs%C!6u*qeMjMA&7*05{67FR@f{ zw24jiv7Hq08%bO@Nn9>;1bOR(`p{<#0}r%HaFJNM9{4>4SbZK=Bs+u@*h}PwO; z1q@I7Jq#V1_GH}`l+Q+gKr>nfMR(bGv#1h zEoGy|;foz@E`j_WBl_-}{AEvdS2{V_VCL@DkPyV#61ghUSMr+QePiK!qA?EGZFwEt zK8|zLu86$OAdijBuj&l@p;wI|pfVWT-@%y9{m3xOi>d1~Y@~2!9pM?jn3XMGcSN4Q zqsb>9bh9}_8U9z6qt6=Ch)O1x;2)zqNM1=)#F?6WK*ndCUjLaGFIga*rhW6g@0w(E zARux2UAEVL*_h()Z{i*g@(AQU=jDZnNpBa+BgMNY;Xzq9_Ixl>TT}am!PNungQxFw zWqc-5Fp+jZ#KY`rf*;+!E?SwSHvqaStb~ZTdsB`3+$WY#kCPl;X&c!efkB%%VL$gf zk^}Ulq$aKy#r7pJBAtM9zKH$+%7f8C>FY5n&NIN)L1s!&V; zQsmuD;_`#wsMgLuR|R$%vup_w`m;8vPFoofv@fywN)C2{nxL(o%-no#W%JJb&%Bx1 zw_d=R1@pVfWdS2u5%;W6^j6eKA^}EZAq3M1B-eEYP-ph9JgS!g1U(zAkUooVFyY9g zFTp!K6sjGIP=AO`j?;sm&k{XR%}fGJ6ml9KA?U}E6kB4Tlac~(78VIyGKlv`BUXVl zu$s{Rdu&bRn%949*M9SI=9=-_2>Qmko5{Od(49FpwuhpTM`d4(Ived6u4P2(es*SqNMg6Qc=xa59;JdJ;=d{UC%SkVSs0{GVBp>Sk|zWY zfvo(S?EvKi0%4%*%VfHgJineHw6xAux`IbjkBG|Ti({lkK&cO^3g7|$Ap3+t-=h>0 z8kx@1XLI2cCBI;-dS#VzLaMTi=dT}(wmle39)|lq{19w=4q0V4ga(e~7TV8if!aLi z%>z1HDV+U^o6LqfqDUBYPwXb|Pm;wGrJ{zHT``rx41vZ}&L8YH^%vcex*;3JI!ialH*zF~(YyFLGZ8N++4oHRso6o{UX|b6sbS2w zn>%)sH_>$cLZsx{lx2-~@)mGp$w)5avv(tsIdz4$5j6|0MJ@bAJ4*^PDyvSJrM`Pt zO2(;6!q)~Wf_C!PQ`(Ri46#k0z%m}h2<4l^keej}$V+jYR_RZLL6su0i=qyFL4oWd z)9kzT-CvAuKjTwMIVtB~g%Qm*UA;|#?wE*p?$!u(q->^)+Fut^B z=;;3OWaiC>abHk8u+Q}y{sP&!({{`6=tc+c_QMnCg5-VuYP9{Ws9ng4pMT@UE<2fm zHyVLfQ4mSLLxU$%NF|J1A;-9-@a7(Mg<^vr?Cn+EK3x`qZ}4blocboupY01OvjJ!W4y=$W3$_9>a8@zUWLhOfwaun{ui22J$(lKeD{Rpv?=dCFf}UAs9cYs z6Xd?s=uS&!nUMbZg>lA-gyUmE?lvA;Y}eG?jugG2-nW!ewNAsmb7EbuvVt;r>y!wb zO{rymoNyU+&6<|)M|DQ& zEvWI8ZTnNjVR_8~TCS8(Yhn`P9l8mrf{FPz7UF>`lY_#6Ohdbx2?c2%U6{{3Vd(WP zU9=j;@edoKCDv)s6@EgCOc2>yU_=K8gwigsO3aqcMuS;pBhJtKJgb)d`y!P38txh$dODo1nuv=o4n*g=ip3PWJt%U+1d!=FOk}bkV6& z6CB;DVij+Q5AxJS-vdl23uA!*R2*aMXP zH&vdS-vM~A_QmQM6+anO*K73kY1@s9Pml1a68YDe-_xkP^>hd;lA&L>=675m;i&1fZXClp*n=u!#~ECnYmQ0~sll-hMi z+Z^((9=+0tUQ6??xe~x@^O~f&hTG=4@Lzl(AK9}#y+1>DrG6%+ampsd_I^9Cbo1e2 z-k61PMnQKmjjp{X{)d_Og#=Y70DrDIm{pvY_c*_aGc6ep$JqkM_AxaKp$hZq>e(MO z^DZ%bcXQ3fi0Q12hgHTt^Uwu!U5W*|irY2s$EjYnuG*%vq- z^p|Jp8L8dV#=W|lp~S2W?MFm|7J9!G!yj8fI)7-SeNLbkhng~V-04q(jYiTqVrrA7 z@o+7EODcA_$7k}wx0dMSo!;+@Eem`@vW{e!ep1Ih#kgxYEJ@#{=;^zpK^6NHo(~1i zCRoD}JiGX>M|vNfxaegK;9Z@1Z)~r;=AJq^8u57_G3`*7j<@*bDa5}fpKe5~Y*`p} zSU6aIIbA2)6O`1{E61B7JCo7ZbEV*#Tm&3dWS04KlAHrVuUZWr{)wwECSvy_jSv9 zA|hbAL&~4JW=a)G;@|4dz8QbEASD!@@Q#qR#Dqux>X&9J?$PJWy7U@8{0NxDi}uo_ z>F#H9Pg&{dAs2TZjOv5?^7PbIB~wBfJf=bbd?*T$$L%Oz=2O1dR8p^X4%NowQPFY;hRyvtb|ZzQ>V(r9eO1g**$_0jReI)V z_S*s@L6oQ(3su8R_3tkOWN)aY{A{2FgN#uYuSuQ$Wch zDZCKJBjX0d*3`m>W+^FAOTx2FyEB^D9P9psp{9|M2w{jkYozrF&pavT1l(M;ltFYQ zGt4|DE&O5NNCXF?Wv^eCngTwrc;#36_X;CXNQa0Z33~Yw#rYL&X#|Wy2u_1<&_ZQ! zcbP70VB@786IEI0p8+Yl%`%;W=>ydzHn{OD<(p)fbI_idl3+;rgu|oSMS7vW$!B3$ zoTsx5sm8)Z(jA>*6KiW8zcA{>Kdw-RRO?Wrc*UFac%ED3Ei#Khtr(c!?uf~?SKG?L zO0iVbrq4CY_iEVQsPeB+OnwfvCInu&(snLIU5Y$G`7fy0Z}7!h*w$iUWz~n@MK8qE zO)I{??rt#iP2yvurr=^;MeE1CYW;C1iRJ9?UpOy>OerYR?MxVZxHZK3XO?2J96}{v zf$2*>v$|pRLz2ppZ|v8eIU6!pboG?Hv2W)*cn}=mfLh+$5|BlXd)^&113hKrG}XEX z`u;H2%~-rmx~Q0+G&gZk%b$#XLmGY8hrnlcl9JuC-XG%oiSJ>}|6PfF?(&Qi=@&V@t}-H+7bdsQH)U@hWXOTgvT zj(0@ejCG{%y6Y`;Lr~Jm-oQle5cTOJ`MTRSp9{Ch1*XNiiW=F2oSFkM!JV@0i}g)b z#bK3Rhm-Ldv`^Kuv;GtKnSO*Ks=N+lG@_HW{Kzv?rb@eoYm$AQ{pc&vv30XuLmi!|!_h$fAa88vXaSrjNAr1|&+k2e zcK%RnwTedTFdgy=z#&no5Y!gXVPQ^`5b8qjunHNZW+lh z{XfElVuxO)O6fCw3PizXg4GB06wX3r`b;lybMevmZewXbRT;DzXdW9?Nk5Y@XlA5{WzqYkI?yGTT3UU6lsSP!#^ddqWs#Q^ z4)f8hY#wyIAC8HI=iSllTAtyCauA7@g=sEoOnWrl z$=KQ|=rJd}8gc?FDJ$~xN=QQbvQFbkTJ7)J{i{#HRq0zPrqsVfJ8QqXo^1Oe_xI4w zn2Bzle4W|SivIH6r`WeI5m?JS;U8nE^bl#w6Dv>9?PHef)<{I29>)`UdMf?qXEPwT zas(8^Ja)Sp_2u=mfgtPU!*#gB|1mOJ9ZSFNAw9iSzEN^*euiflcxy>@Is_6MJ#f!v zMEEKPwpY23akp;B6DGA!Lfb0iyTG}cKQomFQzi`_N6$-e+d+4*QuZHpUI@#m~i;U4;wO*XW9w+C|Zj@I;mukN1R`cpkSErtp9?Y*@{>Qm9ekI{i9(|G)Z;neXigE!S$Xk^x0qK z#ckOW#usya8T&|$zxXQ}QBdj9Jn4Mbeq@V}XW&g6{~Kw!Y8v1h9K1dPyfgD$*QS~V zg*dB#Qvy&%7|V63S5GKQRMehtiK5Z(!JeW)a0n;N>*@{?;rHlKR?m~)PFk;ZcTAp8 zkF{a)_D85fhK;?Svj7a1^WQO88dr|$LX?I%LE=lhwu<=6>Nl%u)qOK~*im(l+GJ6f z_~}Z)F$cIbr+1*()p>crZEbSXGc(B<8Ri|4H1bh+IF9}Pwmp}K+nD`r)ayQ7ihD;5 zV#k9rXeg@x%%CxF-Cm}5uNPnrGCo(f+oZO2$DWT5xNp#W+Od=jPYcS!_#UrO-fr~1 zeyuB~$66l9w1-X(p>D~I3rMrXiOF{te zQyA4R})u<|Lh6MO}wm@1rkX{^8Wg1h;( zVF%VleMLm-WB4MIScpi?n@vT}t6HKjYNEEwP8ip=Vu^uo%5`j#yxMvCo{dc=?#&@2 z^tK-XyhfFZ;88zM1QKYry~T@@ZG1vPM^LvPhps<46_9F)QTrywYzuJ{I*8Ye&cGYf44Lljw@O-mg=6L|-plJy|Glr$hVH5PPllh{tX|-4NZs55 zLYGz6_va_zAj+$%oGy+nKYaKwOpA;?Qf@klK%a|dFw9%8p@q*k;58xl8tHHsm;EeO zigOZp@~$)mST`3APyvy=WV)q7A|X%s!}iT5{r2^B@z=%1-s)CrnD~xeBe+-QN>b#8 zwqLk9@-!TR@iMTAMy~LWIerhivAljRK3avwgW%13pi?=))5*c7FO#tmcz-0Kj~>Xm ztm&}`wjcx>ExwLWR+C^jiX8!9^C>@Ft5bErOw}*rcm3!zcl)VNX!br%cYl&q?T!8= z(OwtEV~15rM*0bZya?IZf+IpMjhRoW`*JwxCI%)^^Kirjk2Nsw=~Xpd$J-5)hmPAx zg0)=ci%}+v)o$GGxOVQ+p?>}n*$fWx*1hy3k{CWY10T+>9Pm`arpjh$?HtHq{aM}A z`E1@?Cbhyj4Uu?5Sme!??PRan?Mv6;V~%e@a7T21C!_Y4Zq?fT!5}krNAbfI;z+S% zZ!_y+uqy87 zp;lqk3B7ELpt|6Ydj0ItM+xM7dEC{j=48AfpEiAccM8REN{jZoed;?1Ev1R-s5?dY z)Dm>T3=i1h4>~5M!}bDC(nPG>%`ZB#cc4KNLj4Dw&PA{*42dwS4p^Yswn00Twb6y{ z-A~l9v{Bf(8B^dzU$?Niz)*N>d%mr+Ld9`A2k1ziC!Wrg+?+IO@A+QQ-N?iDeE%1G zHU9mxI4sB`a&gTU0eT6vgC<^iiAzt|8+ZQ$vw(QM)BLx{Hyc`(zjZ4y)4{kvaRuV8 zia?-FVlwZf7pQv(N!_6xhstExW=@Spdh>+cZo+LvY2 zrjnD!eeMkA=R1N`(6;2oOQ`4nP%)jm-Pa$c_vqiX04h>rT9(CuUD|Rk^bnptePmSq zL81hFuC8iaX37~fMVh+%3^OmQb~dQ69y`xG6n7giABogiZ58BK`(9my&9JhGQl5(q z38asxid@@bs9tVoU(Qj?`EEC42Zvlj^}AK8%9Q=wR(yW^7mxegl$vLvl?R$L!D`#v zte8=Lbl^rcUeV`DNYeVGf%XrUe>mjHKH)UpV}RDa0G9G*4))jJJ;%nWX^x6DlPy6D2;rH%)C~tTZN2IEO1(1GnkcSEST?EAQ zo|89G)#cZ!tj9A4I9v{ePcBu)@hE)KT^D?78DLJfM2=l1MoLTW`pK)OGkETtpJqg4 zseMD_1^ zm)<;;{0Tu(e>~(t#-^TdpBWl~w^K`Xd#qDNKVxKVb*7ejQ zvlBG9rq0CjkQL7ri0{s>eqOVBXZ-9$zL}{tvKF~rZF!QMWbrfRsb+7+Tvr{g3h<9q zHWf>*jLZR+&%fNO7Z4n%=o}ywi74#FL`zI`Yr>XCg$>p_WJ(mY1ZEeKf3ER%XP0%NQ&cddC zeR-SGr~>;prnfrdU`MM=MjZL6t`?=44JVY7$`f$XCx})QkPe{vp z?q0`}vS7uWs^w_~Up;5S1KXq1z-E~3?Rj2SSK0UQjxV2z%!?jYDS6G}u1*8%_y5hf z1pS+FA=hm3i}#5hwn_pE<)hjS`zsYyKk@8zO)^k0`QkJG99X(z2;|LlD;UyHJ>EJQ zcL#b=0l)!}QGum`>N1mYSZ)7s9e<;;*Dp$HQLoowKC%8-VxdQdNF1{XqdC=+~J|mop8TKzlgwd)gD?=BBQJb;~R>}>qsnGdD~3slr~)|6Zx3e#^yVns)%nA_;o8&0~Ap9NWP9b?kMI2maDlAp1SF`1}%gAi%fA=0gF#fMqh8X z-^rmgnWoGEq370iwNxhg#qRmwL|3j6WP3dyIY?0fa}_0TqOvqacT)8;E^w!L;$@rh z?XgyitJX-No>%d##Ks%OaKX{hX9Kf^)OeXOU}{CE^#d%TtzyH*{>8y7E|4!ZX z^eBHKed9q!Z>Cvztn+yclG?4aL3P_=h`0CAstbEwVdK~bzIPIY&ALgle4zkZFu>j_ z*_eH^O}S4@tnEWN&+_idt_FNj6)!JQ@I~_g|F>HT=nzc30g6EyK!$i`Y%c**h*p1d zjqK?iCGMj>rVdpL2(KJ(bsd zBT~%c6T=IrlKK%3K-<+mGu^jWsRz-cdxs7rUI?(Z{dMgvtJ8BktgfaZm+C`GF;2v? z_9>-7j9<>VgcUwZ=XH?1##FYvaFC2F9elyK>C%-d#K+Bml?(mC-HUbt*`pI2v2=Y#jN`GF4n)f1W@*}f$aKW;} zya0a0zS{s+FN%HXc1nYV;9rQ5a}T`9frs4b*9(QS!M9pk-$MF@_~wJwUsX36*S7n- zF)~}+Kj)?%GIE#@f{tr?lNSx=^NaDd!qi&A?}rM{OD<+tyNYqXt%RHHq#iou(f3gg z8*~^)REhFL1ikcIimyGG7)U`rije52kchSA1Y9uH$lol)%5p+N5#~IOACeD^_WX+> zhS5yrj!Dz!&!5vUYMq}LJn1=;T5{*di1*C?lLyP6*@sxva}N;faW9xn^oJZR{06vq z@_!*QDvX4GQh+A4ez<28XPwvSTSt&nE)I@gSrR%;O8OEQwJ%dK;yvuZyc1bdzPIUv z0z`2Rs4n>OHm#U0^a+5I)oBK?DoM%WKmqFa(JlYXdLn~O)oJt}!l%BQN2?NP zzR4ln^}|F_|3*wa`PzUL2Se+>Ha@UhV`&w%dkFgeeZr!0ONQ@S;u29sX6%#$YEW1 zFYAC|fJ24Z}xG=Vt+3r-0KCpy+>C48jEvfZt3l#fe4vV#<6^258I-OM*_#0KVl3!SHXKEdXzosrAh z=sK2N=n7Zykuh8B4PWlPd7)6o&As#80#5DX+U5GAD}K59RnD#)0#7ehR8Bh>R^QzH z689_^K`QzZ&!MI!pz9~wIJ9Q}%6D^`gt(^hzW0fhvN8b&2L}k~j*c>K#8w@ar1~ib zZIW+j1Da}*U;uS&`alyyXgzQHgX+}#fEGq0@y%b)gH%!+C6KnrDwG_c%p`dcZ-J%b zAea@6i5DU^F*N zg9Jt&AXkTJy<8W~r~NtO&CIr%qLc49_OP1|z!`B+={De~zlQ-w{Sf7-(PqmpTBJ3- zPucN+cWu)zpCXQ`tH4nG3A2xjp95hz+3f|D_wfd74l^b{i-Mr&e#f)UJ~?R?|0Go$ zu9zbG`e!Mzfm4P_bQphN!*fxGJ?HEBI1)H^*h{+(@!0NECnJ(+(%?;5_|TJhjJJ+sGX)w4VN1AL}0+`lb_50O~a z`dC({Oiyk5jO&k-z)v*wBwRy!V&jYMVFpF^&gM=$3{_6vj|}*akhtc zxyH~)*i>n=nW?dJ9K_`vaD9DUgi)*X*RSr>p!{kwodk9Lr*#wx?SJ8awkc4*Lx~vj ztfPXt3&kDSKk|-BTqvD`HN*IR!RDknJqU-Y(C&Nf8$t3HUKGv@<%!n6e>l4n^fI`6 z!Nz`eeKG-(ImvV1&E?(k7vX8d^C&!!u>L{B27i**GY{Vr*oRYgkRx_tQ8d{+{N;vZ zWz_M}9}J0wK=Fo+hEUw2a7tZw(NdV99Nt>p&h+{ImMd_<+8+N)R^Oa1v*-`#0BU$k z0$T#&mw!=Tbfu`M$mS_yb&&=45&hxy6p>|XYz*2|)7Zi%aX^Y!nRWUVRmbyp_+wA#8M$M$ffp4^oV2j_fr_xq`d`+xdd2=)vow zVx3_j59uNOV06Y5%d?O8vqkyvwKg$K`Oh|jZY@)Q%r@knxXt%Dhb+KL}F#60O7;GyNwXKKG%I>{7(MTyYaugU)n-i6`rLd*N z^K+}PFJf=hU(wKJa;cYNfthjJOD1emfSXDhjKm4P`=31RJzW)if??}Krqqy+4*7Xg z(_<4<6x5`J;RG1*TAJK|+9@^@k^ylVvitgbOKjpq2|5QF-U zAK%#1d=-WK66RxKBaD}A#H5_u4Jg-*?G&A6SC`%=*9xzBu3FmC)Az&){Lp=dXCyZs zG>9KNDIKx>a7^iL=%0IK#{wA^c8wY-J7$4ukg4@IDg(2mKl2|f!?jX#s~iHiUQXS^ zrVohd`i{gZ?rZ3Nr7NC&z0u%{extE9y{wq=h*MCITid1WgOzPY21Ln6=s!8i50E4M z<(WlwH#p6eDpbKX>9Q(Ngbk7D3ZN=FEH01=Yj{AOLl7PD3QGjJv}mGK&{ z1x0AO-uKN$oKmL$!H+c;w^4R*tIFMN?Skgpu3#eReOB##E1kOR^pQar)xOJGiwPsM4$&D) zccUDl+kTQe>Lq0z#!bEb7dVd8|B2ewBS4ceAZo zkShMKmN~!pSu1%q)3`Iz_<|y$W{-p03^K3_>0ke#$t1IF(5OX`;z`eAf~7e%`Epp3 z&_`Cq@`FVQLffi$DkF0bX58Q9V%raVfe#sRm-0oHis0Diq8k63CrA*TbCa8C1pCnG z3X5NzM7ZiOL1{lwqxMAIJ&W1O)DnYTFSovf9PHkt6h@y9-r!q)EzUgP^7TV8ug;rf zdbZVNP)~I#G7W*x^?W1hs811Xn&ErNvVC;qqxWqMTs1LW_-sw=-AWD)?b3O_>rEQ8 z>rFc!Y=4`XH^1WhY?{3j^+o9nw%-B3O0owpm<83x7wt7Z64_CsV&4K?Zu!UN7T>L>0$Bf0)s3Se@qZ-FbD zpSmSGJPk4X%;9Z(WoWi3?FAFBL{k)N8XivIrv|2JRu$M6?F1&;$wS<4GgTW~TgzO} zpBwd%SZkwRfdA7wBgu%Y&oQqiqCxP24GO+{ew+0$M?};=*U}=dvRg2>wvK4LX2cT!`|Hl+>&N){gZl z2!|31N=u_bA70nJc>@21y^cKu#&0i#EvRpPZ*AQxqgr;HK%I4bK9%Do)B1w-ujQky z?Jj%+%g7Z>JP5|N{^&Zztr`kmIq`e!u* zWVHR_O^P?hAs{!OkY8GpGF`yOe47O@!OBu#uo&q@^FGlzc&hsjkh>|0dNq{XRrU<3 z7TYJI;fUwyz{+roBWK7}74_oxegY}+5QbzNID0 zh??126H(fSTYI`&5ei$M|vRwWqDntv@U4y~8u^ z84XwCP=m)5UygYdOUl@%i7@0pR@x)iC%1hB5Xb?1!Kk2oQSYa4iE2|5`yoEJ$Xff) zCpCxVeIdbIydPvs-W_h=U3PTBh}F=dXIjiilHvpAJa&+7m&el)S7N)!$8Md(HG0gir{Ulb$4 zNpj~M*3+(j+<$WPI3y_JSx^3p>)XTdqzD1pCMsKKF-d4RH$(U4W@etVeS*orD)+mQ zTEBj*>J)=joe>adC%1nsRjZG70>zILBs4C=+eT*iGr=(fHjsSupT*oO_|=Cl;yrUa zRO0ew$U8F11;xKYL*+nYuBn%LI0b9kx6qU7Jp$*?&{#nw1#?<@YJSAs#MI2b*)_+0 z^df(j5adiZRG~u(qana)ie?Ys(9iD|lTRpkf1hH zw|HON*8e(X^n^{9nZBUl@(JWwp^IvITU%)*^S*0F$j^_TJxbjIXKyF6%kU|gmvIY> z33Cd1^?@P){^`N}w)ZuIs3L-q1ijeE1_Wk!Ix~&g3v%05Mhb)e2T86wZ22`9^R}vb%zth*z+;X1XXWx-XFP_U+fe!k~G= z^(;MVtMF5`EoO7360rH=lhz3ayxS^}$%DXjGe!PjN5XLqlW(%!+l&7g;)~CQzh9mH z^~^;U8>>g2*x&JVGma&qF9-Bw|5UDmvQ1pM@mwahaZt~BgWXh|euD{Yu`^zVwe3H^ z(7qi;JL$-^Z87*IB4WR5_#+$5^fVs9@GM0RM`BE2PTn?aOqtsP@@w*@;ADjrxtyHb z4zTbvqOQMPwzvK;{|~&-M!O&|UW{x3%|}C!??p+)`JpSi(}SAZjIyt(C@HnKAKgzn zVTsznV_Vh?Q;2jHm&^J6MwL`MSXoV_uM_3aBY&N63lQk560@?$8~%lp=>I5c{$D64 z1(ue!#k|j6YXwTxUmM+LlJ_U(-M3HQMWV;@`~m>w~6#+y1&nG;xuU_ zoc5CPZcuo{n{fUPtjAXPxL$p#CtR&_hffQj=x2!0&nur7_Eb|F!imlxr%9S>{;-1+kNH^W6`jcM+^**H)&a(|03%`0+#NYk)A|c?D{it_kBl?Ez{KfHic`?EZ<0J zOWWh4b5|Xt!CVC;Qczfr+YKB_+)k;`b>bQAhh!X80yRTqQ8lgx~Oe|Es=dg zx64H3A95}9?zdEIxGAv~ODFx~`RAfXqaN{8&0jU34U~+Sn3r~Hb7VGbC^AkyP=v2j zbc&GEzPsNjJp%hxRLzv2C$B(uytS_8>s~?aMqt$2aZ`5vhfsuzo-WUk@_4Y1-V3{M z7jhF2eDojvLmVoMf9@2Cee^@UScQ?&!aw23TRa>m4-f9rzX8DQUX<5k-LokK0N0z5 z%AAAy_W(g3uTxnt1oH9Cy_NJ=VU^204V#~^E#ZIQM|WtRSAQW3UR&E-oqAuuKUEpA zI{<380@!>b3NHHOB&P2YYrjAtsyx*MTBQer`~m{ceOtnrTLR_|YXG*lTle@O0`mL) zD3eV2vh$Pny2`1ZY3bHOP7u#GwDlTs%jt4PR%kPIBsKK_g%vFQpbxj-PWzzixb%9f;ExA(=RBg zsCuksiVq*0dZ@=K2JC+rT5HEvXgJLi*>-pce!Z{qYHmBMyka9g%ac(~*DSwUU^x#Z zF<7!`$2Fh|lY|#K<3HUu?egH>D!{X-0|Do5{Rh8-^_?`f^GZz3^T`KLPzUOLNLp2J zk(-ur?WrJ2#C>OHTS%Jb9_w1tPXdqzx9mw5btBm-1Wd!Nz4V(sJ9PJ*vPN{kG=!m> zIqCjG&L_GQm(_21C+I`rg|TM9jsVka!zo{>Dl3roe`%OA1m!I0JxB;AQ6}HKqVQI2 z#XSnK0RoupIGYEk#pG>Jd&W2*q3y~2=(oC5mCiFgTiYh88p+~}GAE9%J?ZNfD zvZ7%*SOHJ_kD&(U(_ga@q*nm8w&Zj93H|#L|DS%A*0*ZG)cJH2?=azc8{Dw%j&yu3 zl3`W_7c!7-0CSWDC1ZFJ^+HB>3xXnhd9bS z2sfNvo#*oF!lCn)GBIKJ^5u*7elyN2a+T}6jSGJ0CV4{%-rJ=^q$Mj0$FTfZ%M@31 z?=v~!MzKLdcd8u}w`q1(&-4b&p+K{Pod(xx|)lN3%)PP0%SQOGYSG{bQ2+gLe0{c9mm$hWdcCwZOZg@BiWXJ;jFrA`R= zTqgpk7}_zN!M|(s4PKY94mz$z*rwh7pLu%ZI+YSvW3G!xuqCtxfjB=h%Cng&S6`v9 zC|;il#CXb%&?AoK|BiA)bUv5FXh_6f6s9YY`0-uwo8k~U{F|?+XNKQID=LNi7Jcse z3Te{cr)}>aoWHcZtURw%-=!NXH>*IU#=%UX1E)xs(L!&hD9x12C~p@&AUHdvBmC+F zhRqhULz^dNdo~-tI^83dSC&qHN!Suj4>aWTOcRnK=PxLp^L%TpQQok#HKAy`9O{z1 z6)G&?8)Q8mDCpq?hRL3_%(YKE(UM3c5DYf6_uIwH5PWf7dW#)Y-hg$@4hs1(sk%buGhmLHn}r3NTwap1i?RP$ zFzotiEmt2!tXHhv4W+lm!DBmRUkroG)(EEl#mvl(s>aBLFF6#gChpM+dFSRQ;X6p% z>YPggTe0*a>y#alg_b)TKPd}So%O0#CcquS|Nf-#Wu$@cx!Ky<8U-aKDhZslb}Lv7 z$o;s`7B6OPm7LIj!>g>Ut#fj6OoJLE`X{ar9~FdOt9&Y&D#TyG*X-IPY9n0nAp+g!ML<| znTew>u^}mzk%vsEvTN(Z8C8y!>ZK>WNl1c`?%A&#S(*y4X^gbNbF(SgN1kItJaq|*hq{_8Rc$beaPUIt zbR7W~?|GAxDEa>4j^E%hDR?dD*f_U4Q^i2ULYSFawu$~iexFQ|)+hE#uCBQu#HZdi z@mAT2-u~T79uvEExU1hT!DDD?CKV{_P~s1!o>AR(pcR~t&@K?Unj`l(vj4)s;uTv; zHv_wKom47Fq}~uS*$wrLo_s3gk2qnp$*b*$FXX!VMNUZKiHqlxPJZr$Y8JbbxQSzlX9l3DnvV}YZ;?+S=HktliniTgmR<(nE>L-F#W&{Sn^tnQikMuVq=im! zubvD9`d!?-0+z7{@;3r;m>G^C-Nup`XP}zpEbJ|}NwsZ`{Wlqey|@$-+lWqoneuyR zXsFX^18^nuc1iAsUCbzY!t`isYwK)`rm-D^h=m90J>u=O=MnZe5xG;ndMqgIGT&V_ zljJWJ@(lN-yKs`nUEV%_O{+@IH#K87uK zUN+$o_2d<>*GEGgbO)UbQQW+|BvUtwMhi|2(5XVJ^Q39s z2Bf1t%mKn1wtcqDi?~}=8fsltWLn?uZrQ@RjdhohT>-a5iMtX$JOkb{O`()Nh5!`{ zQ8h*RI?Dy5hvwuS7QVc*G^R;kXlA(?8;7j)`M~Dqu^KXZRrow(7rxvid1Fy1#7jJN z`xuA;qY0KL{I0al!=oP=2#s`H-dx=PE=txkeW*1AAb_t6mwhkJnpe@mA3;$aakR^G zFi<1fWeYy%xA-mO8V9Yro9NfUds)*4R1zOTIM;wA0!6~M*N6#UDgE6&h*=LAbo|ur zNAb_M+us1lM3ENs+e$)NR329vwa{yJw8W6c4m`iZU4Gi+&?1Y!IRs)0DYwPU8$JnS z%>c>m-h)Y#%+<0?Bzvs-bp`GB&?0s4uJMMy!lA7*OIkuRk9jpt3#T7Nc&a;I^pCSJ z&RQiesxDLgMhKfS)BOU-4Tb6wWbQ}1D52OKqd^|tfeI9-pKel86)?PRG2!_t#)5$% z(E~Z2$}^B9x<7D3SqI8Qwi}_%>ynL8zjR&L%B`*W_#_Pg7SW*$6cHblHN9fZw*Zv! z^L*T*lUJr1$0t{~CnttWY%emuH{R%4iBm_DCfA+PdBC`QX6xMSeuY3bQDiT14ImFd z=8bwR2-`9;&O)^f+iOo2A=guRkULeq_h?=C;}ckM>B7aY7r2+EVUkxP?LQnb+$TwB30z*GsL6<5A$m0g7Jb6%FUWX{!{YJKq7J)E=OcpR4#I zrq~0^fK&vKLJJ>C5^e5G8}3S+@IKMmIrfsyTl@;Pv9-<`wX*vu+EKCoZ#i$d0AgTfN{qZ?dW&^e%m~Zc z3{=Hw#a~mU_~>sP%}n#nttMK8-L2m?sm4-M zvp^R+RdKXbLEC;o0@zTVm%7h9v}8?P8j$lLy-JPE#rkzDPo5aB_owenmYR%ZEC9Cm z|FA3F3Hd((Az_JyJ>b-8e>AB>1mNxP>n&y3<$sBh{7OLZ&=9Bz05!@UkaYY9!e(R! zaPi*=Teq@koEv;t)|BbrSuoyN_53&KogYxD-G6X)FfCuaI0uR(IpzWrXS50bHzEbF z0qiJZqs{xqbhDZN0jlG?9Jp(E$9xb7Gzy=K7tuBc%?4svVA$DfmQ6Z|dY$aMQx9Kb z+4S#nHD2=iHcBofMMp;meo+Kfzdm^?YUwWn?Snb5ksBkD%d3fo0K}@E0Y=v(^8907 zNzwEf7;AE!1G=<$IPc9fi_MJ_z75cWeynLa!eR086=+pM(b}tyEFC^TjFmwB+fRkK zQz*sxDu?(%j)(9%Y0HN`kDBq33X*6SRTP!M;!UIv@%n!%`|7Z$+pb$mL_$PF8gvv; zknS2Dr4d0TC8Xh@W9S+}T0}~zA*6(%(}AHx>7lz(x{>a456}C)-*=sJu5+%Bf9PNT z*4p>lYwx}K9hdRr$3orG-h24MYk9wcIcI?ZwotvXs3IaRteSX!?gXIgPv6nMTtilo zV?*D2!HiKlm1*B9VzDKO_EWG)j51c)0qav%o6{p^-}cta?aqJ$`v3CYc&JRFDd&Ud z7E8C?v`AWq)g07_4u7Y}nyLXjEK|-@y?hjtP4Zbs?YuxQwDFGm=URvOk;Xw%UL*a# zKbqIRAC+KuFD{6w2Y&z6uH8LSwi|aDmp%g>U)VB|ul@<`1r$_;E6VZi2n9cHb!^SC znSt7g=s;{$Xbj2@${AoCqPa;CzdyRAj0g~5)$0+}**n>oz~MBtF8A+dZ;?~LbTd9t zAY|N{(qqj6Nk#;SMVo zpa*7amkM-jmSi8^%p8kN;vqG%u%>|DXIB-AT?CereJDD6x7 z$43l$$hJ5f59?U0r6zcDlVGf@)40o^#Fr;mLiaE)Y@dFcJVCLtaEmg1G@6b!+hVrU1tIcL7gc_cS^9%~@p>c0W8) zsb~F^=M(thuK2Bg8a$X0KZ4Q0Vni)Wd;2Dg&)419Jrq$xH73Io#hQ4<1&@x>9QpTh%^5gDrNCQH4V*83Q+cE{E+DS*QEl4f348x zCnjNakBn2_reb(uk08d1^n;I8*3|f6!lw_wbOi(m7~wUT)-n$e*>Lpi z4w9B=%L4tdsy49o)+ay-8O_kQ{2#~q*nM_^x=I-qHZr=HMnLqwk;xA~;z4}rqKE5L zZ7kiJ5K_a4{?_YSeio0FQYviMd|R>E#Q2fD5L$_jv_SlPEXr4@e5ceG$>F_Xk zo8JQ|qg{?>g?P-?{_&i5WSwFBmM~I<5BwL%nrG_+Vps=;`+50ZT>QX*fvV*auAILQ zBimP#?@+EOXb7KhQw)AwaKi}Vw@xh8?B4s7bQCYTC*5RTn%kMNeTDB|APWdk3>9jw&l*)u>5 zn`f4M5e|4yfW4GE}>R!0tV+hO2NvAFJctA>Q9qlr=8pl?}79yB1g^%+Q2<~eXQ|N zevVZC?65Bv{sa87tIjKJJ8+JqiB}`Ox!u&)f@D@ zFwa+$OU95mzf=EPhqa*N_3zA>|t@5Iry8tBHc0t}z5puuv_;IJtDzUoPVDq z75IRt#Ve(P1tjudxPr&=)_id@c)15(F5-bqTuWjYD8$*3@H#Dw(F6K*45mKe)d0U+ z&}v@rj|O*8UtIM(dE~_C-kZOo_Yy#gjy|EF#@IG3IXAZ;B^3o54C>78iO&_4nka46 z&!3BUPj^s>*J#>zjyJLhimgW$E2Al&xaNFQwP%45qXVj!Q+_8LStHizO!hBbS>N_j?^gF1zps=IoYmy?Vm{2LO@BfL{+WptBLZIq{-yFvRe zrl%B&vVfN*b_Ey~0~^l$#>U`j)k1~+YflSAe#*X~a=+e8oBEIN-SAQ$RG!PKD3^2l zN0>;@HMnp1-M?eXoAQbsB*U@Zkl&C<^;S^YBd}&^-QfV!=-7qPdhMOD)v0b@R=dGV zZ4t+btqsnTbeZ49F?Jh?O6Ab|_hi@guF+}Nw8g~NmAt=3wBd=HLlY&FP5msArU3oQ zPC{EWTy#M1z2t-VM1R7X64^X1L*uo`M!d?%_)24ZbyB$mWZVbR-qykaS}%*=`iA%q zDTBP4r2l;U1%G{8R*Kp0o{M|8#|+GS?s~(a4|(ys*0#!3<2IAgaXNDzO6Ysumbx1; zQTZEc@gvS%iuQZY_TzIwtFjBH(*`wJF1)8}siQp`&@kben8NRc(2`BJF}T~rd4V&6 zs<>0uuq*ar85;IEidUn6GB26Q64Ecj)WZy$C;za$dyHaDb%}I%)a296bF0kW;J$0S z^gymUtqB2swa3OZotg#)^a`5wxOIsXv;n6BI4FhlJy<+Bj2s81=Xhbs1u^b*%hfy)fWWK zT$$^dFn$r3kfEu-@N@S4t#|$dW=OxEn#7wLkm_$O`9kL1h}2Av$nB}mFse4Iizy_k z+p5@_{uGUVohF<0k=+IIVq3WSLifOt6;s%sy(GGyS|jUA(b4GBA-g=St%9w{YO6X_ zAn^BCxkcXh$UOBLzr*FUOKP0f`u*!T3}RWNk2W?kf0)#W89X^Y$8FW@lTZ4qM(4W2 zT*H}1-`0cZP~X$a>_Uol10#otkC~wr;jL-j9jhIu&Mq!}Q&TU%$nX$y=Ed2jsdhF- zM#e2%1DrJ7t!(JXz7Ko+_@{QOj5yZ*huPm#)+tM=zHqT!)NO`@Dj@Ex%2;h{tX_je zx4m_fPHNX{+)7@6a^Xc=?nx6t$_zA!Ty$9OzgCd`YTKgI^cYe$vm$zB`LRv6$yRZ> z@&lefjlcRVln#^#2&A8|gFCMG2nk5Etv(&FslcqC33B~V=P_W&TG{4e$csObJ47=y zBmC=tMC~69h6yZB?i*-Uz5w5{J;r`Jd_CFY{wDaL(^?=#avfNEB%;8f(m5{Cj(V1X4k#8CeN+iIR%D_%E>qSLVd=tvQ2Q^GVeYmW0w zjbzZ9*yO##8Q}w$a~x}w@0O;Bbrzz(wMLZ`CY5+8yFSe~O_^HbnK;yYem7b(QwgDf z&xh3IZ|Y`RPF;#GZdn#ZhfVxY$F=%kqT-p!@uQ4>SUd72|MGM*G)$rM)mKW(M%>oB z%)UqWmwM8cgyE;szPr^@^JmAq-bZsGRLpMu5}HA5Rem#c7hUxE{2LRo9`Y?*6T!;d z#c!5s{)!{GZ(v~O-sAeg|H4xD+t+${Q>O*2brDeV^f)LTFd&}_jHHl1R-gW zZC!SlAr?7Rt8+q56G)2s^aiuXTlH+vE5;^=V_a^|hufyS|D5a3R+$Lm+-}05By=4` z+>+R#0_;D_$641@{*u&!@YH0D|8u~w8PC+a|1Ew*LfV$oE(=jZrC-`c_ND3 z)BbFF*(6mHPjsoRq&_5K=_zGOQ|VbsM$6ea(@~Mg>c}4}A;3(yI2SOO!Y2K6df5%v z0acGlrk^`9D?1`j#l4wH>0j$sKUC)iH*0*J@Mt6SCu}G za-+T6u1Mv@5LYvdZnMbP*cj?CC!v`^c5ka*%c}gBq$34QIbO!;!?(~D^-`6r>}6^e znbqwHZs_mc3~4a9@u6-;ISd?bESqZ5V3PlUMoGJJS$ikxU5p^>BL1vQ&_EK&5!;-S zH@-0I^NR>GSEfZJ^lOb4+4Nu~Etl{LYu4u*XfL{YH>U49yx_Kx?y+sZoifaS-QG!K z8XED#*db(qV0RN%DnuOO&}s#WjSi?Vd6br4wjzCnbxW<8@H54utCIw(cshMfQ`m1$ zzA3M-WPcNA*XYn6o4{g&iR7bRa?;3_SKO>kVd!L1%lBZDd;-QximDGEm+dxpU0aNJ zal$=RB-l`paiKmD@;b?R>wO>nB>e(AzRE(7rZ!)vnlWMfDuH&bqf;adg2jkvN%O5A=%cceNtmh;wN4QD~-olu)7MVYV*8nT2~HT&S)|unB`k zz2fqWp{89{%_Z3yBIDThNT?C(YBXhjl`hQV|9N6q@iMLv?V>WmGi@W-+nj!gXMcP` zK{tpS_)dAPvk?#~N4YJ?P9_{>2k%FhD^;}Abhirm|@wMnbm61O* zLu*ow4r`bpkkgM!_7Ji*f?6>9i27V5-;`_i5aYy5?cXMFT0aYXh}W@jU2!;vX;w!! zrA3Te4|gb2P~@fklcBD_4f=;NUiuzsa9p*oJGiECwcr}}dxrI-E6~3L;24Adf%B$F z)j#oo9SawKaiTg+4{}A{McG3(18yMGrnxYgiqA!@bfG5%{|_BZ4fXo7+z6PI^==mRT_40xfdy{yb?)=Rej zbg%`U!xN6NhNZV~7Vde$Zc|IEPpL?HWt44lB(K~g3%Qlzzeq$U=g$!IP*Wz$`|E(x zjp*=o|DwsNnndKJA}PN%muUjYk!^EIlTCbk{_CGkGuKTFxl%EkYX$;qGb4HrM&bUC zZak}p5^@y}IT)?L2)NVC(&0(kf+NwEPh zG4meVeHX`?HlNO|TDW6I_!>JpC*Qs#RKh|%k1|iX)Iz+()DZ`V;+mq&Q}zCH&*|3U zB_FCoWJG6sX^cS;#a=e@#o7+p@B>O4mGKaI%6E(RX=V)1S9$u{p*iltbz4J5n;}JG z&t7q!;<+b;_sn8QOW*#9t0Vmf|2NlptO8yv)fTkoI%=VBp6*YZx6$?MHxTbeu&!*w zg2i*~%tBt}PHOBGuh&ias;(b4`aI@06%P~^`wZ`iWs8`sKC>ouO8z^0EnNS>prlD{ zP8otKdMN=shlA})yBgCsLS?{g-%kpEh#rY$cLA{E`JH&V9ti^d@&a>m2MVGO*-|yC zzZOhVnAVgxW8D**1xf=nIZrjGJizsQhC>QtftuIeq?S(Hy*fbFQ1hM}?y3Qa^D4#( zI}VYQTOCun$f)DPAFkxa1Ek7aO9$o5{N~pbPI(^!?zmM^)JG#3A}pYFQ6m9D1nO;Z zdkUsP>(?2f5^Ufd(n0XHeYE~GG%B#^^Cla_CWEzY8F3&8&26t`G%q_C5OA``Tsw<( zV5#?~k7c?1IX*Fy)8;aFpMkkNxQWu8Wa$!&P6d{`=uZ|re5p*tm}FHmu97?WqyTrz z={jxGqBMC`3x?Fa7>9j#Bd+}}!$$FtiB4gii|J3hkJ`_>dJ9n<2pK_)=!#<3?W%5D zuI`0kgXj8Mi);VF`h^Pdibk zykyktmi|u4?Jcs3veCZX{ zQMaR3R=rDq`Cezx6~yEXa6cEYiZr|=4x9*PJro5Y1$Vo9t^Vh>n;vKFxdlaNRbU*S znga8JU7e1$jczhcBE0+i`gWMMuWh6D->$;+XL4WX*(Mg;RkDP*SaskL<*C>NeeDc` z7oYZ-mIl4qtYu{{sHdXHQwe&ROX~vp`SnlLb8J}jW)pxxB3Jn{mj(qXSC%*gTOGD}_nfyy=T8A1WU=g)OJtfZ!<1H=SnGmL;9LGhk9lo?zNVpm}N z`3;`3Rq$UwEz*2iz{CYia|n60&*gkOrQI}IQG#g+;WnL-nJL`_j>9z$Y%!9Lszw>x zu8=76L8f=^mb+`3fsJ?DuYS-d9Xb!@S1ig)okX)^x1CvWqLD>-aDPNO{WO9ZolNFD zLx0YNGqWPzZE!ZL|A9gDJJ=ij31W0~0eTi;-qd0V5GorkhXf#OzGJdhE>{9pZ|lhJ z-7SR~zH<)Ow-X19*19rTF7f0pH!BDb{&hJD)Luqw+W%Y4$Nr zIBh?3zFk}W{_tJv32h<$dx7&-X?+3+eL<`6H(I~mK|H~w%-|DE_HTm74ZF}9xNhOiv=sBf=FJhE~H!I^WAwrevTvd@TcYCo;)?!U14j-QN- zP7=5_WWeL7~Gu|MgA6=ED85brW$8oPTs$U4dMa0bKhcl+BWi; z$-F4BZiBtYU{0)m#QSc;%mw30h69{2UYR1A6}i1_6j>KOiV$%O0EQ;B%ZrOcZl}$j zZtxZIX9JhVI%ukK#IB)=B-~Wv+LRDzvelL@9*{lIeXv}Md1)G0g8L(9hdb$=D(UWU zonX!+Q)pqyN&rSMHu@DlY(q$7hI66@B_coQl9W7_(M6Elty|DahQz$_EV8@h8hcZ& zzWj+SaR@Zx5F<(a{DOZHj8oe$+3-6e-Rqf~bWPP`#scR=RV~pSyDLy`_8e7PJc}=C zcEyxh67n5VT0ipk4$O)2iwGT50FfOXdZ&dxMZ^(udWez|4>_GVcWgh0m+svE=xe9{ zfV9W*TWxq)*l}afu68t{>tS-@sv4XbKelrP<=&dI2URe}EA?XL7f2P?TIVA52>%&9 z>2Vc~Zzph8d~<3|P!uX9yGC#F-iz`fv&NV(EM7d!s72m7QU)aoM~#q98`mUx+GTsuPaxxhI*bR7x;IIBG%CV*(`2qDeA?N)vH0kp{Y^E>VA+j2d3 z-QMjj^sdUmH#wTrfxY04AR=d)- z4hBl-ryOMOb(ejr`rolN3+CVP_?y!qP9aR=eA#|0kJc|jLmP3p%ZL$g3(eN%Z%%V< ztsKheyL0Xb>tj`U6IY_k8r$V{KYNCAF`ST_kMWhfP9Nr!Few zO5j0Fw#`i&_gzs@LzIy>7s3@dnc#mOBRRGPhK6L_+=LMb1OwDNA@I5zTbi@8Gy1wW zuD4y?=M%k=!#wr;q6KGKEID+juX{rc#^#2W_hl;4bSr;i>1WWcs6w9&L39{ds_DKYVOgcWj%0C&1yZ`f+!;J*ms zwM}F|2KXB=ng){{|Xu^)?vqvqbOqrM17^x{OebKzOS(9j4ZM%0{@Xi zyS!EYcHjp)6NrHU3@>u+k@ZWFRV8nL9E6aWGyM<=SI!vZdpg)ACV_HDm2o){Bk4V$?+-CIEN2Fhcl7{ zL$b`fH+OS-=+WN8B=3kbcr*1ekwW}KB8)T-2-;2Yo>9NyBa>?h37gjK+@u18;pR;mC>T&b zK`L8dG>zm*Bh$MfgxD%$N^4=PmHX<&TBqtAm}jfe4E_e7o_TNt+h|Hf2!tVPcFi#`N!^n_R788f z&of4}!E#6T!RFsJ+X)B%s(p8K!BHeX;eZ`!Oo}I z!S1OX(08Awe(@n{6(({jZRyAeRT!_n*x(HgzQCV3TV&pJ(Haj2jE0Qh91Z4rVeCe^ zCq~xTxKgIk2*_*qrm}+tMyywFK?R~E30AOkn}Xln49vX;!<~a;nLgP{7cJ0c0+w|s zJuWeXuSp;iODwo}m@73lW#&=C6Q}ZL?P)0s)&{5JZ{4yt)Q>i_D8^uRZ0$h8P_8r=*?q)lfFQN&_G+pTdu>BVUK@e$3@zca zswyt3J+}W22IQ`ZyQU}WkXtB!K13+aS?lFq+F=ceZRgJVSh@OKi#of0qt{9DB}rp6 ze76`!#94v%<@khrSgW&3{kM@R(77G*KX~n}bXk$IW3{urnZUs%BXe*K2qU02+7h4m zAI0>qt4J=33<#e8w-@!M@A;Ym_wi)R%;kBr8M&(n!_8T@!jTL}T7)ff-wSMsA}>87 zcR%}eUR?9sC?2taK}-=|y@5HZNZ~!o>5glt*F&fns#EXr}D7ZiNBddvuXodTYuX9HW8Vt zlzSyO7k<(9_qY)JV^9Pim+taCqR8EHrHB7KaQ{I`Vz*OuRBLP(VTpxMpS%JdRmnK z^EO70!DwXf<@Jx?peuZz74#R&-sw)`@ZM;X#iHb4zO#m!rvA#8p1$EIwyf{eI!Z)5M^wS|0#?D|gM z=`asxSMfJ_bXO(tsBz($|@TvIa=oj_y^o+F{Sfh>*-S!XjN8Wbn^m~lVB{mFgDgRugXLSxVHXMo;8 z>P5aZ?CYe{bhqkfikIl1 zj`H)Mn)d-lZ?F%DX7BChg6s;@ubm~|v9eKHs`U`h=f3`{2Tdj)W>_o^`tCv?k!oN6 qC-36Fneo4*DC}|ne_rJ6OWgJhlckvo6E+<1p(v{&Q}oO*;C}(r*wjw| literal 0 HcmV?d00001 diff --git a/Doku/images/source_extension_vsixmanifest.png b/Doku/images/source_extension_vsixmanifest.png new file mode 100644 index 0000000000000000000000000000000000000000..795f4de2f11b175620c61ea235e2f724e6b95a1c GIT binary patch literal 85519 zcmY&=1ymf{(lrnuKp;3F!GgO7clQw7A-KD{y9EjE7J>wK3-0bZ!QFiZ`J3GL-u?cy zW)?lwr@N2TsoJ%xn(!~5B~Xw)AVEPvp-4%JDndcQ#zH~Cm>|Fdl3AM^2jCB)ouq~% z6x7?EmoM~p+P8Rs@U@eaoY-p+{5wQkc1Gdigufy&btfTbCo@|IsGq+^Bmoh!6Ce^b zb~JP_w{tSLwSmG!BqjyqNH1~`TRV3Lb5k=Xs4~uhhX<|E1|iCv$6KD7ITv zMBohK%NZqG6DL=F2V*E5yXTkYZ~org+|kfVA86_T)$qF(=sOg`i&#zH!N%Oi6zVtL zPADLI{m=Ez4u-~1*Uy26|7|8>Yi(_8;{$$V~v5hg5(Hw6=d5Kb&8OoYjxE0`#lfGfcoru{a*zo)_44n(| zTwnk$MgDNW_>0i$T>wd(#Q(V$0?=n(jQ{llIDjG9i2L_h2mxql=&}Fze30M2-Rbhn zFIl2^xx06s=LyMOVPVKnM4)z@@9Sv{hMcO$Xy3-P=+owp#ObXMRwSEK&}*Q|=x%Lk z@h1XV8KxUPG9w0ZMnh%L<0(pChSWOvJD2vP3~O8A2_sRBsXWT`57UJE{P)BSh<|&W zp=2Z{+-64KcK2nt5(}k#4q8r!rh*P^1qZr|~HOGf6&XP;41ETu^F63j+hSv*g5abes|!^ViHSd4EG`Y_sAo?t4DmZ<8_flFDA!Kb zUcv80Bw5B*NBR=pXxKmY@ZW)C;vLkhE~M8$c9ruKy5I&q$KB^Ujf%0+he_n6<>kei zA0a6V>QmFK&yj_)7(^U{?ox1POUUzf-ulbc0AG7X!(0OjfzkbtGVf0K2S@=9a>+jfrujo+sEE6b?E*?1-UnFM0)034~rA z?P-3d83oZVP^o?5iu;YE#{LdBQh;=L;E4Aj)vcwR{E-BGFO6 zNzxUEMlAG2ZpIm=b>5S603c~t=CeCWtVNy~mI7N0fb1g!5hrKH*Y*i{0eM`DB?q`4wB zzqrB?dajnr*9SaO_k-=+a^5pj-b6jm^{rY>6~BM$LpVMnr_0;cU7lUoiwlV=TM>HF zUG2elrxyI=qZ++42^C*7Zgn__+TBhy)_AsR#DyN&`^Gnnf+@d`Slza?w_7%%t<@Fe z%AG}jO$_Gs55BDe@&t+1@j+&_oOGAbol3O+Nngbnjc+-ZL)s+u<=nhI+byxfq?czh(**-oM zX&(_@MS~+tUj^yEMG24~BzOt}2L+d@H$`C6(i=#Mp^)yH^{Z}~I$o@*Ei7Zq#E-dV z;HP#Y4JU&c`P(}th>RwSb~nXyp74Q9CzG&ym}Me88h(Bd$Hr&O(;#LC1JGe$Mp$z z8VSujdd<&v@mNLg^|~;tQ`vJv7(WY-e~)L}j-W;6d3~2h9&CQk|7O-9Ai=ADJ;Ica zxCHYTta$K*DargO*FYc2vSeD#knbnS-;Qk0EJgby;#1$r6ovvvMhZ8za!t>%Wuw9VhJ z%=n4#R1{p7rZ|#TRMam0?0xdj-&7Uqg;`zPGXpkB?*?M)Ta3YbK?V4W@1>1N7VI`| zNw=u4j|qen8-2EEST%cmm8Ge?!3Ll%zp`%8B9p8aRo6VQeJWBdN0}|7V zEi@7>C~nNYK8|&-#s3qTq!9JVn=r>d6v5f|J|!)7%@llP1(-^Sn~}p5e!g@-@&oWW zsP&$I4X3sro%)%f$!OYWnMRF9<)8jIRXQ^x^}@kAL?{arG#*u6N3 z*t^KegVfHL-~Z7SZer|_&jXEtts^pA?ia9RQ3hlT?M&@K4KtOuUy#(uptZXOf=)Tz z6>WKr(qW9)xZ`Lsv{#j;oFG0*v+R36zjlIK-^^ENBb=&2via{xg?W0Q_rZ;^#zCW|iyUt}!52aKN2?7cHi6Pa##K*J| z80ENPe?mTXPS3SYrM|2))mN=gU;V|%h!g`8b`{+g`Jv<10)glQ=2ukpI{P4{sMBa?)l&UQM%fvY0UdZC?I z6Sr{j-1>ho3o>@pj~m#BBIV^Fm5#=xBZ*D@#FFXX<`-Gf-E{{RGt0jvQ4e)Hc0cu= zW{I}RozA<()6^Vm4dErIcN|y{PP{QOG=DSdBX7nQ8&z91F2E@(mZl2T8Z|xR`)#1V zce9w$8g9w#L5Ssm(E!>@amiydd6EO=TJ!NsgF8|HQ%~h98!?4uKL!<*)xhI#-wCto zDG&n1Kv_m}mYNpDWoG)ClACYiW4%RRP5{c^_2u{RTzklZm48;fOYWc3L92j|+IGCD zY)E_6R+(lb@gJ^Qp-BpA*@STMwObpAXDIK*LKtu6+@|gV>;W)w1&H%6D{kI)!}Yr+JB-9G@odSQ0npi?pK5^xS@tEK8&Y?30NV{ z(=+T?#;6?;v==- zuHd{d#`#~s_8+vXZx`MhU$nDZXRr#-9X%?;Yhix)q1gT(WDP6Sn8WPzY5w51PY1X2 znKppsag7+maK?ZA6Q{1F)LKWGJ^%a1kZyDps29%dYl2UzACcYk=V7H@Tg zIGP|Q%NMM|e1S-_W$U+c1{M&tmj^hE<*wb!VM_9-N=iyHAJ;R&{tX*m1w`bTf$o)6 znDs0naWY5>iN6cwNw~(o5HEOnBYt{*V?F92Q*61KZRt{SO}ETnx+^)1Xd<7|b5wu@ z}sDrLb%=O_bt?NNI5k_P(K#Z)3lxWSUS`pyXayB0x?-vqgAg@yx= zOLW8(G#YFOpl(-PiJ%(RJZLLAo;--GT}@Y;om;Qxw0554I982fxV|ALF4!HGH{2}z z_~Fd{EBF+28QqR#%vXMWSkZCf8YPJ!tyiD%b^SDJNBL0WaeyS&&1uhZuDu1@58Zy- zs%2NGk38z&GUb(I&HyRs*{c~*yj|;Wr}lWaAr;zz$A9N5gH_wXeducoQ_g^Q0NPuT zbC86D1W$h~(eBJorN-5zWaaeHzA$uBTt1IalatI;(su^(zKeB85~@N!I(qO`RAiTJ z+pd$S@qb$A!Bw6y!NP*vUlnmCWMqs?70RS?IToFG?!g4A$S3RZY;(VyvH94;Oi0r2)06Anj4hjq?vDlc=vTZX)k5R5r=7OSU&wW;mdO(y= zO-oC2JNWryV0`>XWhIjpBrc4zda3%RPWpD|&} zeo?yYI+eDr_qIR_ftEx6@#<2PVH{dfyA>Do?^ljKBY<|bE&=PvLK+>Rt7Ch^7g~Af zD}o+V77%x8$?-=OtB^K+QsUo@X!m(yadBPkPt}G?i@Ak`!Bl}%PtU@u8$5)Tr=WZQ zp)zT;!I6C*5U-+Ae}#o5W_-Cbs;sPR2fi|g+SuG293MB`pDKLB5o5Jo1+3f zG}rN6O^8^nwWbyoQP9xPq;Naau$qn?DSQoc>QVTp)s8NC!oZQ4spBVs7GB_IG;%nn zWlPS_pB0VA0aIzvi}X30-?}L9TFlRVJ^0519vlOGNZ;&_Wpz1H_jpnSt=fECUSC3?z<*!i`*>6V>^Yqd(JDU*uMB?gGzlW_ zL|`<6n9;zfxqKctfgbGudT4OGRQDJ^=K{=!5~uX%&+Oh%DO`>eN-uR75zG3jMn!-Xj*K*q27}t)KZw*17;!Z);OUMv1j!I@QkBtno8C)m=Tz#S z6btTm(rxcLQGI^PFt!bxZ}#6^S7dLd+qUl~SHUA#j*{vHh!JQg&6ag3IFUt~M*bg@ zIi0Q@0rViX;uWIATzlF8W|q#Y?wx@+(zY9s8a!=ImP#Z^v_&eM35zYN2x&1fI5|1F zp8ozCux~j9pEnW|hMjN zC5F|eIyHXmah;jc%Yd(8675&YAD0{E6cXE;=zSqk{~GEHOx#JK5IfkkM#EP2yQ^vW zz@i+uY999sqmE-$XlksMTm%XDC%6JhaVYZ*^sh(~KxZ@6^zP-SrhildGq6+DPn4gR zCoHdbX>0sXto)e+v^$ph&dEsxO|#jF`uzOdCmW1IL%MwzV#WVS^!vVslwCbyWNVn$^UZwu z0J1?!z1p6so@{!HzUWXtSOlVeD_sHo32o}{9c^hp{Tb9w}C`aFK(%39I#-G ze2(HBcQdF9*Yx6`BcB+J2D5DXp>dPx=bQK8yv-kr^CSoJM;r<&6^*@51R<3nSA8EM zlmZAY14|Q+X5{D&bM;i>gmpD;H#Nq@Edt(7@RUSgT@;I=G=C!=Q+T1L;8C7$5#hFT zy??ouIU2`+$GWpEDcwFWB3@KM`$g; zM7e=3+SW^zV*NPIoKc+5Fs#RjPK_b2i+R2mK>X&1z2g=QIZs_!i6Do4TT!-6mtw?E zg-B0)QrEVKW_}ExAiMU`L^kJOtm+U&H5-97r=jR_09-Mlsh?mXJBZwAqg=V~0e3*9 zQBi4`xBITB3D?xlLAZk|O2YMK*b)bU(_FW|$wHB)6LMw%~qvoo5W%I#dj6+>L6@y7kO zUfq!@K!J+nOU^*P-SHK?9`vB3+$;J*`uMK6j+suoqkx+%Zs+>UDEp<3P+$@{f#Ysa zJ&TKx?0`#`@xy@3ef2ghR4m_(?|VQ=pC87bw^W!Qm#j-2+vrufe9q-WQ{!VY@Kn~; zlw*tLBODFAR$Lg=EpgS`<1QaAvzNI14Bw(rn;R)g1X@-SaJky6SOplPUi@KMP$qsu z4KSYVm*+}PCx~6^yp6tRBEQE)=6x(`rubmKNHh1Y`cye6G_MGm6gE(OZ{eR3utD5K zMFKYHO~k{C?|QLoEr=5A>2mT3NMd38HXPrM&yL=rC}Uq-UP4pd?_%7XK9??`zRhzrl?1slF1(HIA+3jDV?JwLE0>ISV90BO)5lbY1H$QF%5a!~};zm$`rX z?x|<}6>zzY(cxV_TKb7ktc7oO!&gDn`;ST=Y4?Mow?fF6_D& zmyOEY+S=)y|razU~mKtK~7xF^^XP+XFLE{_osijAD#D)FkZ*mY4&!*tw z(s<`i0=fR8Vm*?hP%6>22sMC2*IPW?_(Qj*8c{d0I& zyaj|brF#7-W<>h9v80-xBl+5bJlJU6O4+mc6;@CGBV5|(kgx@TJS6O+_xt<^5`SCN_3Q8g}RU-4@U>uIPKo%6`f%-_<0dy~0ExmnJGK z9FV+VShFZ8Df#sUyY>br{bE6L356*ssdPEkybL#m2i*0Gy{xmGztJiu_v`8sCiK`N zt|^M^089HT{sc?g!eIn{RgieZj^2|06w!kZASyk#?LP>*_kSEu8eK5xpX(Eoe6@z& zjpJ1A9gxla(pje0q>VrP#GsD_WeIx31cE&dr3EMegm>1DA80^MvRlDOary`|yi4JZ zH{6YI^-s*vl&%7uQKXF37K4oDGoEw~?0*`?K~=SdYtN1p-~}lU=Qol4kY$09q?UIV zD?dU;cRSB9>tX1mHk-7vOd%qUEiD{R3@6f3oA1(h&X1}KY(|L$zV~(e&bZ3rffvTo z-IsIkn+FzuPjyE&U8Z_N6|8lP8jf4GN7k_|TvJ`n%Wo9EJ29|2#hH7ZohBj8juOp= zH7!UG%xhDOLfy-&yO*;92Wu%KMOjK0dvqmec$8>6u6Qen# zh>hP@)de$v>Px5@_B0G0wL!Wc{&>Al6EVMQv1!ERu8}P+eZGmsJ?HlMhK4XLc-m^9 z>%LkSf5tLXBqP+uP@`Qr3~<3=bfJqnC>;D*J?b_gY&@LJBX?GBolfnELX+>-4EJ_g zPYhvJ->9E@dz~a?oY{$E`FP((`A9hxx)qSdlTIcw)l(v{)o#9?L3GJ;f{lhse4v`7A+@ii*RbTXX)t(Pgh-> zrVUPDPmb+HhA@eSQb!RpFiZ9>%=1w$oZU~S5u~Re$J3t`_rd}=jOs&d8nXj%{>xz z!mY9e>}!prz(?<&;y>S2&H0d*p{(y)Qx}-t<2$f@k)VKkRpff-IVEG0a#_4#E~H3f2?hG;?AKi8_{34 z#I9gpwL|Z0?775NC7j&C&w2U_-tzx(&aOS2e9E*P2s(F9Q5+c_lPgG4t6I}!<{^)k zWfwaMC1Lac(_x3ect4LV>cz3d)$pLfNVqM)KMc1Ekp(CDqgjWn)g2N%R;hwI(DpoK zpIL#;*>dU`Wt~0iSg;LSLn+I$Tst3$o6QsvtY*x#fgg>9UxJ*Y+#I``WCmAr>O~Pv z+2+HXJ`_FwzN3}R-mh2NR`f%3M`Vl5V*fg+$MRNojj}CX%Mriu6h`dPpJVxVj>*{r zxf3ao-Kl+!&+9+F?EI3rCiw$qj7s8Kg*5W_TRNy4Wp1)@(dGFwMsaD(nY0_ei4J|+ z$tGXPx6wg!&`7hOoG#{p1di5vza4V(hsIbgRoC~UdirN+dz9!gx&x20_Do?-6Z)9# zLKD8Ak{<*!I5^0%5#RZf*`N=If_P&AZ(5!4siY+Jpr|C8v*yZKT8gx0u5;SNJ&!Hx zo15kN7d5zai}DalzF_e{Wd3B2|JDM``t9ix0)c|C(WK(s&VF{k)W}%p^P`~T-5Q?y zDIClSWN+8~gcyAO^by|!3?SsXf~cnA1!Wo4<_h7&;lR&!1>z;DdSTgx0ZfAGmP0`` zh=H-%rMaVFjruEDTnQUZktvy5_g1NyiNfbAVt_~~DBtJn7bFu~&?77>yv?5hyHUQC zLoHs&KxCQ2?}Qe-g?3N8+s`NE=e^A+-j~Vz^QLr7Pe0SuO+svTtJ^1~bh7G3!z>V| zRJW=h)~GD)G_P%}nU4v?PTiB3*Dl#LN66dCj0su)|w2 zG(4c0bc$K|UHGY*ZfK~q*8VCDIU=tz!x$@#fp;(U`Qp*YL(IT9uF1Elee5j@E#Lg_ z9{%M*ZA9ni5`6Uxa^kY$*GJfiJ zpXqL;2+J?D#N&#g#bfsl>idp_Fy2W>FCp24T8Q8%DN!FKYnkyB4>tCyqv?hEBFyyHjxR3Kt}q$(=dU1KZtbWPTH` zfp`4o34#A_{RgoT|5{V{<4+7?Q7EIpgBm=j4P3qcqmtR|mgMw~qldqVv9bSlK(GdD=Tf4#S zcXPhK9kM?LN&7xP8o7@hpt!l4p~Aw$BZ|F&A_>Ph8HV@gv^fN3)6ei8tEDa~$68Gf z#JKKc2=6{%urvOTp+?sEw_rtoqUmm9{U0_K4eEultWWHibfo;t^D{_p@eAR46&Tb5 zX^p0UFo|92cbdoWf6oa^oB$RXP-=wN|5mr)+L4_A34ryLPWFYj|9jrcfyldmTfOXr zAV0|^AXonnz3@uD*xm9PPoqsgww*QeJ2~yZ9%FW~>E?ljI1m07nfOu#la-eFufF{< zO460f0C1H*UlQrGT2dv+k=XIJ7g*4-4s-V$Us~2Q{ih2zfQ&(M+J4<}BI74lW4GYw z(w~IKznQ;a;sg-~{Y&j2%cYgt+xUGaCr@LV)|PYTyUO?Y1p9D-&W_<|m$)U`RT(Ub zgPgO6iJn%vsGjZL9jAZ7lW7~@SRE9PET4VgAvv-~q)%%Y9B4Qett`*eKld4p#P4N} zK)%}_tlqs$&U%J^F|W7mqT1_Y>qq`EP&;JGYcf$1Ah(bKi~XB8Dmmg zm7T)+sl66erDM!6?RHM24~eg&IQ1Yp&29^udG>UkI4&bYRJB7z{_|a~W`Nyi(v3;? zk&S@#*Z&kM;a*r#`;t2JwL@^W&xDSz*8{0Q-j?jtzSrm>W!|q-f<9W`^oWN1D0C;l zW46SRwxWZYL`2m7q=?9*=*LA;sx9pGqk`f*bfzWN_<>VXZon`cr2pXP<-L-F|1dUgz#G=nOu zf#~<+e;8U}c`t9Q?Zf=DRSv4qbf_;+7gcj}YeiznVo=V~6bpt5kbB~tOl#AoqiO}H zhxvY@O&e>r<)!p=pt|nn0CX|N!?%Q=l@!9K0HJZ7yxJFy#y5|UQSFpM>mm)rCVyL! z`B}ANpH!0baL_LCk0k5?$3~eA1u11*6gGKc*#xBQR}r`fStrN5$h|f&K3=rUKq|aj z4aRI|^Z*&3oSbaV*62EHy6Y%rf^qr3%XrW!wT+byUlVxI$CRU%H&0K>-oWof|6lw1_cu-7ZQfWp$}6f zB^8yz7P%J$D?XBjotuidOBue!DLwGAwY5k4zLS^XdPkY0EgB+y{C#CEm?uwsD2k(g zWF&hTuDwrzzrR~HkuS?q#GGjnbC1G`xRp#!LctuGv2R<=p(rilD1U>gVVAJB5O}(3 zNoZVYu&t|FvG)7wJ2_70U^Sut4rYK}RvoI-u^0Hd5vRW!%MNDYCOpNU?q-b{t}_Zd zD@__I%EZaQ(a#w>=<>hzsxfEJ%6xq$l*r+r8_le1e)ZEiP-Ff;RM z<}T8nQul3ma(>=MmJ{~LU8LYF+()tJ(vl)5qX+>ob3zQeBPgHXCm}Rq>^Cf_C7vZN z&zrKBsS9fcTVRPX-$FAC4qb4Yw6fpK*0Ybz%;ixb=}^i$xSZ-TPVU>Dwn>=E$O!72 zyJ@CTQ}vpfIGo4&h^_=7qNi0cVIe|vGE=%E;I27u=V~@6&LBao6~c3)$~+w6L#s>= z+}V?2n7$f%`s=6rPS?<2FtPoI_u-#!<|;nsR}_Yh1Z+W1%{8x6B1xk$K>f!tthW|j zPY{28*q6^(X-ZHc@{v5u712HJ8~v6R51*_X!o&CKdWtAVH!jMf7q*$93Fl%{y|*8)vgGA~%t*@VO*&0aDAbP2GZ?vuE%|vEt^^9i6=21n_Ft9^#VU%{yH*1@;YfqLX`l}2xe*I)7O>PI(kK!+9r4014nzA^Y zXk*wk`bQSY-(JWyLKRmOc{s(Sf@>SvQ+uK&zafOTN;zN48L4-hmIar+*b)3c&}Pkd z6UPq-_r?()MrV~zQ$LR(>Aljt8nP#KD)M3U{Eb15?bpLhymX3kZM6bLE2CQNdM$n+ zXa6G=+%~#JMgjke4J$^^19UdG#<4^R*y8=NwaO1=Y=vp1Kl!sTb8r-c%=pC}H_XO7 zGrypD{b!Q}UB)E2uC1r5>8|%=KLKQNb#E`T!5p3VNUDgJ3B@T9ZWkz_$( z`p=~*c2e#E66Dm4IElMSC$c)NnK*LBQ7znR1c?wGs9uifa-zMXqk^_JzJm5#B&qf| z>AB50dT!cCv#%-JDWfL&n*-?FG5G6OuZbpZ<~tmki$ZR8OxhvcM0Y2szEHKb4GIk_ zU4_24uG%h#<*Ot)L6_g6nDO=6(q{XfuD&OljaQfk8$y3>+xfOwzd?bc%wzw{2NUB5 zD_;(KT=D$fdB$l+rL*lL%Tn!C<%tR3Mn9q7{`9#r-0;_>D-^3rEYEsm{Jh7k$~oSE z9yr>;Vvyh^%xhXnqpJXmj4=!R7-m6|@P3YJk2>A8CECJr4j*IKMwiY9IU`MYt52eI z6H|lu`SgY`;cx6XYnfpx^#3qB;QMfcaYp!kGIn~*;tUC4_Ka^*Dv9Hy86zK|1kMV)fv$Nl zYwQP))6J1iEm81B@3O|-6@N`Bdmo0bnMWEPy>R?w$KjsB*wIpNs!j`Moi|Tre{A}$ zcr^atp6}i3zNhhLDZmb`iqa9Y001OVh9UOoIa2M1&Ran(&(}~@H@Hv??QU+O{pckA zr%LPaaXS_nc>2M_8^~zacxpASX~c8~Kflq2{PsZDC77I??0{MFXMeQKnQyaDgWQ!S zmNQbm*~QS{#Jk2@5~p-_7gHAVilT`~w360AXZo%v8*SkwbzPs{vew94Q82+$an^AL zcQ&swl-4YabT}t!!mu7gB%}?oq%Qk3H%tPvHM@VPDph3Iv@fC(*Ohi9-qs;OhA{sb z^fQkNm1g$LN@8rBCW{>|_KO$&bl))r{`Ggk_73g&l1?A<@b91U=S$r~~B`P`jv;I&Fm5o|{ zSa>8U14E2{cL@5Aj+jWux96InK3f4u)HpwcKH+&^=xMVQH!nXwJSGOn#3Q92BRu=` zD;L>>E-TN5H3+Mytk`hq=;%c0G^Kh&Zc?>o1E*8K&#S#M{3$a^MeUqZ8ijT2^5od^Ewc$Mw&3hM3I9+Jsh3|r6gWe?d z;Hw(VY_8ynTNm&vjj!=drxt~NnYDGgFfoWhkm!ONgbJ77u^;xs4vFY9KXKLM=N3Q^!&=nVKg=s6`B)m<<;W&_(orp5ClEI!TB^M2D(ssnE!?>R7FulRyD zK43e0`@7yo$o=tR>T!PK)b_ai_A^71c-R-|52?D=>)Hul4Yh#s9VM#}vchkKL%~Q_ zSqIVd`jV3#duZ7YdlFvf!+J1wi{%Y0btMt060r{36+U7Qb@NkeYo9GGOQ~@)xg0}) z(uawqrJ+<-(@*-6@50MqCiQ$S4d))#zfqt$yI2JD=w+>EvB+t&*CL9bvGnHP@=P)_ zi}v??ZLsW$ua2gyZJ=u4+j>jHCOd9%GyzcD0 zWp>*SOxmC3wZath!wC3SNa)P9R(>6~I`ogyMFDzZL;QS4rQAM$G|d?8N&D8}Pqst& zlo(a1IyNSzA$pn>)sSc6qY}-tn`t~X!~1=w z&HgnIj)0!}eJd$R12KtwWdTjk1YcvIOQDT1VmRU_24!gBBC@FKQy*nkS6e>`5O^)PwD=Y~_CtnhIQsC)K5TH2WdCI74^g`eHH64`EjC z9d`Ox4Id=x`{A!jaKE7HYh>_RO_hv(?tfjH-c>N>8wZN&CrrIM+AY~5BC6^8h0h1Y zL^5qa&GppxbcUGNAzzhMC50H4AS8|g@_3u3$p?<8(=njyll{i=#197p)l_e(%~NMI zv5AsTJ#OaYeFKxLy`DGA#&1D5N8D+K@b1~Lcn!-LUDtg0FuJF@cl(y}Smq@5axi68 z{lqu(ChY=R?2RlhvnkQy%6fm>L8;#f0~iXxYFtLJ zu&|ffIo%v-aJS}#)fQum`I~FJ;dHtxzPYL@rpn99zrPx{Wij1h1JouZ?@JV4lDa3| z&4RiT>;VN-Dv2~5v($5@ZwZ*gCNt;QGbmTRVwAVvgN|WLM)Kf#2iv{Cx;u0^Trs~A zf=|S5g{wyZPTb!&-+9^^oL;!RPc|`%clEUeYU_J?d(m&#mp}2>M%;sW%Qxb&ON))# zvJSQeqr48N87fK)?oc=;oG-|to0>8#tP1K>V$o{CBm+KPg&?aYN=77oLn|0cypEmqFq&%e+kKM}|N6TLeKt*mB7u>rrqbsq<&uxqD)O5H zWuGj0%Em{H+t{M%wgRNCAgf8WUvM5RnII$c37Rwh=)MB&CB34j(9xGoJH4qt+Bq_bnB>v6mE+ zAbdVNypULuV`d8>b$w3DNlGsk*4AhCSk&8aw`y^EF$oF78uNy7@edjHnX8+9ac9dQ3=Y$`K*V!#d{~i=E@N%2 zshk=&Mxg+#Hoz3}ypWyr;Qsp=gB?6`0|{ND@8n`5O~X^GQ}q@~N*p{{R3xCsZmXtc z3r8S-E}%~fakG)qyi*YUOLx+@HoSSsTAdOi#VL0J*i_myTEVh^R*)b`?@=iNumZ%0 zb4l@^RW-7n2LkOLS=x(talS0fJ8`SMa@G~rNX5}X%j?h_(rnjlpa_02{^Pb3hGdb$ zFdV*a17xSxoHa_K5K4Hn8Ot;{_2w+s)#sU%0Yw7>M@XERd@mWdou|Mdo{ zL|Ukc9A*F`E=lXl9wiGYEYB|__F0^ZMq6&>-l*Wq&qr+}cF+0uwhr96u)qIAC?uwF-No zhD71?)>Eu1{^8#8MI~Oq7(a?$RZ{?eiUl$p>^nkkxvp*u33xm&Qu{S@KMO9|j(Td3>xR()4+o z!6x;Y%(<$+Sp6C_(4x=nepz%WYmLmz+~RI>g7kD&r+P?rP#V4B`}he*SKxc_y!^Hv zf5enh%bMYFoeY)lwr|a!B_|who?u_EZ5gY2Dl4L2`a+ZN?e${j5Pe&AIjYMgE2@&b zAAii#6{e|{;1}}bpoa;qMP_fk#flp_<$|gY0~9!jX#m`!*EV|iKKA1I^LvvB@pkV} zRHC)x6y^~0+ybhI)C-dqZN{#LRo5M7TkF{aRc9wBNur;}ow!$fMb1{4UaXAK z95F|mzk{r;K$);dJxyE5vQF%0M{H&WlkvS)?k{;&&jy0k+7uptPfz@FCan|Qfn~1c zg{Oe+!H+H3p^Jx-f0M7T`5~>OC*aIALZ5TY+qhZ1zT)FJYhf;Igf|Q;A%UAx6vpS!hA9&|@t}EwJ@o3~8RIGq zHZ}Qlp)d_BDi`*gTmb7XA8aXu%N+$ikFDzModl>dd^(1mi+;j<5rvVNqL`Sstk#2I zNjDK(X5IchbCZbC9rvkZIU#+L8ruxn!TJ8G<%HtLGgP`1h;MiuZBA={$3u5^N`pCL z#|PA*ljqU#davHHLUt@?qSx^a3T?EAE__3z)ZS?XSNQ zjT1D-9=Bvq_>?(3#Kb1^bw)w!S{`-~iz(Q77d_&!hL{;XSg+h< z8$CTr^z>?EfBBIH6YC7(1n3r6!9!4jv2n&?>wCZA(h7E^IlxPfhLIjlFKmTdi6nG9 z9*=x&dEu#Hze175ULj;Jny=i;evogsduKRW|8vDHli>j0d;==7>FGn8`Gd}i^DzHg zqRC~7=Zr#+t}!Y;S%u=d!iRQ^wTRKEN z>@c-=UA!%xp#lC-P!Oka_#0W2MrSje$>I11JFN~x^PuE6k5=)VQmuMy`?(gV@HL1& z#v^MAXM~dWm*QNa`8+Q;i@M*FeB@`%pb2#;xQ>mZlCc1UhXSSzC% z&X}je4#niu!E@hd*Rk5#6m&`;s4z*4!@=Hkk4Qm3H;AqBJV1O;ZR~-hIhDcd26+|J z?=?F4N-5DvPBPwd@=5X@H$UC zp;Ct0o^{@3{TkFqNAa=`f^NR8^jU)i`*I~xhN{}fTEklk%xANk@(9k-A}RfvB1w-@ z=C;I2u+1bpwA^e)A>z-7v0lD&8N~R^cTWcO4&+K?59H}*X952fnwn=Or<4em5P9vs z0OUEkn*IY=FR8nB2i~qdeTr@wOT9PS|Dq`ifV+EQKeHsJ-nGedF2{N&nii=33CDY+PNTFf^C-?yt0a&8gdVy ziczL;zY`=qG@v=Rhe;RrlBC4;q0pH=jRQa)kPMIR_x^i&Q=*X zaWFX@@>pX21$a&9uZet$D+ANrw~#D*h77V+j`85O65s`%7_wHq-$`)Ln>-zP|1F>i zag5D*W(4g@PnUd-$lN$A++LvEum7J`(_j23_Mb}VE^DC58x6iblv=I_1ygH zJ05zilo;Am*5BaRO*+rp@8^jjUeEayICHf!*jPYUGIFB*7S0O9mLaG_HgmEV!iK>65Wwpn zMz#jOK2IMg)zv#gp}i|5=ZpZV&%1(0&epqq;c8!5gF%87p0mGhs?I=Y4@8=t@rxzo z<|D78!V2Gur#muV5|~@TDV{!aMY@RyFoySvWwG06SV@`77@WTucXYcE-Vw+rnDn_% zAHHsQ2ntOuIA5V3uX!Z4$r&HgZ!O-1vP%H%|CG+JaaxVYr1vn4WJa|^r? zctXEb)3XQPcI;lA`i@tm!p5bXS)}zdq^`<#p${Svu=EI*R zz4H|E*!10wu z10{vSOYFasD400^xYS6dX8mzpy{T*U8}3kHkT$nu{W-cyl^=M>2j z2Bjk7i>&jn%Zj`@9v#g9pNWk5+`KOjef#3qeIOJocCP^LaXmixO_STsh)r)z^u|J8 z!c7!q8FWui4->G6z?%zoAJkl0LZU<4&o&2F@RKaz(=5Sc0vim;H)=;z%K;v z-&A1)*x1H6x~eKFrLK;%Dm|Z5g|Aj!F$oBwTdLyb1fElG_&m*48)9obZ!x@!5#O?z z_vzl%nX5gnt4rcXrlo~=O!l62+n;q;*`4?9wl!iQBHI_YHKhVEZn3rXOYgb0H18_- zJYljpcMr47YClJUFnD%6F6{&9lZ=+aSvmL(IfFs-7_sGo5EH1H_tF2x>UO0Bi z%gfu6viuun$ox0^kyipsm*$pz`Aa-JJmJ!xP1L24&WDpyH@dVsARG)_ z%VIOhdT6U>YKhanq!!P*i50P3^AZYA7xsTT8QYNA{vT0q9TnC0{SOZzAYIZ8N`o{a z-96GJ9nvA)DGbsgCEeX6T@uor(#_B{G{38#_xE}3;tv+1CuIT|zHbN9&&ihQhyr&r<_!2T+}4os(Tl6T+YoOf|kzf0Px zeq+QhF0p$D zjA;If!ik@6Ki~uEGaGtYx44W9vVMBHi<_%g#?Snc9onv_Jv^xi3i3+2r`Ww;%p>rN zyuG0&wKzbpbrEe?wXc6r5j$3{OC8?TzA(tvkWBpD8PF!hI_SP?9s2yhu|9zNg!tO^ zzy(qb^A+;?{JxEA`gE;Zz)HQn7_dmEgWFD4sxCyA%(`@OR_D}F|!nupXrzhD| zzVA1PE(t1WhLb9laXCZ;jK{ep_H~_JuV%_OH0y05Q0-@EX>?w^*}NkG4{?Qb0qD{s z#}x84nm0!7^520PAu)gD^|(=`zv6mGcI2BkKUJ1>LsUL#(f|D?Q~X;TTUwf5DbGqG zez|VYwB;q`)x&47gjao#Vu&yF`t=4MKNUmjEUl0MRR!bzgTSK7;!^l*@9XVLf8+ZH zt|K0!CAFoIPv(aDFjId_+--cZ4R5Dt0V%u|b@iKd?LVe<%{<57OV@HDc+S{-Nq+sZ zhL%FPLVxBKF-;Un78~(Z2096ey0)lX`KrHaEXiqJ{;AOj^rqSK*#m@v$5$iLxo!)! zss+KEIM%d2?H@ZA}S z4x7^EGY|Gk9fAp8%OS2^D_)TGlEG{YbD;W<&Vyd?j~MP1t08~OPP4k_ix{;fK1hm6Ys?SYFXQdAX3901=sAS^2LA*eQ` zlETujva*?Z`k@;W0|}ut?*B$nq#Hu5K^QH1wx~6N&mCc4QT-{sBPsdQ)Fhgn7mjVJ z5?%y;>WCtkONv&=M3G-)-v80@Y3cdm`E+;nslgwK-zDI2A1}q|ke)Du(hw3~Nf#xL z$=lWH>>;e=pe3FW@9nte(GuS6ythHr?hf-n?qHVNY!7w*#I{1G=3z);)v+XI>>t+f zGWe^{w|_P@M+0NXOWrn!n~Mv&n>P#aRqf>TtFPD7pdXXA&z^pkB0`8adVXFTNCZgq zEUyG)oCljduxEKjN=u7AJ)PXet!`>zLJS~;|Is&kcVil$F^NJ-t+pj87NmrAK8u4&J1|Ho4;y*;KEy zV>{ZW1YKIlu2lOJmZEHl;*#N7FDL}=aGQ{xfX?%qm~K`9REG`hqs(Tr)!e+YVx&G; zZ%S=Ol3!q#gC+`ny@)<1$4*je$&1j6mpv@#@ijl7J2mnosKh2p|7aI#?a2%z7fjO( z*mW^om8D$*|IXo_q*$3~a}d4v>Zl1DX@K{C;)tO~$Wy4!{c#?2FDR~E)r4qklT+5| z^=CEBt8?hO=MZJc9uElqO4M(<)nw!ZhbjC{H?ak=lYNoH>XYiiN+>22$Z98%&HF3; z+OyN17kAa7bDf(l9X3-{i-yxGRL>7lP-tc*EM^s!!V&YKGT4Fgarz~moC80k!#&^e z>F<91x5P+GvQ%MG@uG{sNFA{wu;PtigYvin(^ItfNVCoQBsq10vX$1V%-2VC*hj6R zxzNBBrp0$+-hcPvXU9}U^ZntGLXq>SutgeFh`!vTJ`T4?%AVLNP}FsGwg1^=ix%Z6xKNc)6C{E_Q%%&n&AFDa@#U0yD&c)xkU#{hQ`Q6JLRtV zuAT^{-%E?4o}5*i#;AiolHJWAZmBB;-vrZsgZRFM1vjRmj?~xPEvsvG(iqiO-wE%# zn8SuI%An1H4ZPg3f7GSBXjmTySL@HA-q{wp#v7U>LDHDy8=X(wpPOB+a%}YxJV!-$ z?_gu6%Ut$FCu5x#49wb+<|~>cgRJy76+O{mEr!hFG)vc7&L|HNN!^}-5BUGu%DX+I zc7I!|c(IZlz5K|*!SQPkM-JfQO-$-Ks-1LQB8bcLWZLFUH|qunTJ&T5s>%3r4G(p< zR3r6cK626+*%F9J5{mgCVuGn1Y^befd{_Y0b4tdGtMBDj#7VR6uF3F3L1i@oPhPo< zVkCLXvb{8_XM?t#(2<+Tk(02BWVHolB@~ZT0Z;;xiQWSbU=c-2J185Hdx7WQjnlc( z<_)yBrW4!M0lj_=4y&Wprv2J2ZmcRQDs4opDc$EtBn=e>>xEt}Qd43i3{?F$qiG)p zd|%wZb1bUln%bZ66DU2IAl=>mAc}zOjea5f>1q~uc7iy3EAd=g#cdBWo)|zJm=(PQD$n-zSkpS;5?Sm3`VdTiy2zRT-^4 zki~O08qEDNw}UwGt_mwEfS2{7{VJZlZ^txsj7HP?;$n>R?_h{tSbC)nKEC)f7Y|Q# zs;gvV;>B#- zwbNq;4t^;2_oc{+>z6(14f-6StE30~yV-P(rM8Fw_sSD90$f-L-1cLgKyJXz^VrIx zOry%`ZMQ$vpkY6BL_gz*^>qB2yL$jVh=QHe)4_qVrX0S{hWQ=rZ64z8d2Zw9B44V` z>H{T?u+;c+C@=FCp5srGa98&4_CAeY)-&kiTD!WMm&X%#rGu`Fwa^Kw=fe`i#<#!a zj~oZumF~u*#98E}OvsYxJe~P%-~5^#_VFK$+>U8qJ^7w#QCO~~UTxIWT!1e_P)?1h zZ1Y^~&lDw4f=&k43A8zv`mK1687PuxShxGEyfw*{yBx{qs4l$SS{!V_p!QeCfam!U zT66lDnpzzDGlp>6$YHpN81jCB6WtF9%t1(1&AUAMpljMH^oT6NSZrF&_a<^k<7(gq za>bci=0zV|@tEJ6`@^sb72!g~0~PI>#f5=$vMLfCDVvuv6gW6I6U_yze&s?tkA_g` zQHI?3?>zB-LvL}dB&=M%ankH;=Bsez+mQ+zxc=!E0n|*{0t`|=J)I62{mMda+)u&0 zgVGBPU2k;@T@CXegf%Pr9jtQ8r|YwMeH0np_lfG27a`fJoWwkr)iJ(`bG(#Vi-)G$ zagvKgwE02_ZgbN1kI=~h)@T;p%7?+JWzl)x%m>a{q#vzy+L9y&q*O>C-;W80U@j2-FcBr=P# z)OHceV|_tZxe-i-I|*|xOeB644;h*b75@Gbdgt}1WKC=y??zGJ5syA`V7@zivDW+R zkl~lGT`Fa6?YG|$LiTQNDU_Zd+*WL<<;!9!uV2RKu$PdpPOcak=e(cx=Oj9I;=W~Y zGXG{{Pqo|UKyh5R2>2;E3=%|QfDzQYKY7fHA!t?sMGC{KI`TU3_@1Rk0zEttX z@2t^EZv+|xCAPMS7 zQHs%A3r#N+;ra6!ZC~B*xy=yPlIfYewPZyF?!Scbh~Qg9I1+=_GM{g0L7fiI*Zm+6 zDev@i)AjYy5*&!{PZnZ5Q(-x|h+k`6%nH!54`t^s=NQ~r7$vxO6QhRXfd5sN0nzF$ zKhNiQGn`#$J(#XHT^vwtZr#sgyV(~N2IqsgCUNCodP2HrP6Z)fwbdHy{)~5Ls>HFGcA6}i>Tv{=ch@V1SmPj2TA52zDR9Z z$<_I79%;)a79r%{tAU!VO9>QEwT#Zb&WRs$8*3^!4CgUcy5K}7F}1&w%T<|@d-C}K z0C^^`-{%Z;#Y`-OCn_kC%W&KRmW01oIcvG$1%x)n zQh$Ab7WinIPdC}5I1|E zNqe*?UsC^|PiMX1iY*c1>eKb@)?)6z+$(&uAy1VpXe~ z`Abj)b8PfE@RTd%E=Y8-u0+?9`^S@4zfrNoaoajrSuhK!Quk6OB!7D}X10!5{3a%; zEjsD+^&e-czFz0AyNpfSLJwIk6fYc4Q(De?hGs3RE~4n%PHdO^X||$Uj+@cIf@hLb zaCzl=C;i20VIUCw_3)gl?Ma*+uig|9UMTgx0nR4p8{G%T%FE;c+pdUHP`*MI%od3To_6Xs4+OzZ_K%Na15NimRv+D0r`Qq)B7yaZ(@ZB+@I9)h2fEeVg{-L} zb{qqP$P4=Ehb?|d{iiGB=*ayO|LhLiU_r&do747e<4|uWe^uCj~BVOsPmC^S6PgpnS z*UWHxh1@ zA26#w*dRZjy~5Zt5=Vc+5PE-9on=j5gOoO;jKaFs746QL)h1GZ7ok{gq2~-q)%#^^ ze+)yS+2hLQeS5e5Q6r^dR=8*t*-T_Zf^KPLqkt* zHe=?5;P;#FGy3LWhvK$B1#Z48kC`5v;)9G%guHRk?Snlolwvb{D=z()TazS2aTQ)r z{roDkfxiWo(Pz3;eOp8al)`yxD17_f!YQb^>ke zgR_n_A9y|t8&%!EG_!vnu#pX_x+H6UK7Hx30%OF-dL1W;l6?ZV{+#ja5(9LK%>Rh> zEcWhcEBExz9irQFl6~5>P%dKhw2LY%Y`Sy267IzRtw=$}Wf;3&Vq)&h8s5#h`7@s3 zpIbV|N3GMIby94vb0Fj$aE5;OIzDF<`fvAMs4L|cr}^#7PLo4jL;}ZJABo!e&(zG9 zfI-naL$11iA$l`7ceWdFCnE>3y`pG?V;UvEKWTt*n4PMl6KrobDw_?>S?pV)aj+(V`WyJvGNG95R++KLLLED%F zFM~ztiIDNtx2|(yYW0zVt@TvA_5Qd8+oAm>2>p4ETvUEc3>PLoYr^^k@mD*;=YyC~ zM!Uo%R9T2GWT$R!v$INorvfahUdEG9#%YJ+DAP}{C=_8(grnMSpB92^_Nu^@a@#DgRa|a3`hXo%L5z9X;fBBinxTQqqa_% zvglWTBs717kPaMBG}Mj%*3{hi=;SDD*BcX0-wSiupC99KDS7$~4-{~E4FYw#=VOVk zTqk=?(ldEuiQKe%xwW1)dRW~koEpHbo%ly*Vyu=uP}?;AJh(FK!V0To$-hdx%DAdl zgb6*|NFBu=Dx9Xc8~n;F$s`#9KY?589u>CjZbCReOT53_?kFGaw-O3xVo;lXY7v;+ zE96gsdwNI&VS>$u$C&>&GOb~aPZT_(9kA123AybDKicpPk6VFx@1Z;Er%K_Eu~VK#miVN|VhH@()rk(o>;|zI3xRj^ggS%fa5@%%hslft?wZjjSxLYAa7d69zI@%{u_--2#G^Q^z?JsKEV!<7aZ&$TL~1LVZ!bM zH`6AxmpHy4=^2S&JkG6`t|G>$;X-0pKgn{`sD}qRTmMc06x<~`MfGh5mFuc+p?^5g zbaogRax_g&i}dYp;Jf()zkKqCpnEy3ArS@1+&I{Yxi2dJ#P3{qOJVW2TJT}>^Qb+n`>gr^M*kQOLdgn$(ev;=+vXo135JYqA%oaeTH2GMXfmo?HDz1P=^!RH!tG7Oz99 z5s7K8t*c2Kh`f6lc2*FL8tt5sA12@aibf*rU}F)J##Cj@dLeoU*YHk3E48NJaJ{zy zd)%Ea>QwRrFwehge_*~gfJ_vhcL8;7ezwe$>W7!7rrZV529tC3HAI@`T2m-?rfZO* z8Qm5m-USrVR*ZoMC5oR%XnU3O2hc|vcn~L+Q1JKbjo-U(oAT^CR67>Omtvm@Kt4o! zZDsf#lP8U_{-m8t{MWYaI~-Se;H~cuTRk_6XRyK zk7LqLXS4Zp>mvG<4-9|-XInFQUH+lJl3(xFd_#t0LPZBsrvI*#kKHc9jmbWg z<6$kG`AlXm$(`$cC3@wVV7__25~UgfQ^W2m{a{3=VRq!@EtJrj+_bCLyZ-Yqyx)Uz zl&N*zkWF!0%>oOs_P-StHu%wPvE3_Uj~rW0%)eL<)fBwUr0l-E*o6a~wBOq^eo(*l z*Kb|IKHqiR8M(t^EyM|>8-h^7i($W=9Y0v2*{EqKYA91gcK&WpB9rrOE5{cb5iW=- zi~R>eUejVk03j}RSoY5Q2$hcQXzg!MmiIWUq|t)bv~~wSc=LzX&Ql%l{NaE_B5J&2 zM*8*!``&Pno}zty3ER(71h+9X_U94k>*}7=)+`?6!5D?B!w~b~CKQYM)(a&&?7H(J zRycU*t%;MO&_3RbOPk-~{NJrq5)39sj`^wFH_m6}3 zFADc9s@VN7{P-X29vroGLatta)L6NWQgFO{-yBDM(7hBY@E|gmJRLt^u(zroo@uV! zePeJ7EGC{<{!b_HAjQ#A=tw1FM&Yz>W@nOuTH{I&Rvk|ONPCq&!FRR!Q1jt51q}K? zkf=N>*e6d5vu?Tc``QB&j2IJC6E5&VjFW0^P1Hmz45S^2i1`x@)NYOBPIb^keNe#C z$xmSKi}GD%P|`;r0RaEt_sTTN?2!+IW6>sTLV;NVJa+Q9)$Z`1!v@AyI6XZvnR#$U`+P42iJibvn{#Jkbt`8JF4yC4Eite#&kXPs3fIgAj%lMn zI>q_kU*~Uj;VZEe(QBd>!)1C38IVG!D96aIcGv{7dE*$i(7#-om_iKjmz=u$b+Pgi zDQ5OZ0=}St(?*C*AZ^yGF4~e2nog-YPZqGV7Hqvx8gV zfB%vtvAKbF;j$D6WLB$VyHL|xe;E|k$m>FuIVmj(eUaH94d6pb$)U>mn{4-GSHcXB zjqm~lS-r-U7_~x7IFRyTN+ooDg?7odp@8EJy2NA~O`o}9-OakmJ_lTn>J{{9LPyrP z(%X{?bD@FLD)Ob;UUI^kYJ=;CC4(}STr_hgI;!i}IMxbnki`g_|3zb>s1wGwYEke-)$o+#mh3MqD#;trDRV)1X`Rhx`^ZxXxx5)tFJk6Mxz zLy>ie+N(gujvl9JFYYU2*j0nj#6kamxl%5_U`qfNy29`4@2|F+db8w9DSRGkw>BWZ z3HSC_{HqN=N5>hsii#AxS zS0~jljuR6YKav8lvhODKq&nQg{@(6Lb zYTG!{4jE#jtAQi=ZsYW6%d;-BPCDQN)q(RtU1+xYo|Tt%D+_zwkDRxut}CMIt9CYd0y zMy2rJd0T}TF``*U;Is zq2>{?(@-2zr5tu$FSzx#?Q?PbsHsD;Vm8_d-JO55=K53FLqlmeaz*p>%%!F85ASvL zmIzTG?dl4yK6cDZ_@&IPSP4|JcAJ9&3?I%j;XtW=yNz%FJIVk2@%~pho-1OSGk!#KYT;tKKm4z8knp4L#ClA;|203S(cIeC~bO#q2`l3cM# z+oRvSs4Te0Yny)J$VlX#*Tv9!905EMYTIx!ixTF$_mO$g_4Vb9b!C#0L9y8OkHd@* zZz-z^`(m;9dkO0gO%?hgpWtMUHqSaYi6t)@E%gmBW~KbWJazFEWd%oCDt<#QEazsK z^LcCXnOhtSZDc3Nn%zPP5J(X(QjDd>ekNOvHcO7SB26U7Bw}!^P{xOC`-5`rPof_2 zfhfN21l>#N3BI7I-l-2ix&^Rci{oNK=kfC$*wP-x{t>H0?6B06?L7%ye^ny%*VxJg zDuO~meP9Ilu`xf6NX5})ZFzYrmTUHtcd40@?kKVZ_1<-qpHUsl+oPsmi@elfSygMH zX_@()_g0&!^vRWniW<&XWX8A#l!;t#!_|S`wQo+1ETzud|qXY?y2RdV}T2< z6ZTq0oL8B%dKp@7`-`w*KamSJH-3%W6=>PfXEtE~OnQy2DS3OXiF(WFR-NEw?%h&?U^=PRx?BTG%cuWgda;*d$S*k}^Je8ODn ztv7NX*zyEb8*3260>XF?gb@W)(c4(F>v;U(9NFUA-jz{$<%rh0Wt= z-S@&V-d9~T{rzz*oRCB0Xo3iaH$4NAn2FD_M`>LFysueb9`ZfXYWUVd&pPqozfCRb z_2MJFr`?l32&-~W3hUOhQy`bjV=l(bWH)Kq)!J}?ePl_k79P_$C#(KpLXnsXsi@8?*OG(_gp zM55|ql=O(k2qXO7V@r!qeo@au>_(Peb9P~O9KUv*TfOtq^6qh@V4jk-Ny@$Z*wDy~{S6u<3jx=_V6PK*<+~iOj)MlicP4K` zzRU|xfh2^|@_U4JqJ@8h-I!01=_YC@8agT!PwbSTP)t_GUm#Vxt{y$oJ76%_HH}YY zPoxEZJQ7qq9y`^&^^q)<2UX`D=u$t@bT8J`wnn~?Fk&!13(xf%p%uAKA~^b94O;#V zT1CMO;To7(+_|8QMQLg!as^fUT3g%+GhGrLVRP}7p`VN`iaik-P%X3dW#Ke-^rd(^4^VYww zJe({yaZ&>9932)_vfg!-kds(t4mMN?7?w>Q6XLKbLFL4BKg76yW_O&tzM5S<_G#S6 zA}iRfDc(7b+MWpZ96%#bgOW6@>KH&Zrx~RqI9NhRw13T88BW`J_lzbVUK@4zSO30( z9VmqPPTmQhMWt!3U_o#Nc?i+@Zhg(&9BeNA#sdZea1dm78tmITE+7AHCB6#^00mD) z)GkSfT3#NL6A+@E(s=j!&A1B=P>X8r7xYu1!2hyfI*=xj+-laK5QHB;>!0^La(DU| zL6Po>-Zfd*;60NyNi0af0(ND_Qs?y6Cl+%#X%oBhc!bbg-R};0GED7c^tTZ%2c2xZ z68yPM<4ULAD@!NQbZPzp=6$$wQ0y_b8W9l`6Uept2bYcgK*#0Os>lHu30~7dk^DSr z&7~TWJAdQ|Y5T29=t+!L#POv|ka>HuRG9q+%p3@N|0&z|V^_o6{YHRY-5Ug7FB z&CI<^Fs&6qk##|v?l9Abx>*ES1qB7yBYyx)G#1f$0d)tuPPBw1=0rP3o?cuOi6gNB zLI9z$Tqw&>GWit(=pnZ@)||KoKeVy9&h;TTIl+9u31>iRLaQDDr~GxPh=ApneW4#7aZWQFgL2X_%^-qF@7r}N4jWGoSnsZ44Z4CW z9khmgkPSRfaia4+r-DTZaS7CBShiw}-{kuJD5Ws;0;gsE^0RYNZL!n6rY)={Vg_?m zF*1ZypwqMr#q2ASM^c$q&jvxQ>*6=P^62Q`Iam&!saV-)3d$$e@x~Lvv$(OXKKtL| z={>@i-I^x<-oqRHPPj5k*`wHJ5;!k?w{%W)^ioK!^T6tT)K($6^-KZgXlcQGgL8R% z!ya;}n`Mr#e7{~gJFgWpEf?m-nj#^lrN5*AqrymoL)Me#cBRINW(GpDpfxN?!0Rpk zL=;2a{FLMI&DtFDy4trMn`KFBRlalD7*j6d2$3hdbC*RzB{xw!NkC07G^!XBr{Whx_ZaQ*bxh-A=XCzmFNEy z70%^E}$pZN9XJD`;9=#n6p9g{m!@ODQ2Sgz{`U&A7SI!C@k zlS80O+m&nMWR4ub<=I*i_0+US^U-C<{cI5WDIl8J>B!xIgRR1Mr}A`|*?kReN-Dgf zcT}W7w`@<>$L0=rXP{{Rvd3Dq)~Q!{w%Dh0k5}$SEd**M0>`>OP+`~2s3j+41F0wU z08+}{rn(=5JjIk#5gej?xP3m#v*gYo8xrB!oMJ?$EWimhs^x>*MvPL@Wyx2vgAl{g6ns+HG z@Vx5r$#?tiWHfu|RL&lx-?VJ~US>Rj1r}J%qI}S%N%~7EAaaB#!wObW^WF0chUBO64 zxcc}!df(S*3W94X{#>vd4c76OFAaWj+H06=)=_z}Rd-)oh!_j`5b4*K*K1L}B841uN}CLkI5}jnzKi ztI<>&zjA!3E5llVNNvBHsoY5Fc*sBUTa=|`b-V;v>ym4^!d(tm4^*%}%p1_oFtrSQ zl{D6hvO%iG6u-$p)yQ3{7N()ahM`uviAzicJyH2_6nJmT`rPx3w|VYs)D_<|E1BE8 zJ>naqLhf9xUbyk*xp=y#{C+&Ib8DxC zhxO65xOAUUt+hRhxwiRB(U@T9TH@SUXOoOm?vrW|!2R^-1I*f@kFv zuO5F)LRT25_vt1U#OLb#(uM8~rmWKLCcxv)ZMD6bT$OE8E`E9;Lm<%eO_vB9$Pcz^ ziwLrvcNAN;vI@+_5_!M|Q4Q^YtC*1^p8)sHdFunBa=HMbsLtE_UliuQCjRjXcLz4; z{SkbthyXVt|BN8|A4!;F2GB)4Z=)A*aFXc1uc>&UcUK`ooCfg3@NsGGa^69li1Dgc zX1VB%w9idlG=uz%q6xPCO5s7Z=xwQwf6!jmi7XeM-S}G226Jk2Av$)6+T2j1U ze03f(D&G7cdwX9sR~Nm=D?w4DjPRr~EN?8DDUB^@GYA}%kA-l9(iwK}thvfp*QU+F z`>NbMCy-^ltyK~LD&ddr|X4<5ODVcg?vy$6qfL7nEenf6(OE-wFkiri>}MSFr` zPP4M_3LR`yjUCW6{tC~(xKBBss!2#G&N8YPoowbDm`I8UGWFbi=dyYimIS$eFMAGh z78cdtR?CD3cr<=lL#7(Zw`;UJK1CRyUYuJCn%sZ)I_otCbFPPrSXT4Y?5yB7^Vg2* zS{&a6P?Nk}J(sZA_{wJJ*qsh>CO+$Z>7re(tBd$MP44QyelM(C?_$mGEo5(odA>%; zeQMqA8Y@VdyYWK5%a zW!gL-l3TRwL4k`?zce|C+kRbN3GmNW20mMEw#!}}N040oMurH>Rlj~aP=LeXJrY~{ z&Bhx98PJDLA5P>>z$YeJC4)#OM=XYSne#R?q=rrvTTI&lA&ZS+*)*A;Fp8w4w}lna zpF8a1CCa3+9jZQj_=vH2i7uX%-tTlzyZ}On493Fj{NiaG>m}?7`G&!u|2Vb`eZSl7 z0kbs0m5Lwn#n!;#v>K>1JmBuC4+gigk)_a=p7d1xaK=Be#MKveDAP6O&Z<`m3_D2x z&5A&?!1)VIJQ7oagkTU#oN^XQJpylHsIJ8(BK@gnbZTX@>Yz)A=t==1--AupdBTpI z4af#(T=1c}^5j=b5KD7ib2N)aQo>q$WVU1_U=o^DeC|4QAAM@w;Ycz#m+KiT_3W~3 zv_!L*>+$QdEs+UCGsbi3I;`IY#v(c}*G(RyB<2rKdyyb2zeu<}n2(8%FNGGVd~#X{ zegOdLLRb`)DO$m`&xv6E0{hz)D+}Z0F zE?;JPzO|>ZGC3<$T)FA6J|5I;A4?ojSl-Ux3%+S_g^>?kQaI0 zTOxS|SltwD(IDsFK+%6j9)$haP+6Oo$H3;EakI}L#k{Z6^wbw2)OC7-`Vq4BRbhYL zM97tAK5N!DoP?!W??sR#^d(aJ6(wBo^gB_wSco@K3Bv)L2HmZ9g?nd6$*;W|Lq;hb4xg<`Ro zt5^7<0i&COtSf#tCBmXVz2yRC5KBZ@B2;m9=Q9Olp1jCKMBRwVLBagUuU^-)H;$GUbYT|v)90vcmE6dLyl zR}sc^bpsai-QuF8+b_0aMml}=B#`3Ligs|M-+Znj%c~I-DTAsQ5)a>X-rj1i@@#6R zj3n1*Yb+1n)y>vh9-bU{wWK8Jcl>nHPsvA!fDV>mdMdiPn^+i4tP9P`r5si&T-f}Q zBk5~ZDx5u#iEBt(_ANPo+T0Q-D~wUR%MM&k`0C}q%IHH|=&F{{Bdfa%gSOMpG9^_k zmrm9-k7<3EyVu7Ls`%sfXjWUEy&48AUq^r_RxZ#^j?g*Gu@x8AYQ*uXYgdK}r^I1e z(Mn}MRtme23Gekl4Z!*p1-{_E;3R=%FvN7I^FHI|bf5uy1Cu8o-T!K0I_Xz>yKe~B+U9LK{ z{?KNy=D=1NVLw|G*}f!QylBy9M7i=Kjl*NL1Q;dql~qFwNi#biJCC;K^Q_HUhIV|# zGV@ej>zEdqq3*>%%wv9Ur`=ugtWYJ!kuqTQL@fZ!2W6iP!+Qg zIN`UXD_wB11hhf4v-+N1d6GxH7^J0Nd=vBgc)3$$vk;mvHO*95{chs*^u3J9&(>rQ zl}G&g6=5rRit`}S{p9JMXgB*EwO9hAs$74dewPq-aIR>!YZ@FM=9#MCL?~(jGtX$8 zyt(-N%|K#KLumVR3nsJTw)$Slk^DWAufBc6zF*jqUH!greq$NTT*DfhnoesR0h{FK z7%~~s8`ddHi59?J$`cOc(-$D0K$7A(zz`g{Agm5pvGmnh*$dxXIoznKdQJ!U!5#ih zXKQ?Fp5j#D*#7F2NGZ|2H{i^G3PnU@g`t!~KFZ!Tyzv*ylzg{xhkSZ;g8#7K8*uXk zJ7-3B7bHH8?5_3Tqo5vZ|srNdfMqJ-CNahoT4w zQFyrRj%(Q9OLYW%v|`Or1{SOXOG@(}TAp1Bse%(R`(~a?_UPK^T_^o@0z9JtV?XsS zII#C%{mIi4PBsKRBF+uGlK|$A|4^tF5@1#?LsR&+D1U-jOl#zEWGF(m&`CvoO1Rjz zQvQx7MsP1f(YQuWZ>*T|-UJQB3hkaIpyH3ce$z;SB)^TqlGpUw5(mg^5Kdq<8jgjI zAPxEO@>VZ{^7^W%5p;zcQsXjs z|5i<R1lY8}Qv`R8C&*hVxe<-?x@aXQhg`PwQRJ&8AjAQpF z{vS|bpSBzIl>{AU@+%5tpi_U)3aixqtQ?z+e@*-!D7!*xhA3{)Pb{bO1e&zLq0_v# zUk3JoOWDsKpJV^e3xGX$fBPF+w{^GxLl^0AzTV}DX}bIdCh-#n)Ss-~yYlGsq1Nl@ zi*B8HnvX~zepn1(1tNSr{_@wj!DcCNVX%i^?-!o zPqXhjW?&e0>;w@?7*|{WyyNN9U9z6mBop%S-(uH*=l%YXM_4#IJ3Bj6no1wA4d2{l z=r`P32Ik6#VUm}4-~HfgB{X3R_l&-#&N1)%D_4~}52~ToThV1pYWu1SO`zroEwI*o z@cTU9+ztJ%TiDpxSOJ;@%mey&&w#qWzE11FKMLLY9nbHwhmA=t5E4%h=KW|PMPeER zsph~5dK=1}rTm&1>`baa3RB7(T9SJ7;p%a+)(yRUfzth!ZVUSek18^M$co@_l7Wi) zM?x4xGj*GiR30Em{S*o3?ti_oPQ#)tj3Bad=dg^jITzk0?b_e)5?1g`uaFv1%5v0l za9}^b75r<<5)p|3BAoL73+>vJC!zjjTijZF^P!ZL2)wqrqVG9{=vd=cBH zZHO=aF%&-pcX%H!jzNiQh+5!PcNt5Mo~-C$1XZN{@%nq^xH6}Xm{?k(Y;JA>Hi`OW7@$4( z1A`P57SpM+W@%+re0c%9A{275n;_NA-n4~#xKN9n`TVd;{(U?~Wsb0z%}5R@s~18= z!v^l;7cN?PXJKK5Nd4Ow-~~#v znlj3iKO*{)PK$n&pRCC#MI&Pp|Mmn~r=qd_%&O>&E0`sbNeIlnKk4YmKA)k7gfFN- zeBlv6i;(VM><`A=ba@dxninjLU$H@2qGuM#cPdNaVF`@^-r@HWQsAW z@3~Pi*c6I9Kf+Y|y1I^47elRF@?EBz^9Id{72$4w+h15YzA;zEVCpAYl5Xs1m~gbc z;<&3Jfli1n;R4CanydLDx^CZUh-(8-Z?A|1b9fknWtAnXwIw--|CXLKRlp`=f@_S3 zt;dqXuRoR>ulBdr?KDwQqMR2=K~_b^*_UUkd=-&=?EWo`M7soa(5z}rWE@ ziB|yRi$|fqhR)&-Qq@rMm&|hEoEz~)|CnBC9ey++dMP);{o0rsG)$(3J4Trb_aJ;V zj{@v*)qe$+W(@Q3Bnc#feY5nAlB?yq<3rec(r zFJH(0-iFJh43sPym8zWSRApRK_wzLhv!~Ac&ij=qL~{E~MrI9R+Up>CYHq1w7>)BB zq&f+Yg!xw~jr}W}X5}R$RR_G4EVpgPAw&5TJCrnJ#K0VovYehwtc|$&&xFM+g^gFU z1h%EkxeECQDNd1@3R8I@tB5l)0aEypa4!^0@@(i|I%)4M_Q z|5$tLsH&o_|CeqFLFrUVx;vDV4(aahZcquSBS@!ocXvsbbR4?7LrU&GsL%6z-*N99 z_m8{Ba7dkV*4``ToS*rfYZ=D6*cA@(G5g~a4d#(Cpy^9IqN9-oL)-^uf8u8~W(dN< z$Z~(AW@Ab1fPc*@h@^ur>MEaE9X-~8#A<*w$ojLJ`a3GJNnz65R@8)gIDGlav_hUY zdZND`zD|r#P@)X1g?ii^kTPrkUp^5!-fYH30ZGxYt%&dQJM6|NNfj78Zcl>upJk?# zEWaN>p023{sU@I;8-RqJyblv$A><$BTuQ$Ge1{h1G8(lPjAv`yao{V%)Z-8M4p{pi zJOYkJByrKhebPzHoch`KDvTBO&9DWLK9E+p9MoX|l(`+LWG8~+b#4II}{Fjxl-vU0uH{{LuDe=Q$BK8HH-dh9)h zg5tEU|Gr!OB}BF8uNKiCW9qS_)y~|jqCX=ID4Ke@_LVr3ZQQVcwFv&7I8CQ6O)tsX~4vA|fL0_ouxTCWCQt+jTxo zH%e&0(YbXz1E4VtWCNy{?>|rQJU5Wx7_Q}wtkpl_#j_Z+U}GujaGyaIKtP>Xa(e0j z2<{qKVJz;h4uhCx;JwJ+^(YOmiuyWRy9#+xXtw=l1up^wOH)w5=2zQfHzKoJDt?Tw z$>MUWBgg^$`)315fKyTn%iz#o!N$-!Q1tZtIJ4rsqkL|ZQ{a^29Qz{*Q#N-hG1sJm z39G~%s1f^f|C;~XG&aQ5a>DfcS|$-wV&cF=Z)N7NOvj6ws|IDuSzu!)llMCa zC%g;hoEmm+gZXGcY4c<%OB(bphIISRKJ&U9A&svh!zl{CI}l-IN7Xpn8?cU=-URgc z7cOL(Qy>4MaTyk1pV#@XWK8E75%e%z1p8i+1Ylc}MLa3;i`_mz?AvRGayTeM`ODSX zyBnVP?t0@J?Pr)I;Ma@1nbCUW+2ViwyI`E}_sq|Jzp#T(A;A z?{axJ3==M)k`uhmglhNVfs;&-np776A3mVL}4?gZEz04vES$A*!fP9&3_KO6;;L$7#Dtd}9(xiTqOEsqWuaSS&(h^RnzkXUV{WFDz$fL?_3vvYXsGmGEz8hA@}T@a z-71~i!O%orC(0Gt6E znrB#1PXGS4F=p5lGTTi0_kU)H{F*BBg$0rqXk|baqniE(8;b*gK9En#IBYXUe$zx%(OUg>qU-Dz1y)a)TY0p30Z+Aff3+qF47rl_lTDF zf1I8y^|pF%B$M#2xA^lQ2njE)@cINuU7&a+4;fKTr{=f(s^-u%0YU&Yim4+*b_xz8 zP%o_f_3N|2C_Ufji-7;bC~X=cWl&CRGI<@Cks8;)Uz7>*uf6=1f%NGFE!VP5wZArk zuw(|s93&+-Zz#4|1p_YEE!w&*sfL-?XO!&fHH-;DT23buw zAVvIIQ9Trpl((mQR|8%w6Xj3fEPOxcw_Nb3<3`Al_#0dQl<^5u9wAxTF2*DrkH z0V1g^m`p{J=mg&Z4Nn;^23hGkl3Ww>??<~llD{!cTl{_Jwd?oHF1;phXKkw9SebYo zc0^|!q)15&h5?niFO-EIQaCS}v<{qj9=e1T zI0gAs8!6*meEup7oXmdCniStv=qq)D#wMZkiE3i?A{{+>s{f#dAWKpP+@9I;W-#gv zsnwkPOPd2-p~TC;;k+I6+ve8RD)Z#HYsC^)LU6aErc!Gq1|5iy{e5rgqwJoUBjYw` z_`5WFq-%lautM#7on-SvBjw&gPabo#!SzCd;SP_&Hrqn5bmHQKjR)ggO`s!s!c0r) z{=iqzqCo!i!}m%L`uU%gJ_ofbTZbpjwTD(sR&yN46` z7N?c}NXxof`rKPfW0sYz;$JcwuH@GOm39jr+o^a21f5KPxY-pq?;ZM>AW*;}jEAt6 z6Y>_2B`YF1Jj8I?+{O;qUSNp^*4y%GVq)JG=;d6v+@Kgqc7>JW1Y-((WFN;PL|BW4 zE7+R_3caF{Vsm|0K0`p)1!YLb|FN=82^wuu|_}eQ*v?J zlT6xxI~mPPhjiZt9b8m+a9NG0cn&zdDvbZ9)BAG+vQj=WZ|Dblv)7Ed+&Br-V}{gnSG1i%x6S7-`*Mv*?+LX6?IL9vnmG9 zw)hq<;>rzVsp&1xnap$w7HXIpHQ~szjb9oR2*&oxYGoUZJx1=ucXmkPhF4?_%!JP@ zDGre->g>;(IE~Aj9vXPaX)SscAHCSJNk#G~CzN0qp{%OS=STF;b#e36QQ0zb!YJHN zsj(Dkx~iB{jjj83KL15?rt+Kj(3OLyyo)Zz`CZh*rGXbl(Ox?5UPf-kAE#cbV7Syw z1?(qZqJu`n^KIDlbW&N~z}uTBnbXG7&Ed_?4F6txOs$~20Wz!Th51`JNaYyONVA3! zcnkekjzI`V77Kuys`ceDu^sf)zZiC~`zoq`v_^7&-u}E2n{Xny<0|G{u>BxLJQ7S^_9$OB@5vZV3UInYzFB4Wc## z#TgJWqvDvOQhUAI~W^Hx}2R?BMwMC~22vEvK;O%r-DZC~XB!j1rYgxID; zR=QxFhg-4F*h;$-Iu_&zU=zuqJ>#n+;v!D_7&$=7W@$fIsB>8ci|dC|P2HY%-@Tvx5=SRnIP>J;$zwPY z;5dE}Yk~p*(%DtvgX(E@7cfyx13ot0LeRi!`X z{CsbTnZL^3`PCSoMHJAH^=MW;uMVl#*0pZRpf&4Km`Lc(U(Nv@teYKPg`x)6^L!Pe z>Y2(5!YB>^PCpFDXY#?l4im!(3k!jtoB>F^4*eR9s~VaeM$uiNo~@6wg$laX!z`{= z`|p1Kvu}45%;jCaShiKX8q*Vz?+GVUtr?;$@UZR%a4k1FkoUp)#5zn`($=(4KDDR1F zjO%1KpGgB+FA?2BYUWHiwQuYGQ`miz&B-YB&422%U@cSk`CG;D_X?T-y7i7dQ!W`C zj_z~9D4_P3pU*p}sgovt8{WpGB{toaf#__)C9t@w?ruc>q6PjTv&aE5&eX(cO9k1BP7f1 zV5_PJSrd42TT3H*@-1>^q1#M!JUGZDv4HA$9^IYK+!}2@Zb=R5?Zz( zYOWQ1i<{U7m+<^b!-W_W~)>&)c_HT$a%Lb<(16||^9of8| z?escVE>H!iqZtfw(-i5ncyk_FE9VWc%Nz?lTcUfTUK`lWqhH)~zW+wZA`T;F1&<=c znNrbGD$Hp*MTKy_1~kkW=JoFIyirw;Z*}9gV5#>;VCt=ab*atZe%BR=>7r2No}zFAoJ3Vp~$8KxsM8@4D34+L>-a1MHnYNlfp&+ zR(eUxp;%=JyV93e_2-ruQ)jfbqfjY-&mKn+D;)9kVnSMLsmh_+?R2T2E4X+-QxQGP z_mw8&Q_Ui~Iy+t4q2*dY5u*!-fM)uZE_dKlk%N(#)H6@AFLXYqqd-l<-KrkH&N;T3 zW*D$hKMq2Z$-zXKpYd(dm;2X^d`{dy2Q1#(Y?m{r$_iFj*841Pc}z-~jkeA>6Xf|` zU|&G$GFqSNGTNS^lk~?fL@0mx-(WvjDBv8QOTW?mRi^P0JOhjjxe zQs`d_56gRZLAAJH-MLgKZ0@3TO8~;3*MWNq1R{WlAoEIdx8v1PhDEp2t!dDocrIk2 z7ryGL77zHo@A+Rg3&btPUnZuX{=|HaqvjU^z|83W!hw*ujtr4t`?HPy!kL?D4hqfP zfAQsJ9ZV1jKy`siJ`;^IUVwD_UKTA2dtUK$?XL}UF-ZRw6&?N;;Y{cJ-CpFg6?FC? zxK7LVZaltr71(49ItEreHXz#)5MVj&L{Vcp=X`!q0PH3bSEzUW6n$uY%_4XEQ_T1C ztT-g!;y;0r^Pkc^h?nff;QxV-Y{NR;@(5AuBT&iyWjgyXGFFo@^Aea_f8rxf8bit< z9YRvlzk7xNJGF>b8v^X~=_=7`X=#C4nMcZ=E;fkiNnl1phPnmnc(^ydkSRdGH$~n? zcs+l>cTP=el6Q{kb5uPh2O7`Ea8<6H`58)fFN&^f2EfdLa^WIr!o)6&fM@=8m;@4A z(QVyel^Fepzd-oIQS-SR#J|UF`z6*CW<(K!%!7{Q8$L21g$ZvFeo2Xy6iYtHy1~sH zOOt=MjhPB#Sc%5N_>SNu=3ALXc~M4BxZNa=#@JTd!?UGnz>JX?rmsUY>;cPta^@LLVP7MaX@oiw+%a`({o`Rw#I*IY}JQJf?)C4YZFW zn|(cZ(|58+?-|(mYyK=1lQBz-{yRc|O0MF}c1279Lx?BdsZJn_iCvW?T#fOOj7HDM zHj>wo&IiK1H-EL#e0JZ=Cx-&$O=37cAEC${5k9tQBS^T&fnt4+!cb-h3#>#-&zm2A zBj)(~J(V-Vs_E=mdOn5ylY&pPIO1s*R~`R;1+@|#=7$SaZqRjBmhZ6k16d7L0?3Wp z?bNULf|^u=V#R#s=ZoQboI(z47V1x#{XtOP`M>Qh|5grv5&){Ip04SfDHaH~eyG>y zd>W`xsMAM4L9gcVKhlu-5(y~iH5%P{G&??8&niT}2l-L0zHdA_(;BN4X@%m{;PHKmhhn= z&(zk8$5qX94hL#4YXrXz9fQ2gwnmJp68WPLTaRbI)@-*Q>DbVPM7J8CbE^lrFn3! zHgES3jz~RHP%LIZ-h7xJ!u_Mt08O4xgaoNibuUczT$NcKLo#oTe-0(3Fh8>tdh|Ss z($O0#%)2ys4IQYms&BBUcc(bhN|Uix-y}X9Wpe+#^7hpr4mjdmayX7@vg|tyxWkMZ zQFMO|`|+tcQEzie?@x~w-Ih&G*SaBd3iy~v*o>jQAKkE7<;x-l1?eCC`CG<@8^$vv-Rg(qIgg!vxj z+ae^9B=*1$?oDXN8)y+n(qbQ8sI(1T(Z`RKNX#W-F*NyGEH=?X?v=6W@%NoZvpWlr z!ra@>aPHe>=$KF#Y_-<|iHeSJz*=vO*~Ud`4!#KfNZ)_BU(q)gL#wk?f>3JMH-gY5T$k{L;Za2+waE6dB^$Q>fp_+w!s(3*GtI# zJ{&g*zfFF1kUsV~?>ChRc3$izUQJw{%IH0!L`>kG_POXZ;{r{ySg)DUU1v+bkvX{2 zvTNxEa@F&}ulCviI>qZxk{sZCb;ZnTHoFoa+#WcZ-%fnBPFtK!&igX`Z6Kd67bhWg zMp|$4OMhlxdGgq2WBWb|)(pvX&WgLI1_{q{<11~7{PeJDx=j;%&C2upMKY!|yyvvQ zjk|F_DCslKe=)xaVLGn@acw3b4Qh@2k9<5rh^hbzmsw@!xEGYrdMdg1R4lyvOiuYXeD4w&?)n>E4$`dXRp< z-(>RJ-CxaqaW#Y4$CODHm&LBXp=uxso75?#EePAi%)B?i94hb&Jfwu8q^mBin5r_0 z$nl$b3;+iCBm8!FALvih!5}Tz_L#+0rz$c!F;*K{BMoR#qM@CAROhGH{HL zPbbXU*(TY%4NdTF7;{O&=2LL=ku^?Csf|^!iOTfsBHPJq z?@?L+;-_47VdJ9YBSEN-o2Ej@$)RT4xhdLbu-)!TIZ71cJ>QW*u1v(;`HIsO&Tbd< z(h?1TzhzN8)WU+(MpKRDc5p9VW!vYfQ*60*J?R4sYs0yGMd>*k&L1?_;?}RC*~fpc zhNv~%RpC0W215STwtoh`jnGKpbqQ4l+ip%Zaj65H@_4Z5Z3(6YG!ETVF!y7p9c=wM#)J_Y{@s*879g%QD2o^B8JFM3>E_ly^N*?ZKT)s{sd;5C;*r0uwS zKitO!q_?SWCX4K7_{aZrhv!ZLpBp2j-d^Z_6$78e5bk_?R9@>^+imA3`Aa601}OhxG1-B@DlKh6=e%lTE<5_U=<6ruJR7adPV2^@m$7 zTJA~IjZiO7_p? zx|veB#$q6-`Xy(3m>%g9r~t3&v0g7AAOJ!#f^wy&b| zZ0(#ww!KF=;Yqj=R;8x0#VeN6^vM>!DLl#W#W^f+Y!(|kQ&zKvFE$x9`ah~zH7%*- zr(V5_AlhV>m%-~UG$%wg?TUVuk~WvqB(Rnu9^;T-h71!NX9&)4tk$0VnF`GSipp$Ra ziSQ}PlvFn2yH4IR;A@LKUNWn%txemr01iQ)|1orPvH_ffno7kvti8~1%FNJR1;=b= zo;XT2To1AA%Hk0O-D}-p0av<$j<$rX#(gVDkx=%^ifTc5KLb&j&FJBkhCYN&)BRAf zNUh|IyF&2(tbKaEMKx|~>K;lvV%~M&Y~yyNd*%=*<1FzdY&c zba!$>130CodVAH2+j0L}B3EK%vizCF(Q1e6vi|KF%a?7ohGl`|S$0#FtsL0{bRvUh zGqkVlFYHPnep{-2URpVsQu~UEc}pu#I!<%kh@ zruVlGfr|XdcE8r}ZP+QZkg92!*Z3y%eL~ujf)wg&nyNt8$aeO@p6c#=G16I zyjT6S<@xl?@#eP5#CY{LQ<*4>p(MM-JFe@5>&tVm)if(3qli>_ueMsFd1{YWS43r- zY4QU7=X!3nhi3E9zh-gUI`Vql9QkR}O+HIb5E9)?QafCI5}GYn6W#fRi}du9*m$qSlJ1XP4Mh}fQy$1VUnYsb#kY%J!>JM@ zlbT%n-D$0r!XWLKMwl2FN~E$~Hf`GEF+?>;-a_u-iE%tNdK z8J-9{y3CJsV41IZZNaYXdkOp0((vU^Jop*xFX1U}j2JD7An z-Jat@Plil_@+-(MPtrX(fyVi4m><&E&-XarQD_a_?ofZM)* zu-_3P`9{M>0P3k_Q2~}`l_mI7s0h~%*Ne;KcndTABxkfmY|Ln|S*2)M^(p$>!E<9f zG;SUz!CuX)L)^gpg_odsfILFT6~&m)Y)$7z-^i2I*rERwI3Aq0L!T>?bQ@0_kNr{w z&@67#2TD9O)$vLU?<*mxm>GfCr!1G`Wf`q&YCg9grUVU(wt^1@^6Rc{M#CEAY5sYy z1x2V2de7o43 zzXy>uAE?+#>3cU%vE|ZkCbu+^;=pCHifzO7d?aPddL&-xBzM(C)LS{ge0Jr1)+1TfYNGOOe(}gi}a$BYgN_A>NwQoX&V*7BL47!&MYDvnFql6;y z7H9W{xWHcq%`oka4hc6p^nizJomcF^7RyK~-u}`MU(kN)D|j_cCXK@q6>k0r(`L zSu+UxEN30FxIOzW&zICt8&pzB>`e0Ey7HMtir0qWT3*zDOS76i&cLJ@JjtVERR_Y= zKX(;0ZR1~}`E1%oT1_{hx z^AF@u@uE^Kd=3c4A4BWg&G|7QoZs-N^2xFM!e+x7C$ABUYv!1&s-YMV%O9A`oXM7` z&8Yq4t*)d6P%GGpiM`#6V0}p`|3k{nMvn1D9NU0Q-A>_y5?sw461J%x!)YrY%TlHJ z_7T2&<{)&JEZ)tj15XR3d*eyAC<5W1a2E@!zda0Nv1h|XOQSBax&y0yn9DCQdAs}i zUE^`9-}+HgTUXO@tF)XPx{AsaR7_my&H_{lJkF+?Cb`1QQO82cy!7mG$EM{@4;b9Z zj^7^cyb1Ife7`Kyo1%7p4Z6=4S%kUEL z*F^*yc+`{45c5H$zfkT9kkzXq=IO#B`~SE^%1w4$3QbJbgwlq|r#-{Jt(1mr9be+S zJv8Ng$4>d& zeRZgmAWV1P?Deb`cv>!Y`4B-5tza7&dmXg)FUt>HQ1RaP$IyUDSb1!^0z|7#&Wj_d zd|vLaTgW9n#FH(raRu0y%1Px7LZWe`PeeV(`=VZvA_zh))%nU^H%Mbpz3k&o#^$pQM_mzxxEWpH|c|s|`iV6*DgrF#~@BvRel+xtw z-kmv2(#JzpRQBZXJS}w(@&8_oh4o%~aQbiC`hXh*Go%ap@D9c^2}x%GO~Fs{ z__L5Z#sR+!zT5{6H)IwSC-6i-YHFdLlG3>JD|~lLOUqkNB-m+S>NXgS z4S#q+Dy4DMa2hmgowZ|jcMTjDcJb|Ghv+9!Cb>|2%8pxJ-SJ2IC}_!l4~doCV{Ur3 z46rDPPd0*!0Eg1=sM=JB#Ht~-x3!j*Na)zHfu^pkOG@iy&v8XM284VG!^Q?OYHt?2 zbjm6C_EW+cUtMipp1jNJ{MW;m!NqZ%?X-ZrjOg(XR$b$@@y#)er(Wg!OY--vL%f@t zX}{Rs-=svRm$jsCm?dKbrf(ag; zi;02;0R|@uox=?pTG0^Am9zHCCwh^_h4yB__6-{8A5;29sbpPBg<8_XfI-Yfl~geQ zG`MNjw{qyXBvcayUk7l5^Rx16nQ7fE%37`(=!$*ONYjKP8160F`${^Q-`MAQ$yo%R zdZ83B6jljzMIOm!U(@~>%28Ez{y=ik_Bp6Grppa znBh&ww|S%ih|_W{a+V(@a{1SS5w>g!g}JOTz~zttXZGgs6S zFesiz`E7fs!n6>ZX`_|i^m4v5;wrIp_{!EK z!G|^pEv2w+0gDV{U^g!=##{pXtHx`~1#@HB=Gu?B5tK*DS_c(Z{ zb5Id5?=wwLVx>BO#`Py0u6?k#gu#!|NLhk%F}cB$)kz^YzKpU(R;`;q-dQ4eGe-n= zEua$I&uiKL`1`X!;MEl8*YxBGU$2d?$#%($*u|juIj$A-l4cUWrmnS3L85E^SGr17t!8wU@mucnS#ZusGfE0sd62Z!bxMg)QsoOct7zDmV|{5fhb4tY-Fehg|~{uo>c zqsfYX2Mk6FB(?cO35zskO}S=hQbsMGDo?Lb(d_GIyZg`=Aq$jn@=Uw?ijr*;l9%^N zJu_7B+#Yo5Q8TAgbqiYE%GVzzxUJxA3b{D#?G1hJy@PD128_A`kmzQ+-}xbe&kj*m zu03aA+UZ+WTrkf4#`{7?+}==7u<8TU`%8BiE}O%e=#s}aF@(wAUM4=|w9IUTuS&W8 zoJ3Q0x^<<2U2NAZpXLC@h+?u+s#fh55XG(sgofgD18Dr!u#iYDos*hAo(-Xs8eTT{ zqHk)9PdzZ*?{z2Yh^^?CBxXT*pE{E-Ilp&n2_53H&;h5nJ5HNA7opmr#y~^#<-gOgNi*oRG*UPook< zypkCLA&PmFo)TG?U$=w>MpE1pWjhzc_I6qpQqRTJ9cqRcjlZU%oZPj~NCAdHdJ?|} zD&Df~Zfr~fjzqe;{Hp(WZk=A20(NTG9(NU>Q`42VE#)9AxM3-kulQl}D0Sz^ zb>7&UR8lq!a(Ebc5M~4Eq#Jr@ze`TKWLI#vZO&NCdPGsO^&oV>NsQMkO`e(2 zSu?~OV|ZHRyO-U=^U=0nX6b81Bb^47jg$|pCVi7zj9zL{)VOC!Z`Bs-cL!+p#0$2U z?nKwYB65FK$SW#H0^ru1!+uGfhv&zOmmuR5u8s;K8Dp8ak~Zcj{l(L_3Iy>^49zj_1ZlNQ$sG2Ix4Ig z-U9cI%1>F*rg{l*m5a z(K&loA34vjRb0UrdNM7p@BwfzV21&ua5LlgpvGypG!*)Ru5Vzk$nTn{x3Fb2u__{o zbp3W=-y+o4jK~SaamaF5mdJ=?Fi$gnb7ADn!^*uCzpvkDp@J$YQR@7>H=)WKop1U$ z>*fmP>d>EO-^ri9$L8A6XGu4$X>n;wu~vT2MAn)6ycBl0YNrko$Igi0ZHzPE?$gr7 zrGDwtPxLUxhR_?`_5sR<_uGU#0|u(H<)&!EULU*cM7NQ3hLcQGh1s1rQMsjzkosCa z7NsYcC4ZTe<74Bp=dJ&ot((KN=@X?zb&Krmwl`XAr#Q8=HRnM$tIC1pSH~yCCD}#z@QK+7H(Plx%Uq?lVWFm`z~ysm0bw z6+bsBUKRxH=fZ3#FeAFs>y1|Mz;ApN=}0l+e{2y?Q2xpcqS?OMo^7%u>P<>AvZ>W6 zG+pMRT{HvQp2h;SeSyh-VoJW;)oA=kq`@QnRrifdlJ@hBpGieL^LSFrkyreCuvaaC z*2yB^;rVwP?k^-l*Di_9SHr4!#}Iy);&y{w#xR>~>2ubtcrdl{;tY~gqv}4w)+lV) zuh`?fwJ9`ls5)^!Bs9f!$llW$GJLsQ$opLkE9#5nUJ!|U74?Am))y_YRznI1who+W~I7LAuG|C(h?<`p(1aG zrYyf)zO)t^4oXZQ)R9;3HZX)wSrQJlDml)8aA~VRfS)pdV?P{P>d&uHvzL^f@zj1; z!maOTYbpyS2ONfnS-{5~O5mi-YAjMK%gxTtj+bD!pPZa5_q^N--y`9_y0g9J>TqF! zYV+BbhthW41vJm3g7vjVsRDeL>3Tr6VB~CbaP-VvG`o$E$8n>p9kKmxx@=d_t$_de z7iYRsQvEiOQRA-N32SpF!T4u+X0F;ykijKAuf2Gsx$kv^;Dmh`KA+fcQKI`T#N;zwhLIP(hruPI;$R#rC+~$y()=|;PUh*eeE0x zswJ|C(Sk@Q{O8u4(5C*?z7Mx(n&?VLp>1(Xn~sVk2N`ecW~@96)5p5jF|MsiiI-%) zI>rZ+9MmGt_Qo7J*8o8v`$9m3QM8y)o=(v9sW*Rj^JkV&ko@9{>}GENUNe2TX6{s77;%5OM{`l$ z_kUxci+}*3Yjc28EmZ7m#h6&llx{-G0aoo_r^u%TOwx|9)H9nCtQbhT>oMRk7%E~- z9ucl^O;Dfp4+Dn*^fj3JA9}prF3f}FyYqx>AI=&A^xVZIrm=q#z^<4Cowew>HS2C< z4^Dpq<=z&SmWD?Q4fnr#g?ilA@k;4Rvy;81l0II-@l)cBX;2vmrFBXX6qk_zN!_Nb z%D=hXb3qzLDkz1W%<=WE5RPc^cVGx_I0^?pt15dLTA0F3`*GaobBk^Y?feK6U6)DQ zgClNt!0a=PLwH)ZsjvHVnYG-WI>gX+Y@4Mx4|zmQa|k3zaN5%ilh?`oxkImo2=~pR zuFQ-Vl@r4Tq|Sqs7nN-ew4XJ&Odn)zRH#n(42m|sT?KRsiLE>k;lXR{#8wTN*Bb21 zQb>`$H#ETM8+yL3j}O;uZb#ZsOFq{+!1-CeX`XwuBi^&)-MWPN^v;UN2?i4E(@1~0 zRtP*6$-N77^N8y}5|{GsnE{;jX~-(97t~lO*=FE>;gwLhmrT%M(6yp8mWrG|Oel?s z-mFzDbtK=xwE|L%Mtmb3S~yBkS`oq{MV*Td5Ic!Y;vYb^StV&4O%l;jIP$qypAT?R<%C zJIi4h;s*nZxP?XXdDdNrDXrkAWnNLkizzhl;MwuDg^L~SluMt?GDX_r5U2VW`H8Dc zA5h-4nDV+7MPz=&>DQ1j+LLrAt$9Ww6|LNGsve)#x1?<1?$Te#r?1JLjUKd45ulwC(G2~A(ztjG7It^qY` z`#?3c)E1HQeZ<*@jxx{R08M#DuOews# zrigB%670%{Wd2GM69cam!TNUf-9UE24aBON6&}hLSd;6`^%HmKS>eb)prf;y*1w ztmDCpLxD%vo)|3ZC4bOYx}`iGx}uhJJvA3MU>x!QvBGFY^W*az2_lYnAuvu20t z3dTtDn~7x9N*40-J@De?bK5KFT*Q{~1}FRod~in*iK*7erG6Ou-<->~^~~Yq9-ZNd zFTwUeX;;Lt+*Q^zIBoa5dmU9p`ww)1C=K)eEy#$&seJLkUtC=>Z=_)N9MfjA){@2` zrmu=&S7uZH!(ma-1G0e`Vj5Jy?FG~U2Jch!(*L1;`imMMtiKwE08PC4-$KuLOh%%z_)p`JCRrAeREdDPkefnEhM|3oXSLDtPl0Ey>29KkhXf)h1!OC>Sj z(&PNJx!kQh>;Ww@_b? zzMwy^m{C`CH8OpaD|7-;=xH{Ifr|%o3c5JK?1n*_mn*v`;vZvrZ_if?>1DA~a!@9D zwIoD&MgE#2Nn9D-+E~7qiwnE^o}9uc>r5p-Hlnns8oVJ7LeJ-G^VL`gFgLGV8XDhx;tURO?T=hh0Hqr&Hyq z_qc+=4wxQi?kBJR1bfE9|62Z^JclBnrwESEaEbGARghBs8eMLun9@YC_?(67g*dTT zO(5+Rhh^LF(rRw!$?6xz#G;e6XTR)KY^m^c&R!y6O6E^YeUKGB_%|Gk%@?=0?$qqz zeqv@eETUXJe0gI|m{(tL(vZK9@&=|dE_Eu_00#`44GBvYKK%MVtAf_rN)+6;!kGla?kpa2s?#>Pk8lzIk3OR-z))Q| zl5-+Zf=f-H{T%W6_)o6qk(+74h+L9#p)fZ z@`t|9u2ZKdND!KaUBLD79pCdje{k&Mp391mZ$2{;m`_Vd259j2L`W)bycBSS_-d?W z*+6Rmu4UD&bv>CqZdzQ1o9TvPf4s$j+VEa`2Ni@t${$8yIy!PNTFU3XQvLP#9Zx5z7|(nf70%=OYkVwMxIRUmD0wgubudSE_qZs0_rk&H&LC z6V3LUA01fGcC_goc<>RR0+ypHt3RyFlD6s26VDO7|8@PYT>S*byYfFg3~+s)lRNU0 zX0>HYc+hcU^0bFGw~_!p!$sgHL<}l#J6qeM<%(1{ZX)`H*xRHZl>oDx8$CA6$U+iAq$S>O zuV9{XPGNU>ejCCFyDxQjxa{P0%~{aM>!7OKxDNq5^d`QAyYd!b=`@zuUp_OP?n0+` zto!uZ+_b-ClmzoOwyln-Z}3e|WPth8{{J`D0hU&?Whe~LJ8Nf<;UvwuI)TpUOCS&b zA@uyfbeD#Ukc%-Qwt*|CI5Q{Q(eCvmq8qu6%hz!)eXZA!2r^~_gh*&4jju*M7c}5uIBVc{Q$)=Yy$mCKTQuePs~;}87OjMnvgTTP*ot`Gg2iDn-KrnPsu%AN%> zH$h$jM6^1b+rgI=lkWjpzyV(Ss^WiOPrBeRU+py+a4~CV9O8@jMLSVvI;+nG})NVNRc7Gpf|bSZ~IMW)EjBi9s0u9r%|Juy=6U4!EZW8f%aJ1P+K@WtBE z$GC-L7T$Pb~h_K>h2T+Msp_q-BLQ7bnLI1@*)5h)QKe)$-sm@gG$(|b! zoV9Kax}?vktGLn_pNLC4~t6jOd`WZudzk{PHJrAS!At4k8&Ih^509^mf<7 z=#EitPjOHso1EL9?P%S4;P>0%AqG!5aju+v}2vsYaWz3FcgDebzUBh_R#LdLoa=u}B}^4{gj%qxDU9Df1J#Xs->!=>{8XT?Qzs1yTHVd>}DJZ9C%&ze%?WC?%} zzJCd~V>UbG?ulbw*cIX{Zx^&Ub3kOP$jX(p{=ZU!GlKKEvKv!{_b-C zArzxEB1R`VC&Wv4-BL{2j!`9{L!V?_Qe7@yT4Do?*Di9ciP3~Bv)QrJbkJOXZlxfToga4u9dRFGfdUt_f+S59^ zj$Gv2;cB&<1tfs5RUPpBi!_{QLK+%vxSo*Khh-7zCxMp5u4bEZ+co@?Z)1SQ4;UN* zaC=Ks8j2Eth#W9(dNIB>AASX*WIZq5@^APPxyB#dF88Kl0N3X%1R*jhi2(4lQWY0J z_4+O!{-&yDMEG8Cg9Byc$OxnV>x6vK_Rboj@A)qyA!_rE0rr^+ep_Xh?B^OW!YQ@Y zaEbs0fxK_+fa$=oF%5sh8vy7GlC<|=bW@=I;F2NLQ+ze^496FiX-(^;&LAmXTSsV70-oLy4tpZEsg+&@xqEo}{dXgu(#UKW3IgaSByO84-p`Y}J{ zC>hh=lD(AlIGKUZXZF^|NF2Z9p_=+-D3E7vhDJVP`f&+=68F<6QuVVL(bunF-R6?| zG`PYTu7*=zVeQABKjb_>GM$FfjiLV+ZEqPB*V1hbCj>&U;O-Ct1b3%{yM-jUyF0;2 zfIx6}>EOZLEw}`Cx5ix??dIJ%_dNGLzrKIp7|o!8y_?!qt5&Tw=c-wc`qr4G|5N=n z83;fhm&`9^u$C@=l}9|j_x0(>b;J$EXKwmWO-^WXy#~FeyI&1h@dv1vMY+G=#;D#u(1uG=04-@@axo`nK1z+>2R3SjgdAmn=OXe6Hex|y zioC{VZw-P`=$5~9(b80I_FLTePvpLPQkClju@@4h6Q{BGZvJn2X}Z@NVlVX28QTl& z{P?70-Oe~H@RIPk^_;O{JAHk2hmn{ApzSF#K^mZ^*HIkwy@J36)_2iJUcijy2 zBi7Z6MbYLuMj)Q&ONx1leVNui$L%64vYs5b=#*DW4b!3M=s?}Yi>|3}QM|Z#!0aE? zRZ>ziz!ZB~+5Rd@(Vif2Mpg5mkZL_YryO0yh`L<9WFArjr)noU6DWaBsMbc!o$Kk_>_STUbB-`OOvCqYp-t_g^1^P!Js!kH zxpB=yXeW3{KM7uYn$C)t!YWgd-<_;yJNd&eOo?wMEnjq zeU-?QCeA%g2}gttr{cn7RNxb+^bwU0t&`AGb1<8}7+~7U#OL_SOHbV%RD@ zTBW!7eU-EHX@{6_GEt%ui@E!I8#}m;?CZkS zyFnFB3U6p*iQ%ndO$8e38>W7%2jRX)pYwcEJs-I~yP+lkeFahrz}50e!mp6EyUlN> zoTt(KXgY+%4&}J8Yy@t@SsOBW?1iI@b_}4zykz}_{kRxjG!h}PJoc@30yy7f5&J=k z^13)gp*`K1dFwk7ZN|0o=|315&pe;ng6favToaHng4Y>}SDx+1Ys?>Lb@Ul$7oEpL z-3gd&myoN%aSxvk7<_KUj=Z-Tzdxb-IT z!*?8<9*@`JcxHW6vWTT$_j3qR@DHy4FLp#e;rQ!%3x%e`n~4Bj3Vs_BL@Yr*Na9Tw zbvcqMss$;h;dCX!lFJxz@qGOVL$Z4D^Rvz~+)zo&=RfAf!I+{y66p*`L5W10^N?td zmHL{{xc-E4KN*~Z*LhToQhV_W0K=D%fc+R?x)P&0HH(+7`Cz_~@Zep(mGxWBj>Y(@i z9*{R>k~pKOTp^|GeW+hIcOhbtBG0NrK-f4-VP>2t8)|9WW^x;<&1RO+_r)VM3LGYK zic!4b6S5)?3{va3LNm&a+m8HkUAaBH-6db15F#B?c1fbr z{+z=fIzl!7oYHg%zu!{v&)Zh<=N6jpC>$v>S806Nk3_gRKr8{ZD5qhf*T|lH_8)3x zR3H`v`vzEh{`D<~_Ukrro5s)qFg&K(-qj)H@8fp}P|9R6!4L2JC2VYLfOE+oTBFbN z*?dv-y#|lyNzVAmeBhVhT^oZ35^&?=)0s46kXKA~5sQIZSe|@mJ`lW>DpPe2qgt0E z&O=vC6&*{s{%}M;^J$PPE$#(XNMMj7gZ>Nw&Vo6oRK=Hdc8mV)=^rxVB#C;AwOqsn4TCf4|jpHF#r+dnNvh2oPV< z_}_7{fS%a?KGL5~gFIb(f)#Flo31xxlpQ_7qA+4$c3_9rPA-z@3C_yD!O50RRh*u!btjlTFT#F5|FXcP{6xI62{yi4}KBV=tc#dF|oTLJLvo_a(U0t7cs zy*-9$ONY0Li;mP)+Q~_d`MUBmpBzr}HcygMJl06e{c63H-11L(zI62Tc%NGI$#9{^ zOft{dIMf5xDEftdL(M!Dj&65f7;YIP_5C9p?BN2s?zl{+jZxt=dLHdissYrfoNVcL5Q`Ky@GpJQS}QCr%IQVmHBudj!{i^0qU4CZxEgyI-YET<$u$X`c~O! z)0QP9_yhtQs=jeqj5;paH8?HM<-X!EgQMQ|kjmB!GiXnb29Mf_Q_Czl{>sH-6uDd%+|w4lHeF}a@{VLv*N^rF9zwtI@m}Er+w+K3w`6Ea zvn?x=uS;n_x9!TK3%u$UrJa-2)8q=_Dmq- zu0u(2zI60)W;RSRGZS!pysqF+TkV-R6O0;n;`fOGOnxABrLMAt;A^Q$G`%+z1Kml5 zFS(5lNz2*&KP7QuyWQl^MSp1}SK_gFZ(0mCyK^qgDO1}VCC)l?aWPw4MULNhKGfFN z;!qnig~Rg&adff>FcMF^F6ivR8UrR3<`ZCa3u@=)#$U(J8TgC47d)t$)kj zB{e}INeK?A3b*r}q$iV5H1>p2+1HdEuKeA>boO6Y&qXyQ2EzCUNH`<1yW^m9VQ*Nz zDYo}p#w@Nz(jzNs)t^d)Y&2e|^Iw3Jl4#M$URML)TNG``pw}^bD^}k1HEnIXUl3-= zTwGgaO7`VbYAN>ab8NCGW+XX_|CH$q9C}@z`kt0OzO~3&LrJM1p}dg7T;MX_Xk15N zLbu)y#1#EmSNDB3>9Y&5wha?YS()JoPS|X?B#mV0_%EKxArY0f;e+%Fqid+f?JjA@ z*C%9ZvJ|%?npoNN4q=dP4R%O(C!c)M*~K5W8pjQB06Ux*ecMm(32%3}xT+Z8rDuD> zZZJTKT01qoZfLl$DLL74c&X{Z^ZR-IGV}$jUu9ZOc-g7J-E+c<5_4!TvWF{Noxh;# zX$jm-uHqZ-zs}-b{%(iS<|-HM#5)q|sns zF8(H0+%n_!%37a9GMT^cv456okSQwwvwt)FbA-wtdZBsAcM0#mZe6I6_$)f$aBA!s-n?>4YphD zIST7rH9ote{bf(0sG4v|6bP+D)!_+FJ)g{z&OL8w#SY!qnTGSDEun=+Hrz!-6{v5+ zhm$5V9qWa+mSLmKw8k%kS)flrn@>vv&isz1W*fJA{Z7NJME!*3@vumtf%`lESlAPE z-D8_hn?g%P;W(Q3;x>8!2>MD(ZL6!RH=n%KVx|xOr3eOoPTcnayeZ( z6|p3X#pw9rMEmf8dVQ6$y$iJVap2$>v<-H6M0h&C za&RQ`4t{{!so55c19Ak${;?tsJ)Y-h3{XPdnzGVTW&n;A25c`2etl2@4=QvyF}CS_ zqjSe3e1BZFwXF4L(f^sUsM1}SkOzE?k9{{T+cds6#;BWEbon_tEh(}@a3qlS8kyp5 z&LxBTroR38x^@AnHr7u&+Lbvx5*zws`?%xJvAy9n3#e(8=GpEp`9OpJ*t+Q(L#m&Q zhx*z+>LHMM#0a^Y)|4OkDeHD*c4slRw$6&(xumBIC?pFvZoz z5Vr{%f1fxT`+=^`bX$@0F~qC~0x}P*u{6pHg|SRU;WLSP!Bcuw-!eONty$Y7plkIv zH{w|MHIDPGaU3^8ma9xrgm~>Y?-drU_-1G68#j^;&srZ*>A*Y>{I^5)sP+qg%t9zk zwTjzm*9Yzq=QLnClOk(fX01Vi()IRV)GwFySq09hvUujs4=dovW5V8yWWToh!YI#+ z3nM~*^Uz%j>lur9k3o)_tvFrSD8vb<>tQD)!m!~?M?-Rhd;71sd`TSNvP}i5i8zlg z6NFtT7Xagq!@#`kjh6Xpu-h zfaNO82H61H%4=(DCnqPnQZYe!`P&h9P5JpF!?d!G;VwQXT1f(bsF~9HU(jpaZVT8h zz)7nkp5bHS#V01>>%4OZNZ(#_$p|728Yh*UJ%b3l?Fk@&617Xma%sY~n1L<(Hi3~V z__|5^2iGoj`W1Iz5Y^!4TgzQ6NNc;>Aas)f`rvgSz(hA2!20o$S!+RJV05%gj3OTN zfKpxk6&Kj&KdxwBbdRV7MfTWa@f%4;?BED2n{b&DjqY}8DjRjMDv0$}C^(la9mQMM zZm&8(5}sR=>MU-nckEk*J51`L#q=XY<4-E4i9e6NoJC3TIHxD7xnVtNyaH(^V;L_j zwMMbYSYYTma~Who8Q8#xtX7434@;Z$O4)`ZXk^SyNujMhe?|--!8q%Z$i9VbyTSye zjSEM9lX$3>o0B%IT>jH@DJJ|*lbv}Aznv;^#?p2nb6QVr0s|(Ukzg)=eK1V;WB`(J zt49#eTGdr@WP7-a3Opzg=Nkn2)lI(ELHKr!2d7{{z|)^f|6%IF3(?PdaH7One}!0C zZd>kTJn3YM`iAL|_M2o8OL;=hg$jj~5yDU`tH@fEMB|6h2?UnerA^kh2LH4w}ZnH#YN!;XkziaGs}43LSaKk1Ut7bYk;uU!_DOIfQp7Wv+tc)kBZzCE^*D)_knF>_S+ z;luqw^73%=uKi9=P58O4gGh+ne#w`Sy5+N({<|9s|3Cen89Rd|!|R0&52EK1Cz>y| z$BxZtI<}i8dGzduHh!FZPdvDT<9-@j=?b+Vbcv_;qJ*w9j;t!mJ=whtk{PUt8b%GJ zR=0Tr?WmcZuU6$^cYZ%ams54o0so%OhA41~tTQMGdmU@k?eXO#@@&=H)WU+xbO1|R zM~9e%7>LY`24b?SV10SJj7dQGBEW!&nMo!_9~Di7K5mcI+Ij{hrMEv*AapYS!a@m$ zzoGOw6J=pxnVlr%`avvc${-PfVRBo!0o2T8Y;?=8GeZU7zOWpGYJLAO49p7IQZ8eD z4PSF~TIq;&K;RhyYJk%l+)pOoPA0ea;6{TwfyDsmWo&eEL2hXB(vhvpeq@us!c`5= zVGpm#ejF*U+U1OJ+S)yfuCsuE@Yo;Z(sYq?3BSr4LAVpn?|j{~r2!rKvg#LXm24{# z&0FA{p zY6aJEkjLKRoH5JS3Ee!;qg~ z=(Xe-*EE1grt>?UL6^ab+J!d0N`aa&ik^^*#Rzq0gx~#nH$TQ_b8*3JvmcXkG31WM z9E53ky{v9lBPda}d{&d(sZHnH5`WlqPAPZE_V@Z@&2;*BOUEuVWF{9LO532&*!Koy zb?!8)cNlGVU`YHkhmNlE-?A8z9K-i%W3-%{tUi*f>CKk86vTOj7BR6LkycZj)3jXi zR#ROv=1KSP6ka=$)Ksm-Z1A55U%RR}*q?Zx+KngLUH`K6wEizfC{Qg;h+=3Hu!1E|rsJ|DDkcf;7y{+*3xfo3}q8Qdcug088zk?}L(fV|>{%Gg@ z@4M^U-J1TMar+&@gRX{WQ{auR44Rh~zSu`KmHJ=WK1f zB~jo;4K;ceX!BVP#?b+a!#^;e4w=V1{n3Ay_eqz2W>QFI-8Oi-Hi!oggm&=daV4r= zLdFol+v(mXyV-SUs(j&WhSypBbqw)i&bt~4j&?df!=%yV8F+c%S|_DzLk_2pOu8yX z7Somq6_(KMU9C#|Q$a}G`Tg?P0i1rX;|6^D7Q7vQBih?sOgW+15x~ZFt7ARKYPc3q z<}pWS0!nqewIlQ2EE{}vdu8Crq*BTDg=tOE`l#X7X=bf2^%8@lKq<8$ZU*$oG`n(# zxRtD$0s2sw%b~T#Mj7tSCiP?&XLhRx-IU@)dLEwC#fykYeBbTQ=~^7VK8TABdqjM^ z|CkrK(BPPD%SdRSIX2!Kj>x8GY$=N$#;V1JO-Axzt`vktp=*TrXk`)(0t_fmWmUEt>Ao&eom+*2%+(A1|XzkWSe2HaGLb|C*aZU@{R2 zS&wlYCyNP**203Rg;{)RqLQ?9Ujlwim_6e>hVHXbn`rYfnHdT)6U`(^3X}kT=hfygZxDJhfQ#UFcaNs?lnS^iZ96_ zJt)#`maxj_Vk&QYySt9E*Li9O-Cypj%{PT&G~=wuw&g6x%11a`B`QI@zJAJgdI$wVtX;#xXtRVgTakj)?Ips5g-$u z(Q(LXK9bg3q;8EmTB=p^?CN^zR;_0*}e4a!&WljB#N z4A`?>shZ_2uMc-EOkj_MRa-mQkGJ$o?U{cZsz<) zZaOaTS6AyJpKb@-G~q{M&ns8CasSj&lHbf=1vTpOkFB%$KYxGL#1Blcfm5}jzf5<=A&7#LRKYFGhc zFGF4ulaPG)p5G}J9Q<;IW3n_awxGR%t01;Kzc@di_%H^gNVn|*fot*99z0Q7W`AX^v*q;n-6bLb3MH)2zrWBf1 zS_#}83(3N~z7h9#m`Cwn`mvJ^t%`OUIakNHLcU-ps^ z)Ipc?n~q(TiVli~;|@P4SHSL=Oh(JuPI|`Ehy%?iZ2x+$>Gok7FJez9e=N)-HiPoheh>Dr zYhK~u4sH4E?5~u)o@(foC4XQ9KHY&IH=Z8Bc;$x7l(0V?ip>>tT=CI9`wEb~k?oD; zR4!T^8~C9G$YgK1$?1wA$&!QJdzQJB@>A~Qq$rf5TJ*{DYYcl{xTN4jK#bavK;cNQ z2kU*^f)SoY?)NtkO~Jk!32kkX&m}yrdtI?=%#)P4QaaSvfDib`A5*>R!VjOZ26`>H z-Sl8nOrkx_?OWmnDG@; zEEXwjnSqQL=}pOuyqA|(#8;*WN*W3j^#p<;7G>dJE_;KRooW;pOP@U}L;VfE&shSU z!2zM}(tmwixpY)D$J)sA?$qt9XG^;(37{^^S92iL;C9#G@Uz#c6cda*p_5J#J`mEi zABX+G0orDt%e3(?uMD!eR5ui?MDAY> zWL8KNd4GL_6^`s)#qjAZ(hI5S!yI{)7ni7itWbF4wPC-$JO431!lhfqvt5^T>_$Xq z{yWULDl#(2Qc_acb1)ceYiCFKD}BxU)kSm@8{wXRoDiYymZhQ4CH-$)Bio)5Fb)e= zFK*QELG50DwVBTCL^PcDB-t9$q*0ep`>EtJ9o@U%DhpM&#P+vvWnJ(r4AdD_P3hRZ zDxKuZTQ!d>vOCbPQN*+=X=BAALkSO0u~}O-7%lG4-rP4oxyzttIZe_r?&Bl{VWfQ4 zC4;C4gFZ#oTr+tO!Zy@>e5cKlb8N}hhBS(ORU4BiMX%jHsEt@PcC6ePVvS~oV;gVk zab=X5_GU{WBxrS1y%L*{MElvykLSy(-(jgXs3;poUx}I=&G?q$n;JXnkrR7^59XKK zIZpF7dVd!9x4I%n)s$DLw!`KidCUa4ps2sITo+pyehc~d@uTX;k3GngKEHu@X&%^| z*&~=J6qqWk;s6>R%hc2;5XF5!V!v1TrPW5j)hS!Cy;*vPO`t%su&|KLyK;iNwnplt zB(-gD2~^6(CMEU#J)KOjyi;N3^Y|VFOAHMixW04{%7p`N3 zT2SKLUzh4xa5$+ZGaskN2HEat>Qfm`xLB3w8=U5KguqU!45R7r77RRvm{GI>P zIQ7Y|>q|a^=kP0fX}iw=C}93(uIDgb@gOxdb7B=O^gdl`pjU`**$6Kor}wAj1jDLk zSC4U~C32rQd@-_A)H8UiD>GbcG~8~3plN|Ew)`6vh^d174c)w{WH%!w;B zoiFmkOdcs#*MfsD#s!0xX!^l(<5&VofBQNw1rTve?5Fh40EA4Z#>d|qWsv8x3dvx) z7~Tb1+W>4{eHWkw6uWiIX*L!{NDeg ztG`IVW}=4v1~TYYY_HWX)6dk*EH*V&&fNUvELEOTy7|1;I}8OZW~*~r&YTX@e%wOw zfD|NWmq0S#Z9Z(FNxjEGjzt1y!{-vZ&5qxI+zZn?L+H!s)$J4*jwc8Qb}>n}MhUYz zhElU;@!6>CurD_LrnBEt_ZKDbK9An>e3RDU6gfP5+Vvexx6x5d&;NM*>FxP}GaUgr zLXEq)(FY&&`FPc@dR~JoYmb4;r3e@H3^8_VB zS<>^DjLaIE&=-OReX68AbP?ZmiEzj86M!BO&+eW*mP>N0^&59?A{zW!S3}$W{%II$ zMVV)DuC`hm$2I^=2AqHgIcN91cYXKn z-P?h9bz7aEp?vmdl6b;`z54;=hzLumV`{vt^L>gcU*A)`U*A^Ba4(^mc#PX7_}(vsnEZ;z70RZQ-qtl$7W3@Vru_mbg+g5 zg4{Tc>E5KFB*$fEr-qedImAF8MmTFVSNf2=7PRD#>#1LN{tjc5rPUPWYzw9a>vw#E z;}9%_vtkjNH#puQtE+#xgtSr zE!Hy3ma&Jlga(V!(};=YdugI7{Z7P^++MS@v;Y46e7+rd)?Rm{UBZZCXCT|Rbd@L* zN^rXPES!L}T*Uc@y36`c0w|uxIn^?^?!~ekuU*K_x92Zkmzu9#kPTVQ_Gyj`DhW-9 z=+r8Zdapk#xv`r=%%Lp>w}fgTPuH8jCOH80-rNmI(xc_T zlV7`pv!(vGvRbk@=J@8Z@pe)oV8C8`8{c6;{S@CiuJ6~)SeIS1_iQxqpe2Ug1k1Ua zjDIr>*`$aF^!D>e2UShYfnW?$aYoE!u$Jv)Z+bG?yio*+F@Zw3%S<7xEyG-Z?y|06 z`N6~Sj?wG>+cJWA=1D#!zt=6d0;MkMSi_VG=y)u5ae&2e_Br1dl3pO0SC;vqfy_T+ zVoAu#)F67sjajDEX@?2_8glaV?mA1qls;X+-PWQf*$al|*!m-?w6rv3AkV|#c7`^P zyVTT_xTDk}hM+bk3oz2%=UI(KQ5yQ5-@$+-`z*x*c00Dc!D}SEV6tl<;nEz%I*PLjIm6Z}&Cj#y-Lx z{)9w30<_O-%GIu%Wa#DNgSF{LlD5YwA^*X@Qg-1w1QQP`W9OF<=$xFBRmRjxxB}u8 zb#C`VFDXUAm|zF4hK^b=Wk*TatE8VuHeTAYAIC8j*nfjg8ZJ6~MSWD3L$)ao>udxU zKHWtR&zCMftj(IV;?)`|J)x5Nq&JDAjQOhET0Vlo;Z*{QwA#NpgmRwX<_IcRYb(sf z7LBr$utlJToZffD5xTjSd=7;7*^YU-dGFuQOiY`h&I$_-7BmUiA{g=@zl`V_BTL$s z|L`+JJ;T)C7h9zlN2%WM!FC9LwGDPSe^<8pl82$jG?w|?suQk@@->zr_BV+_&3Y$d zPptN`zmB+;`Sh8RoR_m0(%qbiM@OENCkijOBJzUdRWOe%=*G}nD7x>M{s|iU z-RAWAfn9?1i;?V2z08?)O1MGN9^{yltDwNFDTTYku=vjen(1} z%HNfn(M_X4_v^Mtc@M&h`c(_W#CvT$n}^B6_LNl9502O$B{jRjIcv#*D;&A`AxDt6 z^C#<>X>4M?Oa83mjs|o|pggc%xYH$2h>%2rk z0~krBRi3(R@0a$`$c5jL2D|MaF#A`>-U?mn`KfDmuEC>irwbk!t{>ygyN6fjiLA)8 zHc->jujROvU00~NmO@8UXV~SrlTtxliDP&X!fD;SBF*OWdc&Vx4Bwv${r+7p^_zxb z-aYKt8vzk&yE|Piq!?z`-^Ba$I>`x$(q#But%(6~ra-e+WvVk8WDe=~k+Hui$o@?9 zotiFXn6gFit(6325zeov<(XUJ&!Xp$m604OK4qN~baUrtB0`aH`UR)= z(UL>?9*n|I>#vpBSl%YyQNUUjtYhEwy{y74 zHZ$?tj5A@2|1}eEfP{h5!8D`t4C}}56fAMFkwhFnRKGW=F9Eo&_4G!^4s#R zJ>jpy2nF!ia_9vySoD>$J*=$Hb26`F8BBsyT@zx?V}4LSFUa#qcyos|Y;3SRUG^xH z)Y+MNB+MTkX#-&pEtuPJ>F4CvEDu+{Tdq373vq9MT|hI<@TzrmP=K!piooW4me*Mk zpFUr-T@Ng~o2=Zr#nD5ULtGL#n&p=4>1}}LHc4uhe11V}zJ+OA zs@6c78`r}5`fG-kOz|?!FKJS^>3%n)`VE91QZkjGrv?zZUU_NRuODc0KUUE^3Nn>^ z4M?rHoNY<_d0qn{o9r!F>*zhKN3b6rqPbkr@Z5J(>KU3=zu+7keq>zgc+_}2(}O)8 zwq6~y6hFH-DQUgB|3JVx@TR8n+0tQ)=T2cU`^5=nx&U5;g~L%us%kt#K9icaFgD}F zZ69}|<%SHQ|1csI7qx5;6}47@;i7gmv$4i5FPY13T<)$@nW*6ps>PlHE#x1gnxrR- ze@&qvFdMH9c;jR}1w=^&ih==Bn3Z-9x;s0z0Rkmj@S-2DP%fMGZ&m?MinH zjlqP4qh*6q#3P+lBjzL8sEa=qhtg19ny@7CAcwjLzI^DW-@IbV6(FMflXCz0cQCFP zjZRKEUkmTOk79==DDIN)pw1~0$ObidNarl45RrgcZY0kRKK}M>Noi?ECTr-E`q(DU z3IWUu?vC({pEh+KJz8XKtBGA-mtsSZq)4>*iA+v^PU@i`r=ko5L>_QN3p0L zcDd94`=rYZ*+yG%f4`V2Ut0Qk9w}n6_=&-3*XKJVKlF9yjV|%~TE%LDPpU8v#xH*7 z-f1E>3?s}KHM{Od4zuhQ$_>19-{Wk*;!xN*8s^Rn?dDU2g^1=hTe6C0CpQw#y^mP-)k?-D#uPcxoh98SQ*U*`xSm~ZZ}I?Ti_=O zxnhU@{V)B(tGY{t&-VN;eV;iy+`2sDeednp5ghfsxxGb;p@umuPjTx*N;)m5{M9b%{B25&=)WeEV|DD`#-F(5 zk4tp7I(n2$LHg*s{uj^e!XHbdJvG2boQI_RdE539ki&H8>cOJtvHQTK?GMSH`IoDi zkd*}P(IBCrP-48$I;1o_mTaN^8yNh<<19F;mhit_L=kH&#y*!#!6CaEs^I(Qk9kpj zeSM+s8^tnE4;)0X6v4lIgI64jALBoF#-I-pgb@70wn+Uq-j3r1Ad>86Sm(0;!&qVk zp}e04@c7RVXQThr0t6KW{E+##1yqWRf;JSAI8G2K$pnv%j&dwD9oHjEjA2$-QBK6Z@{hzwE@ZoZQ%?fA@^oC#mE?=Y0P#qt z!%1v;)7_`nRq|ojx2F|V-yeTyVg~v<%`pyHs0;N$(>BbB>!bsyB3}I$YW^WZ#5*Z0 zEQ|w17KpiBQANUfs>Y?h`~+=gbc}@CWWTsr_P__u?QtS$9SbbMNy9^uQd8Bw+`pC> z>WMdnonDT&s9uU$b$!;zk324Xy9GY?p`=L0&>?M%tH!l=_^8{M(C0)DEa`(&ZV!-F z|8yTPEr+Vy4rkTS{{GLuaXxm#$f*NxM!jC+NjqAHK_t8Limyfwq;hM=F%pH!_0 z-&)AzR;(b8@{~FqxFd=YVg7dm)INORq>=vRky^53)Z%fX4Wcn1Rd3uZuofWLJSfk72OJ`z z5?O}BwlbY~Fh@rrqogvW-s_cX+j~lwCBY3tY_=O72yE9!^7ga$C^DZn&Z!+nS(9EMXI5LeyBkaRVBqL|4|HJl^$=>P4S|bLH+?I{qB-iHp?pmU!G1{bX`Vxp6U9-u06oM zuc>x8I6U!$jv3mD6R_pA!uvXs1$E++;__9~C4*vec{94UFZvW_oK;I|H?I;&ddQIL z~CtmQgh-jiD-=O_dXpF1=w}{wU5tzEC_b; zzvf-@Lw~-=#;csQPLQv${E2vVoiksemCH!!dEyr9_9Ftuo(I`((%LF(RVlMDrlTEBFFKNAe1$DqsRE(b1tiP^>kf?vZ`w*RI+u@p%wh+X19npS9ksdgn$6 z(~zM+_$2##uACsB@D7UPV=m07a){iSW}rs*yG=zE^$@%CA6rGD!sYLNY0w~o_qgl! zxa&=izk=J`R$S*2gD1!251XlTW)o5eP3Nkj_32`%H5%EQ;uIy5sTB48&%8G-xcXY_ zOuy4+LWDFhNS$hp?@&LN-o7jO>`y+o@?~PJLK-nrlOI7mmOarec#kMP%bu-l#w$&S z_0C^KCjofDK*S*j#ar(xnH5D#Bd@^ z75%+j{+)u|bW@tDHTe!?{bxPnvUx>$-*>iE!|D3ZkasivHR>w|z28XGg66_UehMy> z=$tpNc%)A!aLkC%eJ0{GG`GD-xunZ zssIb#e6V#3t}EvOhf^t<{ZmZw6P}~)NuS>rZth2u5B=8xily)iDt8E(le*Y}5!Of6 z;6l&%e0BtZl{EfI@8N8to0cF7XJg)%G-R$edM_=mt@pOWli5u4Rs3@hPrdYoP8$jm z3*gZTRKV?|jn6XXC`PiPi$#dgUlPB-@%&$kEP*DmOKo6hbu(cJ4^gb~!+*`O5|U6V zz#Yp*{MW+t%;Z-R%PUAgpth8|B5sh!fW6Is7Oj6)CC2~yXfv73DBxiVUjN_k{<$`V zCRU~^ukhH6(U9Svo7l6Mbsd)^TmG)UipGGA79jr74X0oH8=e6qK2sb(;^T6i5nasw zXIa#BI-YAx`Ul%aX#;nmG*-;1BO zejMNJG;_gT5$1iICbGM?sa&vKR0{+pLS@!FI{FAMXpKeC;k|l=ufPvyja}~6n~Hq~ zChBv%3j)9r{7?m= zS>?TiP7?y=tpJ2Xv0DV4?_ansT@KC|>^3IOU0tk3Fh zo_jX7p~@e3F-W{7YtC#Xp3l*KSoB@j?ItO-m%$1;f8RrEbTBdXTUdd5MJE6;aPb_y zl|9=)5LdPG8*V4AEyGvIr)*Z6*`Pk^y|$(dIg!ps!yBw>CGQt%{`D``&M4oS`GGw3>s2}z9Dhp)zES}-$uJpm8dIj0=tV=9PT<2Jps!>2!IQSCS3 zGDn;9k(7t094{XowQK8d*M?0KRf=hH`mw_dkSCq(zKIi^Q;kme|RqX zK=yvv#Q1{2eNoNp6C-UxH9@35n_K-`mO6!O-q2UnGIsp*cAQxSXG}a6dNU1R4bBk217zt^9C+vGZJEo#kglSP?UWh^>A>FKYaj2HC zs5YjB^_Em!URbbNG$bQqzPpN^eWDyCIs7kd6*~-Q9g^(Og%J^z`{r48#PKHd%Mp+J zi`fC`R*wYor|*M7FqxL+->oUNp#xWK7fBu_ME;#hTNYbHmn0;8@IR+{mkV1C?AD-= z^a^X*EeD0BB;%ryqTaoh&?#(yNcmVCd2!)s1cr>#DtCNT{R@~N73|Fe4>DN;iJYHI%zMA1aeK#|RkbF(GZL;{Gyc#SwCDY+ zH@yEihq-TV@2)>xVe9Y~o~F9fwW8K5!cmkKD%!Ali&d2*|JUL^#0jQWdl!TdLc53P zknsNEYX(0amr_UB&SBUO0{n4f`%d>hxU8fEeYG1TKTn#Wz;WR~T>rVe4Z0ZQOS$wQ zExs`jp(aJ~jT)yQTE91ndj74Vy{Nl`neD`$WKfurM%pVuEcxd)Wzt35;VIz+#E)r}1J85F#rxAYb0bn-iRt*X>dz6@ z0@23w)5kNp0l}$(`+|!_j)Q zteHwY1XxxXIt8%RmWS?S{j~ddGiM6zmwmUUJ{Yq{5!qTu^Px~U9daeq8OmZW{F0}t z_pr0gOd??H5+SLSIY$8vhMHg6%dBwq7y?dh>TvR&A`|W&f_;C?jtV*_%`q{)Z#;j8di{}3_Kp)v4ZS7N z`hgvGxje10bY8C{dGV2wLIZ!A3A;n0&t z#>h1nr`Ip)g)C$u#TZwWlv%LX_$cFD!wD<KuZ#WX9F6T9#?s2$u=efC(WEe zk>>CMc$!yNFm7`SSC~In9ITWCDgp{~QgTbj z$c;JDck9!RqWxrLFQaSuNSj){0d6@?Im0;vO_?1m)=|O`GfFjViDGt_UzKYG;m9edLdzeKzdDPo zpW+R+eH^E4@$gG!#6ZMAi(hQcA*dO=$#e_$qU_L|U+TbU4)?h)z{g0Sd_>cJkuy7& z=r?()hzfM-y}&pU_bY$6`so_k3FC+cp?c{X`pX17_%}j5@R*IvCWzV@B&<&>26r&o zolc7oZ!9In_PM5I{67aXKsN4KdHJr!rz%s+W3XbMiFD=nVqN1*Sp;3GEUw*}h^QOj zVT)5{cm0SDq+zHff>f!^=5iG`j^M!L^Gl`1hzL<977-C&$*x#s&LV53 zq>A4UM=n6d9mVFm-w{0o%4{{Jhe|RkW=}Jc=DYFEHeG%dUOv?IV5)OvfXrS;@qAR5 zDH;hbd-s(^zbC@v<#Un5q0jP}Wpd$@B=p_DKKvL4i1Tkd%p?c!Le44cckh+wE1;3!jsyLygpmpJQ;nPt_<<%W8m81N>(!M&NjqYnR z)V*kF(Y8?Bi)%}P5Zql#aS84aC|;m};tnkkT#9R;Kyi16LU4DNozT~Izu&(5?e6>m z$z@zo^$RM0;>o(;1oT|fOZn;CArmwB$&n8y{R(zs2NDnFZbSA zH!Kt&awYMStJ*b}JdvP%%6j?A)Z+#FT}dtM=egj=g@l&4HSk-EZ8&zGUGw z2H%O}mgm0?l|R8cXgDV>5u4x^b27J>I2P`zGb2{q8FoaS;1{{c)?_ZG41qE8Fo8Gf z6WMABRr0)!2USl)CfB&*8yw%AVROBbsYrJmn*;h_x^kou{`HFzQ9J}h0+D|7(YcgHi51AkqgVG{GjtWRTpQ)l!E&EsnFt zH8Hy{gG)A*$(A`lm2(5#w+4qQp-KJqik*&kz^_~a!L|TU)sVd6*595Br|(FK!SOrK zgv8c;xPais^@)LHN(EXTbXeo?DChS;VStaO@-q-H9rZd@ItQf@%~s%I5xjWar2`U|x74r)xv{ zg~)uM36u$YR~g-d=gN16jA!|8`>6ay%dewzFq-2`PjP_>#1}8GZN*3fOCzzo?r%0z z$87RVB2Xtg&c)^;*Kqq!T0^pIFZ!;jZ|QzWXbze1*x|+bc%V^5C{T^1iP33er+v^51JI?(;o_tZ6W}aw(v=C zbmvg?kt!ts=-a(g0lpnNj5OuR7jxLJ<%04r zm;lug0X=`Cg4il^vZBxN;k~WZ$R|a19Y&%N(UVG*^`mdG4t3j)On4TO$isDc%Dcy) zAY<|t&pc}j*Trh_IP>nYA@8(bv!Yl+rw?tLg8NrO7m=Lo31}Wz+AgctrFVN`@vO$rF6_~y!|F!W*6E-TIY3|v z^F9(s0|~;5?}}s93{QgS&nUV6g?Eq%B(naVM&P;*dqZNL?T z=cx}az~YHj+sZ3vX-7E{o$!_yTWKUtQK@gA`Yd8f3V4_kzTWwouUuy?^gSp{VgvT4xuqe~Kid!F7 zfeZ$qiWon6DJX(Jq!S~QBUk{UoO4Ft0y!`mD+B02%#ikgdf9BF^EgWe zCO5Vz9aMbgo&A5U9k48@$$K(6{e#xL`=dVk9_hFLGZ-abr{N&2Dr2FEHF$c)rj{y> zmJeRkAxa1keRKp=7%(K&fyt0j8#vKLQ-U~IM&QA+qm%hiMdjVw*qI@U%#96TxR+1f zhKzG8077#VBim9&?%KKRXMELJcwZT0pS3!f)fs*KbZJ%i1re5h_8!5@j5W?c1XHM` z{)>MIISB<~;Dm$(pi903&{<4O4Eunu#s;s4E61|>VSU`!d#(vLAF7g z8f<1idjsZaRRB#RNA27WcpHV?YYAppKFr*?BV4aA^ekCd!nqPzth8!u4(M?Ydl@cD zE%iPZJVg`z8!GBYe7?9j{9~|5idhLyD?l|^%_GD8i8B67Iv>t)ozQno3PwV(U;hjJ zYz;MTNIa31nCPD34h`;G-tAc$OfElzI<5~E6EqScB217&3dz9m)@-R4HfA8Vq!H(W z5>0Npp>r>c|9?_X_xAR%?t-~nQ?qhaYCQ4UQJX*6@C}_|hshleCU1^dNgWA1!m+4#3jgs`+2*}Ycu^35Ap?NLxU`6h+Ka1{?~ z>yY9PgF<_UoBJOeN=5vwO>#3U*#%01{_@AoN;i5OPr597SJS(YxatWyxu!Us!kB3c zk&pS0-pRQ40%@6YDB;%vA#yH%GV>Bd#Oc$-MevGJX^gF|O@7cX`J^* z0EK(t7jZ6u^5*hD@RZowzs(ARfbO^vJwo&baIoM%NOZug6AjQ5>c&3*`OaSbp93kT z1R%ZtrS||In1rv!g89D$8z zmos+R?+U5!&tMx6oWP≈ysFK5KubS5H(?D02F;fwey`A`?xFh#4O9#N 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 Q16>-3u#`}q;Cs*i0ZExQ#{d8T literal 0 HcmV?d00001 diff --git a/Doku/images/start_external_program.png b/Doku/images/start_external_program.png new file mode 100644 index 0000000000000000000000000000000000000000..285b48b1e2dbe0b149fb1b5a48cc906356afcef5 GIT binary patch literal 76919 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 literal 0 HcmV?d00001 diff --git a/Doku/images/start_without_debugging.png b/Doku/images/start_without_debugging.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e9aa8062f4604f5d93d7145eeebd6294d2329d GIT binary patch literal 16069 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 literal 0 HcmV?d00001 diff --git a/Doku/images/test_adapter_registration.png b/Doku/images/test_adapter_registration.png new file mode 100644 index 0000000000000000000000000000000000000000..ad618d4a5765e5642417ae2d5c0bc33a5edd39cf GIT binary patch literal 34817 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 literal 0 HcmV?d00001 diff --git a/Doku/images/test_case_output.png b/Doku/images/test_case_output.png new file mode 100644 index 0000000000000000000000000000000000000000..a8034c00868ea04e40cd361adf9d8774a8dd5f83 GIT binary patch literal 84171 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 HsqcRQvnp;l literal 0 HcmV?d00001 diff --git a/Doku/images/test_execution_timeout.png b/Doku/images/test_execution_timeout.png new file mode 100644 index 0000000000000000000000000000000000000000..58e660efd5e586a361ad3a03a911ef401420915a GIT binary patch literal 70824 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 lmyrL=irj*<- z|9J*xx_V3Z-qlsBR#itRDM+CreL#YOfU}!`97Gb#XeSBzLUfSU zbcTXL>wo)um%@lf1QEi!$jD2;gWw2IiRgYJ`L+BblF)Dwb#<|@cY-Rb9+ifOP+TCQ zFQ(4MPL>WXmiBf~*oYKV5INGDT-@Hl)5+4@!Ud`leN+Gb%FwRH^f222ybF_Lnk{+J9DUR zqTMiv4E{g;U7d_gp}?;}NB=exx3{%5wR3^G8BOhi$l%_ZeYbS6F@-8Uou-9?B8QUs zBKqAU`#8tj2M65p3Ib#u)99pF<6w!sS5Ahi3NQ*Mf5%lt8gGm%t_;&CudE%Vgr+5X zPahUZ51#k1P)+_Y<%OXo^qt%aMOj-3QM68!9E0T@ZVSy{8@IjNq0!@UJ2T!alOzYv zwVH)ax4loGqvPXapIy(+33X*vT+U^nJ-QqQjOc$q!JOGWLGX+xt6|0Y1V&F;_MMoR zEC_+*|9l*BziDYLt?62Dh=-xs#?SwfiUWuxFMkeh{?B>He+N5!<3ASjGNb2n3!Aty<~C(bAIzk1YSBOCKv>awLx=Z z(0y#UqbSBWCIfwXip*~1dj=|IWwxl%0cz%9m3qFU(NRqt4XzI|&r<~^j%HbnxTp-s zW(gS?gy)&2t{BTr>Numr{g-U1Om@>PMLGCUh~OBDNAY$our~_lpwhFB4%W>R$C&?2GBcWWKX@&mum48`w{C@a)hdpjLlp-ylu*UB1$72 zj9}-WVIw3Ns;c(*O`Zjpoo&`=ozg}`d7QWtu^TLq%F||`&hLo`jgOKcYJ!r4$dU9c zdY>i3n;M>%tYvt93>k@rx)vp18R=v~jZkz6UV7~Uf;V9aO``vVx=P?t0)h)%IK&6g4U6Dsjfy@clmau~s>26&t1fki7!of6^j|G9<0#FYE^#`uiCJKHrj z+9L{Db}WB)?wOK_7I%}<`$lav)IX}VsQolyzgjQ_6nY^3#l$TwTo2LRR#-4K9VDpN zlnSaTDGYZt;Vkx@b0<$3z)3B+f2>YQND?>t^^+(g-)EsWcd4`UaX`YNYxt60V z`#3`~_lpzWZer6ZY?r&j;#unjtV!&JTx{8XwDbF4hHBOZ* z6(eUt^g&CZrq=m~RU+LcmlZ0gFy=$n_dtk!&1A+t5CG07EW`{(PWih1IeN(fm~eq0K__W2>YK;fx7aL=%>aH2EclfyUploM0+ z^S-$Ci_phvDtbl8>bPG73hLkl15!CHPn-X8uUetq|5y3_zD8=KrAnAl#;41uX^A82 z{n?aDvNmHM;ABiE+wLQj$&EK*GLX3u*bQr$s%A=;P%upGdZ8}c-m~C+Bs8u!O#2(t z6z&QWndghUBkaC@u1jC+A;VL6U_7;&+t+BXl>7RgY4!$xySUEIk0t}z@aM*KCZ1pP zm?Us_?7Bjvs_VXt>7wNrFTTy%FDMMz@aj7roAnEe6LK`Wd5Dmtyy5CoNT+e*$4}Sa zLw1{RZyv1%9N&FEU7cI+krr16f4w=Syyhn?h{J5u*AZ3waqy|pVE`@0OkR%{L*7t^HOfcEXtGWFOOH@Sow`)=%GLN=bEDQ2qTaoShU(h|Zz^6U!&^w%Y# z3jR&X-_V%sEC{`tiZW9I)Aby_c4--!mZErqV@|nkliM#Db)T~;mJ0Tp@{RLVEgMtdT1MW|$C60cNk5P}&PBy;49{i%2lzxQ!>t}6YG%i<9F;LSu>DTDD35(VnmDNuXj-_#ay^&AE|k`A8Hpf7 zPf3w@R^d7byA+f+>nDn97EO_*dkmI%WGJp}XU7Ncg4x;4f6&{{Otkf9@A*0+6krqA z@-Ku*PfSdH#~Yp28K?3vsI|5q86;2=rvK}5f(avPL2730@$q1fiV|Xo`P#~u)?rsA zR>|2p8I^F}TSoU2f~2u0{K&G=KZVV;5F@ssWn)JstC7v0=W5x4gCkPo3bB(JtX$4~gvfL( z(q^fScHDavG1FiQjyDe`?ste48O0o%%98lpwD@dKQ?~6JcXHo})-4I+g|pB0D6^27j}BZ7gx{g3Zt9k8z?#XcI@yYvS<5 z)1=`VV=1WVz-7EI555vy)w_lVH`(l=$CqM}vXqX>_F`mXM(XGsP1~MbvK~8Yy7FY7 zKa=&syIMCWj;X!+^G?$~;EB186*6m5p_Mh=i1 zMSu^paV(+VOE=Q%{^{*PFMZTf^I5ZSaSSR<*x%*WKsFOcC|$erFZ@cW2)Th4HEfjp z3H1$CqhQ|s{oPPBkuF+PT!hPxtp5y0d*Z>=D~s zS6IQ+Om^quoD=e_28R7nzpU@gVYziQ&&B$v7vIM!Q~6qrgDDcPW(v+&gM}8Zx6Y2F zsKDHSc2y`5QH)>!4(*S?m7jEx;>yXKV(?K}tq>T)OwD*juQ+1*Gv%I!J*l$6XYAw? zRZui6?DqID1+9v^*@T{$=qZa6!;=K%A8dLpHsBM~!hAIB024*hea6eDyM~qbNwQ6y zKC>({E9d=k^}lIFyv=5G;yH_xvQmFFrc`PE{b1h}qsf~m2T1>e)&OV5L|07iiN{|Y zUTfI`D`-0MB3ab1Eyo;w77_eRqs$+N(!CN>WqT5B zoG4vY6py8>&RcMgDeWDjdv79kb;&6C!-xt7kPvd+k~#|0VF@2R>-aeH$p+;4_=#Bc zdxxLCo8d+2z9Fag@R{$H98_x-fVPnZv(ULWF1qT&!^5+|!NE6H`fmUMuORCiF6||h9DJWT z*}z>F0>~N;)ZG3)ibDbM6fMEf$m*`-^Vg&mbYI&%qN7az56&%_WZn|L(C!J+S39sh zY+`Z#U&tHmj7eMUxhY!X^%>ERKJpt#El}rw5pAFYixG?iz>uO{z6NUPYy6wC{|lDK zB~aMy!tEFh?J&rPm&N{{bE8HpOucn?#L5f||+hZdB?pH*>SRaLd+ z|DV3uUs!s3So>op$_wb$=C#5ED+yjt+s?Fp$^Sby#A~qQ>v(eaq7SU4?eMoa{{eDy1Kj3kVpN$;lLiH0%aCewU*D#v{Led1i<;tU;P`bIAeyr zkd_gk<87F+pQ_>vRF{|2YUN-Aj5OAzu1-7W&O|K4m4P{8!KAx|Ixc~$83t}zKAmeOj7J@ zysDP1x4W?5?&S9>?`R{>9=hJ2FN6Gen^o*_vzx3CwO6~RifQvF)0T2wED%8O8g5R5 z?>v|3iDEy;qgQYSm|$;-yLWaT25Qm5Ze$nvcj-Z{Y(vmwVvP!OM|7YLqOyGYv%Otz0^~COl90Hc=XdfU{^+ze8f`U`?rnbqgn)*D|UO!vLRn95um?& z)9ekK%{g`bof$gr4biF@V9{T1o(rw3R-S% z?y*u)pbIFWcZ9VA`tvXeqsM0Pm;6L-XS4H57UsR?Fw&4A(p}wvznbmYV7iJkqJh*B zfQC+~dPzyhPPernpErNoyXIKf(6)AZp`BQ7X}duS7}45-cu#uwt5AB=^QV}nliXy4 z$Z@KjQ(l8}AD)*JQc60*shcE}#XDX~O9hO;15j7j1jpL9FBZsRpXyI=cdJ**?NN*$ zrY%t{I|e;WPvN}AGWvpp2QO0+*35h(8uWh-XMNMph&pq~luqXh<4;gulgs3cO;v8B zh-;_9)({xGD=uG*PaAq*@Z~h5bl#QAzc}S8I$MT}^>sANbMd;UFm23Kyrzk7JOSW& zWhVT5t+KhbmBC?(BqJk3EbNos^#ZOrUTTbT2l=L5Yz+a;@reL-QtkT6I7LNAF;WuI zSs`~J_}a(~X}6%BL+&est1UUtW7Vb=uDFdX{hgg{Da{;ntOaY*5OQAd#w~9B zgD_k0b0+<--sW2Weog?$_!#E0Ig`R6?A=4$kK=cCB?-`G^^-B}_#!s|C? zvCNE*1fxEAh`MUIt%gq#N*x}s0Zfb?5vE8&<4ZF^e99;C;@h>t?a%JE-!aOBLC1GMo-ZN1MV!b;P_}l=mP!5hF-;l_5dw3c9@Ig;}Dm3QoruBB*=tDnzze5(++}zTX z)H`hT@z(mF?ABohfmu5*>(oF8S&AA#`PZgI@fx~fid{*A%cml1mA@*pvtQTt5`F?} z3kq-_7EJ0re71bxx-QT{Vs=SJ15$}TLhMfPRR)z*>DT=b)&`4S7@F)kF&zup^5LeQ zc$d{f-GNYbE(+l>AGF2;{*>-uM8rzgm3cK(p5dS3VNlWv3TV>2?Zf5e<$+Pz3k{1L zFTeZH4FG>j%gQb^`xSE{FP$WP?RFx#flljVc^syf3WGx5e|Jy?UJ`r6z>@{RS|brE zP+RW`;)xE>EV$?kJr*q3i-z-fyVn^jF+4|~Y=6?83S5;ejNS|Fk@YA!cdV}uSRJ{K zyO3Q(>mGZuymf6iZf=TG++bd<>Tu9QawmE@&2Gz!_jgAuVaRrL$styE5Ds&v6PUzS@uNOG~T+WgpLr<{`x8C0w9g`>w-E-a<>(P>R* z{^%KS>P#ROy_%iN=4b>{y^t_p73cVX(Nr~igPPTuT-oQjeGqgN*J8M)G*r9Me9`8f z6&vT8*X!fI^qFoMPQ3WwL@lMR%1Q%aqhqW1*c|TXIi7 za-%L*OCZvmwp#YwjIiDvX0rtQt4}TU3&)5ic-I!Ci=Lg$ccHJnYi;iw1Asz2+My3R^ zq1n*>_lJTu7_K zXFXk4Y2>@6!_{KtWso?T6tGh{C?3#tF-RnrC!AAQ_!08FX|y;|Lj}R3H!%6T$Hxlg@sj@jy%|Byk>l~BjT;2VXjVsEftPu?R$AJL=Cmb~x z4Vz!;fSTk4Od9P|CP+IC?DWRhug~EfEUE2ZbiHz&mxvCq^SZxR-VbrOaoCFC)$+4r zF0lQH_mdgnMCLvAE|aO)9NgvQ?&a`xk=&7MIz##5A@-;4T91;MarfP?riH>21Dqg`uJo(jB@;E)k z&NTU?fFjcLiWrJX0eg0H;sCwtuceXe*;c;7ck9qE_Y?l_9gY{-bNwC;0-ig(z(}9; z+pAueCt#K|qvJN$xPLJT!`t3wl)$xN7vkh&YhOk@3?l4ycosO# z1d~od(o+R>(Hp)8i&2lN6Pif=ho?E z%kFOGbk(FTYv=VM3eV*;pLWDNnd|w(#-vZ03**OtEb{E1ALR^|`fayUY>l<>G$hr~ z5$@C=#z=jsqy`SMQUI6tszjIRpMb-?DVb(Bf4z>UdKip+Wq0|GdN~(I+GMtxVhcd~ zb=*nupjtABBUiVgiX0u62U~jNq&%LSA7KiNrY!Hw%vHFT9k(M9*&tX&ba@~f6vHJs&OGT zT+_w#)$TyH`C75{PC;hp+uHh{owh#wWg(^L$evx+P|hRX%Ur4_C2NOJQJH^;_UW!6}W(Kods?+A1=I zkVci{lWxeF%D%C6{by_b3^qdoZT0aT+$#Vqm6*S_vMV1Oo#Cfi!@f``3Sr01FQ=_X zETkUm?^0QGhim-6jDB~0WIPQ06H?=75Xu>YD^kxyLWIgf8}{sV3mHx~59Lq1Bx#65 z9EYU4%7p%>j1`G7%WdSB3qM#+vyb8f-cQD1pv_!C9-`gX4E%tjw2w!=(|fT}g62M- zWPR-RgEG1tftG7cc)HIbgK@M2=PF(IiVrIe*qS1yFG*X3dG#=GpwY3;11b8ItE()T zmQNDc8@v!ns_*a3)~vH#JH&OjwV4X_n$l`AyO1}x${9}4!O!8&;v92gIHM^*@lM)c zDLZ2O!1<5wW3ef_qd2Lj^MZIUTWCmwFb$jGxJ&FPIL&^xeu?-)WkNMr$anFp+Qa)0 zi6!$O3W`DDV9S{>cK02frUF<8qIr`jx6;-u4OGOB#GWB7&fs|KnKYgTVsu3AQwq@` z+An$2BTTWj24vG=-HfKHa?D|oI+2YglnLj#0>pTvxbK7d{(3a&lZ(2n)cpLv`SJmG; zjTPnP(u#`yaHY^X58kB{V@nX`ZmIAc3`MG=C|?D^NWt`p#)tN#GZWQ=9E#y+RB1wh z#iydwl)EbyBxBXQWYcncIpn=)o*CD5A^&Fe02pgq!{o!7oLH_j{Q9DEc3614c9)rtY8EUo4sM)oTy3l;qjB zFjBgBkXxC-_-|DHC6ydkSy_>W=w&-rZl z*^_0d)y@uz+lAzm4Sv7&DX*23$I@jWYXQ${82Z+dCaEJ?$UIfCy8Y(#H0AgaF<u!&6<4L2-t-yS6C>HT{t7eMC z&~S&Iqefbg%q_tfy)(-%y06{d# zDM`9xtY$;hJqfzH>{)DcyC@<$ll0R+CBOK4-ZMGsv`MFqQo)unA? z$-*kbnFJ6YD;xF3ogy9Qvx+FYf;_3=9>P-MXujO#9+F|7Y`NsA+4 z`0^AY*Ks0+B7H1=Qj&)y$h5GRwgTwv$)m)-DK=# ziCz`BdQBqp?C_DAyHxy*eiCz3i*W4wV5*V-J#FMR?5L`$@#!jt$IOs4FE_SIR((~T zMX2E3F>n$mdmL~`yJYv>ep&Ll&bV_T^mp|#5Pd;!EbyeNYG=0V1vdpcv194qT7VlP zZ{BSG3dF-Npr-Qj2krvd&st#{eahJipr-p(IXZR{1wQYNQ#embdi==UT}#WHm=s&P zd*>fCQRk9}i0V=w3zh`B{Qb`tOze1RipV}?U-YAp#TL*B)?F~aT?d+Lirlr-t--~%`FwaU&tbIpmXMTg78uM zedbTT9G4ILSd*0(gXR;(6R5*}O?6}8Ydr@WiBX!6f$S7W0r8S*`l zvIg{J8wzA_$+7g;-h|{r5z#aGlBr(%g%07BI(_{$Te7o?SH`bD+3h9%uoN||dNgb(Gg>;^58dPf7aa}I zMFhQP_~z#z8zg)m8*y=?%AYNO7#UbVSGuELkS(w?^2@JjKqOs-R(YiB+MWlzk=GX? zD>uSyeHr6 zrNWk0(w7{y`Gn*zE9)+sa3wRAE;Kokv7a3WLo8%4#+hgBy9V3Ld7*L@U&^R+1OU`bqvB>rF z1b#qK2AOrs-rFmc;6KDXn~IV zPWypPe)LvR^k9wChU6bkb$Zum1!BUmiFln_O|WTs>>5x^W)1HUHfLrW^@Iubx_|W3 z&={S~;H!ck`kQtW55WFvs#aDFt?ywyTn6}ryz;MSUsh})#lq^0--W~i&cM$U-iq1X z9b3qP`u;KALufjAzF$vD{1W^&U)OejZ^>TQp_Mq_pdWB~agj(x+axUiba-(bxP{}& zEyKOv2Gl@xO{yv8c58P+A0D13+roAOY#C=;dR4JMOFOQXaeiH*UfPSzQJQ9%^I!H7 z)mhUzDI2VubmR0w_nRy8XmqOvYNgd4hb)8*a=R4t1zSQb>GqxJ=PWx{9o{>TnN%Z-~ zS`g%iYH>j*7Te*CZu6&%F6WbR+m|aej2?&|b}*ZyF>1F13CBJe64D~`a%tqvL+q-; zFR86|A2!FJnTW1UBwZ8l3olp3l!d6aCcK&jWCN@Xy}*zr&B`!9B<~&^&Fo489BT>m zjyH%3F1+JZK!5=$(&(4pt=-C}&it1Vl3Bke_UZ}YBCip=a-huy+Y%OY&YT| zhfUHz!&zWpNUxj=9auU(B~j2I@*D*}X3ZXbV;*k&84&wLF#Ss65RW*Uw4CH>NO~7H z>j=^Pd*%mN!F;ma&fJ;>$q`G0v9e-Ec6;Go`HV}9CnB`p*x%z8DzNbJ_bJSd89l(B zkfk?Tx+b&6bBem$D3(h1&qMXAQ1gv}ssPE>VyNSYA$c-l+WTSTXTr2QdA4@R&j?9= z*6*YfcU-Vc@okcjtq=&;a>Y={{jz#beFy}t-`@~bO+L?Q9L=q zURg^Vh<+qbLIs{eID<9g(Y)8+{(8q?%|VI=>h_DQ7-m85D~1Q*dzd7q5KE3Z>AigtuskL#czNtYJ zqGG>3mgKvfy~78K$}}&UkD=AFR50i<{vcthZbZ%7X;rRhyzr*o2a=f-H7%JZTO+E8 zv3~T_2-db*SJ4!PC)|LQg+|2~uzKAKoQbJz%-$r~Jwm4*BLv*I)oVd>!zu z)t$v(re11X^BYK^oP`j*1)nRz9T&!(ZeA~c1VEXuIu$$i%n}QjnOMx*#lhDs$m;5n zkjBBs4fWxwn_n4Bsn5>4EetdbOP$piKb1a~o$yD~&aZ@*tEp&P8~#BOU(6E51?A~L z!Ox$s`!Y(u)NntYA^0z4G9&rQkHqt2BYzkiUVn6M_(_Mv6NXJ~{r&>G`qx&Ce-O|J zox7&0zzh8P?b#46C1V|iPfn;wk@{J@=+zRI>U zqsgMQ&{KbC_E=NBD`=q#uRyZX5MuAi#@~zhQ{Qn^VO1lJ<zqG|E1y-K8y3*+Z{B}sH0BGQ9(7!IqQf|kXg72^Vm|PjW70o zcWexSx!?~yr$^7NKe&Z2yCkH|)5+OhL@Fv(_6F~DcdD4LL#aXOtEQ((V`kzl`$oiF zJ{Wt7PGyhFAIkOpB3f%Y3oZxA95!lRqDXIFiQ85~$IOPz01);SSz76D8(V0^&V9SFVN7Ak)A$5wdN&b+39qntR&CI0u%kX za4kwnY}p(Q{kM6}(6Q|dTb$-B{2DaZvFt}9;p7Fh-B#w%l>ntpp*t@E6Wd$Fn={lQ zGtNC_rOr=Cj|@sTs@+re%AJd7Qe6_O_eFTLg~WnnaMf(avP2LprSC+4b8WcD+JaK# zoCddw3kgN@BFYIww9b)I0M75mu>7WsU*&h)rSAVIp2FoU`=fdNO z_qL9G(a!}rheq)yB!rlKF{K7QpLSgki%0_Rk;7wR2JC=_z@hLW9jN@y&RoUZSLAUL zQ@)#%iwJv00Ua-Tk}x#tmqgipJ{P*W4(}PuZRyup3}=HcHEEfdAEG=^TM67-l%Q(P zvS~hBJobBXRW8amqTNq3>wH4QS~6oNnT@USObTzpn*7=CY~0JAOmK_sQ%Q-v;3SWc zDfUGLQ)?spn`(H(1t>CGSXXu^*0HpFI7M9^#fr?x$SBAf;nY;=x#x9ExQMtG^le=m z!JAQ;?Av4*#+78Q0Xx|^<8K}Fpd(9%Au8N6(M`chgR@1W`b4av@8MM#Pg9L}1e|uocd#JBC~q_w7zZ-MHC@F%r71z`%WQ!{u<9uK!T& z%rWjMDbDW~)PSHHIPV_xY3ORp5A8V8j1V1TYh1%74UL>zSSeckoXnlLu8Dxy@uHu* zHackG=;OQ@Est<)GZf}8#Ej1uTejpbI9Y*0x90t*kEGnUW4qf?tm}7iGW|umVm3BR zb#)AGZ6u#z?mffJM?}gr9`R%GaqpSdT#KI}0e-8FEAHD)voOb?rRja$8H{5nbe0_7*c?m%99#?<>jiH;&w9a%Of zm>ops?XgV(4}rL;U&V3zs6rBo|DNO;FQui)w8#fIk&>{?wH_Tk!%&LhoVzR-gAms{Je*XrwG9i6Pm zM%MBsUps5e%gknY9Pq$sxj5qFrA+7YDD3WUz=Gz*mdSGgNtCWCR~>21y1Qr`6$@JO zCdgp`+8_F}D(lW38a$d53J>lvaHgd{eF(l`rRq`VQ(sn?3+i2UNU3N#~Ts*!RIb} zhr?BOW$YxMAvPW!ypvrDNtk>7SfCLv_{_HZN|`;Ed8xglqxhL56otZXc8<7{F5^tG zGdDJUuO-XFQ~YV|${ns@k$& z5T$hO{P(F1wsb*vOLaE%U1Yb5u^9m8?@t&v=K)tbLtE-{ab&BbEJsG58w3*tQS@J> zvF_n_r4ONsJOy`kzP#V6r;*T&mf8XmGi?S5?a5Wa9;5r9vu;C6xQo9dW2y}rXe)9+ zr&tmfR^le@KeT1Y&ELXxiBY%V`HX+)n^a2;?o0J#X2_iCc56m5ebq~5ZTgk$hm>b~ zp*@MLH$7ae8|izOvPk>%Sv!PkKNHmYk<)n2%?t{c(avzXo|WMGb3B3_{Gf^a?n^Hc z+n?2fUT(QzFPy}o`ts}XrX#t5D7lH8G%)9jE3e*One{g zu~4n+%X`kEUUdf8(6a?D*DV|SKU2I zrM+kEGHp1E8}CwUrAXxB^_`>bZRF}g?piqNS*^z_mUdxBZV`}W)I zHCd_uUKN~d_}`hZslBj;8Ov*n8D8pYgNA!c%583LmR44ptTa2?fI4$#N)!PWQ_!Ks zeq%G$SHZZ+_PbgbuAc8|`_V$8O~|_lL6AbED3;Fj%}xJ=4F1HopXiai61wrgb5#QTJFLjYe_hXz4zGCB7G)_&~aIo^zQ%PP_&4M9SW*IAe7 zNSf9zc4sVZC|`@nK0~rieZ$Xm0VZbK3T7wIL7s)blPg8;0liGb(d$;ib!6DT+ERud z9!?$j90YRsa^9xDu5%}6VbK#|aqJ(mW|hhzn#ihnSF6uXT(c0htSe<}%gmA{8z+5c zYtV=@t{2<&jMrwLD|V1CI@@t4;(<>3`Cug^ov37e^pWb~>=}6oxnlon88mHptnuBP z$<@^rqAimkB{$WT316VU(gm$+@h}3KB<$S!H@Hmyl8s!URtm+>n`J`+qE}5 zd#yT-=eu;Em0*Wa;f0Amk_`0UfsBoe!XqN4$WHH}iLH9j#+G@O=7%W}#Q45_Q-KcV z>(+G#4V(b2>&#L`Zei{x1ebGlZEyq6@ZZ;{yCv22p0;&bF0^WZ8Yh}b1+o>M9|$~j z=c^B-hq4Mj@MGF`I@MZ-hdQ%pt=UVSpizp!B6FcghsbXJPg>~OLNg?rjpLjSrX>y~gw z?Yjmyf%Ijgj)(>`dN z>5tXydp*cB=-8X7{DIGb4lfwoBh6Iw5xFfQTSreK9D5G9Lb+ae%c|<%v>|cJ_zqzG zgFl@@33Qv#;H}iJ)z6G{kug6s|LQzc_JX(IFo>*I_>Sgzvru<}!U(-yKXmN;5me1Y z>5g9cgVNz&OVdj$Z4X33N4D^R9I!OIghJYoTcua$+vqsx+ zHhl(R1u3eE%(@>VCdP5#?rYLi?&rLusY@F>0YQaWmY=a7oa%@_BnoPh0c z23Fg6w1po5q^8PLAejZk^rI7}mULlX0U}lw)`dR3gCZU4bq#ta|o)3A!Bb}Nb6N^ha5=cv9T zbA{RW^WTMnZgO6s(-OwMENe-m2a1+zGs~|-xkv;_$L`AL#rqRXvfiQ7s>W2+o}&dP z$t>@UbMGQEjQg}(P`4m&!6{RezdGPQn^Ay=VlP%JV2L}ohWG%3#*Y^+?P+?E1$4p` zq-11!0F11(!^_p#lJU*PX-(0_I8)^VjT7U`U&*OjI>Cc5MUN})PtE~i^Oh2qIaR{w zv>N%#Hay?wVy(~gVuiu*vDF@!PU|kWfzj zI<^6N=FN{dU+a2cWqJ6sdc1hWT^>n#tppxGKKBy*uCDHUy|28vMFQE{b+M z(CoK|zi6Rx#DS}J=zK%1?q}nWqDASiUpL#%I*pI!tK>2`LQF?e*&&qzc+6V;cNbeN z>w(BnK57mCgxe@bTlvpftfg^S=SZ+>F)BzWVcEbx3LyG(8S$Rf}Ho% z55kYcNsqy@07%+fknd4Qk~h(QWJZ&T#U?%1X$UE|nZ6Fzm-k9J$T;Kekl_AjSsZ4p zEXFuFsnpsFi)JwX%Y3cH=5_!})R`vBF_4`r1 zXtVh6(Xh=IZF-;TYNN zxH>=3^?03wlpyOEd947^xjQ+oASUyN#YqQ>F41?xb0KS(6V6v51~Z+J+{+Q^49kQv zeTJaSAw@vVwEHK)1FC zPPXM@%sg3q&(tQeHNNu=sqAF^@N7}pexUKdcB_mrF6?!4+(T6H3hZc` zvO?)P6u|RuCp(Y2U?%J8Yp&Q8%~Q6$d<5$P&^yP20BK22N)#0_VFmDd#$)E}av$tW z4bdB_D@3ox#tN2sZ*_o))_RGd@e5y?7mjSnCsn_<=X%L!dvi@N-j>Q86B;|TUoeaZ z;?~}vuFxvxKbaxk5Ew@$>L*L(Y+JYZDUp7fx7!Yp(eKXZkCvxlOSHnk^&Wm#fDOZP zuT^bMdWPR4^4lyz)wLC~%xHiah2%kEixT*6vFz>8cdJVDpi4R?uVi*L@I$o5OZr#i z%zAx{adEAIl9mx>;PjEbJ?8D!GPmf(z1tzFUpV&GkfTwLkHYJ-y@w*PJx2b4&kiKP zi^h^Zkwz5;I2t5-2=)MGTcR*6eL2&Ah11s2`GwB>B|I+&Qa7-Nz4@H$|09a@(LQ-R z2eKoxb92fi6Mzcm7Kek)Wfpw5wj7m`a$j(c69jEI5?8su&x~pjp%E8E^F4qX zLl!TBa6)J#0!q5NF=J-GnwnA}2a}D~>JSihFk6;nx%P8+YBNvE$bS9rw8_KAgi*U2 zG7G^9NR2&z&%m=ZJ(F1!>jsrDOM7g^(yTZFq{_W(A=o3p{ac=PhG4IiU7NpfnxW1dYdk?)L2|cDtJYVZp^#`jOutj#J{O)^uS1d_)VP#z=H_2k% z@x;shlmx5QRbv*1`O1PYQ=15S;F4Xu^WagX?>fiu?RTg@g(we!tApaueOl{mPPomQ=0N1)HA$T%YL^c= zo@)qKnf11_$tjL+DYgE=7zlL=682uGcIk446u4fh91D4GfW69U+*S0?dQRroI`oV? z`Didru+f76IL3Y+dzBY19S0&{iwAJ?D%eACiP&Dzx5F)I1Ds#}LWClryuZ={{m7{J z@WpK?U4>Xcbu1#1;rlcMSR0?Mb+kX*IU%BKKLvADaKx0zd)0TMWxOgPsA}lak#UZ?&SH zC~-@Cy&5yj%eXK<>f2pKhUF>?Ikp1u@8Qs<+KffjNk*C{U!|drg>plsf=ZMke zMDzJwth>P8I28t!QkikZ;CuDH2LI);srxz8vD+^4eN8${eWR%kAk>?S*S!Wm&ND+j zuE|zo?C61dtMvtL^Ti$autdA`am}HfU9Y{oX}iJ`H^E|X`l6-W`K_`MZKZ`uF-jhW z?SOEV(wDYkzIRr}b46r!8>zF&Q-!?o#&WSqbm}i5L=(o%wWt{)$BOr-(u^JS9Vo2E zxn`H0)+=&KU!Q1m3vM0LQomjOp`G=)jHuCp0@r!BV;aC{XG{|=YQ z4?whHW2q$xq95Pw|E`e7LF#FA2jfb%8n^bjSVn+wEqK(cTiRJ2)#E3!Dynn0CR$nE z_W106saScrXcj%oR*Vd_w=D#~Hqx{aSdY>QXJvi;GiTTadLCPTf-I7f8N__n33Dk` zLr_Vc^V1@ItLupvi5AZ5EyzC)LXo;ds+zH|vBmesb2QuBm{m#?22R|tAp%gRZ_8Hf zr#I@<46xzWb`MdExRD}Q0~diD6k@*ktpAU*_W)|D``SlQR1`&C3kpbir70jqdIv>8 zdJVlwliqu^fgnwKN2Df@gcdr4q9DB!T0nXU2{rVP{{esB+`04J@6LB`hM6$Q$v*q+ zy~?xJde%8kb?oH1Go9TP6+ScrS8`k{4)64@;^NdIWgbRLTSYxT5FKgy2;Xtr$t~&Q zM|;40?;9*KH2qhrMrCbAOk-D4dXMmr+?whM$AJHbc8sQ8ny@21At54Avd~Cxo{SI{{^?G5&_leLkfG5%+Q&W-J?A|grrDY&t{PhPv)6M9xM*5Md?tjlpX%O7 z@mj(AY^@%=nuI)OXkg%(nWTM7)W0l)e*JLHt9Gw}K^vZ|7bZ)b{rPaC3e3{)lQ~4w z5?)snWy|55q!T&OUE-a{dwY*xquwdvjw5_s#|d#3oUb7BoHqRx|C2Z z?A;9SzMneAA6IfIw*$&QAEWDC3A+|{)yWzF7h>U<&*U0CznsO_ueohobK~_UG68;K z(Ro2Y^5h4az@`OIst`*{HC{;zQURYPu~t6Oj4OM~y_X(1^KY-MiI5cx0#!w^sBR{q z=Vk9ng!?J>eHwtsl2Flckf-baXKsrto$c-E28&eS^-MV%Hz0*q56_m_v{HM^=!xL| zfUZG%`ZR_<`IJdrZ)_O;Z#(X0$+DZTh})vL6anR=32XR3YMQhl=Jx?+TtAQZtHr?T zQ^Y(unB}7vfz*aodnAp-@oKKe`ban)gBs42rvwtkqQ?iD{f5qsuL0=^kBM1%B7Jlt zM*2*IG3fBIbJG#qd5c|w9KC=|z>eAkal>8Nnvp7{L?F<~%5Ka}O6vNjDewPup8N@U z!-ZYAPq^muifzFsoIqygBe0y!I4*xx+!w|2qqFPNH$WIhGq%~Pz5+D7clO7T4G)5d zkI9_s(g;+fYvR9{wA^8i>5MjA7MrV&NNXF*PV4vGu9r4^y5h?W24-}uj4Jp2zmQ#+T4{I||>nJ(=pjwM|a!@6!a$RsyPI=RS?z`$GKC=_NFi}C) zk3{~&PuSFWV_SFecT|%dE?3r$COL{Ntctu9X&-t6kn&^(xk3k9S4m|YeMNzUtFVEb zs~zP(x9pJ?%_KlA+uV=5MDh*{3LQ-r;5P~V=OFD$ZHF+i^NTY4YU}XwcKd3J(yPeq zOcr8(2wHgd6+VfJF2(DS>%xwz8UxtP>0i4aKZfe^9o|H@- zln5knc8^xF;}a5I0Xq(c!3too+pjf50Om9R9ir*Q<-E7*>X*+xHvj5{%HGuT`rCig zcl}4jLB6w{`Vi1h6x#}NeBe6W^*TWNUdJ7%7tlTEer(kHj=^Hrdi*Cs!pswEyN9G z>y0K`S5E)>UCmPrQCRU?_OJs6OC+UeOA1H-DwCA4+!iGxXBx@S z)9YaYKyn=_la7%Sl2+{Ss{63JM6a5D74mLt#Q3XYwoS|JO;d|kGtj+DRV5~UxDxp( zxxDoSBcP2ZiF^KA409cp{KG&JV5bG9560azaeC&Csbe=9*!J?B*Hy8XtQjkhmcQ#a zQ{t?u=e&ac$O>UU3`Xsl?~GtlcJv-x`L&|wu6}cVj3H&yreR8H`;?#}fti()^u0_n zMfqedlc4lA!_~(K;UmegKI+$CLK$%xsQ1KlEZo~4Y(_G8Z$(?zqys#W)yl36*99ip zd-opw^Lf~*dcmvXa9Jju*~IQ;&digZs1Qq`bP7X7Aea1d`T!a8$U&zwR%nRyV-ofI z*CQch_s&GM-fPGZI{LpD*>%jhtZP68Z-T$ci`1``{dt@*9Mm(&`qdR`EK4}X8`T6! z+I6Vih17){}UMHK85Fa4#382DZAS<(u!CZ0? zq1#&@{R*INmz_n0v#l^`pezCO!!2X0XO{l~N!LoUXa1k}{h_nfAEs7% z{xo%VBR-Az`_$dor(R59Lp_fg4A>_yt51DnsU_0{P3?pvJ^9% zb%~W)lJ95R^KSb`QkMwaGGm^R{5vr1+&p96}_b*TWMv^%41SjsdUpe#ehINkP6{cYm18oAPCBkK)LRhBs(dPRFexAo~pRlowRcCxzhByfO zGGDjhZ`ZU2$do{;M5_@QcU*lYhs8LX5ye~#KDmv)+sNfpAa3`1&^cV@ga@Nf+Ag6W<)Db+^eDAv*+Uc9VP5Hvprx!Z7oZY%AdK5<(gZfcWC`r7;-HHpFCOpBm75YQ7q2ulnbS zaFBxZOWXv>krivKuHkCXFhuuB1pu!)fCO^DOQUpo7@5y* zZL1&YD_F-X*;(Pk63Fa_DHCn955422v+ z?rUDIe5Lv!JSysGb)z9Rwp5I@(Q=4ucaoq(_RjnBP>B<_Ui<4tj2nMaqLm5yG|uVj zJj}cH5X!zj#7eJVkvt=lLplnhSH8!Y5TZouhWLDUBCc;U#y#3&@lDmncsVmNEAVhG zcUMx_lpQf(n7w(#K(J`j^_-BM!gn}Vh#&qW^&?Ww7H^()@_3@K#t`@FsJ8W~7zARD z)9(c7FwEG<#h+4NJeSLfo@nxL33EQMU&8xoqR9NS55);B1;o+=%C+7803FX;Dm)x( zN_PS{YFC+#oa$9Nl4gIzC7Ws<4XZ)+$c%UBf=rh0NvofRGp?rYBjXPmc0EjtGndgm zxn1x^orjr*xmTTc@?N?#G3a)tD{1TKB&9ijFDX&3p7ASg+KzI5x73v=Mm*ic55@#( zQ%W6v4jp?BVp7Bd?Y0CiL1Uk;aN6`8{tnUb|d3>=)2z?7`cHP z@WR~ymCe@RG`DUrYk%M=IE1kGmjnr7{4`$m`3;r==lcjl@sJpjbjfCnV362Uw zZxzBh?L8LPi?xG5>JZ4#>1eT4T7eGS1d4$pO-$gr$tHf_v!iUHzVyjNza@1jtm)WJ zP)MkY_m;8mQexdkdH3SBk4GDY@b8t~=Z4ZGX037kc+PDjWY7B`)@#R!KF6KIRnM0* zIRQDB$+Cwf9~cM!YaC$95z-MBHe4;hKkUB#bHSB$e(gte2j*MH)_C%ke(rUZc%t>C z6g0WcvK!??@74l;>Uu4z{)T7?$&WSefr$DpiMr#AI|Dqm%1Y5qMGt#19$?$`@%R|~ z!R%n|!G}R$pHn6Up0)7Jbie*WZbf4y@xc}5)Hw4uq8w<|(V)G5jy*{FP40L@=GRSS7D@al#Wi76t(~R9KB9U?YCL74zN6lVo~rQ00)y-MFXuL4@Sr!bNw2 zVwMQZvcE!6jw~^fL1(A-tYpd$RuorQu6Vwhh5L3iUpX}0S0Y(dQrpTjyi;9q0`W~K zAEs0Wg|z^kawq({vI8KsomK%P*3~pL?(3g!E6~h|NrtDU-WlPyVG!mIEvtuj_Z@88emN3R8B#ak$va*@3C*YRs4t zc4;|8OdM(m=CVEeaW)7mz>HV#t%);^-Dw+$Tb{Zf``8q0nx7x%x{-d|jr39P162ke zA`dXZ4N87)m|nkA$rHTp=Js#ipb|2tq!>-)I07q5ghSo_f@z?9_eR;^ZIVqxUB{R;1tO zM4KQ+MW>vTUuudNfunz0k6JlQy@RI1f_)-8kE-|m0y(%m$Mjny7!Jmh-SiUQTS|Z} znQ{On>~wFr%Hc~qSu#Z^u1t1>1KVp7^J;HhEo&&; zdh!>ve?iqvetf%gHg(m^D}DQ>47z3dXn%+vGAuj7kFu(=!C8R1lI^yKOjpU^hoGuM zUBAwXm-fj`Y8^93C7#ndBP*V>S7c|Uss{;)N*sy03`eI+9Gskqx=8gECB{*2WPN8H z?9{m_--fv7)TkvrCLQ#)FsTZQdN^yfnjCZLjkZ=~JZNt3ibvIR)P}g8z(_e#8coP8%U!X>DPm& zcW;bO;XtxAy7iai>Nd5sY_vTiy|bUMId4H_aNBRJtd?kLXuhEyRfjF;znIqc6Ht&~ z=%)+R&|+r(CpP#OxiRf^z*@0;?G>3Ewooog2k5c#AWPo0;2|zP5j#k;Ulb<>G#;%N+x!{5M50`6x%Z{Vl(9M}TLiWk z;^{x((AJHX(ADm&In?y!Nbc0qXEhE8kL*sa#ocFSRn}sL{c%hy=&{u7j5KUaqp9{% zVT&)k>LME|(PtH4V*k>R^UKKw=9kijMp#e5?ei_>#U(k8?K+^o6asCr)>(x8x82Tl zud~;J3=R@c^=6HarO+6jcx3B>*!hr!pX}bc2A8 z&e))Q3}XY^e2KPiJ|@F;?Tu4ULvy-`rxwS}$qbs|NFytFL*5JM7*;s3xQEwLd!`^} zwp`X2$)R;L)Qu?FWhFpLlzC47e3>E6KH5X`oT+y>@eEQj@Q;*Qg*O;LAkNMMVaXe= zpeFg7MZUW5v|KR)8?vhx*_;K7FzB@XYW(whKQSRY}>+=N#*fmUEf z;2p{!UeB-P07bwUDed-(mR7U8T6bI5WbjQe@@_{o``P^0V|4s}7#zk;5xrixdAe)G z4NiEzX#{9poFZXo%-}KFA02fy;1>zWk)jmJ8B~KUb!-Yy?o5tm7xiIT5PCa7{m|&C znps(7^IQ9)v`2Z>M*ng_ejh3)@v5-)=JkxTV{|OUBz+2(FDp(?S>KqYS@F7D)4|-f z(0P4cmBc%Vbp@Huh+G0kiBjS32B&sK-t}Ds z+3KgBdPyrv#C7OG;_^91%}x^;f?dJU5=h1BK(AT};_3IGqYpWoc8OJ2SZp)BUXQU) z*6OsFW!t~=eem9Ma;RK4ht#;Xy7Q6juubk>$-2o&m4ylG#uoOsd1R$-<|P(gfQs@ z6lN47eVW6v<_+MYLm~k=q!#?vv&KGnY-JAIXdnkRZT~z*CZe!oVt>_hA+Ea9y)%FK zRPl22^q*UglS?ML1nJ^^=TVAsF?yJGu!DHX0agm46*-6Su4ffp1~~{%^A|%o1S!E_i5Pik=*eM+z*Ba?D#P9&98&4LhqFr*ws;ztjHyph^W?BaJ^nXiEWbZl#GkuFirN^cUEGe;h^og$2;N)T@ zxKipjW&Y3&>u)x7zwcPkVEXnZ@Jo2dLPW>H&NE}kU4>oenimW)^3F$lh5T$xkpWAy zCFa<`Mn1XFeA8QR-~`p>!53>k;fWi*Lf!l)t+w`>mk6y_cdnGA-jGZL@hxZCbLl=y za&7s*9`yN=nU_16gS$wQpIYzr3F(Rt-X`ZNb&XXa%icMbh0`H9p{uA?(ON-4%t0y6 zmSgUdjqV>W$aDdQuXPVO!MFGH`-mFqQ^9;wNS)N8VW<0_ zVK3!B^p&xGu3{gei@iS(F*O7pS|7c~ zXY$3MyZ>xN40lr_6`mFQ_Iau_F_ndVd-#+?D9#cHP9z>8RrpvIK6v<`8r+wlCFMzk zwa2?8yoMsOKUwob!<7^%sFD-vO#FY8@bIoE?Di!Vx}_>>?Ti?)R#a-Y8*(Q+xT^WW zu$&aXT0i(Rlz*(2a~ju-)voG&7L(akW8tw{_28Coq(;k>N!7AyS!?x)D!)mL@Te20 z1l`T2KOEt#NFm*!F_>7`4fo4)(PSe~t zu7~JnHw4dh?abdX+Nm0`fE(Y5%aB2epuI*%HNmDNv0wdvSMyi+th=hcDli6TIh1<& z*nQ;NIAHFl0`biXsKv3XsSJ=$IA=XE4tg#3Tc;}4u|T#={GH)cK8i-ukGdAzL++hK zg3A!V{NrvjaiocQgFJ}2J;QKP1r5dA{Iln18m0X-`wa=)#0&hkEPS?3h_y~jCH;1> zCaFP#Rf)Q1RhX+T@f>}MmEg64j^;g(w}p!uie`VvT4%6L1R@p zIgdxj#+>2>p0QgK`w$XfFZVsN$|46k@ldtcoL{LwDgL%nWYlSJ{#?oy8Vz{ass<+j+YVAXbe zxc*AeV~*WXQ^W2jL5>v3$(BtX%HhdFrgn?|*u1>GE1ujlT^zPE4SVF?pqb@bCdnR# z=4ZTg6`>yWHO0eYLTzLCF`VO0%J?(Ju_6ZltVrLLu9|>UgpnP^9W}>;XbfK)!t(Rm z{MoR3xLEp%kHJZ?nPpPU-#M8p#iufLZZP6$`0W!7*Y0RAtaR(0NCtZ>iPN_aw}?|U zVfQ;jH^C3ElbnJ9s?}=@j_VN+U+z4}x$V=l~9DhPqRH-+j?r%NkVyw=^bwmllV@h!bSf?=52~9dVQnW8~gc zlJw(Cx6!pP>u+IbxS-0;{#K55h6k?veU5M1d9LN5paV_~`{HXy@3qsT>t3F2mG;cM zIY#ujDP@O$IvN@7yStvRA&WJZc)x+_)T-?;iUkr25mqK-*d}W+i$=_`Z8eyDFgHK+ zqmm|gwr+Xy2KXz7rIAa{D9>=hb~I+gs<2{B(QPP@;JMC(eKt2a!(-Siv|$l-d%_Ls zU6qW^@@PzsxjiL1u?Yrr@g%v#>-vF@1dVB)^(QA9u$_;en~;rZp`sH(*nSyKjE2}} zkCd{057ALbzs)h(z%ALK=24jT(r}aq6Zfkt(zxTD``Wo0+XVQGDP6&?+bQKwPC>h= ziw%str(H8UQX_Stf?}nu;1O%EpR`eqabac$aL+07Fr40Mutxzn}(q8*%7Pg-~K;C&(4)?gbQzfFgy)N1X)Bl@ul3Y!E>oB8@KxJTjh zzP7&{wX|e|Qk<)PGu1xpLi<5pAOA7F>-shv$tFoOk_+y6FRLRsGqHp~SxN=}Mj#Uc z&SLlKXY@_}#93iDcG2l*WoYw7!jz-+rz}r|af&nloD4>Uu0PAzN-y z*Se#Zp`@+3dGnzu$HKglQR+y-%H$)yFf*RYDg_!r0daiOQ`C}VU+LD|+{p3v2Snb+ z+$19Agbo*yxov`3x0or9d`H{JO`la^6ttMe$zr(b^`VZR1?`8-k z7Z<=Z`}BKVx-gJ0vZKKM-vXX`9Ra(x_uPolQ6=<=pgJqXIEe5LWn#O%Qofg`h6Ni= z3qhDQo#Fif+&bTlidCPmtk{Vkf1l*6W-l+63XJ$IWINPW<=%KL+7GcL5mZ&R0XH`O z_3AhiTQf*U=yz?Zb7b4)r;<|>5I*j^ znTo28X>^bb`l{_YQABWN*!96Ri6G;V1n667;*l*O3VHY=)YNCLGB7N7`)1VXx-Lz} zw>(s~9|uUZd-}0Zqj~V%1|SO}eD&jkvq-2rtWI%ew=ew%LuO;p!Qp~UW$?zT#;<6G z%pWt#NMYmPMu{;l70p{n(-k9cnXOWeH_+JlEGedO0?Y3ovpl)Cpu`8R#KxdZ+OhtXmrb?NXIU)NQm-Rk(?gvU^a$}w_2c_xaVoo6r%e&LsdqH@4s>iNHZ&0iPQ}#^FghH0 z*s*`yDC}ec$qQdr<_#!$nhI+-g7@mpNlle$Dk@qwEYKGs zj$rkwR=HL5o74K$Gz?>#*+F6$_xQY@+Y1qr#DG3j^9|xcpn5cNCqk9tR%C4y^LF~| zYV|BJ$Yg5St>DCBUXi=*ja6dmNBatbif>m}d8kF$Ce%5RxYO;<&=GvJw9|-(7DD^I zU`BJoQ~O{ZaupzhlG#<~*fi(ACuH$?yKFzTi-(TBcBa}5`UsAuhgE#ubdbgcmgCnp zM)Jd^PDXf8nbs@{C!=T`X~DLyK+IVAV*ShBWLxfL>dzPD6yCSTL8s*OGYaEx?EQXCJ(W-QZerRdZ7ZdldLcxM)PkIMD7UihP zVnMK+j|+iMd&PblTZFA|zdX{LT3YXZ1;J@;zYxt<&*CzQp(=esJ0OWNig)*ivk)O5 zi+xd)d)kH&5KML+Uu}LRRe~HG&Ruj47RP!0!u4(jI=3%`pAkptBRg(3O+@PE_pYSm z#@tE1FYU>JX{wD*<~+5Y5}qZI{Y(xq!Oh!T+1-?K6V;bx{BnineG4*zw2XfT5IL4Lovq>aL0=Hwlxkz*kR z+TvcE!Y(tpJyb|P|FkSC@_{a1-<0HvW#d_wRAsQ@VgPnyx#2`oaE0{x0tuUC1Eu*w z;6Hs&5^Sb~P|xMy-8S_`gr35^*gjlO$m>k^BVdkr08eW_jeYGEC92IqPQ z)1jrwzQ7)SinZLBM9dLYJ&rU60x|C|`a`Q8D2tfHV#=n(XsM>vb4yDUCSOk4I}7Wi zE1~J_Cdv$Q{^)=q8acx&`*iY+ljm^V4YY~9(S8|UoVVWye!TYn7)1MSwm8(~-;T0r zRAhZO!T}Eu^!yJj=iA->GuyD<5O7I9(Eit0Aq)1vvx;lV$N1bi}=? z5;!`7aBsu=EU+8zeD%$|)Izhv^1;KE1FHp4CYvT}f0Y^x+fKeRu}{OZ5#yQV(9emg zTXSQ3;l}}4KFYFZI>}mdjcCye7S?jj*sfx<2NJ15Ge_3P&Xx@kd#i+<8_l`Z^v=jZ zY;E*6$NIA4RIK-N@!S)jYlzb&+m$5cdw}#U)ylXewedc@NOqOclr=`a>MW+(6y|yK zsi5;3@#Qr}Tf586MzCl#mJ!uGpNa`fxo?rEWeEo7`(3MB>5jn^+OScPrBIgP`1K)&0E_xt2XOu2TfpIC-1 zEuXxWlfrap6>SAqUHSc%?^}rQ%)74v$sJBbckNtkg?(K^9zdBCcEZdbdk?QC{Y16Mb2!g1F17i4f^fG&%Ke-#R>zJ+lOCnp! z+F$wmH4ZY)IF&fE(Jt<;$x5ws z*<^QKS*vAel^2f>5g80Dv^xpc>3iY_3x|=Cn6ceyzhw3xrOPZ^MT!a+Ua7KdgsbAe zv0%aVupV4j;PV5t-AU)qE(eo(@YB zhLyc90f#;{cx^FRe?Kj1dZ4ZGH1m<;u&v{hl4qHjRq>5Qc9 z+a+5p7yWv70#r$?KYu*1_KgwofhVE;c{dNTZe+P;9DI4%z(`6W#~evIfO8JQR5Es) z5l#xvK7FLL?JWn1op#EKdHg<`;0WCOGm>pL#NmX($<}-Ne-;=cn^-y!?>7${D>Crj zL@;btd1ZvSNP`ozQP;k#q}_P(JbxGWLbA#~%8C1MmVc9rgf||rj^y@R z{>Q4OQjB6`_<=P4#Cj2a6Mv}S_<+G<=dv!}HPY^tZ zQ4Qt~`!wV4lHtBcNSl!Krp#2Mx8DGqmols(9lLB8T?W=mMuD(FmuZ!1NZ9c}rVm-D@puX?ayB`KCP(GW=k*zn*4(Sl@ zxMEVVbig>2bAsLFIr+eFJnn{O=ymJ+s6Te;X$U#mLkZF3ZmDiyVos@nB<}UHZ40O2 zH-k$Kp!)crTO{r`6J1F@qrCM7jU2&>I~{2^4;rYo&+)g?|F3iIc zV$Dq}@k3S>;XlF0Wr&=rQxzzEHCm5SbBL=hGpQK7EtYtOpTw4Qd-Zkhkv1n3)vP^O z6Q3Rae$8`H9g%dU+(94}Ip`2fv`7VQc98H^|I>cy{@ChVY9V44h7P;EHjvW@+*XJ}kg*7P#F^@N4IMXb@+lGkeNJ`j3qqWnyp!rR# zOc&Q@u4H2~?qSJ7z*?^HPJ`ZijUQ)+y*<7#?N3l6mRNugUne_fcz8dvvEmr0Yt?>7u9)| zp6{kLPl0t`HOGs#sgfZJH}|4~`%X_TnXPND78vG{jYPW61IJiqX9HND&GP% z8Q*gI$_4e$c@bs(-%$2!wnqSs`QgTjVWXUVM%Q?YznZj7l_v>#!F++CHX+1AX{@}) z?JR2MtW(gSDkznz6;(1wYjbkGSnPj*iT)cuI6Q2@ZB)Z+zW^|=5N0p-t19HRGgXR5 zXPl)=CX2RUp7%0J^8Ty3-Ft89jtFxQaj}WVu+h)cZX&RMD_n0k$55*qu+^y}&q+v9 z*vs?+3hGJB(&(k7@{V>_Y#bi}RRBjvtdK%m+}r(4qwaV+VU=Nt__K!xy!cgB!K=EM z-^V7enfCi1fQ$VL#Lpj0N0QPV;gjO0ota(*DbLk)^n{JR_tdUFw~QqG5FgHk!H<)u z*&-@W3&#pAl@{8o*z7UfhNDX6M~e;b?5CBa=LfR=@M)`I0dWof$cO@hHvPoiH+j0> zw&W-r^osjd*BlKib>|`p`;f;Do2bXwQm@PBKl+#FwS=;4= zHt=2XZMwv~7Zlo#BM<7i1_BCSVyBEx@a%LDje7Tzfi5GPOV%0wOhV_wRLE|JZa2FL zYCDd;$Mr%U*%uw>2|$?3^|gZZ&cAQYQ2*IBLTYC+TeKBA48OX$k#xUEJ)Z$MdheLt z{DgKF$hw?VubbC%P1Z_EDx+s&a@Nj&7}Cix(^bPV>Zrrg@Jc0z_G+f*IdElFz}ww) z_CSD&Sx>(hV_~|6^0^-#+1*dl9xc~+j73oX*{C*nVUywaE}h8{f7MU3`LKpZ1Q?IE zo<>qqa=G>M%?hC`317{d4=kNYc?qXy^Jh)BNJ7@`e*I-rcax-G;{PRAHZ0J~zZQIl zQj6?-hGt$&kr(T)ZuaTi>j4h~jO4w2{x0(#aLDKXJmqaYKQ{@!oU_5ACn51LYO%_SatrN_ld@4oGdl&bc=r`e!9|L%K{I!%9pQ~pbW zAtHQx_57m{TlK}nZ7D>U-AK^nu^l3^))a8M{v#8W1}$FfBZI|Nb!+R)=SP~s*mt^o z5C*OLp0nU=NAe|vvrKQjAJq-#k>*fZgj?^$rI|(C_odFhd|uAcgl@furQ*&Xb4c?2 z%|GoGYcp$gf%@9UC&$_d5ngw~#hTntWI|d?Fs7msbrBnbuw`=k8)Hvb9qvvRym6P& z6zJH0|6!l{dg+6D@VIA?JRq3537gO%@dM)wZ z@I00I+hpUS=uj|Ly*SA_`*)1rZPSoQ`SW-!pW|{IkUzc%et}u%CP9o&7HjD*&g7dW zYYtEya-fin@e(lwF+V*5NU8EoxvXC_dIx>(0VzSPxE-rgL0N<9txH3zUCCR9AV zi(VU2k&ivCSu5qxqT2L>Uaw_y>Hg2C@fLe~dnq>`a`#O708B|Pz1T*I=DppMl|Plh zkjn4%o=E|)leagTk#XqsXt$z@f`S5ERpphQXRh%4#2dDxfJiT}%~BwKZQ#3@L-U60 z|EOR8Z3q8nC0$NmyRDqfjkva{IgVhv&;=UIKNkxT7tzFL0!?y(GXWY1#Dg;~*>yH` zO6T8&h{Auj)hMAAKMQLSQSP1a`mCcKI{#QhM(syZ&Wp&*;XJA!2G(!}O@$%t2%%Re02 zVeQ9re{&y1iyrfxwOpv74VVcYIfaT0I~PJ}W7p{0cFnifTL7&7hyg_WR#f>nEyQlT zURCWlLT)o(-7E&B#IOAxJnftPlQ5r4hJYhAF!Es=MuC6z8hSq9WlUwh6;#MdJLA#l zor#j3PT-bXoaL&6eF*YvCnXc8hg3g4P8?r&pr<;oO=#3^3e1AL_WesRwWL&#k=)5S zScr|o$(L5HQCjNAf-1>Bbxr>A*h?hD<`7oBe$+BD9Jr~_~H2m$ZV%R zN_17wY;>}pfDII6LS_-Fj&o6V3gy?S+^xL8j8l?P9C)W#iIxp18`c7_PVTVzTi}_f4 z{1Y|1mJb__Bn8>C(qTwjyGq-{dM7bEf-0`T#C{{I^<@jpv3l_T}Jsj#p1 zSNUsZJe@tVKR}Hw=vcd@&W9(-$oWCB;K@l#B{h&}atHAA$CYr-bpyfgkYDd#dQ+Sq z!rK81gZjY=p{3Ry38KbM7I!5@4SgG-^~A>0u9NZ)NuD3oJPm3vmnb!&nB*+}$LZ?k zFFY0G)@HJxpCp8tkO;XxJ|*uBVF!e~RIcSuU>EgVkN|q@XUc{7ZKmOv;e~~8aGZE7 z7O}kcd{wN?ScHlg2)ULUS9ickX8;yc&`dUv^&kBQ2Vxm2eiK&7OjUO>(j+^1cMZhS zpkap$v;X~9bo0Kn)nMwjaRhQ*ou~iW4!*TD)fL$Fb3O6f*^f1*ncXTn)@qw59xb=Z zyc~BQV17J)^5^f8i=O++%5wOlO%sXl0};J(c`^i!wYiV$w6U~RSBxG3RoU_hSb}(+ z96c|j<&pwtL0SL#m52P$9Z7Tr&Iz3y;N~&`)K}fgr+5;L`bq{Q#pI1;htWp-r5ENj zS7*d(0!R@6Ka!yGwlexp?KmMzpwWc$rKTRIF=*?;_OqXRTz}9xP>Iuqb}=73rQWE} z@!pGgc45;*?#ZdC#nigYwU$IZQOg?naCKseL|Gb%{Ea*pxU~PZ|1+I#8@X7wl+XVS zeEiR1^*r=wW->qC!67$6#@2&LNMnZDz}lMQVfttf+f<8-gtLbGAj zOt0$~KQ#*AN5463=O9vmOW5@9o1tj){n#k~5Qs5jZ-p}$EQ2u@~ z)9nRK<0%HjyW*DsRR1VA$y=&1SLIia05%?XV|wSCRW@Km;Q`unUE*p;F4~Jr)2IG# zxK!4_+dk@c$tvg(>Z?V>5y9Of`ZWnjpZc>0*=yV+Db^h^l(uK5NBUEtp`qG_hV?2# zrFkg?anw%Uq{^^Be;)C*F%8d`RaLCn`~^sFzVc7|lk>V7?Nva(O0DSc{f#ho+NsAC z{xYU)>dv2qO%hUZ8wjS)U;kgQtlpilZNO{V-&ZD-fNVSpP6S?{4{DEtv+G#(`!UY~ zxX%X+NdT4y5cI!3^s`~!zKS?i=C>eaCKh=c)j{HiPt}@@92Hu2)yVR49qjIPG|QJ%4-e<*H2d z+CG~%yQl@SCuebN+y4G70JQxTIL|_{^y!XdLApj;?a`*c2$@}X;&}DdalB(-vH}0` zC@VX#Vh->N)iLAfP32_(lH)F;9HV3zf`PPpr=qW!(m{oQO9n!>Hk!Ll8l;b=+o~@t z*4t_@fuSA>0H;Q~(y&%}u{?TkX2!z7IVgFz?AT-Ro!?Xv*M1YOYW4dyqm}DUKH3EN zABBv;l^5z!czN&r`=~lD`z?wh-{jq;5b@ahW36h<#}w~)#pHt9HwwD}zd$~lsBe1_ z!YGT*DtnvxT?Alhq*}f`Mc2q!pe_vOrc*yvzs^3xVgyr_gq<9r8D(-r$+WG=fqu!~ zC>c&lY9yy$?aDRC%$FW)IX$M)D>VM*8Q}#3@s1a&lZ{@;UCM0$6!dF-f0^i~O_tH+ z?osIV$vDvsZ=21(YqTTy9=9)96n4Pwf3?xS&^{&LKXFF4mwr}< zEg{uR`kd`FtqFbKa$5Cw=E~o6+jl|msx3Le&vy3{7PUu)U(eZr7;5DKQW^^o{Mc8E zo}7b*836!rRSm}=nLLt(KG}^hOj;Xf(*uqqQE>9RW5ktm5AZp0M>Tk3L5M8xxpQAq zv2-oUX3zdF&~P3oiY}qQFhm*b{~b2C%L9&j3gOcgRr5HnscQy<2JjsQL{e!0G!>rpkK{tpVi8IVFLTOwf_S?N`Dkb zGBTWkW~S1fL~{bvLyJt;&Z))P#Ua-NV@=n=PbU}FEkyg1d4Ry~PgmBgAkEIKFLy}^ zad|)cvl2rs7I2tGoSZ`3lTy8`wBn`4bvxh7UkefE&!Hy?nb%D)pO$bnVxFCW9ttCK z7L_{OoNSC-%;jo?SW}+_aq-)My6>q;r=Ag1DS54{ia#%KT%QZ>LuN15=bsi?<2UZ6*H3dAe2#k=8d*`z6S z3a}0*+=KSMm*q1FR#_e_iu|o+b#`jQXBwoi?Tj007WM|8PGTzm;QR%ge<{+0e%rp- zG8yjIciMZ$+38O($g%KDN_|d60*7tQ>lr~6FOuZD;h*T6RanC;6xrhVthxkLQWb3U z-EdP*X$2no&E#XF2tKK;Sxf4;=K?JKSWLk%gw}_2LO-DyHBW~#6)FfcWxzv7iCp;0#CUKmF`hzF#OtZmFeCSQ+4~c zm#Lk3ab6c5t6fV5hj7#3 z^b79YV>n9w>4hR#dg_F2|8x$@ZDTwQ0qW#0@{^4Vnst$|hyD8hcJkfV{x2?oLY*H$ zDv+>ngY~ZT81i%ih1hZ?ngCS+m?aZfZzF-eU4=D%f6F7C-F-x#>A2lA$nYl7rr61^ zxUq{DAk046DRCUCtqxF!2ikp<%Q_A>Ig6JbdQCiI==qB?(Q-Fe(2(pJ0uP(tFU?>6I1Oy1j5Q;m+aHFWhJKNZq!V z?5WCKu|T_1mY5A+s`k$5E@&j%AFWa4O_4-(8-epFruHo#xIP;tfs5#!A?kz zoNqndI^wdc-}rhwHR@c^ugw9!b)?w6cp#2SQL?hK(z&i?U>;z}0-JLOp6ct174+ZV z*K2>}GJSS|ssGLVW!}(Gr4zR|Ny&iPDu#3T_KDKcl)*e#2Wqs&aBinvqIcv9ma|}lzu2os{-QRXi_YF3v|9OA)?rl%w}lAKF1Lc zTzg&^IS7~9l{Q92bR@nJc`;oacQ;$2V3CVGe%6!?ISU_>`Fy$k5@E{Qg2o#c%X6UEPVDf+gR+ZQ|;X$0+smY zCtwH7sR6O$VBhZKj0wok=V0eb1f~H$kUUS)s*Yqm=5OQroc3+p9?*Z3m6^y-_!3C^P|pT`1y{_Semb${=fJdkH1X`0=!jVT|lkf zB@sThwrdF{#f^FMOccni4<>cq@j<(pl5u%orFMnWh~a9hQNpTgQNl9=U@hl&KI60n zxC29~y`3F*K#~jM;^NrX$Rg5bgU3u1E|WAzM*N!RM_(lw-ZeZ9g?I5DVNw zv|52S>3&7BRJtl}*Gtd_Cnwe!io_uf!80erWge#jTf105Fz~gx(V}aTz(vzly92v ze9c`oX|Sc*t8G|ELcm(eOzBjg>8^a;;@Qbkt;>5)dxQ^@AUIucB3-j>GBbQCrQsr+ zU#-hJr;oAJTmoJW`?tkm}%;whzX3_-Kq`{4H}E^8#^a;{sd1mHzagM95^ zN#<|be>um`@qqaJUd1KQiLmT?BNN{~XZ6dHBxF2%Ht^Y=sJAOUSu&KLJcarc^OQmD z>4UGfKI5r_lA?BOp3Zi07a3t7OK{(O8iUV!V(*W6O?!jzO*POZDu9Qed1gaY%I}wc z((fL~7iy9u>hk7>|Lo5ghW<^ub3U=q(|$ozw?8(D&+bFrR{2e70~chzV%Ao0y=-U*#{M{p;K$nZY+ z$q7w;Q>pZX5wI2jCeHs@N(_@kt96xF?((VdQ~e|aAr+Mf9KapIQJCDn8Ax}dZ=YO? z`MC3C-Je;%p{;5wr;5H8Uen+#r91OyG!9j~V-Hg>?%<*U$8H!6XT~Oocyf3eVVXnA z>CxZf#*r!@%3wr>Xwf2~prXtMkx7OS zB|w-XrNF053NjBVB18ytNRS~3iZVk~hCo6RWQq_%B!PqwNX{GD?>y%`_dMVI?!ABB zzJKxN*}QvNd+oJvvzaW9f0-6*Rsv)hSQ|+b20@TiDBOteCVxemf}}Cb`Z9 zOtK7nYH-;33BuX#h-r4=4qms4HC6ls7+QH{3hhsP^LP;iKm#7jHQbYy-Q%Im6ZPJ- z&wA!rRwII}{lHlzEB2~K7v0^DR`fx*!4_}68?+cEC{e05$6?}h@0+lH(scc?%hYCk z|8DbilW!wU)sJM1Xv(2#ZbFoJnOSoM@MovC{pTn!+8nP5?=~BeG{-Wf1qB*l%Bip(0 zAiw93n=df42@M#L1yverCRmEZgOK7Z)3WZ*rrH0wFJutIE zc~8&FWCskd%M5_Q4_g5-qE`J^hAOs2dX^$L-)ujS+nGV z{#OF*bV~?;y#WYV+P&o?%(k(&TvP}%dyCwC`+xi!J6tZCI2xYk^%oxabId<^%gRfg zZ6g@n8{omh&5AX(k8i4<|3Xv#-yntmFL2{&FLywz^%(Y-pWR$Nau@x3-mFSC(&iRh zKsG0yAOL)@_UOvskWxRq69Atm6$ZzT0g({{z#$rVu%pl7m)a8*fm?6*m<~j%DJ2RS!J$KHZB6);|F|&L$(<&KMy`F znVS(D(ynq}P)nI7WBiKz0Zs}aeqJl>Wgg&6`~sJC@Z6TG;rqc4CMj$44y20N*^sk9 zjA93~7+6r=(3c~V7w2ZOX!BL?fHl)yo|kr{)BMBvoiA-U2U_%rpRTWHC<*V#J|lNU ziFs3f0Z28sd&gw#jNePZE0~^ti=|$nZuT;IBhy(Ur-#vGB*S(}EIT)4{o1#7_DZDH z$)uGeH`AIGHn&gjAJ*w#ZBqQ-2t#OqUV~;jFXj~0s>+ytuX|@@_1x*W;^eiS3dh9=Kld>zm}=-Cw9~2fk7` z_;X6U&cxQQ&*wS(QhIhvEIcJn^VXxN;GggJ$!mUl%l`RK@4i9GSKfIPcJfBW1%eff zHu#ns@6#7%YM>rR2$%?ep{p3laf;*^xvsKSn2~aSoZNH}*uGl^)BOGN_Za*w2Y;^x zfR_1NAN+qi24a!7qTD^MhIEzUtqAN2qjL8DRVldOu59chUF(+F`0VZ;*~#yxqcZH_ zocpF1+E23y_nUbXu7o&dAtwhpN0JQdfg-<^%l~CR+8=f^2DkaMCi5nVws1f$K-p^^ z_`|WH{jl0~0sg@i6Jhi)8?n8+Ib#ea~w3Lf(d^Ht&qy6G`%TWI<<|25X7% z)btGg2X}1mAM}(Sv1oE>UpT40o*9iAs-9X3OEq+*>`Rgdw})Yx)&>LtQtKd3wG+S? zggppw%w03lvh@iKFx~sc?W;`2LSI~8)!;9@q>^+YDXgFq)k+xK3KYfXq_p_7vK(y$ zw|kKIa%&RkV>XdU#W(y8(e@&Niat5hx(L%BR=<3#YfsrQiwJUcV_sU+4J{zLBftLH zkEbVE=;C4`Q%K_2Mp(tyJc>ve*88-&QbZeqauEQ zL&I)3>PxzbR7rQ#D<4CXP8I7>b}3DbdQ@ssV$$h9GnvNkCPs^1)CEM9OHXvHeBr!{ z=}7bRUMA)Duqafnr}?#Wjrd5+!<};+N+UKM|JgD_O$pe z3Js9TcQCXGbUC;Cb0*QXnK3!L6nO}@hocx2>C|3bAZf2#xRh=tHYm6q?!!%WMgV_} z-PAY|ezQM-I8Yjg%Un_nWU-q>p5%MpFbaeGjbE$JdjEP|Oigge3B{npFv?c18NfHQ z>xz2yh<&)h21?B(aSub1yiTHiCm<9aB0HPA752t?A;VU63=}bJ5M$mUH^(@g+1Lsu zfDd_a(djxU%q`hSR|QUyr~%}qg20#@TFH_E@`-D%Y^<}532a{zjp~)_v|ojl?GK%> zJrac#u*d$&R+OGPc)-ynH0*5T5tsnPsTi0!A6kZ}B0IZe98yBAhxyK|Eoq6HRk;xr z-ixmX8vyBYxgN_^Vm|dio+%ttRJLzpv3M)hjOD}KB`u;!HhK=9P8^3gfPU)Exgg!`dS zHQa>0H@?OR+J_9le#HoHI zgKpCkrBsqol{{A$XFQ5HHfB`t3GJ-J%=n;Z>$5uXdU;r^Mob^uU>kVaV;!5#@;vK+ zxGbEznAc5s+KTmw#Df}iXW#CEW@vbe>&Sl58r`c?m(wpZ%!70~1p(yGPnS$3o^FEZ zAiYD}h3+Cwl8=q_(qeSo$WP6%i=@KT+p7GcA=}(TQ{n3Zw`OJTJdookX~}e4@1`<+*o;IaaVhdjX;uBGToqp zlaPZMqWfYE{_IB$<7VjAhpbM}Fqg-6+X%uYZZSm@fu!24Yx5Xg8c`|{D<~+eJES9z ziYz%kfV=-Nv9`AMi_VnZwKAEqH2iT>jn?W5lli}_maWmf6+a!}A^EgOX~uL*6n1hf zaI;yg*poI6<7B|=wl?OO%!liriuJ!~*}q#~d}4Bdz;W zF{i0Zp+Mo9O#E6~H07nI+;;X9g8eT$}w zIBNHW%r`qaaZy-M zoebJ0QR@tf6ojU7Mu*N5JlEi%^?81{JinEQwG#{0UhiP+IOF@P_KTIPRm;cP$L)MU z34YZ(Z{29hPz_Y4=Uz6C_NWhq?l!*eOX)OtSPQ3aSF4O(__obX6$74%4=p(|H4tJ zJvBlhvmobXS;W%0K}q>|u33KXRniMsJbU!}G-CG^sfyE@iT%t48-+k1CmDMl{&KlY z51Xsa>nvhfv8DXkWhc}2g0Ea$Y>$}mHHSt0>fe4jsIAhWk>c~JMlTu%oo3W`BrDbg zw19Y?Zp5{*K3Bkww%8Q-`df?JFR|Z`2B*#!|(+x8XGN+m{b6rOr!t3)OgskE{r5|y(UY2V?eah13am9PR%CysN z`?;J-*j2VTZO;UW?4os`H6<#zQ@2e9V_Jt#^FLViHdR!;*X_5%#N?-0>4#}1`ka`) ziP_;2S`_Nl)2|(0SdEz*#cv>T8UxJ}%T1a>RuQ)L6DGGUY52fdxRDEo4{I+794L5W zJpts z5xE^v926fE^m#luT{M1X=(%c)6Uu((lh?JA$;{ra*Vc0_`uStP#uyWR7OOF|b-5&2 zQKN4kH>zp$v`PL4vm`Fnz}X~5a5({%=C%HzD0u+VeLr+&IUAc>r7=1jo<7ZX&7+Y< zL%q(pxiuF>x=-Bg~q^`)5H>3!?b=^9 zz?eba7_D;>&-eL&0)-w{YR#E{`$%U`grfQ-CM&~N?C%?L0^1w2M9R#C%_Gg`$YZ@Y z;x~%Z_t*IO(V3+&ihA0G&@=d;gCrBvjM6}R6^oLDJ#DYICZdwPbfa~E^2}X$C9d5) zkb?>1lC)~7P~+0DAji3!Gd>1HQdcXR>ab>O&(jZ&K0cY@}m|&Kq z$HIg^DKV~X85!b3Y}5#-M7~u7qpvN_Z#Lr!GyF-hokjOsdY_LuLaTn%lAN#fDqJT~ zxm^%tq?omFYQlRF9B@w_a>+$pv}8G@B++crHvxoP4;}$n`v1UJWQd~5^a#4BM8lk| z(ffGl)ZyoeDANm-%~`kV@mqVw7o0n5^JdLMr&A=eg9BctIkWDBh8#@KqboNtO$Bxw z>mCP_vY><6WC3d=i$n>@B-hvLk>-#cVAWs)6q&|iJ~h@gM}PS-Tu4Wt;xrjAd|(OR z_-%=-;`Uxx9I#~##1${l2_TE`9FeFcx9gffaCk0U4_TDoJ5%5n;V1r(OtJ4}&CcpK z26(B5{QyXZ$?>^fPSmZM?~sN?bu`?b1+_^2Ks8OtUlLd^YKkIYKxS6Zm31ZZ;G@V6 z)Omv8%H3}=W`xO<;HW>Ymx7|3hOgyG8oZ01#oKG~MOWIl)BQXg&wf6)i&?>BJN4si zVKetFw0gxaUo^siSl1NYHgXyX+AWj^)=3h+=yK?+_x$kZT+-8C5LS*6?eEZu4+2--xMb76-DGj6uP!G$tuJwA>U^st4U>1$Aah z8@%8IML{X-0n7#&Zjz)FZkb9arZ*Ae<}d``)t-P~|GODinz>{)23|jJer7b=y4^wF zgc`PJ!*buy$qIp7x}oR8S=BwC87=BxD0ju|8X+EE2utN+rr&&GmqT2ml*R9f(dDi$ z)sU+Z75gY>%OuOu@Z*_1SE`ccd2SQgDaE%n;+oDFXBV&G)QClX9$HtU6(9wDW5v;9 z4jN(7u`4!}MyD$a(rh~M1(>af8^(~d*NJd~v(*hJ2CUa3f`7G?H=XrcJH^hdZk6$l zKSTqJfuQFXH7lmya(AJFTI=_}QPc=rdyMX2`-P}sR+t@+$@LzZ>#R!E9qY@4BNcT{#LjQ)~7?IY98Gx7Zd>J{eGm(`P4+WJ7wcvhM zt)y>m%>e!WLrEvHS7y4QBe-2%mu!kmn+6U=gr}sWcm)RsuWWVSArjDF{CP|bK0quH za}7?O{NiRM$(`1~p*RrmE%6)R!6qZ)>^q9%Une>7zoOWyw%fnj6}3y{bwM>4zFn@N z4yQ38qbT$=wWoqPAEro9!S`qPcgYJSTHQ?E=Oynnz&QQG05B&_IU6!+tMV`a0DN&( zR#B0i=}nCQO!*-zRSUV5Y@&D{uwWm)*`$Dez9I{s`ByJdWB^Zi|FNs93owqGPMtkV z4I&vYKw6BWu75WLSi&xVi~9J&fq-xi4-Yk3|EGET{PulM^<}RA|GSUlpUuGub7mj{ z^|~=7@@LR2g(`TSLr$?E%yFuqiGiNP(I&S95j{+XV$_E8F}r5uE#b?rz1(XGMJmQa zCOL`dS$&WL?SvKr4T`)|883q@0+jd&t@L6cUvf?V0U`#Qh~3uD>L}-r8JlOPAwUa@ z;d)$7;KnZeQ5nuYdT4Nc6-RM*jqbc=9lZxslNdV?MHHk)eH$Lzn5P~WI!MP?{? z9kkusiG~N>e{eAjus*X5p61V$akd$L@s2oa$d$Z;5Y3B9Kq|c(T-JK~)+FeZC0x2b z?EI<-7>Kys{dvyEBi&p>PyWHtscytVjH8j0|ZW zaqN$aP2))x-ysF9h~t*ojL~Aw#bBvBD-m~<;y_9>+PHpKQ)5`mR~W0>A9s_5ZJ@@? z6N+Xw`W*P0LU>FqUO#35*pn8*yhkQj`LfuLhn{C0$V~EvLYXjXN@9{L2}6X!KEA{k z6cLn^&!9{OHGG7NdpR=0%~9VRlugeC+Knz+`rXpNT=-yc-4^VDIxK^$9#-91vkBZ4 z^{l)JxbB2}b*3aXzsaER1vT4s)3nZkY=LcBsH=o%7ssPao$6pWB;5QI=1H8*H^cG9LmcWWy)O-N&$68Ff7lr)m13tBlAOc$5n{^JPCYUCG z(|lN>*JbjrHnq%=oni;61ksG+0J#Bn$mqo04%tO2H6%&Irvowo;Pqdteyn|z*U{0T z53G^;e$`O)pemj(y8!@56b>B|YzUb?ckWD(($@{T!G2&GA*MnQ4?IRYUp?A%z5f@> zW#P}cxWoQ)J(~*q4phmyea_l{qvDvoequw(6&Vr!FF<0K72kPgj2QYz=55_(UE;AH zxiaivodW0rIf!zPEKua1WK(1*iG-wiE6V(ZM|#`Z+HiYY_EB3Qa6nW2f)No0oo&HDwJ$6r3B(}Mqp{Adm$Co{c&)J9UJBC?cJUZ1_}iH zUiNXh;~af)1=|3|LdnkaL?{i9IwAt&IQw?iQ0i+2Pg&ia0fI^%1`b&)f-}}j1lR}u z3`+m0UV*NT&iZO)+`_8a6y4F$arFTW4+S3;o$4mlJFZDCr=xJAlvhxHs&gpw{m~~t z&)!>29S?=)RKujSh7HWSk(>wF9G5iBqDqVXHKMwABdTxm+Yv2Qx!=n=jltb@Ynzbo1{^vI*Q<3OL_3 zmTt_4^`20PIjw%^nXKl^{M}^sf!0&Wphb*4ci8@&iuDkMvn7y?(`STnSG9fBfV#u# z1)C@<#&=Ige%z{`Fa_2{m<(a>?eJIb9h7Ef9x&B~G}b?vNlV!$3xWFlt4D5x$Hd}K zZ(E$y+#J}-9sBm~jiKV9E*{^)6lUm*L&WzD$7E5;cZ{lfhG@|K*R4~7LqMSs4rHl$ z1qi#_D?fhX_r@Jl{aeO2kz(7DqC+Ubck@-hh?-r5Cm{edLL*%C`PTf%w<>X~wrUKSC{+#h4gu{hZlM!r zYfg(F9O@ZlpFW(d)eY=%Bs`Rs6$}{*-1kNWiI3C+iW~at*ui!&`eR#$iEEEno52lL z9}?o1^48|VupJ*`XDKP}t>Ip-GVkR-GH2yq;hZ^v`#KydAH$aKfDDsC<6vR{Vvs#s zAG`@#n)ZXvLCFt5$OWyDPTH~G-9lZ?yI8JW{X z)|j6*6BAy&NguR+3mIDgicQcs%Us((Prcv=f6kCvP6%zA*TW}711XLwwb?x6qx literal 0 HcmV?d00001 diff --git a/Doku/images/analyze_code_coverage_for_selected_tests.png b/Doku/images/analyze_code_coverage_for_selected_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..00c9b7cfad4c6ecf5cf21ebcdab1a88fff5216f4 GIT binary patch literal 40125 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%0D3C_YI)kLZYIYgen#W2DL=moi8k%R4*aVUyrm^ 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 z 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