Repository: wsick/Fayde Branch: master Commit: bd4ef22bb82c Files: 733 Total size: 13.7 MB Directory structure: gitextract_9w_3d99e/ ├── .bowerrc ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── Tools/ │ ├── ThirdParty/ │ │ ├── WatiN/ │ │ │ └── WatiN.Core.XML │ │ └── log4net/ │ │ ├── 1.0/ │ │ │ └── release/ │ │ │ └── log4net.xml │ │ ├── 1.1/ │ │ │ └── release/ │ │ │ └── log4net.xml │ │ ├── 2.0/ │ │ │ └── release/ │ │ │ └── log4net.xml │ │ ├── 3.5/ │ │ │ └── release/ │ │ │ └── log4net.xml │ │ └── 4.0/ │ │ └── release/ │ │ └── log4net.xml │ ├── WickedSick.ForumScraper/ │ │ ├── FluentNhibernateLocalSessionFactoryObject.cs │ │ ├── ICreateUpdateRepository.cs │ │ ├── IDeleteRepository.cs │ │ ├── IReadOnlyRepository.cs │ │ ├── IRepository.cs │ │ ├── ISLForumMemberRepository.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Repository.cs │ │ ├── SLForumMember.cs │ │ ├── SLForumMemberMap.cs │ │ ├── SLForumMemberRepository.cs │ │ ├── SLForumScraper.cs │ │ ├── WickedSick.ForumScraper.csproj │ │ ├── WickedSick.ForumScraper.sln │ │ └── app.config │ ├── WickedSick.MVVM/ │ │ ├── DialogEx/ │ │ │ ├── DialogCompleteParameters.cs │ │ │ ├── DialogControl.cs │ │ │ ├── DialogViewModel.cs │ │ │ └── IDialogCompleteParameters.cs │ │ ├── ObservableObject.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── RelayCommand.cs │ │ ├── TreeViewEx/ │ │ │ └── TreeViewBehavior.cs │ │ ├── ViewModelBase.cs │ │ └── WickedSick.MVVM.csproj │ ├── WickedSick.Thea/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Controls/ │ │ │ ├── LayoutDisplay.xaml │ │ │ ├── LayoutDisplay.xaml.cs │ │ │ ├── PerformanceTicker.xaml │ │ │ ├── PerformanceTicker.xaml.cs │ │ │ ├── Pill.xaml │ │ │ └── Pill.xaml.cs │ │ ├── Helpers/ │ │ │ ├── FaydeInterop.cs │ │ │ └── IJavascriptContext.cs │ │ ├── IEnumerableEx.cs │ │ ├── MainWindow.xaml │ │ ├── MainWindow.xaml.cs │ │ ├── Models/ │ │ │ ├── DebugInteropCache.cs │ │ │ ├── DependencyPropertyCache.cs │ │ │ ├── DependencyValue.cs │ │ │ ├── FrameInfo.cs │ │ │ ├── LayoutMetrics.cs │ │ │ ├── PropertyStorageWrapper.cs │ │ │ └── TimelineGroup.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ ├── Resources/ │ │ │ ├── BoolFontWeightConverter.cs │ │ │ ├── BoolSolidColorBrushConverter.cs │ │ │ ├── BoolVisibilityConverter.cs │ │ │ └── RelativeSizeValueConverter.cs │ │ ├── ViewModels/ │ │ │ ├── ChooseVisualStudioViewModel.cs │ │ │ ├── ExamineViewModel.cs │ │ │ ├── LoadViewModel.cs │ │ │ ├── MainViewModel.cs │ │ │ ├── PerformanceViewModel.cs │ │ │ ├── TimelineViewModel.cs │ │ │ └── VisualViewModel.cs │ │ ├── Views/ │ │ │ ├── ChooseVisualStudioWindow.xaml │ │ │ ├── ChooseVisualStudioWindow.xaml.cs │ │ │ ├── ExamineWindow.xaml │ │ │ ├── ExamineWindow.xaml.cs │ │ │ ├── LoadWindow.xaml │ │ │ ├── LoadWindow.xaml.cs │ │ │ ├── PerformanceView.xaml │ │ │ ├── PerformanceView.xaml.cs │ │ │ ├── TimelineView.xaml │ │ │ ├── TimelineView.xaml.cs │ │ │ ├── VisualTree.xaml │ │ │ └── VisualTree.xaml.cs │ │ ├── WickedSick.Thea.csproj │ │ └── app.config │ ├── WickedSick.Thea.VisualStudioInterop/ │ │ ├── ComMessageFilter.cs │ │ ├── ConsoleTest.cs │ │ ├── ContextNotAvailableException.cs │ │ ├── NativeMethods.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── VisualStudioBroker.cs │ │ ├── VisualStudioInstance.cs │ │ └── WickedSick.Thea.VisualStudioInterop.csproj │ └── WickedSick.Thea.sln ├── bower.json ├── dist/ │ ├── fayde.d.ts │ └── fayde.js ├── gulp/ │ ├── bump.js │ ├── default.js │ ├── dist.js │ ├── reset.js │ ├── stress.js │ ├── test.js │ ├── testsite.js │ └── watch.js ├── gulpfile.js ├── litmus/ │ ├── LitmusTests/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Controls/ │ │ │ ├── ListBoxMonitor.cs │ │ │ ├── PanelMonitor.cs │ │ │ ├── TestClass.cs │ │ │ └── VirtualizingStackPanelMonitor.cs │ │ ├── LitmusTests.csproj │ │ ├── LitmusTests.sln │ │ ├── MainPage.xaml │ │ ├── MainPage.xaml.cs │ │ ├── MainViewModel.cs │ │ ├── Properties/ │ │ │ ├── AppManifest.xml │ │ │ └── AssemblyInfo.cs │ │ ├── ScrollTestOverride.cs │ │ ├── Tests/ │ │ │ ├── ArcSegmentTest.xaml │ │ │ ├── ArcSegmentTest.xaml.cs │ │ │ ├── ArcViewModel.cs │ │ │ ├── BorderTest.xaml │ │ │ ├── BorderTest.xaml.cs │ │ │ ├── BrushTest.xaml │ │ │ ├── BrushTest.xaml.cs │ │ │ ├── ContentControlTest.xaml │ │ │ ├── ContentControlTest.xaml.cs │ │ │ ├── ContentPresenterTest.xaml │ │ │ ├── ContentPresenterTest.xaml.cs │ │ │ ├── DoubleListBox.xaml │ │ │ ├── DoubleListBox.xaml.cs │ │ │ ├── GridSplitterTest.xaml │ │ │ ├── GridSplitterTest.xaml.cs │ │ │ ├── ImageBrushTest.xaml │ │ │ ├── ImageBrushTest.xaml.cs │ │ │ ├── ImageTest.xaml │ │ │ ├── ImageTest.xaml.cs │ │ │ ├── ItemsControl.xaml │ │ │ ├── ItemsControl.xaml.cs │ │ │ ├── Layout.xaml │ │ │ ├── Layout.xaml.cs │ │ │ ├── ListBoxSelectionTest.xaml │ │ │ ├── ListBoxSelectionTest.xaml.cs │ │ │ ├── ListBoxTest.xaml │ │ │ ├── ListBoxTest.xaml.cs │ │ │ ├── MapTest.xaml │ │ │ ├── MapTest.xaml.cs │ │ │ ├── PathTest.xaml │ │ │ ├── PathTest.xaml.cs │ │ │ ├── RectangleTest.xaml │ │ │ ├── RectangleTest.xaml.cs │ │ │ ├── ResourceTest.xaml │ │ │ ├── ResourceTest.xaml.cs │ │ │ ├── ScrollBarTest.xaml │ │ │ ├── ScrollBarTest.xaml.cs │ │ │ ├── ScrollViewerTest.xaml │ │ │ ├── ScrollViewerTest.xaml.cs │ │ │ ├── ShapeStretch.xaml │ │ │ ├── ShapeStretch.xaml.cs │ │ │ ├── TextBoxTest.xaml │ │ │ ├── TextBoxTest.xaml.cs │ │ │ ├── TooltipTest.xaml │ │ │ ├── TooltipTest.xaml.cs │ │ │ ├── TransformTest.xaml │ │ │ ├── TransformTest.xaml.cs │ │ │ ├── nfldraft.xaml │ │ │ └── nfldraft.xaml.cs │ │ └── Themes/ │ │ ├── Cosmopolitan/ │ │ │ ├── Brushes.xaml │ │ │ ├── CoreStyles.xaml │ │ │ ├── Fonts.xaml │ │ │ ├── SDKStyles.xaml │ │ │ ├── Styles.xaml │ │ │ └── ToolkitStyles.xaml │ │ └── generic.xaml │ └── LitmusTests.Web/ │ ├── LitmusTests.Web.csproj │ ├── LitmusTestsTestPage.aspx │ ├── LitmusTestsTestPage.html │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Silverlight.js │ ├── Web.Debug.config │ ├── Web.Release.config │ └── Web.config ├── package.json ├── proto/ │ ├── benchmarks/ │ │ ├── bitwise/ │ │ │ └── test.html │ │ └── matrix/ │ │ ├── CanvasMatrix.js │ │ ├── Matrix3D.js │ │ ├── glMatrix-min.js │ │ └── test.html │ └── silo/ │ ├── UnitTestValidation.htm │ ├── brush-transform.html │ ├── heightTest.htm │ ├── hittest.html │ ├── image-load.html │ ├── keyboard.html │ ├── lineargradient-pattern.html │ ├── matrix-multiplypoint.html │ ├── multiple-composite.html │ ├── overrides.html │ ├── radial-gradient.html │ └── silo1.html ├── src/ │ ├── Clipboard/ │ │ ├── BasicClipboard.ts │ │ ├── Create.ts │ │ ├── IClipboard.ts │ │ └── NetscapeClipboard.ts │ ├── Collections/ │ │ ├── CollectionChangedEventArgs.ts │ │ ├── DeepObservableCollection.ts │ │ ├── FilteredCollection.ts │ │ ├── INotifyCollectionChanged.ts │ │ ├── ItemPropertyChangedEventArgs.ts │ │ ├── ObservableCollection.ts │ │ └── ReadOnlyObservableCollection.ts │ ├── Controls/ │ │ ├── Border.ts │ │ ├── Button.ts │ │ ├── Canvas.ts │ │ ├── CheckBox.ts │ │ ├── ColumnDefinition.ts │ │ ├── ComboBox.ts │ │ ├── ComboBoxItem.ts │ │ ├── ContentControl.ts │ │ ├── ContentPresenter.ts │ │ ├── Control.ts │ │ ├── ControlTemplate.ts │ │ ├── Dialog.ts │ │ ├── Enums.ts │ │ ├── Frame.ts │ │ ├── Grid.ts │ │ ├── GridLength.ts │ │ ├── HeaderedContentControl.ts │ │ ├── HyperlinkButton.ts │ │ ├── Image.ts │ │ ├── Internal/ │ │ │ ├── CursorAdvancer.ts │ │ │ ├── ItemContainersManager.ts │ │ │ ├── RangeCoercer.ts │ │ │ ├── TextBoxContentProxy.ts │ │ │ ├── TextBoxView.ts │ │ │ └── VirtualizingPanelContainerOwner.ts │ │ ├── ItemCollection.ts │ │ ├── ItemsControl.ts │ │ ├── ItemsPanelTemplate.ts │ │ ├── ItemsPresenter.ts │ │ ├── ListBox.ts │ │ ├── ListBoxItem.ts │ │ ├── MediaElement.ts │ │ ├── Page.ts │ │ ├── Panel.ts │ │ ├── PasswordBox.ts │ │ ├── Primitives/ │ │ │ ├── ButtonBase.ts │ │ │ ├── DragEventArgs.ts │ │ │ ├── IScrollInfo.ts │ │ │ ├── Overlay.ts │ │ │ ├── OverlayClosedEventArgs.ts │ │ │ ├── Popup.ts │ │ │ ├── RangeBase.ts │ │ │ ├── RepeatButton.ts │ │ │ ├── ScrollBar.ts │ │ │ ├── ScrollData.ts │ │ │ ├── ScrollEventArgs.ts │ │ │ ├── SelectionChangedEventArgs.ts │ │ │ ├── Selector.ts │ │ │ ├── SelectorSelection.ts │ │ │ ├── Thumb.ts │ │ │ └── ToggleButton.ts │ │ ├── ProgressBar.ts │ │ ├── RadioButton.ts │ │ ├── RichTextBox.ts │ │ ├── RowDefinition.ts │ │ ├── ScrollContentPresenter.ts │ │ ├── ScrollViewer.ts │ │ ├── Slider.ts │ │ ├── StackPanel.ts │ │ ├── TextBlock.ts │ │ ├── TextBox.ts │ │ ├── TextBoxBase.ts │ │ ├── ToolTip.ts │ │ ├── ToolTipService.ts │ │ ├── UserControl.ts │ │ ├── VirtualizingPanel.ts │ │ └── VirtualizingStackPanel.ts │ ├── Core/ │ │ ├── Clone.ts │ │ ├── DPReaction.ts │ │ ├── DataTemplate.ts │ │ ├── DependencyObject.ts │ │ ├── DependencyProperty.ts │ │ ├── DependencyPropertyChangedEventArgs.ts │ │ ├── Enums.ts │ │ ├── FrameworkElement.ts │ │ ├── HierarchicalDataTemplate.ts │ │ ├── INotifyPropertyChanged.ts │ │ ├── InheritableOwner.ts │ │ ├── LayoutInformation.ts │ │ ├── NameScope.ts │ │ ├── Providers/ │ │ │ ├── ActualSizeStore.ts │ │ │ ├── DataContextStore.ts │ │ │ ├── ImmutableStore.ts │ │ │ ├── ImplicitStyleBroker.ts │ │ │ ├── InheritedStore.ts │ │ │ ├── IsEnabledStore.ts │ │ │ ├── LocalStyleBroker.ts │ │ │ ├── PropertyStore.ts │ │ │ ├── ResourcesStore.ts │ │ │ └── StyleSwapper.ts │ │ ├── ResourceDictionary.ts │ │ ├── RoutedEvent.ts │ │ ├── RoutedEventArgs.ts │ │ ├── RoutedPropertyChangedEvent.ts │ │ ├── RoutedPropertyChangingEvent.ts │ │ ├── Setter.ts │ │ ├── SizeChangedEventArgs.ts │ │ ├── Style.ts │ │ ├── TemplateBinding.ts │ │ ├── Triggers.ts │ │ ├── UIElement.ts │ │ ├── UIReaction.ts │ │ ├── UIReactionAttached.ts │ │ ├── VisualTreeEnum.ts │ │ ├── VisualTreeHelper.ts │ │ ├── Walkers.ts │ │ ├── XamlNode.ts │ │ ├── XamlObject.ts │ │ └── XamlObjectCollection.ts │ ├── Data/ │ │ ├── Binding.ts │ │ ├── CollectionViewSource.ts │ │ ├── DataErrorsChangedEventArgs.ts │ │ ├── Enums.ts │ │ ├── IBindingData.ts │ │ ├── ICollectionView.ts │ │ ├── IDataErrorInfo.ts │ │ ├── INotifyDataErrorInfo.ts │ │ ├── IValueConverter.ts │ │ ├── Property/ │ │ │ ├── PropertyPath.ts │ │ │ ├── PropertyPathParser.ts │ │ │ └── PropertyPathWalker.ts │ │ └── RelativeSource.ts │ ├── Documents/ │ │ ├── Block.ts │ │ ├── BlockCollection.ts │ │ ├── Inline.ts │ │ ├── InlineCollection.ts │ │ ├── LineBreak.ts │ │ ├── Paragraph.ts │ │ ├── Run.ts │ │ ├── Section.ts │ │ ├── Span.ts │ │ ├── TextElement.ts │ │ ├── TextReaction.ts │ │ └── Underline.ts │ ├── Engine/ │ │ ├── Application.ts │ │ ├── ClockTimer.ts │ │ ├── Exceptions.ts │ │ ├── FocusManager.ts │ │ ├── InputManager.ts │ │ ├── Inspection.ts │ │ ├── Surface.ts │ │ ├── Theme.ts │ │ ├── ThemeConfig.ts │ │ ├── ThemeManager.ts │ │ ├── ThemedLibrary.ts │ │ └── ThemedLibraryResolver.ts │ ├── Expressions/ │ │ ├── BindingExpression.ts │ │ ├── BindingExpressionBase.ts │ │ ├── DeferredValueExpression.ts │ │ ├── EventBindingExpression.ts │ │ ├── Expression.ts │ │ └── TemplateBindingExpression.ts │ ├── Input/ │ │ ├── ICommand.ts │ │ ├── InteractionHelper.ts │ │ ├── KeyEventArgs.ts │ │ ├── KeyInterop.ts │ │ ├── Keyboard.ts │ │ ├── KeyboardNavigation.ts │ │ ├── MouseEventArgs.ts │ │ ├── MouseInterop.ts │ │ ├── TouchEventArgs.ts │ │ ├── TouchInterfaces.ts │ │ ├── TouchInternal/ │ │ │ ├── ActiveTouchBase.ts │ │ │ ├── NonPointerTouchInterop.ts │ │ │ ├── PointerTouchInterop.ts │ │ │ └── TouchInteropBase.ts │ │ ├── TouchInterop.ts │ │ ├── TouchPoint.ts │ │ └── VirtualKeyboard.ts │ ├── Localization/ │ │ ├── Calendar.ts │ │ ├── CultureInfo.ts │ │ ├── DateTimeFormatInfo.ts │ │ ├── DateTimeFormatter.ts │ │ ├── Format.ts │ │ ├── GregorianCalendar.ts │ │ ├── NumberFormatInfo.ts │ │ ├── NumberFormatter.ts │ │ └── TimeSpanFormatter.ts │ ├── MVVM/ │ │ ├── AutoModel.ts │ │ ├── DialogViewModel.ts │ │ ├── Entity.ts │ │ ├── IOverlayCompleteParameters.ts │ │ ├── IViewModelProvider.ts │ │ ├── ObservableObject.ts │ │ ├── RelayCommand.ts │ │ └── ViewModelBase.ts │ ├── Markup/ │ │ ├── ContentAnnotation.ts │ │ ├── Creator.ts │ │ ├── EventBinding.ts │ │ ├── Internal/ │ │ │ ├── ActiveObject.ts │ │ │ ├── ObjectActor.ts │ │ │ ├── PropertyActor.ts │ │ │ └── ResourcesActor.ts │ │ ├── Loader.ts │ │ ├── Resolver.ts │ │ ├── Retriever.ts │ │ └── StaticResource.ts │ ├── Media/ │ │ ├── Animation/ │ │ │ ├── AnimationBase.ts │ │ │ ├── AnimationStore.ts │ │ │ ├── AnimationUsingKeyFrames.ts │ │ │ ├── BeginStoryboard.ts │ │ │ ├── ColorAnimation.ts │ │ │ ├── ColorAnimationUsingKeyFrames.ts │ │ │ ├── ColorKeyFrame.ts │ │ │ ├── Curves.ts │ │ │ ├── DoubleAnimation.ts │ │ │ ├── DoubleAnimationUsingKeyFrames.ts │ │ │ ├── DoubleKeyFrame.ts │ │ │ ├── EasingFunctionBase.ts │ │ │ ├── EasingFunctions.ts │ │ │ ├── Enums.ts │ │ │ ├── KeyFrame.ts │ │ │ ├── KeySpline.ts │ │ │ ├── ObjectAnimationUsingKeyFrames.ts │ │ │ ├── ObjectKeyFrame.ts │ │ │ ├── PointAnimation.ts │ │ │ ├── PointAnimationUsingKeyFrames.ts │ │ │ ├── PointKeyFrame.ts │ │ │ ├── RepeatBehavior.ts │ │ │ ├── Storyboard.ts │ │ │ └── Timeline.ts │ │ ├── Brush.ts │ │ ├── Effects/ │ │ │ ├── BlurEffect.ts │ │ │ ├── DropShadowEffect.ts │ │ │ └── Effect.ts │ │ ├── EllipseGeometry.ts │ │ ├── Enums.ts │ │ ├── GeneralTransform.ts │ │ ├── Geometry.ts │ │ ├── GeometryGroup.ts │ │ ├── GradientBrush.ts │ │ ├── GradientStop.ts │ │ ├── Imaging/ │ │ │ ├── BitmapImage.ts │ │ │ ├── BitmapSource.ts │ │ │ ├── ImageBrush.ts │ │ │ ├── ImageDecoder.ts │ │ │ └── ImageSource.ts │ │ ├── LineGeometry.ts │ │ ├── LinearGradient/ │ │ │ ├── Interpolator.ts │ │ │ └── Metrics.ts │ │ ├── LinearGradientBrush.ts │ │ ├── Matrix.ts │ │ ├── Matrix3D.ts │ │ ├── Matrix3DProjection.ts │ │ ├── MediaParser.ts │ │ ├── PathFigure.ts │ │ ├── PathGeometry.ts │ │ ├── PathSegment.ts │ │ ├── PathSegments.ts │ │ ├── PlaneProjection.ts │ │ ├── Projection.ts │ │ ├── RadialGradient/ │ │ │ └── Extender.ts │ │ ├── RadialGradientBrush.ts │ │ ├── RectangleGeometry.ts │ │ ├── SolidColorBrush.ts │ │ ├── TextOptions.ts │ │ ├── TileBrush.ts │ │ ├── Transform.ts │ │ ├── Transforms.ts │ │ ├── VSM/ │ │ │ ├── VisualState.ts │ │ │ ├── VisualStateGroup.ts │ │ │ ├── VisualStateManager.ts │ │ │ └── VisualTransition.ts │ │ ├── Videos/ │ │ │ ├── VideoSource.ts │ │ │ └── VideoSourceBase.ts │ │ └── mediagrammar.txt │ ├── Navigation/ │ │ ├── INavigate.ts │ │ ├── NavigationHelper.ts │ │ ├── NavigationService.ts │ │ ├── RedirectRoute.ts │ │ ├── Route.ts │ │ ├── RouteMapper.ts │ │ ├── RouteMapping.ts │ │ ├── UriMapper.ts │ │ └── UriMapping.ts │ ├── Primitives/ │ │ ├── Color.ts │ │ ├── CornerRadius.ts │ │ ├── DateTime.ts │ │ ├── Duration.ts │ │ ├── Font.ts │ │ ├── FontFamily.ts │ │ ├── KeyTime.ts │ │ ├── Length.ts │ │ ├── Point.ts │ │ ├── Rect.ts │ │ ├── Size.ts │ │ ├── Thickness.ts │ │ ├── TimeSpan.ts │ │ └── TypeConversion.ts │ ├── Runtime/ │ │ ├── BError.ts │ │ ├── Bootstrap.ts │ │ ├── Configure.ts │ │ ├── Debug.ts │ │ ├── NumberEx.ts │ │ ├── React.ts │ │ ├── StringEx.ts │ │ └── TimelineProfile.ts │ ├── Shapes/ │ │ ├── DoubleCollection.ts │ │ ├── Ellipse.ts │ │ ├── Enums.ts │ │ ├── Line.ts │ │ ├── Path.ts │ │ ├── PointCollection.ts │ │ ├── Polygon.ts │ │ ├── Polyline.ts │ │ ├── Rectangle.ts │ │ └── Shape.ts │ ├── Text/ │ │ ├── Buffer.ts │ │ ├── History/ │ │ │ ├── DeleteAction.ts │ │ │ ├── IAction.ts │ │ │ ├── InsertAction.ts │ │ │ ├── ReplaceAction.ts │ │ │ └── Tracker.ts │ │ ├── ITextOwner.ts │ │ └── Proxy.ts │ ├── Validation/ │ │ ├── Emit.ts │ │ ├── Validation.ts │ │ ├── ValidationError.ts │ │ ├── ValidationErrorEventAction.ts │ │ └── ValidationErrorEventArgs.ts │ ├── _Debug.ts │ ├── _Types.ts │ └── polyfill/ │ ├── Function_bind.ts │ └── perfex.ts ├── stress/ │ ├── ITestImpl.ts │ ├── Runner.ts │ ├── index.html │ ├── tests/ │ │ ├── StressTest.ts │ │ ├── controls/ │ │ │ └── ListBox.ts │ │ ├── markup/ │ │ │ └── Loader.ts │ │ └── media/ │ │ ├── MediaParser.ts │ │ └── Path2D.ts │ └── tests.json ├── test/ │ ├── Theme.Silverlight.xml │ ├── fayde.json │ ├── mocks/ │ │ ├── BaseTest.xml │ │ ├── TestControl.ts │ │ ├── TestConverter.ts │ │ ├── TestDictionary.xml │ │ ├── TestObservable.ts │ │ ├── TestViewModel.ts │ │ └── TestViewModelProvider.ts │ ├── runner.ts │ ├── tests/ │ │ ├── Binding.ts │ │ ├── DataTemplate.ts │ │ ├── DeepObservableCollection.ts │ │ ├── DependencyProperty.ts │ │ ├── Format.ts │ │ ├── ItemContainersManager.ts │ │ ├── LinearGradientBrush.ts │ │ ├── MVVM/ │ │ │ └── AutoModel.ts │ │ ├── Markup/ │ │ │ ├── Basic.ts │ │ │ ├── Controls.ts │ │ │ ├── Framework.ts │ │ │ ├── Media.ts │ │ │ └── Resources.ts │ │ ├── MarkupExpression.ts │ │ ├── Matrix.ts │ │ ├── Primitives/ │ │ │ └── DateTime.ts │ │ ├── Provider.ts │ │ ├── RadialGradientBrush.ts │ │ ├── RouteMapper.ts │ │ ├── Text/ │ │ │ └── Proxy.ts │ │ ├── Timeline.ts │ │ ├── Transform.ts │ │ ├── TypeConverter.ts │ │ ├── UriMapper.ts │ │ └── XamlNode.ts │ └── tests.html ├── testsite/ │ ├── Binding/ │ │ ├── DoubleListBoxViewModel.ts │ │ ├── TestViewModel.ts │ │ ├── double-listbox.fap │ │ ├── dt-binding.fap │ │ ├── eventbinding.fap │ │ ├── find-ancestor.fap │ │ ├── observablecoll-count.fap │ │ ├── selected-item.fap │ │ └── update-source-trigger.fap │ ├── Clipping/ │ │ └── grid.fap │ ├── Controls/ │ │ ├── RepeatButtonViewModel.ts │ │ ├── TestClass.ts │ │ ├── border.fap │ │ ├── button.fap │ │ ├── checkbox.fap │ │ ├── combobox.fap │ │ ├── contentcontrol.fap │ │ ├── grid.fap │ │ ├── hyperlinkbutton.fap │ │ ├── itemscontrol.fap │ │ ├── listbox.fap │ │ ├── passwordbox.fap │ │ ├── progressbar.fap │ │ ├── radiobutton.fap │ │ ├── repeatbutton.fap │ │ ├── scrollbar.fap │ │ ├── scrollviewer.fap │ │ ├── slider.fap │ │ ├── stackpanel.fap │ │ ├── testview.fayde │ │ ├── textblock.fap │ │ ├── textbox.fap │ │ └── tooltip.fap │ ├── Core/ │ │ ├── TestResourceDictionary.xml │ │ ├── layoutclip.fap │ │ └── resourcedictionary.fap │ ├── Demo/ │ │ ├── TestResourceDictionary.xml │ │ ├── Views/ │ │ │ ├── Core.fayde │ │ │ ├── SDK.fayde │ │ │ ├── Toolkit.fayde │ │ │ ├── contact.fayde │ │ │ ├── home.fayde │ │ │ └── smoke.fayde │ │ └── default.fap │ ├── Format/ │ │ ├── TestViewModel.ts │ │ └── datetime.fap │ ├── IssueTests/ │ │ ├── FilteredViewModel.ts │ │ ├── Issue92ViewModel.ts │ │ ├── Item.ts │ │ ├── ListBoxManagerViewModel.ts │ │ ├── TabIssueViewModel.ts │ │ ├── TextViewModel.ts │ │ ├── dropshadowblur.fap │ │ ├── filtereditemscontrol.fap │ │ ├── grid.fap │ │ ├── imagebrushbg.fap │ │ ├── issue105.fap │ │ ├── issue109.fap │ │ ├── issue11.fap │ │ ├── issue120.fap │ │ ├── issue138.fap │ │ ├── issue154.fap │ │ ├── issue161.fap │ │ ├── issue173.fap │ │ ├── issue177.fap │ │ ├── issue83.fap │ │ ├── issue92.fap │ │ ├── listbox.fap │ │ ├── path-extreme.fap │ │ └── tabissue.fap │ ├── Media/ │ │ ├── ImageSetSourceViewModel.ts │ │ ├── gradient-brush.fap │ │ ├── image-setsource.fap │ │ ├── image-stack.fap │ │ ├── image-stretch.fap │ │ ├── imagebrush.fap │ │ ├── imaging.fap │ │ ├── mediaelement-basic.fap │ │ └── mediaelement-stack.fap │ ├── Navigation/ │ │ ├── NavigationViewModel.ts │ │ ├── Views/ │ │ │ ├── home.fayde │ │ │ ├── page1.fayde │ │ │ └── page2.fayde │ │ └── default.fap │ ├── Overlay/ │ │ ├── ChooserViewModel.ts │ │ ├── MainDialogViewModel.ts │ │ ├── basic.fap │ │ ├── dialog-window.fayde │ │ └── dialog.fap │ ├── Path/ │ │ ├── ArcViewModel.ts │ │ ├── arc-segment.fap │ │ ├── arc-to.html │ │ ├── arc.html │ │ ├── cubic-bezier.html │ │ ├── join/ │ │ │ └── bevel.html │ │ ├── line.html │ │ ├── multientry.html │ │ ├── quad-bezier.html │ │ └── util.js │ ├── Resources/ │ │ ├── AngleConverter.ts │ │ └── NumberConverter.ts │ ├── Shapes/ │ │ ├── PathBoundViewModel.ts │ │ ├── canvas.fap │ │ ├── map.fap │ │ ├── map.ts │ │ ├── path-bound.fap │ │ ├── path-stretch.fap │ │ ├── path.fap │ │ ├── rectangle-basic.fap │ │ ├── rectangle-grid.fap │ │ ├── shape-stack.fap │ │ ├── shape-stretch.fap │ │ └── shapes.fap │ ├── Stress/ │ │ ├── LargeList.ts │ │ └── listbox.fap │ ├── Theme/ │ │ └── Metro.fap │ ├── Toy/ │ │ ├── default2.fap │ │ ├── default3.fap │ │ ├── default6.fap │ │ ├── default7.fap │ │ └── default8.fap │ ├── Validation/ │ │ ├── ExcTestEntity.ts │ │ ├── NotifyTestEntity.ts │ │ ├── TestEntity.ts │ │ ├── dataerrorinfo.fap │ │ ├── exception.fap │ │ ├── map.d.ts │ │ └── notifydataerrorinfo.fap │ ├── ViewTemplates/ │ │ ├── ViewTemplates.fap │ │ ├── VtItemView.fayde │ │ ├── VtItemViewModel.ts │ │ └── VtViewModel.ts │ ├── fayde.json │ ├── fonts/ │ │ └── segoeui/ │ │ └── segoeui.otf │ ├── index.html │ ├── test.html │ ├── videos/ │ │ ├── MediaControlViewModel.ts │ │ └── mediacontrol.fap │ └── xamlload.html ├── themes/ │ ├── Metro.theme.xml │ └── assets/ │ └── metro/ │ ├── brushes.xaml │ ├── corestyles.xaml │ ├── fonts.xaml │ ├── sdk.xaml │ └── toolkit.xaml ├── typings/ │ ├── qunit.d.ts │ └── require.d.ts └── unify.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .bowerrc ================================================ { "directory": "lib", "scripts": { "postinstall": "unify update", "preuninstall": "unify update -un %" } } ================================================ FILE: .gitignore ================================================ [Oo]bj [Bb]in *.suo *.user *.dll *.xap .idea node_modules bower_components/ lib/ src/_Version.ts test/lib/ test/.build/ test/**/*.js test/**/*.js.map test/runner.js test/runner.js.map testsite/lib/ testsite/.build/ stress/.build/ ================================================ FILE: .travis.yml ================================================ language: node_js node_js: - "4" before_install: - npm install -g gulp - npm install -g bower - npm install -g fayde-unify install: npm install before_script: gulp reset script: - gulp version - gulp - gulp test ================================================ FILE: CHANGELOG.md ================================================ ## 0.19.19 (Mar 15, 2017) BUG FIXES * Safely synchronizing Border properties with minerva. * Add missing Closed visual transition to ToolTip. * Safely detaching animations if animation storage is non-existent. ## 0.19.18 (Sep 05, 2016) BUG FIXES * transform: Null checks for null raw transforms in TransformGroup. ([#262](https://github.com/wsick/Fayde/pull/262)) * brush: Ensuring gradient brushes do not crash with unspecified Color Stop. ([#261](https://github.com/wsick/Fayde/pull/261)) * scroll: Fixing touch-based scrolling ([#266](https://github.com/wsick/Fayde/pull/266)) * scroll: Adding missing touch event handlers ([#263](https://github.com/wsick/Fayde/pull/263) [#264](https://github.com/wsick/Fayde/pull/264) [#265](https://github.com/wsick/Fayde/pull/265)) ## 0.19.17 (Mar 10, 2016) BUG FIXES * scroll: Fixing page down/page up scrolling crash. [GH-250] ## 0.19.16 (Feb 20, 2016) BUG FIXES * scroll: Resetting scrolling if ItemsSource changes. [GH-247] ## 0.19.15 (Feb 6, 2016) INTERNAL * build: Building with new scaffold ## 0.19.14 (Feb 2, 2016) SAFETY * markup: Throw XamlParseException from xaml loader for xml parsererror. [GH-236] ## 0.19.13 (Jan 14, 2016) FEATURES * controls: Add Watermark to ComboBox. [GH-229] * brush: Add conversion from SolidColorBrush to Color. [GH-232] SAFETY * brush: Force gradient color stops into [0.0, 1.0] range. [GH-232] ## 0.19.12 (Jan 4, 2016) SAFETY * markup: Report FrameworkTemplate syntax errors. [GH-227] ## 0.19.11 (Dec 21, 2015) FEATURES * navigation: ViewModelProvider can redirect to another route. [GH-215] ## 0.19.10 (Dec 14, 2015) BUG FIXES * compatibility: Scrollbars appearing in Edge, Firefox. [GH-202] ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 BSick7 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ## Fayde [![Build Status](https://travis-ci.org/wsick/Fayde.svg?branch=master)](https://travis-ci.org/wsick/Fayde) [![Bower](https://img.shields.io/bower/v/fayde.svg)](http://bower.io/search/?q=fayde) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/wsick/Fayde?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Inspired by Silverlight; XAML engine using Javascript and rendering to the HTML5 Canvas. Please check out the [wiki](https://github.com/wsick/Fayde/wiki) for more information. Dependencies ======= * nodejs * gulp * bower * yeoman (used for scaffolding new applications) How to use ======= Install the Fayde application generator for yeoman. Then use yeoman to generate a new application. $ npm install -g generator-fayde $ mkdir $ cd $ yo fayde Contributing ======= ### Prerequisites ``` $ npm install -g gulp $ npm install -g bower $ npm install -g fayde-unify ``` ### Setup ``` $ git clone git@github.com:wsick/fayde.git $ cd fayde $ npm install $ gulp reset # cleans bower libs, bower installs, then symlinks to test and stress bootstrappers ``` ### Unit Tests ``` $ gulp test ``` ### Stress Tests Launches default browser with runnable stress tests. ``` $ gulp stress ``` ================================================ FILE: Tools/ThirdParty/WatiN/WatiN.Core.XML ================================================ WatiN.Core Base class for Exceptions thrown by WatiN. Thrown if the searched for element can't be found. Element around which the exception is being thrown. Be advised that this property may be null. Use this class to find a form field by text on the page that is 'nearby' the field. This constraint class is kindly donated by Seven Simple Machines. This shows how to find a text field near the text "User name:". ie.TextField(Find.Near("User name:")).TypeText("jsmythe") In building web applications, often the form elements and the text used to label them is not intrinsically connected (with a <label> tag for instance). In addition the HTML that is rendered in ASP.NET can have changing id/name at each change to the ASPX page. This makes it hard to find form elements and keep the test cases effective without a lot of re-coding and fixing. As a human we can look at a web page and (usually) know what information should go into a form field based on the label. This is because we visually associate nearby text to the field. This class uses the same concept by measuring proximity of the text to field elements and giving a "best guess" to the element desired. Some caveats: Currently this class assume left-to-right layout. A future enhancement could look at the current CultureInfo or support setting a culture on the constructor. This will always find a form element (if any exist on the page) for the given text if the text can be found. This isn't exactly what we as humans do. A future enhancement could change the algorithm to identify the closest text that appears to label the field for all fields. This only supports <input> and <textarea> elements (text fields, check box, radio button, etc.) The text to look for must be only text - it may not contain HTML elements. If it does, the search method will throw an exception to warn you. Describes a constraint that determines whether an object satisfies a given property. Constraints may maintain state across multiple match attempts so as to implement rules such as finding the Nth match. The constraint itself should remain immutable. Constraints can be combined using &&, ||, and ! operators. Constraints can also be printed to a string using the method. If you want to find a Button by it's English or Dutch value this example shows you how to use the Or method to do this: IE ie = new IE("www.yourwebsite.com/yourpage.htm"); Button myButton = ie.Button(Find.ByValue("Cancel").Or(Find.ByValue("Annuleren"))); You can also use the | or || operators, resulting in a bit more readable code. IE ie = new IE("www.yourwebsite.com/yourpage.htm"); Button myButton = ie.Button(Find.ByValue("Cancel") || Find.ByValue("Annuleren")); Returns true if the constraint matches an object described by an attribute bag. The attribute bag The constraint matching context True if the constraint matches Thrown if or is null Combines two contraints to produce a new constraint that is satisfied only when both constraints are satisfied. The operation is short-circuiting: if the first constraint is not satisfied for a given value then the second constraint is not evaluated. This makes the Find.ByName() & Find.By() syntax possible and is needed for the && operator. The first constraint The second constraint The combined constraint Thrown if or is null Combines two contraints to produce a new constraint that is satisfied only when either (or both) constraint is satisfied. The operation is short-circuiting: if the first constraint is satisfied for a given value then the second constraint is not evaluated. This makes the Find.ByName() | Find.By() syntax possible and is needed for the || operator. The first constraint The second constraint The combined constraint Thrown if or is null Returns a new constraint that evaluates to the opposite value of the specified constraint. This makes the ! Find.ByName() syntax possible. The constraint The inverse constraint Thrown if is null Syntax sugar to make the Find.ByName() && Find.By() syntax possible. The constraint Always false Syntax sugar to make the Find.ByName() || Find.By() syntax possible. The constraint Always false Combines this constraint with another one to produce a new constraint that is satisfied only when both constraints are satisfied. The operation is short-circuiting: if the first constraint is not satisfied for a given value then the second constraint is not evaluated. The other constraint The combined constraint Thrown if is null Combines this constraint with another one to produce a new constraint that is satisfied only when either (or both) constraint is satisfied. The operation is short-circuiting: if the first constraint is satisfied for a given value then the second constraint is not evaluated. The other constraint The combined constraint Thrown if is null Returns a new constraint that evaluates to the opposite value of this constraint. The inverse constraint Returns a human-readable description of the constraint. The description Writes a human-readable description of the constraint to a text writer. The text writer for the description, not null Returns true if the constraint matches an object described by an attribute bag. The attribute bag, not null The constraint matching context, not null True if the constraint matches Tracks when a constraint's Match method has been entered by the current thread. Thrown if reentrance has been detected Tracks when a constraint's Match method has been exited by the current thread. Initializes a new promixity constraint. The text that represents the label for the form element. Thrown if is null Quick method to calculate squared distance between two points. X-coordinate of the first point Y-coordinate of the first point X-coordinate of the second point Y-coordinate of the second point Returns the shortest distance between two rectangles. The first rectangle The seconed rectangle The shoutest distance between the nearest faces or vetices This methode can be used if the attribute isn't available as a property of Element or a subclass of Element. The attribute name. This could be different then named in the HTML. It should be the name of the property exposed by the element DOM object. The value of the attribute if available; otherwise null is returned. Should fire the (on)Select event on the element. Called when to submit the form. Called when the file upload dialog should be filled in To inject a dialog handler into to handle the file upload dialog. The file name to enter into the dialog filename field. Waits until the element is fully loaded in the DOM and/or ready to be used. Gets the bounds of the element. The element bounds in screen coordinates Gets the java script element reference to this element. Gets a collection consisting of the immediate children of this element. Gets a collection consisting of all descendants of this element. Gets a collection consisting of the immediate rows within a TABLE or TBODY element. Thrown if applied to an element of the wrong type Gets a collection consisting of the immediate tbodies within a TABLE element. Thrown if applied to an element of the wrong type Gets a collection consisting of the immediate cells within a TR element. Thrown if applied to an element of the wrong type Gets a collection consisting of the options within a SELECT element. Returns the text displayed after this element when it's wrapped in a Label element; otherwise it returns null. Returns the text displayed before this element when it's wrapped in a Label element; otherwise it returns null. Gets the next sibling of this element in the Dom of the HTML page. The next sibling. Gets the previous sibling of this element in the Dom of the HTML page. The previous sibling. Gets the parent element of this element. If the parent type is known you can cast it to that type. The parent. The following example shows you how to use the parent property. Assume your web page contains a bit of html that looks something like this: div a id="watinlink" href="http://watin.sourceforge.net" / a href="http://sourceforge.net/projects/watin" / /div div a id="watinfixturelink" href="http://watinfixture.sourceforge.net" / a href="http://sourceforge.net/projects/watinfixture" / /div Now you want to click on the second link of the watin project. Using the parent property the code to do this would be: Div watinDiv = (Div) ie.Link("watinlink").Parent; watinDiv.Links[1].Click(); List of html attributes that have to be retrieved as properties in order to get the correct value. I.e. for options myOption.getAttribute("selected"); returns nothing if it's selected. However myOption.selected returns true. Mappings from attributnames used by WatiN to attribute/property names used by FireFox Mappings from attributnames used by WatiN to attribute/property names used by FireFox Gets the property. Name of the property. Sets the property. Name of the property. The value. Executes a method with no parameters. Name of the method to execute. Gets the element by property. Name of the property. Returns the element that is returned by the specified property Makes innerHtml inner text (IE) look a like. It comes close but it seems not to cover all conversions cause comparing browser.body.innertext between a IE and FireFox instances will certainly fail on newlines and maybe some spaces. The value. Executes the event. Name of the event to fire. This changes/pins the java script variable name which is used to execute commands on FireFox. Gets the FireFox client port. Gets the name of a variable that stores a reference to the element within FireFox. This not supported in FireFox This not supported in FireFox Represents an area of an image map. This is the base class for all other element types in this project, like Button, Checkbox etc.. It provides common functionality to all these elements This is the base class for all other element types in this project, like Button, Checkbox etc.. It provides common functionality to all these elements Describes a WatiN component such as an element, document, browser or custom control which may be located using various constraints. Provides values for attributes used during constraint matching. Gets the value of an attribute that can be used for constraint evaluation. The name of the attribute The attribute's associated value or null if none Thrown if is null Gets an adapter for the object to a particular type, or null if the object cannot be adapted to that type. The adapter type The adapter, or null if the object cannot be adapted as requested An interface for an object that supports user-specified descriptive text. Gets or sets the description of the object, or null if none. Returns true if the component matches the specified constraint. This method uses a new constraint context each time. Note that doing so will prevent stateful constraints such as from working correctly. The constraint to match True if the component matches the constraint Thrown if is null Returns true if the component matches the specified constraint. The constraint to match The constraint context True if the component matches the constraint Thrown if or is null Gets the value of an attribute that can be used for constraint evaluation. The name of the attribute The attribute's associated value or null if none Returns true if the component matches the specified constraint. The constraint to match, not null The constraint context, not null True if the component matches the constraint Gets the value of an attribute that can be used for constraint evaluation. The name of the attribute, not null The attribute's associated value or null if none Gets or sets the description of the component, or null if none. This constructor is mainly used from within WatiN. this element is located in The element This constructor is mainly used from within WatiN. this element is located in The element finder. Gets the javascript element reference for this . Wraps an element as a control of a particular type. The subclass The control Returns a that represents the current . A that represents the current . Obtains a default description of the element to be used when is null. Clicks this element and waits till the event is completely finished (page is loaded and ready) . Clicks this instance and returns immediately. Use this method when you want to continue without waiting for the click event to be finished. Mostly used when a HTMLDialog or javascript popup is displayed after clicking the element. Handles the implementation of Click and ClickNoWait Gives the (input) focus to this element. Doubleclicks this element. Does a keydown on this element. Does a keydown on this element and does not wait for the page to finish loading. Does a keydown on this element. Does a keydown on this element and does not wait for the page to finish loading. Does a keypress on this element. Does a keypress on this element and does not wait for the page to finish loading. Does a keypress on this element. Does a keypress on this element and does not wait for the page to finish loading. The character. Does a keyup on this element. Does a keyup on this element and does not wait for the page to finish loading. Does a keyup on this element. The character. Does a keyup on this element and does not wait for the page to finish loading. The character. Fires the blur event on this element. Fires the change event on this element. Fires the mouseenter event on this element. Fires the mousedown event on this element. Fires the mouseup event on this element. Fires the specified on this element and waits for it to complete. Name of the event. Fires the event. The collection can be used to set values of the event object in the browser to full fill the needs of javascript attached to the event handler. Name of the event. The event properties that need to be set. Only fires the specified on this element. Only fires the event but doesn't wait for the action to complete. The collection can be used to set values of the event object in the browser to full fill the needs of javascript attached to the event handler. Name of the event. The event properties that need to be set. Flashes this element 5 times. Flashes this element the specified number of flashes. The number of flashes. Highlights this element. if set to true the element is highlighted; otherwise it's not. Waits until the element exists or will time out after 30 seconds. To change the default time out, set Waits until the element exists. Wait will time out after seconds. The timeout in seconds. Waits until the element no longer exists or will time out after 30 seconds. To change the default time out, set Waits until the element no longer exists. Wait will time out after seconds. The timeout in seconds. Waits until the given matches . Wait will time out after seconds. The attributename. The expected value. Waits until the given matches . Wait will time out after seconds. The attributename. The expected value. The timeout. Waits until the given matches . Wait will time out after seconds. The attributename. The expected value. Waits until the given matches . Wait will time out after seconds. The attributename. The expected value. The timeout. Waits until the given matches. Wait will time out after seconds. The Constraint. Waits until the given matches. Wait will time out after seconds. The Constraint. Waits until the given matches. The Constraint. The timeout in seconds. Call this method to make sure the cached reference to the html element on the web page is refreshed on the next call you make to a property or method of this element. When you want to check if an element still you don't need to call the method since calls it internally. The following code shows in which situation you can make use of the refresh mode. The code selects an option of a selectlist and then checks if this option is selected. SelectList select = ie.SelectList(id); // Lets assume calling Select causes a postback, // which would invalidate the reference to the html selectlist. select.Select(val); // Refresh will clear the cached reference to the html selectlist. select.Refresh(); // B.t.w. executing: // select = ie.SelectList(id); // would have the same effect as calling: // select.Refresh(). // Assert against a freshly fetched reference to the html selectlist. Assert.AreEqual(val, select.SelectedItem); If you need to use refresh on an element retrieved from a collection of elements you need to rewrite your code a bit. SelectList select = ie.Spans[1].SelectList(id); select.Refresh(); // this will not have the expected effect Rewrite your code as follows: SelectList select = ie.Span(Find.ByIndex(1)).SelectList(id); select.Refresh(); // this will have the expected effect Finds the native element. This method caches the native element unless its reference becomes invalid in which case it will search for the element again. Unlike the property, this method does not wait for the native element to be found. If the native element is not found then this method returns null. The native element, or null if not found. Clears the cached native element and finds it again. The native element, or null if not found. Clears the cached native element. Gets the cached native element immediately. Waits till the page load is complete. This should only be used on rare occasions because WatiN calls this function for you when it handles events (like Click etc..) To change the default time out, set Gets the closest ancestor of the specified type. An instance of the ancestorType. If no ancestor of ancestorType is found null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor<Div>; Gets the closest ancestor of the specified Type and constraint. The constraint to match with. An instance of the ancestorType. If no ancestor of ancestorType is found null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor<Div>(Find.ByText("First name")); Gets the closest ancestor of the specified Type and constraint. The constraint to match with. An instance of the ancestorType. If no ancestor of ancestorType is found null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor<Div>(div => div.Text == "First name"); Gets the closest ancestor of the specified type. The ancestorType. An instance of the ancestorType. If no ancestor of ancestorType is found null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor(typeof(Div)); Gets the closest ancestor of the specified AttributConstraint. The AttributConstraint to match with. An Element. If no ancestor of ancestorType is found null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor(Find.ByText("First name")); Gets the closest ancestor of the specified Type and Constraint. Type of the ancestor. The Constraint to match with. An instance of the ancestorType. If no ancestor of ancestorType is found null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor(typeof(Div), Find.ByText("First name")); Gets the closest ancestor of the specified Tag and AttributConstraint. The tag of the ancestor. The AttributConstraint to match with. An typed instance of the element matching the Tag and the AttributeConstriant. If no specific type is available, an element of type ElementContainer will be returned. If there is no ancestor that matches Tag and Constraint, null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor("Div", Find.ByText("First name")); Gets the closest ancestor of the specified Tag and AttributConstraint. The tag of the ancestor. The constraint to match with. An typed instance of the element matching the Tag and the AttributeConstriant. If no specific type is available, an element of type ElementContainer will be returned. If there is no ancestor that matches Tag and Constraint, null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor("Div", Find.ByText("First name")); Gets the closest ancestor of the specified Tag. The tag of the ancestor. An typed instance of the element matching the Tag. If no specific type is available, an element of type ElementContainer will be returned. If there is no ancestor that matches Tag, null is returned. The following example returns the Div a textfield is located in. IE ie = new IE("http://www.example.com"); Div mainDiv = ie.TextField("firstname").Ancestor("Div"); Creates an element finder for elements within specialized collections. The element type The native element collection The constraint, or null if none The native element finder Thrown if is null Gets the name of the stylesheet class assigned to this ellement (if any). The name of the class. Gets a value indicating whether this is completely loaded. true if complete; otherwise, false. Gets a value indicating whether this is enabled. true if enabled; otherwise, false. Gets (or sets) the id of this element as specified in the HTML. The id. Gets (or sets) the name of this element as specified in the HTML. The name Gets the id or name (id preferred) of this element as specified in the HTML. The id. Gets the innertext of this element (and the innertext of all the elements contained in this element). The innertext. Returns the text displayed after this element when it's wrapped in a Label element; otherwise it returns null. Returns the text displayed before this element when it's wrapped in a Label element; otherwise it returns null. Gets the inner HTML of this element. The inner HTML. Gets the outer text. The outer text. Gets the outer HTML. The outer HTML. Gets the tag name of this element. The name of the tag. Gets the title. The title. Gets the next sibling of this element in the Dom of the HTML page. The next sibling. Gets the previous sibling of this element in the Dom of the HTML page. The previous sibling. Gets the parent element of this element. If the parent type is known you can cast it to that type. The parent. The following example shows you how to use the parent property. Assume your web page contains a bit of html that looks something like this: div a id="watinlink" href="http://watin.sourceforge.net" / a href="http://sourceforge.net/projects/watin" / /div div a id="watinfixturelink" href="http://watinfixture.sourceforge.net" / a href="http://sourceforge.net/projects/watinfixture" / /div Now you want to click on the second link of the watin project. Using the parent property the code to do this would be: Div watinDiv = (Div) ie.Link("watinlink").Parent; watinDiv.Links[1].Click(); Gets the DomContainer for this element. Gets a reference to the wrapper which incapsulates a native element in the browser. Gets a value indicating whether this exists. true if exists; otherwise, false. Waits until the given expression is true. Wait will time out after seconds. The expression to use. Waits until the given expression is true. The expression to use. The timeout. Initializes a new instance of the class. Mainly used by WatiN internally. The the element is in. The element. Initializes a new instance of the class. Mainly used by WatiN internally. The the element is in. The element finder. Gets the alt-text of the area element. Gets the target url of the area element. Gets the coordinates the area element. Gets the shape of the area element. This class handles the Refresh Warning dialog and does press the retry or cancel button when the dialog shows up. Handles the dialog and returns true when handled with succes Indicates wheter the dialoghandler can handle the given dialog window Determines whether this instance can handle the specified window by checking equals "94C801C5". The window. true if this instance [can handle dialog] the specified window; otherwise, false. A constraint that matches nothing. Gets the singleton instance of the None constraint. A predicate-based constraint. Creates a predicate constraint. The predicate Thrown if is null This logger class can be used as a base class for your specific log class. Implement this interface if you create your own Logger class. For example Logger.LogWriter = new MyLogWriter. Finds a component based on its attributes. If multiple attributes are specified, then all of them must jointly match the component. If no attributes are specified, then the first component of the required type will be used. Abstract base class for attributes that are used to find components based on a declarative description. Finds a component of the specified type within a container. The component type, not null. The container, not null. The component that was found, or null if not found. Finds a component based on its attributes. Gets the constraint expressed by this attribute. The constraint Gets or sets the alt text to find. Gets or sets the regular expression for the alt text to find. Gets or sets the (CSS) class name to find. Gets or sets the regular expression for the (CSS) class name to find. Gets or sets the id of the linked label element to find. Gets or sets the regular expression for the id of the linked label to find. Gets or sets the element id to find. Gets or sets the regular expression for the element id to find. Gets or sets the element name to find. Gets or sets the regular expression for the element name to find. Gets or sets the (inner) text to find. Gets or sets the regular expression for the (inner) text to find. Gets or sets the Url to find. Gets or sets the regular expression for the Url to find. Gets or sets the title to find. Gets or sets the regular expression for the title to find. Gets or sets the value to find. Gets or sets the regular expression for the value to find. Gets or sets the source Url to find. Gets or sets the regular expression for the source Url to find. Gets or sets the zero-based index of the element to find, or -1 if not constrained by index. Associates a description with a component. Abstract base class for attributes that decorate components based on declarative metadata. Decorates the component. The component, not null Associates a description with a component. The description. Thrown if is null Gets the description. This class provides specialized functionality for a HTML input element of type text password textarea hidden and for a HTML textarea element. Returns the same as the Value property A typed collection of instances within a or . This class is mainly used by Watin internally as the base class for all of the element collections. The element type The derived collection type Represents a read-only list of components that can be enumerated, searched and filtered. The component type The derived collection type Represents a read-only list of components that can be enumerated, searched and filtered. The component type Returns true if there exists an element within the collection that matches the given constraint. The constraint to match True if a matching element exists Returns true if there exists an element within the collection that matches the given predicate. The predicate to match True if a matching element exists Gets the first element in the collection. The first element Gets the first element in the collection that matches the given constraint. The constraint to match True if a matching element exists Gets the first element in the collection that matches the given predicate. The predicate to match True if a matching element exists Returns a filtered view of the collection consisting only of the elements that match the given constraint. The constraint to match The filtered element collection Returns a filtered view of the collection consisting only of the elements that match the given predicate. The predicate to match The filtered element collection Creates a base collection. Returned a filtered view of the collection consisting only of the components that match the given constraint. The constraint to match The filtered component collection Returns a filtered view of the collection consisting only of the components that match the given predicate. The predicate to match The filtered component collection Creates a filtered instance of the collection. The constraint, not null The component collection Gets the components of the collection. The collection components Creates a new constraint from a given component-based predicate. The predicate The constraint Gets the component at the specified index in the collection. The zero-based index The component Gets the number of components in the collection. The number of components in the collection Gets a lazily-populated list of all components within the collection. Represents a read-only list of elements that can be enumerated, searched and filtered. The element type Wraps all elements in the collection as controls of a particular type. The subclass The collection of controls Returns true if there exists an element within the collection that matches the given element id. The element id to match True if a matching element exists Returns true if there exists an element within the collection that matches the given element id regular expression. The element id regular expression to match True if a matching element exists Returns a filtered view of the collection consisting only of the elements that match the given constraint. The constraint to match The filtered element collection Returns a filtered view of the collection consisting only of the elements that match the given predicate. The predicate to match The filtered element collection Creates a base collection. The DOM container The element finder Thrown if or is null Wraps all elements in the collection as controls of a particular type. The subclass The collection of controls Creates a filtered instance of the collection with the given finder. The element finder, not null The element collection Gets the DOM container to which the collection belongs. Gets the underlying element finder. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. Represents an element that can contain other elements. This interface is used by all classes which provide access to (sub)elements. Finds an image map area by its id. The area id The area Finds an image map area by its id using a regular expression. The area id regular expression The area Finds an image map area by an Constraint. The Constraint The area Gets the specified Button by its id. The id of the element. Thrown if the given isn't found. This example opens a webpage, types some text and submits it by clicking the submit button. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://www.example.net"); ie.TextField(Find.ById("textFieldComment")).TypeText("This is a comment to submit"); ie.Button("buttonSubmit").Click; ie.Close; } } } Gets the specified Button by using the given to find the Button. The class or one of it's subclasses to find an element by. The class provides factory methodes to create specialized instances. Thrown if the given doesn't match an element in the webpage. This example opens a webpage, types some text and submits it by clicking the submit button. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://www.example.net"); Id textFieldId = new Id("textFieldComment"); ie.TextField(textFieldId).TypeText("This is a comment to submit"); ie.Button(Find.ByText("Submit")).Click; ie.Close; } } } Child returns a child element with the specified id. The element id to match The element ie.Child("id"); Child returns a child element with an id that matches the specified regular expression. The element id regular expression to match The element ie.Child(new Regex("id")); Child returns a child element that matches the specified . The constraint to match The element ie.Child(Find.ById("id")); Child returns a child element that matches the specified . The predicate to match The element ie.Child(div => div.Id == "id"); Gets a collection of all child elements. The child element collection ie.Children(); ChildOfType returns a child element of the desired type with the specified id. Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The element id to match The element ie.ChildOfType<Div>("id"); ChildOfType returns a child element of the desired type with an id that matches the specified regular expression. Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The element id regular expression to match The element ie.ChildOfType<Div>(new Regex("id")); ChildOfType returns a child element of the desired type that matches the specified . Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The constraint to match The element ie.ChildOfType<Div>(Find.ById("id")); ChildOfType returns a child element of the desired type that matches the specified . Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The predicate to match The element ie.ChildOfType<Div>(div => div.Id == "id"); Gets a collection of all child elements of the specified type. Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The child element collection ie.ChildrenOfType<Div>(); ElementOfTypes an element of the desired type with the specified id. Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The element id to match The element ie.ElementOfType<Div>("id"); ElementOfTypes an element of the desired type with an id that matches the specified regular expression. Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The element id regular expression to match The element ie.ElementOfType<Div>(new Regex("id")); ElementOfTypes an element of the desired type that matches the specified . Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The constraint to match The element ie.ElementOfType<Div>(Find.ById("id")); ElementOfTypes an element of the desired type that matches the specified . Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The predicate to match The element ie.ElementOfType<Div>(div => div.Id == "id"); Gets a collection of all elements of the specified type. Ordinarily you should call the element-type specific method such as . This generic method is intended to be used in situations where the type of the element may vary and is specified by a type parameter in the calling code. The element type The element collection ie.ElementsOfType<Div>(); Gets a control object of the desired type that appears first within this element container. The subclass The control object ie.Control<Header>().MyAccountTab.Click(); Gets a control object of the desired type with the specified id. The element id to match The subclass The control object ie.Control<CalendarControl>("fromDateCalendar").SetDate(DateTime.Date); Gets a control object of the desired type with an id that matches the specified regular expression. The element id regular expression to match The subclass The control object ie.Control<CalendarControl>("fromDateCalendar").SetDate(DateTime.Date); Gets a control object of the desired type that matches the specified . The constraint to match The subclass The control object ie.Control<CalendarControl>(Find.ById("fromDateCalendar")).SetDate(DateTime.Date); Gets a control object of the desired type that matches the specified . The predicate to match The subclass The control ie.Control<CalendarControl>(control => control.Name == "SomeName").SetDate(DateTime.Date); Gets a collection of all controls of the desired type. The subclass The control collection ie.Control<CalendarControl>(control => control.Name == "SomeName").SetDate(DateTime.Date); Gets the collection of areas. Gets a typed collection of instances within this . /// This example opens a webpage and writes out the text of each button to the debug window. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://www.example.net"); ButtonCollection buttons = ie.Buttons; foreach (Button button in buttons) { System.Diagnostics.Debug.Writeline(button.Text); } ie.Close; } } } This class hosts functionality for classes which are an entry point to a document and its elements and/or frames. This class gives access to all contained elements of the webpage or the frames within this webpage. This example opens a webpage, types some text and submits it by clicking the submit button. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://www.example.net"); ie.TextField(Find.ById("textFieldComment")).TypeText("This is a comment to submit"); ie.Button(Find.ByText("Submit")).Click; ie.Close; } } } Initializes a new instance of the class. Mainly used by WatiN internally. You should override NativeDocument and set DomContainer before accessing any method or property of this class. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Determines whether the text inside the HTML Body element contains the given . The text. true if the specified text is contained in ; otherwise, false. Determines whether the text inside the HTML Body element contains the given . The regular expression to match with. true if the specified text is contained in ; otherwise, false. Waits until the text is inside the HTML Body element contains the given . Will time out after The text. if the specified text is not found within the time out period. Waits until the text is inside the HTML Body element contains the given . The text. The number of seconds to wait if the specified text is not found within the time out period. Waits until the matches some text inside the HTML Body element. Will time out after The regular expression to match with. if the specified text is not found within the time out period. Waits until the matches some text inside the HTML Body element. The regular expression to match with. The number of seconds to wait if the specified text is not found within the time out period. Gets the text inside the HTML Body element that matches the regular expression. The regular expression to match with. The matching text, or null if none. Gets the specified frame by its id. The id of the frame. Thrown if the given isn't found. Gets the specified frame by its id. The regular expression to match with the id of the frame. Thrown if the given isn't found. Gets the specified frame by its name. The name of the frame. Thrown if the given name isn't found. Runs the javascript code in IE. The javascript code. Runs the script code in IE. The script code. The language. Evaluates the specified JavaScript code within the scope of this document. Returns the value computed by the last expression in the code block after implicit conversion to a string. The following example shows an alert dialog then returns the string "4". Eval("window.alert('Hello world!'); 2 + 2"); The JavaScript code The result converted to a string Thrown when the JavaScript code cannot be evaluated or throws an exception during evaluation Gets a page object of the desired type that wraps this document. The subclass The page object browser.Page<SignInPage>>().SignIn("somebody", "letmein"); Gives access to the wrapped INativeDocument interface. This makes it possible to get even more control of the webpage by using wrapped element. The NativeDocument. Gets the HTML of the Body part of the webpage. The HTML. Gets the Body element of the webpage, or null if none. The body, or null if none. Gets the inner text of the Body part of the webpage. The inner text. Returns a System.Uri instance of the url displayed in the address bar of the browser, of the currently displayed web page. The following example creates a new Internet Explorer instances, navigates to the WatiN Project website on SourceForge and writes the Uri of the currently displayed webpage to the debug window. using WatiN.Core; using System.Diagnostics; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://watin.sourceforge.net"); Debug.WriteLine(ie.Uri.ToString()); } } } Returns the url, as displayed in the address bar of the browser, of the currently displayed web page. The following example creates a new Internet Explorer instances, navigates to the WatiN Project website on SourceForge and writes the Url of the currently displayed webpage to the debug window. using WatiN.Core; using System.Diagnostics; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://watin.sourceforge.net"); Debug.WriteLine(ie.Url); } } } Gets the title of the webpage. The title. Gets the active element in the webpage. The active element or null if no element has the focus. Gets a typed collection of opend within this . Gets the document's DOM container. Gets the native document. The native document. Call this function (from a subclass) as soon as the process is started. Adds the dialog handler. The dialog handler. Removes the dialog handler. The dialog handler. This method must be called by its inheritor to dispose references to internal resources. Waits for the page to be completely loaded using the Settings.WaitForCompleteTimeOut setting Waits for the page to be completely loaded. The number of seconds to wait before timing out Waits for the page to be completely loaded The wait for complete. Captures the web page to file. The file extension is used to determine the image format. The following image formats are supported (if the encoder is available on the machine): jpg, tif, gif, png, bmp. If you want more control over the output, use the class. The filename. Recycles the DomContainer to its initially created state so that it can be reused. true if the method has been called to release resources. Gets the process ID the Internet Explorer or HTMLDialog is running in. The process ID. Returns a browser specific instance. Gets the dialog watcher. The dialog watcher. Resets this instance to the initial defaults. Clones this instance. Get or set the default time out used when calling IE ie = IE.AttachToIE(findBy). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default time out used when calling Element.WaitUntilExists(). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default time out used when calling ie.WaitForComplete(). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default sleep time used when WatiN is waiting for something in a (retry) loop. The default value is 100 milliseconds. Setting the time out to a negative value will throw a . Turn highlighting of elements by WatiN on (true) or off (false). Highlighting of an element is done when WatiN fires an event on an element or executes a methode (like TypeText). Set or get the color to highlight elements. Will be used if HighLightElement is set to true. Visit http://msdn.microsoft.com/workshop/author/dhtml/reference/colors/colors_name.asp for a full list of supported RGB colors and their names. Turn auto closing of dialogs on (true) or off (false). You need to set this value before creating or attaching to any Internet Explorer to have effect. Gets or sets a value indicating whether to auto start the dialog watcher at all. This value is evaluated everytime a new IE instance is created true if dialog watcher should be started when a new IE instance is created; otherwise, false. Gets or sets a value indicating whether to move the cursor to the top left of the screen everytime a new IE instance is created. true when mouse should be moved to top left; otherwise, false. Gets or sets a value indicating whether to make a new instance visible. true if you want to make a new instance visible; otherwise, false. Gets or sets a value indicating whether to make a new instance without session cookie merging. true if you want to make a new instance with cookie merging; otherwise, false. read the section on NoMerge at http://blogs.msdn.com/ie/archive/2008/07/28/ie8-and-reliability.aspx Gets or sets a value indicating whether existing firefox instances will be closed before creating a new instance. true if existing firefox instances need to be closed otherwise, false. Resets this instance to the initial defaults. Clones this instance. Get or set the default time out used when calling IE ie = IE.AttachToIE(findBy). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default time out used when calling Element.WaitUntilExists(). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default time out used when calling ie.WaitForComplete(). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default sleep time used when WatiN is waiting for something in a (retry) loop. The default value is 100 milliseconds. Setting the time out to a negative value will throw a . Turn highlighting of elements by WatiN on (true) or off (false). Highlighting of an element is done when WatiN fires an event on an element or executes a methode (like TypeText). Set or get the color to highlight elements. Will be used if HighLightElement is set to true. Visit http://msdn.microsoft.com/workshop/author/dhtml/reference/colors/colors_name.asp for a full list of supported RGB colors and their names. Turn auto closing of dialogs on (true) or off (false). You need to set this value before creating or attaching to any Internet Explorer to have effect. Gets or sets a value indicating whether to auto start the dialog watcher at all. This value is evaluated everytime a new IE instance is created true if dialog watcher should be started when a new IE instance is created; otherwise, false. Gets or sets a value indicating whether to move the cursor to the top left of the screen everytime a new IE instance is created. true when mouse should be moved to top left; otherwise, false. Gets or sets a value indicating whether to make a new instance visible. true if you want to make a new instance visible; otherwise, false. Gets or sets a value indicating whether to make a new instance without session cookie merging. true if you want to make a new instance with cookie merging; otherwise, false. read the section on NoMerge at http://blogs.msdn.com/ie/archive/2008/07/28/ie8-and-reliability.aspx An element-based constraint. Creates an element constraint. The comparer Thrown if is null Gets the element comparer. Base element collection common to all browsers that communicate with WatiN using javascript. Provides access to the native elements contained within an element or document. The collection recursively enumerates all elements within a subtree of the document. Gets the native elements within the collection. The enumeration of native elements Gets the native elements within the collection by tag name. The tag name to search for The enumeration of native elements Thrown if is null Gets the native elements within the collection by id. The id to find The enumeration of native elements Thrown if is null Gets all the native elements. Enumeration of native elements Gets a collection of elements by tag name. Name of the tag. Collection of elements for the given . Gets a collection of elements by id. The id of the element. Collection of elements for the given . Initializes this instance. Brings the referenced Internet Explorer to the front (makes it the top window) Gets the window style. The style currently applied to the ie window. Make the referenced Internet Explorer full screen, minimized, maximized and more. The style to apply. Sends a Tab key to the IE window to simulate tabbing through the elements (and adres bar). Navigates Internet Explorer to the given . The URL specified as a wel formed Uri. The following example creates an Uri and Internet Explorer instance and navigates to the WatiN Project website on SourceForge. using WatiN.Core; using System; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { Uri URL = new Uri("http://watin.sourceforge.net"); IE ie = new IE(); ie.GoTo(URL); } } } Navigates the browser to the given without waiting for the page load to be finished. The URL to GoTo. The following example creates a new Internet Explorer instance and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE(); ie.GoToNoWait("http://watin.sourceforge.net"); } } } Navigates the browser to the given without waiting for the page load to be finished. The URL to GoTo. The following example creates a new Internet Explorer instance and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { Uri URL = new Uri("http://watin.sourceforge.net"); IE ie = new IE(); ie.GoToNoWait(URL); } } } Navigates Internet Explorer to the given . The URL to GoTo. The following example creates a new Internet Explorer instance and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE(); ie.GoTo("http://watin.sourceforge.net"); } } } Navigates the browser back to the previously displayed Url (like the back button in Internet Explorer). true if navigating back to a previous url was possible, otherwise false Navigates the browser forward to the next displayed Url (like the forward button in Internet Explorer). true if navigating forward to a previous url was possible, otherwise false Closes and then reopens the browser with a blank page. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge and then reopens the browser. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { LogonDialogHandler logon = new LogonDialogHandler("username", "password"); IE ie = new IE(new Uri("http://watin.sourceforge.net"), logon); ie.Reopen(); } } } Reloads the currently displayed webpage (like the Refresh/reload button in a browser). Closes the browser. Attach to an existing browser instance. The first instance that matches the given will be returned. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. An instance of the specified type T. BrowserNotFoundException will be thrown if a browser window with the given isn't found within 30 seconds. To change this default, set The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). When found, ieExample will hold a pointer to this Internet Explorer instance and can be used to test the Example page. IE ieExample = IE.AttachTo<IE>(Find.ByTitle("Example")); A partial match should also work IE ieExample = IE.AttachTo<IE>(Find.ByTitle("Exa")); Attach to an existing browser instance. The first instance that matches the given will be returned. The WatiN browser type to attach to. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. An instance of the specified type T. BrowserNotFoundException will be thrown if a browser window with the given isn't found within 30 seconds. To change this default, set The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). When found, browser will hold a pointer to this Internet Explorer instance and can be used to test the Example page. var browser = Browser.AttachTo(typeof(IE), Find.ByTitle("Example")); A partial match should also work var browser = Browser.AttachTo(typeof(IE), Find.ByTitle("Exa")); Attach to an existing browser instance. The first instance that matches the given will be returned. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. The number of seconds to wait before timing out A instance of the specified type. BrowserNotFoundException will be thrown if a browser window with the given isn't found within seconds. The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). It will try to find an Internet Exlorer instance for 60 seconds maxs. When found, ieExample will hold a pointer to this Internet Explorer instance and can be used to test the Example page. IE ieExample = IE.AttachTo<IE>(Find.ByTitle("Example"), 60); A partial match should also work IE ieExample = IE.AttachTo<IE>(Find.ByTitle("Exa"), 60); Attach to an existing browser instance. The first instance that matches the given will be returned. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. The number of seconds to wait before timing out The WatiN browser type to attach to. A instance of the specified type. BrowserNotFoundException will be thrown if a browser window with the given isn't found within seconds. The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). It will try to find an Internet Exlorer instance for 60 seconds maxs. When found, browser will hold a pointer to this Internet Explorer instance and can be used to test the Example page. var browser = Browser.AttachTo(typeof(IE), Find.ByTitle("Example"), 60); A partial match should also work var browser = Browser.AttachTo(typeof(IE), Find.ByTitle("Exa"), 60); Attach to an existing browser instance. The first instance that matches the given will be returned. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. An instance of the given type. BrowserNotFoundException will be thrown if a browser window with the given isn't found within 30 seconds. To change this default, set The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). When found, ieExample will hold a pointer to this Internet Explorer instance and can be used to test the Example page. IE ieExample = IE.AttachTo<IE>(Find.ByTitle("Example")); A partial match should also work IE ieExample = IE.AttachTo<IE>(Find.ByTitle("Exa")); Attach to an existing browser instance. The first instance that matches the given will be returned. The WatiN browser type to attach to. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. An instance of the given type. BrowserNotFoundException will be thrown if a browser window with the given isn't found within 30 seconds. To change this default, set The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). When found, browser will hold a pointer to this Internet Explorer instance and can be used to test the Example page. var browser = Browser.AttachTo(typeof(IE), Find.ByTitle("Example")); A partial match should also work var browser = Browser.AttachTo(typeof(IE), Find.ByTitle("Exa")); Attach to an existing browser but don't wait until the whole page is loaded. The first instance that matches the given will be returned. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. The number of seconds to wait before timing out An instance of the specified type. BrowserNotFoundException will be thrown if a browser window with the given isn't found within seconds. The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). It will try to find an Internet Exlorer instance for 60 seconds maxs. When found, ieExample will hold a pointer to this Internet Explorer instance and can be used to test the Example page. IE ieExample = IE.AttachToNoWait<IE>(Find.ByTitle("Example"), 60); A partial match should also work IE ieExample = IE.AttachToNoWait<IE>(Find.ByTitle("Exa"), 60); Attach to an existing browser but don't wait until the whole page is loaded. The first instance that matches the given will be returned. The WatiN browser type to attach to. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. The number of seconds to wait before timing out An instance of the specified type. BrowserNotFoundException will be thrown if a browser window with the given isn't found within seconds. The following example searches for an Internet Exlorer instance with "Example" in it's titlebar (showing up as "Example - Microsoft Internet Explorer"). It will try to find an Internet Exlorer instance for 60 seconds maxs. When found, ieExample will hold a pointer to this Internet Explorer instance and can be used to test the Example page. var browser = Browser.AttachToNoWait(typeof(IE), Find.ByTitle("Example"), 60); A partial match should also work var browser = Browser.AttachToNoWait(typeof(IE), Find.ByTitle("Exa"), 60); Does the specified browser type exist. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. true if a browser instance matches the given . Otherwise it returns false. Does the specified browser type exist. The WatiN browser type to attach to. The of the browser window to find. Find.ByUrl(), Find.ByUri(), Find.ByTitle() and Find.By("hwnd", windowHandle) are supported. true if a browser instance matches the given . Otherwise it returns false. Register a specific helper to attacht to . Type of the browser. The attach to helper. Initializes a new instance of the class. Initializes a new instance of the class. The url to go to Initializes a new instance of the class. The url to go to Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. Initalizes the executable path. Initializes the executable path to FireFox using the registry. The mozilla key. Waits until the page is completely loaded Closes the browser. Releases unmanaged and - optionally - managed resources true to release both managed and unmanaged resources; false to release only unmanaged resources. Gets the current FireFox process (all instances run under 1 process). The current FireFox process or null if none is found. Gets or sets the path to FireFox executable. By default the registry and common file locations will be used to find the the firefox executable. When manually setting this property make sure to also include the path and name of the executable (c:\somedirectory\firefox.exe) The path to exe. Used by CreateElementVariableName Creates a unique variable name, i.e. doc.watin23 A unique variable. Provides a singleton empty array instance. The type of array to provide. An empty array of type . This class provides factory methods for de most commonly used attributes to find an element on a web page. Finds an element by its alt text. The alt text to find. The AttributeConstraint ie.Image(Find.ByAlt("alt text")).Name Finds an element by its alt text. The regular expression for the alt text to find. The AttributeConstraint ie.Image(Find.ByAlt(new Regex("pattern goes here")))).Name Finds an element by its alt text. The compare. The AttributeConstraint Image img = ie.Image(Find.ByAlt(new StringContainsAndCaseInsensitiveComparer("alt text"))); Finds an element by its alt text. The predicate method to call to make the comparison. The AttributeConstraint Image img = ie.Image(Find.ByAlt(MyOwnCompareMethod)); Finds an element having an exact match with the (CSS) class name of the element. The class name to find. The AttributeConstraint ie.Div(Find.ByClass("HighlightedHeader")).Name Finds an element with the (CSS) class name containing when is set to false. The class name to find. When false, class name should contain given otherwise it should match exactly. The AttributeConstraint To find the first div with a class attribute containing 'HighlightedHeader' ie.Div(Find.ByClass("HighlightedHeader", false)).Name To find the first div with a class attribute having an exact match with 'HighlightedHeader' ie.Div(Find.ByClass("HighlightedHeader", true)).Name or just call ie.Div(Find.ByClass("HighlightedHeader")).Name Finds an element by its (CSS) class name text. The regular expression for the class name to find. The AttributeConstraint ie.Div(Find.ByClass(new Regex("HighlightedHeader")))).Name Finds an element by its (CSS) class name text. The comparer. The AttributeConstraint Div div = ie.Div(Find.ByClass(new StringContainsAndCaseInsensitiveComparer("Highlighted"))); Finds an element by its (CSS) class name text. The predicate method to call to make the comparison. The AttributeConstraint Div div = ie.Div(Find.ByClass(MyOwnCompareMethod)); Finds a Label element by the id of the element it's linked with. Id of the element the label is linked with. ie.Label(Find.ByFor("optionbuttonid")).Text Finds a Label element by the id of the element it's linked with. Regular expression to find the matching Id of the element the label is linked with. ie.Label(Find.ByFor(new Regex("pattern goes here")).Text Finds a Label element by the id of the element it's linked with. The element to which the Label element is attached. This element must an Id value. CheckBox checkbox = ie.CheckBox("checkboxid"); ie.Label(Find.ByFor(checkbox).Text Finds a Label element by the id of the element it's linked with. The comparer. Label label = ie.Label(Find.ByFor(new StringContainsAndCaseInsensitiveComparer("optionbuttonid"))); Finds a Label element by the id of the element it's linked with. The predicate method to call to make the comparison. The AttributeConstraint Label label = ie.Label(Find.ByFor(MyOwnCompareMethod)); Finds an element by its id. Element id to find. ie.Link(Find.ById("testlinkid")).Url Finds an element by its id. Regular expression to find a matching Id. ie.Link(Find.ById(new Regex("pattern goes here"))).Url Finds an element by its id. The compare. Link link = ie.Link(Find.ById(new StringContainsAndCaseInsensitiveComparer("linkId1"))); Finds an element by its id. The predicate method to call to make the comparison. The AttributeConstraint Link link = ie.Link(Find.ById(MyOwnCompareMethod)); Finds an element by its index. The zero-based index. // Returns the 3rd link with class "link". Link link = ie.Link(Find.ByClass("link") & Find.ByIndex(2)); Finds an element by its name. Name to find. ie.Link(Find.ByName("testlinkname")).Url Finds an element by its name. Regular expression to find a matching Name. ie.Link(Find.ByName(new Regex("pattern goes here")))).Url Finds an element by its name. The comparer. ie.Link(Find.ByName(new StringContainsAndCaseInsensitiveComparer("linkname")))).Url Finds an element by its name. The predicate method to call to make the comparison. The AttributeConstraint Link link = ie.Link(Find.ByName(MyOwnCompareMethod)); Finds an element by its (inner) text. Element text ie.Link(Find.ByText("my link")).Url Finds an element by its (inner) text. Regular expression to find a matching Text. ie.Link(Find.ByText(new Regex("pattern goes here"))).Url Finds an element by its (inner) text. The comparer. Link link = ie.Link(Find.ByText(new StringContainsAndCaseInsensitiveComparer("my li"))).Url Finds an element by its (inner) text. The predicate method to call to make the comparison. The AttributeConstraint Link link = ie.Link(Find.ByText(MyOwnCompareMethod)); Finds an element, frame, IE instance or HTMLDialog by its Url. The well-formed url to find. ie.Link(Find.ByUrl("http://watin.sourceforge.net")).Url Finds an element, frame, IE instance or HTMLDialog by its Url. The well-formed url to find. Set to true to ignore querystring when matching. ie.Link(Find.ByUrl("http://watin.sourceforge.net", true)).Url Finds an element, frame, IE instance or HTMLDialog by its Url. The uri to find. ie.Link(Find.ByUrl(new Uri("watin.sourceforge.net"))).Url Finds an element, frame, IE instance or HTMLDialog by its Url. The uri to find. Set to true to ignore querystring when matching. ie.Link(Find.ByUrl(new Uri("watin.sourceforge.net", true))).Url Finds an element, frame, IE instance or HTMLDialog by its Url. Regular expression to find a matching Url. ie.Link(Find.ByUrl(new Regex("pattern goes here"))).Url Finds an element, frame, IE instance or HTMLDialog by its Url. The comparer. ie.Link(Find.ByUrl(new UriComparer(uri, ignoreQuery))).Url Finds an element, frame, IE instance or HTMLDialog by its Url. The predicate method to call to make the comparison. The AttributeConstraint Link link = ie.Link(Find.ByUrl(MyOwnCompareMethod)); Finds an element, frame, IE instance or HTMLDialog by its Title. The title to match partially. IE ie = IE.AttachToIE(Find.ByTitle("WatiN Home Page")) Finds an element, frame, IE instance or HTMLDialog by its Title. Regular expression to find a matching Title. IE ie = IE.AttachToIE(Find.ByTitle(new Regex("pattern goes here"))) Finds an element, frame, IE instance or HTMLDialog by its Title. The comparer. IE ie = IE.AttachToIE(Find.ByTitle(new StringContainsAndCaseInsensitiveComparer("part of the title"))); Finds an element, frame, IE instance or HTMLDialog by its Title. The predicate method to call to make the comparison. The AttributeConstraint IE ie = IE.AttachToIE(Find.ByTitle(MyOwnCompareMethod)); Finds an element by its value attribute. The value to find. Button button = ie.Button(Find.ByValue("My Button")) Finds an element by its value attribute. Regular expression to find a matching Value. Button button = ie.Button(Find.ByValue(new Regex("pattern goes here"))) Finds an element by its value attribute. The comparer. Button button = ie.Button(Find.ByValue(new StringContainsAndCaseInsensitiveComparer("pattern goes here"))); Finds an element by its value attribute. The predicate method to call to make the comparison. The AttributeConstraint Button button = ie.Button(Find.ByValue(MyOwnCompareMethod)); Finds an by its source (src) attribute. Src to find. ie.Image(Find.BySrc("image.gif")) Finds an by its source (src) attribute. Regular expression to find a matching Src. ie.Image(Find.BySrc(new Regex("pattern goes here")))) Finds an by its source (src) attribute. The comparer. Image image = ie.Image(Find.BySrc(new StringContainsAndCaseInsensitiveComparer("watin/sourceforge"))); Finds an by its source (src) attribute. The predicate method to call to make the comparison. The AttributeConstraint Image image = ie.Image(Find.BySrc(MyOwnCompareMethod)); Finds an element by an attribute. The attribute name to compare the value with. The exact matching value of the attribute. ie.Link(Find.By("id", "testlinkid")).Url Finds an element by an attribute. The attribute name to compare the value with. Regular expression to find a matching value of the given attribute. ie.Link(Find.By("id", new Regex("pattern goes here"))).Url Finds an element by an attribute. The attribute to compare the value with. The comparer to be used. Link link = ie.Link(Find.By("innertext", new StringContainsAndCaseInsensitiveComparer("pattern goes here"))); Finds an element by an attribute. The attribute to compare the value with. The predicate method to call to make the comparison. The AttributeConstraint Link link = ie.Link(Find.By("innertext", MyOwnCompareMethod)); Finds an element by a style attribute. Name of the style attribute. The exact matching value of the attribute. ie.Span(Find.ByStyle("background-color", "red")) Finds an element by a style attribute. Name of the style attribute. Regular expression to find a matching value of the given style attribute. ie.Link(Find.ByStyle("font-family", new Regex("pattern goes here"))) Finds an element by a style attribute. Name of the style attribute. The comparer. Link link = ie.Link(Find.ByStyle("font-family", new StringContainsAndCaseInsensitiveComparer("aria"))); Finds an element by a style attribute. Name of the style attribute. The predicate method to call to make the comparison. The AttributeConstraint Link link = ie.Link(Find.ByStyle("font-family", MyOwnCompareMethod)); Finds an Element by using a specialized Element comparer. The comparer An ElementConstraint instance Finds an Element by calling the predicate for each element that needs to be evaluated. The predicate An ElementConstraint instance Finds an Element by calling the predicate for each element that needs to be evaluated. The predicate An ElementConstraint instance Finds an Element by determining whether there exists some other element in a position relative to it, such as an ancestor or descendant. The relative selector An ElementConstraint instance // Finds a row by the fact that it contains a table cell with particular text content. ie.TableRow(Find.ByExistenceOfRelatedElement<TableRow>(row => row.TableCell(Find.ByText("foo"))) Finds the first element of the expected type. Finds a form element by looking for specific text on the page near the field. The text near the field TextField = ie.TextField(Find.Near("User Name")); Finds a form element by looking for the <label> associated with it by searching the label text. The text of the label element This will look for a checkbox that has a label element with the innerText "User enabled" var checkbox = ie.CheckBox(Find.ByLabelText("User Name:")); Finds a form element by looking for the <label> associated with it by searching the label text. The regular expression that should match the text of the label element This will look for a checkbox that has a label element with innerText starting with "User" var checkbox = ie.CheckBox(Find.ByLabelText(new Regex("^User"))); Finds a form element by looking for the <label> associated with it by searching the label text. The predicate method to call to make the comparison. This will look for a checkbox that has a label element with innerText starting with "User" var checkbox = ie.CheckBox(Find.ByLabelText(text => text !=null && text.StartsWith("User"))); Finds an element by its default characteristics as defined by . The string to match against A constraint Finds an element by its default characteristics as defined by . The regular expression to match against A constraint Finds a element by the (inner) text of one of its cells. Element text The zero-based column index ie.TableRow(Find.ByTextInColumn("my link")).Url Finds a element by the (inner) text of one of its cells. Regular expression to find a matching Text. The zero-based column index ie.TableRow(Find.ByTextInColumn(new Regex("my link"))).Url Finds a element by the (inner) text of one of its cells. The comparer. The zero-based column index ie.TableRow(Find.ByTextInColumn(new StringContainsAndCaseInsensitiveComparer("my li"))).Url Finds a element by the (inner) text of one of its cells. The predicate method to call to make the comparison. The zero-based column index ie.TableRow(Find.ByTextInColumn(MyOwnCompareMethod)).Url Finds anything. Finds nothing. This class provides specialized functionality for a HTML input element of type file. Specifies the HTML tags associated with a given class. Associates a tag with an class. The tag name Thrown if is null Creates an object from the contents of the attribute. The element tag Gets the tag name. Gets or sets the "type" attribute value to qualify which variations of an INPUT tag are supported. Gets or sets the "index" attribute value to force a specific order of the ElementTag in a list of ElementTags. This class handles the Security Warning dialog and does press the OK button when the dialog shows up. Handles the dialog if the is a security alert dialog. The window. Determines whether the specified window is a security alert dialog by checking . Valid value is "94C80AC4" or "94C808C4". The window. true if the specified window is a security alert dialog; otherwise, false. Initializes a new instance of the class. Name of the file which should be uploaded. Handles the File upload dialog. The window. Determines whether this instance can handle the specified window. It check for the value "96CC20C4" , "96CC02C4" or "97CC02C4". The window to validate. true if this instance can handle the dialog; otherwise, false. Class that contains native win32 API support. The GetForegroundWindow function returns a handle to the foreground window. Shows a Window To perform certain special effects when showing or hiding a window, use AnimateWindow. The first time an application calls ShowWindow, it should use the WinMain function's nCmdShow parameter as its nCmdShow parameter. Subsequent calls to ShowWindow must use one of the values in the given list, instead of the one specified by the WinMain function's nCmdShow parameter. As noted in the discussion of the nCmdShow parameter, the nCmdShow value is ignored in the first call to ShowWindow if the program that launched the application specifies startup information in the structure. In this case, ShowWindow uses the information specified in the STARTUPINFO structure to show the window. On subsequent calls, the application must call ShowWindow with nCmdShow set to SW_SHOWDEFAULT to use the startup information provided by the program that launched the application. This behavior is designed for the following situations: Applications create their main window by calling CreateWindow with the WS_VISIBLE flag set. Applications create their main window by calling CreateWindow with the WS_VISIBLE flag cleared, and later call ShowWindow with the SW_SHOW flag set to make it visible. Handle to the window. Specifies how the window is to be shown. This parameter is ignored the first time an application calls ShowWindow, if the program that launched the application provides a STARTUPINFO structure. Otherwise, the first time ShowWindow is called, the value should be the value obtained by the WinMain function in its nCmdShow parameter. In subsequent calls, this parameter can be one of the WindowShowStyle members. If the window was previously visible, the return value is nonzero. If the window was previously hidden, the return value is zero. This method incapsulates all the details of getting the full length text in a StringBuffer and returns the StringBuffer contents as a string. The handle to the window Text of the window This method incapsulates all the details of getting the full length classname in a StringBuffer and returns the StringBuffer contents as a string. The handle to the window Text of the window Compares the class names. The hWND of the window if which the class name should be retrieved. Expected name of the class. Enumeration of the different ways of showing a window using ShowWindow Hides the window and activates another window. See SW_HIDE Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time. See SW_SHOWNORMAL Activates the window and displays it as a minimized window. See SW_SHOWMINIMIZED Activates the window and displays it as a maximized window. See SW_SHOWMAXIMIZED Maximizes the specified window. See SW_MAXIMIZE Displays a window in its most recent size and position. This value is similar to "ShowNormal", except the window is not actived. See SW_SHOWNOACTIVATE Activates the window and displays it in its current size and position. See SW_SHOW Minimizes the specified window and activates the next top-level window in the Z order. See SW_MINIMIZE Displays the window as a minimized window. This value is similar to "ShowMinimized", except the window is not activated. See SW_SHOWMINNOACTIVE Displays the window in its current size and position. This value is similar to "Show", except the window is not activated. See SW_SHOWNA Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window. See SW_RESTORE Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. See SW_SHOWDEFAULT Windows 2000/XP: Minimizes a window, even if the thread that owns the window is hung. This flag should only be used when minimizing windows from a different thread. See SW_FORCEMINIMIZE Expresses an algorithm for finding elements. Creates an element finder. The element tags considered by the finder, or null if all tags considered The constraint used by the finder to filter elements, or null if no additional constraint Returns true if there exists at least one element that matches the finder's constraint. True if there is at least one matching element Finds the first element that matches the finder's constraint. The first matching element, or null if none Finds all elements that match the finder's constraint. An enumeration of all matching elements Creates a new finder filtered by an additional constraint. The additional constraint The filtered element finder Thrown if is null Returns a string representation of the element tags. Returns a string representation of the constraint. Creates a new finder filtered by an additional constraint. The additional constraint, not null The filtered element finder Finds all elements that match the finder's constraint. An enumeration of all matching elements Gets the read-only list of tags considered by the finder. Gets a list of unique tag names from . The element tag names, which may contain null to signify that any tag is allowed Gets the constraint used by the finder to filter elements. Retains temporary state for each constraint involved in a matching operation. The constraint context is used whenever a constraint needs to store information across successive matches. Consequently the constraint object itself remains immutable and may be shared across multiple usage. The constraint context is initially empty at the beginning of each match operation. Creates an empty constraint context. Saves constraint-specific data in the context. The constraint that wishes to store its state The value to be stored, or null if none Thrown if is null Gets previously saved constraint-specific data from the context. The constraint that wishes to retrieve its state The saved data, or null if none saved Thrown if is null This class provides specialized functionality for a HTML input element of type radio. Base class for and provides support for common functionality. A constraint that matches the element with the Nth zero-based index. This constraint works by counting the number of times the match method is called and returning true when the counter reaches N, starting from zero. Creates an index constraint. The zero-based index of the element to match This comparer will always return true no matter what value it is given to compare with. Use this class as the base to create your own comparer classes with. Overide the method and implement the desired compare logic. Compares the specified value. You need to override this method and provide your own implementation for the comparison with the given . The value. Should return true or false, which is the default. Accepts a value bit it will be ignored The ignored value. Will always return true Gets the singleton instance of the comparer. Behaviour common to all types of browser documents. Runs the script. The script code to run. The language the script was written in. Gets the value for the corresponding . Name of the property. The value for the corresponding . Gets the bounds of all matching text substrings within the document. The text to find The text bounds in screen coordinates Determines whether the text inside the HTML Body element contains the given . The text. true if the specified text is contained in Html; otherwise, false. Gets the collection of all elements in the document. Gets the containing frame element, or null if none. Gets the body element for the current docuemnt. The body element. Gets the URL for the current document. The URL for the current document. Gets the title of the current docuemnt. The title of the current document. Gets the active element. The active element. Gets the name of the java script variable. The name of the java script variable. Gets the list of frames. The list of frames of the current document. Gets the underlying object. Defines the different types of javascript engine. Unkown javascript engine JScript engine used by internet explorer http://en.wikipedia.org/wiki/JScript. WebKit javascript engine used be Safari, Chrome and others http://en.wikipedia.org/wiki/WebKit Mozilla javascript engine. A control class describes the content and behaviors of a unit of interacting elements within a page (a user control). Each application control can be modeled as a subclass of . A control class wraps a subtree of DOM elements and provides access to its contents and behaviors by defining properties and methods to represent them. In the typical case, the properties of a control class provide access to its elements and state. Likewise, the methods of a control class perform actions or transactions. The control class encapsulates the mechanisms used to access and manipulate the underlying DOM elements which enables test cases to become more focused on verifying application functionality. For example, a rich text box may be implemented in HTML using a complex combination of buttons, text areas and perhaps even frames. Manipulating each UI element separately in a test is awkward and distracting. So instead we can create a control class to describe the high-level contents and behaviors of the rich text box. The class can have a "Text" property that enables the text to be read and written and an "Bold()" method to change the current font weight to Bold. This moves the complexity of manipulating the rich text box into a single cohesive class that can be reused as often as needed. This feature can be used to create a model of a web site (a site map) which helps to improve readability and encourage reuse across tests. How to create a control class: Identify the type of HTML element that functions as a container for the control on the web page. Typically this will be a DIV that contains all of the other relevant sub-elements but it could be of some other type as well. Create a subclass of Control using the appropriate generic element type. For example, if the element is a DIV, then create a subclass of Control<Div>. Optionally override to supply a custom constraint to help identify the underlying element for the control based on its properties, such as its CSS class. If the constraint is sufficiently specific in nature then the browser.Control<MyCustomControl>() syntax can be used to find the control unambiguously (ie. wraps only DIVs that satisfy the constraint, not just any DIV). Add properties to provide access to the sub-elements of the control. When the control is used, the property will be set to the containing element (ie. the DIV or other element as specified). Use this property to locate the sub-elements of the control. Define additional properties and methods as desired to model the state and behaviors of the control. Tips: Consider breaking down composite controls into multiple parts. For example, when modeling a data grid, create a control class derived from Control<Table> to wrap the table and within it create a second nested control class derived from Control<TableRow> to wrap the rows within the table. Then define a property of type ControlCollection<MyDataGridRowControl> using TableRowCollection.As<MyDataGridRowControl> to provide custom access to the rows within the table. Consider a calendar user control that is represented as an HTML table with clickable cells. The same calendar user control may appear in many web pages and need to be accessed by many tests. Moreover, selecting dates in such a control could be somewhat tedious as it involved clicking on links to set the month and day. Here's how we might build a control class to wrap this calendar: public class CalendarControl : Control<Div> { private SelectList MonthSelectList { get { return Element.Select(Find.ByName("month")); } } private SelectList YearSelectList { get { return Element.Select(Find.ByName("year")); } } private Div DateLabelDiv { get { return Element.Div(Find.ByClass("dateLabel")); } } /// Gets or sets the date of the calendar control. public DateTime Date { get { return DateTime.Parse(DateLabelDiv.Text); } set { MonthSelectList.SelectByValue(value.Month.ToString()); YearSelectList.SelectByValue(value.Year.ToString()); Element.Link(Find.ByText(value.Day)).Click(); } } public override Constraint ElementConstraint { // Only find Divs that have the "calendar" class. get { return Find.ByClass("calendar"); } } } Within the control class, you may also use the and attributes to declaratively refer to elements of the control. Here is part of the same example above using attributes instead of properties. public class CalendarControl : Control<Div> { [FindBy(Name = "month"), Description("Month drop down.")] private SelectList MonthSelectList; [FindBy(Name = "year"), Description("Year drop down.")] private SelectList YearSelectList; [FindBy(Name = "dateLabel"), Description("Date label.")] private Div DateLabelDiv; // etc... } Finally, within the test we use the calendar control like this: browser.Control<CalendarControl>>(Find.ById("fromDate")).Date = DateTime.Now; The control element type This class supports the type and is not intended to be used directly from your application. Refer to for details about how to create custom control classes. A composite component is container abstraction which has fields or properties representing other components. The most common composites are and . Initializes the fields and properties of the composite using reflection to find elements within the container. The element container within which to find elements, or null if not available Returns true if the element wrapped by the control exists. Creates a control object of the desired type that wraps the specified . The that the control should wrap The subclass The control object Thrown if is null Creates a control object of the desired type that wraps the specified . The control type The that the control should wrap The control object Thrown if or is null Thrown if is not a subclass of or if it does not have a default constructor Gets a control of the desired type within an element container. The subclass The element container to search within The constraint to match The control object Thrown if or is null Gets a collection of controls of the desired type within an element container. The subclass The element container to search within The control object Thrown if is null Gets the element wrapped by the control. Thrown if the control object does not have a reference to an element or if the element does not satisfy the control's constraints Returns true if the element wrapped by the control exists. Gets a constraint that is used to help locate the element that belongs to the control. The default implementation returns . Subclasses can override this method to enforce additional constraints regarding how the element is located. Verifies that the element represents the correct kind of element for the control. The default implementation verifies that satisfies . Subclasses can override this method to customize how verification takes place. The element to verify, not null Thrown if the element's properties fail verification Initializes the contents of the control object. Gets the element wrapped by the control. Thrown if the control object does not have a reference to an element or if the element does not satisfy the control's constraints A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a Document or Element. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. Thrown if no more alerts are available when calling PopUpWatcher.PopAlert. Determines whether this instance can handle the specified window by checking . equals "94C803C5" and if the window has a button with Id 1. The window. true if this instance [can handle dialog] the specified window; otherwise, false. This class handles the logon dialog by passing in the username and password and clicking the OK button. The following code shows the use of this dialog handler IE ie = new IE(); ie.DialogWatcher.Add(new LogonDialogHandler(@"domain\username", "password")); ie.GoTo("https://www.somesecuresite.com"); Initializes a new instance of the class. Name of the user. Is required. The password. If no password is required, it can be left blank (null or String.Empty). Handles the logon dialog by filling in the username and password. The window. Determines whether the specified window is a logon dialog. The window. true if the specified window is a logon dialog; otherwise, false. Runs the javascript code in IE. The javascript code. The parent window of the document. Runs the javascript code in IE. The javascript code. The parent window of the document. Runs the script code in IE. The script code. The language. The parent window of the document. Chrome implementation of the . Initializes a new instance of the class. The client port. The container reference. This dialoghandler can be used when it isn't clear which DialogHandler should be used to handle a dialog. The property will contain a list of dialoghandlers which can handle this dialog, bases on calling their method. Following an example on how to use this Dialoghandler. After the using helper.CandidateDialogHandlers will contain "AlertDialogHandler". var helper = new DialogHandlerHelper() using (new UseDialogOnce(ie.DialogWatcher, helper) { ie.Button("showAlert").Click(); } Returns a list of type names of dialoghandlers which can handle this dialog, bases on calling their method. The candidate dialog handlers. This class provides specialized functionality for a HTML li elements. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The HTML li element. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The HTML li element. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. This is the main class to access a webpage in Internet Explorer to get to all the elements and (i)frames on the page. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://watin.sourceforge.net"); ie.Link(Find.ByText("RSS Feeds")).Click; ie.Close; } } } Creates a collection of new IE instances associated with open Internet Explorer windows. An IE instance which is complete loaded. This code snippet illustrates the use of this method to found out the number of open Internet Explorer windows. int IECount = IE.InternetExplorers.Length; Creates a collection of new IE instances associated with open Internet Explorer windows. Use this method if you don't want WatiN to wait until a document is fully loaded before returning it. This might be handy in situations where you encounter Internet Explorer instances which are always busy loading and that way blocks itteration through the collection. An IE instance which might not have been complete loaded yet. This code snippet illustrates the use of this method to itterate through all internet explorer instances. foreach (IE ie in IE.InternetExplorersNoWait) { // do something but be aware that the page might not be completely loaded yet. } Opens a new Internet Explorer with a blank page. When the instance is destroyed the created Internet Explorer window will also be closed. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE(); ie.GoTo("http://watin.sourceforge.net"); } } } Opens a new Internet Explorer with a blank page. When the instance is destroyed the created Internet Explorer window will also be closed. if set to true the IE instance is created in a new process. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE(); ie.GoTo("http://watin.sourceforge.net"); } } } Opens a new Internet Explorer and navigates to the given . When the instance is destroyed the created Internet Explorer window will also be closed. The URL to open You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public OpenWatiNWebsite() { IE ie = new IE("http://watin.sourceforge.net"); } } } Opens a new Internet Explorer and navigates to the given . When the instance is destroyed the created Internet Explorer window will also be closed. The URL to open if set to true the IE instance is created in a new process. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public OpenWatiNWebsite() { IE ie = new IE("http://watin.sourceforge.net"); } } } Opens a new Internet Explorer and navigates to the given . When the instance is destroyed the created Internet Explorer window will also be closed. The Uri to open You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using System; using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public OpenWatiNWebsite() { IE ie = new IE(new Uri("http://watin.sourceforge.net")); } } } Opens a new Internet Explorer and navigates to the given . When the instance is destroyed the created Internet Explorer window will also be closed. The Uri to open if set to true the IE instance is created in a new process. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using System; using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public OpenWatiNWebsite() { IE ie = new IE(new Uri("http://watin.sourceforge.net")); } } } Opens a new Internet Explorer and navigates to the given . The Url to open A class instanciated with the logon credentials. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge leaving the created Internet Explorer open. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { LogonDialogHandler logon = new LogonDialogHandler("username", "password"); IE ie = new IE("http://watin.sourceforge.net", logon); } } } Opens a new Internet Explorer and navigates to the given . The Url to open A class instanciated with the logon credentials. if set to true the IE instance is created in a new process. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge leaving the created Internet Explorer open. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { LogonDialogHandler logon = new LogonDialogHandler("username", "password"); IE ie = new IE("http://watin.sourceforge.net", logon); } } } Opens a new Internet Explorer and navigates to the given . The Uri to open A class instanciated with the logon credentials. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge leaving the created Internet Explorer open. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { LogonDialogHandler logon = new LogonDialogHandler("username", "password"); IE ie = new IE(new Uri("http://watin.sourceforge.net"), logon); } } } Opens a new Internet Explorer and navigates to the given . The Uri to open A class instanciated with the logon credentials. if set to true the IE instance is created in a new process. You could also use one of the overloaded constructors. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge leaving the created Internet Explorer open. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { LogonDialogHandler logon = new LogonDialogHandler("username", "password"); IE ie = new IE(new Uri("http://watin.sourceforge.net"), logon); } } } (Re)Use existing object. An object implementing . Use existing InternetExplorer object. The param is of type object because otherwise all projects using WatiN should also reference the Interop.SHDocVw assembly. An object implementing IWebBrowser2 (like Interop.SHDocVw.InternetExplorer object) Closes the referenced Internet Explorer. Almost all other functionality in this class and the element classes will give exceptions when used after closing the browser. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge. using WatiN.Core; using System.Diagnostics; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { IE ie = new IE("http://watin.sourceforge.net"); Debug.WriteLine(ie.Html); ie.Close; } } } Closes then reopens Internet Explorer and navigates to the given . The Uri to open A class instanciated with the logon credentials. if set to true the IE instance is created in a new process. You could also use one of the overloaded methods. The following example creates a new Internet Explorer instances and navigates to the WatiN Project website on SourceForge leaving the created Internet Explorer open. using WatiN.Core; namespace NewIEExample { public class WatiNWebsite { public WatiNWebsite() { LogonDialogHandler logon = new LogonDialogHandler("username", "password"); IE ie = new IE(new Uri("http://watin.sourceforge.net"), logon); ie.Reopen(); } } } Closes all running instances of Internet Explorer by killing the process these instances run in. Clears all browser cookies. Internet Explorer maintains an internal cookie cache that does not immediately expire when cookies are cleared. This is the case even when the cookies are cleared using the Internet Options dialog. If cookies have been used by the current browser session it may be necessary to the browser to ensure the internal cookie cache is flushed. Therefore it is recommended to clear cookies at the beginning of the test before navigating to any pages (other than "about:blank") to avoid having to reopen the browser. // Clear cookies first. IE ie = new IE(); ie.ClearCookies(); // Then go to the site and sign in. ie.GoTo("http://www.example.com/"); ie.Link(Find.ByText("Sign In")).Click(); Clears the browser cookies associated with a particular site and to any of the site's subdomains. Internet Explorer maintains an internal cookie cache that does not immediately expire when cookies are cleared. This is the case even when the cookies are cleared using the Internet Options dialog. If cookies have been used by the current browser session it may be necessary to the browser to ensure the internal cookie cache is flushed. Therefore it is recommended to clear cookies at the beginning of the test before navigating to any pages (other than "about:blank") to avoid having to reopen the browser. The site url associated with the cookie. // Clear cookies first. IE ie = new IE(); ie.ClearCookies("http://www.example.com/"); // Then go to the site and sign in. ie.GoTo("http://www.example.com/"); ie.Link(Find.ByText("Sign In")).Click(); Clears the browser cache but leaves cookies alone. // Clear the cache and cookies. IE ie = new IE(); ie.ClearCache(); ie.ClearCookies(); // Then go to the site and sign in. ie.GoTo("http://www.example.com/"); ie.Link(Find.ByText("Sign In")).Click(); Gets the value of a cookie. This method cannot retrieve the value of cookies protected by the httponly security option. The site url associated with the cookie. The cookie name. The cookie data of the form: <name>=<value>[; <name>=<value>]... [; expires=<date:DAY, DD-MMM-YYYY HH:MM:SS GMT>][; domain=<domain_name>] [; path=<some_path>][; secure][; httponly]. Returns null if there are no associated cookies. Sets the value of a cookie. If no expiration date is specified, the cookie expires when the session ends. The site url associated with the cookie. The cookie data of the form: <name>=<value>[; <name>=<value>]... [; expires=<date:DAY, DD-MMM-YYYY HH:MM:SS GMT>][; domain=<domain_name>] [; path=<some_path>][; secure][; httponly]. Waits till the webpage, it's frames and all it's elements are loaded. This function is called by WatiN after each action (like clicking a link) so you should have to use this function on rare occasions. The number of seconds to wait before timing out This method must be called by its inheritor to dispose references to internal resources. Find a HtmlDialog by an attribute. Currently Find.ByUrl and Find.ByTitle are supported. The url of the html page shown in the dialog Find a HtmlDialog by an attribute within the given period. Currently Find.ByUrl and Find.ByTitle are supported. The url of the html page shown in the dialog Number of seconds before the search times out. Use this method to gain access to the IWebBrowser2 interface of Internet Explorer. Do this by referencing the Interop.SHDocVw assembly (supplied in the WatiN distribution) and cast the return value of this method to type SHDocVw.IWebBrowser2. Gets or sets a value indicating whether to auto close IE after destroying a reference to the corresponding IE instance. true when to auto close IE (this is the default); otherwise, false. Returns a collection of open HTML dialogs (modal as well as modeless). The HTML dialogs. Returns a collection of open HTML dialogs (modal as well as modeless). When itterating through this collection WaitForComplete will not be called on a HTML dialog before returning it from the collection. The HTML dialogs. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. Thrown if an element is disabled and the current action (like clicking a disabled link) is not allowed. Class that supports comparing a instance with a string value. Constructor, querystring will not be ignored in comparisons. Uri for comparison. Constructor, querystring can be ignored or not ignored in comparisons. Uri for comparison. Set to true to ignore querystrings in comparison. Compares the specified value. The url to compare with. Should return true or false, which is the default. Compares the specified Uri. The Uri. true when equal; otherwise false Class that supports a simple matching of two strings. Class that supports an exact comparison of two string values. Initializes a new instance of the class. The string comparison done by will ignore any case differences. The value used to compare against. Initializes a new instance of the class and allows to specify the behavior regarding case sensitive comparisons. The value used to compare against. if set to false will also check the casing of the . Thrown if is null Compares the specified value. The value to compare with. The result of the comparison. Compare the two values with set to InvariantCulture. The left hand side value. The right hand side value. true or false Compare the two values with set to InvariantCulture. The left hand side value. The right hand side value. if set to true it compares case insensitive. true or false Gets the value to compare against. Initializes a new instance of the class. The value used to compare against. Checks if the given contains the string to compare against. Comparison is done case insensitive. The value to compare with. The result of the comparison. Specifies metadata about a class. Gets or sets a regular expression that is expected to match the Url of the page. The regular expression should generally exclude host name and domain information since it may vary between production and testing environments. It only needs to match enough of the Url to reliably detect that page navigation has proceeded as planned. The url regular expression or null if none Gets or sets whether the web page url is always expected to be access using the HTTPS protocol. When set to true, page url validation will check that the HTTPS protocol appears in the page url. Gets the process ID in which the window is running. The process ID. This method calls InitTimeOut and waits till IE is ready processing or the timeout period has expired. Waits an initial small sleep time (10ms default) to allow the browser some time to perform any immediately pending asynchronous operations that might cause it to enter a busy state. This method waits till IE is ready processing or the timeout period has expired. You should call InitTimeout prior to calling this method. This method is called to initialise the start time for determining a time out. It's set to the current time. This method evaluates the time between the last call to InitTimeOut and the current time. If the timespan is more than 30 seconds, the return value will be true. If the timespan is more than 30 seconds, the return value will be true This method checks the return value of IsTimedOut. When true, it will throw a TimeoutException with the timeoutMessage param as message. The message to present when the TimeoutException is thrown Waits until the method returns true or false. The function to evaluate. A function to build an exception message. The last function result. Thrown if a timeout occurs. Native driver the communicates with the Chrome browser using a telnet session . Defines behaviour common to most javascript controlled browsers. Provides access to native services offered by a web browser. Navigates to the specified . The URL to navigate to. Navigates to the specified without waiting for the page to finish loading. The URL to navigate to. Navigates the browser back to the previously display Url True if succeded otherwise false. Navigates the browser forward to the next displayed Url (like the forward button in Internet Explorer). True if succeded otherwise false. Closes and then reopens the browser with a blank page. Reloads the currently displayed webpage (like the Refresh/reload button in a browser). Gets the window handle of the current browser. Window handle of the current browser. Initializes a new instance of the class. The client port. Reloads this instance. When it is true, causes the page to always be reloaded from the server. If it is false, the browser may reload the page from its cache. Closes the browser. Load a URL into the document. see: http://developer.mozilla.org/en/docs/XUL:browser#m-loadURI The URL to laod. If false, makes to execution of LoadUri asynchronous. Gets the client port used to communicate with the instance of FireFox. The client port. Gets the name of the browser variable. The name of the browser variable. Initializes a new instance of the class. The client port. Load a URL into the document. The URL to laod. If false, makes to execution of LoadUri asynchronous. Reattaches to the first tab. This is required every time the document This class helps converting all kinds of html color formats to one uniform object. IE and FireFox return differently formatted results when retrieving a color, for instance backgroundColor. This class provides a way to keep your tests browser agnostic when it comes to checking color values. Following some examples of valid use of this class. These all create the same object: var blue = new HtmlCode("blue"); var blue = new HtmlCode("#0000FF"); var blue = new HtmlCode("#00F"); var blue = new HtmlCode("rgb(0,0,255)"); The class provides factory properties for creating the 16 color names defined by the W3C. var blue = HtmlCode.Blue; The power of this class lies in the fact that you can use it in your test expectations no matter what color format the browser returns. var backgroundColor = browser.Div("with_background_color").Style.BackgroundColor; Assert.That(new HtmlColor(backgroundColor), Is.EqualTo(HtmlColor.Yellow)); Initializes a new instance of the class. The value. Will be thrown if the value can't be converted to a color. Following some examples of valid use of this class. These all create the same object: var blue = new HtmlCode("blue"); var blue = new HtmlCode("#0000FF"); var blue = new HtmlCode("#00F"); var blue = new HtmlCode("rgb(0,0,255)"); Determines whether the specified is equal to the current . The to compare with the current . true if the specified is equal to the current ; otherwise, false. Serves as a hash function for a particular type. A hash code for the current . Returns a that represents the current . A that represents the current . Returns the wrapped by this class. The color. Returns a descriptive W3C color name (Aqua, Black, Blue, Fuchsia, Gray, Green, Lime, Maroon, Navy, Olive, Purple, Red, Silver, Teal, White or Yellow). If it's none of these colors, it will return "unknown". To name. Returns the color in a html hex code formatted string To hex string. Returns the color in a rgb formatted string. To RGB string. This class provides a simple way to handle loops that have to time out after a specified number of seconds. This is an example how you could use this class in your code. // timer should elapse after 30 seconds SimpleTimer timeoutTimer = new SimpleTimer(30); do { // Your check logic goes here // wait 200 miliseconds Thread.Sleep(200); } while (!timeoutTimer.Elapsed); Initializes a new instance of the class. The timeout. Thrown if is negative. Gets a value indicating whether this is elapsed. true if elapsed; otherwise, false. The amount of time after which this timer times out. The time out can only be set through the constructor. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. Thrown if the searched for selectlist item (option) can't be found. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a or . The element type Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. This class handles alert/popup dialogs. Every second it checks if a dialog is shown. If so, it stores it's message in the alertQueue and closses the dialog by clicking the close button in the title bar. Gets the dialog watcher for the specified (main) internet explorer window. It creates new instance if no dialog watcher for the specified window exists. The (main) internet explorer window. Initializes a new instance of the class. You are encouraged to use the Factory method instead. The main window handle of internet explorer. Increases the reference count of this DialogWatcher instance with 1. Decreases the reference count of this DialogWatcher instance with 1. When reference count becomes zero, the Dispose method will be automatically called. This method will throw an if the reference count is zero. Adds the specified handler. The handler. Removes the specified handler. The handler. Removes all instances that match . This method determines equality by calling Object.Equals. The object implementing IDialogHandler. If you want to use RemoveAll with your custom dialog handler to remove all instances of your dialog handler from a DialogWatcher instance, you should override the Equals method in your custom dialog handler class like this: public override bool Equals(object obj) { if (obj == null) return false; return (obj is YourDialogHandlerClassNameGoesHere); } You could also inherit from instead of implementing in your custom dialog handler. provides overrides for Equals and GetHashCode that work with RemoveAll. Removes all registered dialog handlers. Determines whether this contains the specified dialog handler. The dialog handler. true if [contains] [the specified handler]; otherwise, false. Called by the constructor to start watching popups on a separate thread. If the window is a dialog and visible, it will be passed to the registered dialog handlers. I none if these can handle it, it will be closed if is true. The window. Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Gets the count of registered dialog handlers. The count. Gets or sets a value indicating whether unhandled dialogs should be closed automaticaly. The initial value is set to the value of . true if unhandled dialogs should be closed automaticaly; otherwise, false. Gets the (main) internet explorer window handle this dialog watcher watches. The process id. Get the last stored exception thrown by a dialog handler while calling the method of the dialog handler. The last exception. Use this class to find a form field whose associated label contains a particular value. This constraint class is kindly donated by Seven Simple Machines. This shows how to find a text field with an associated label containing the text "User name:". ie.TextField( new LabelTextConstraint("User name:") ).TypeText("MyUserName") or use ie.TextField(Find.ByLabelText("User name:")).TypeText("MyUserName") This is the base class for finding elements by a specified attribute. Use this class or one of it's subclasses to implement your own comparison logic. ie.Link(new Attribute("id", "testlinkid")).Url or use ie.Link(Find.By("id", "testlinkid")).Url Creates an attribute constraint to search for an exact match by string value. Name of the attribute as recognised by Internet Explorer. The value to look for Thrown if or is null Thrown if is empty Creates an attribute constraint to search for a match by regular expression. Name of the attribute as recognised by Internet Explorer. The regular expression to look for Thrown if or is null Thrown if is empty Creates an attribute constraint to search for a match using a custom comparer. Name of the attribute as recognised by Internet Explorer. The attribute value comparer Thrown if or is null Thrown if is empty Gets the name of the attribute. The name of the attribute. Gets the comparer used to match the expected attribute value with the actual attribute value of an html element on a webpage. The comparer. Initializes a new instance of the class; The text that represents the label for the form element. Initializes a new instance of the class; The text that represents the label for the form element. Initializes a new instance of the class; The text that represents the label for the form element. Class that supports comparing the given Type with the type of a subclass of Initializes a new instance of the class. The type to compare against. Compares the specified element with the Type . The element to compare with. Returns true if the is the exact type, otherwise it will return false. Gets the type to compare against. Class that supports a simple matching of two strings. For a match, the given strings should be equal (this includes the casing of the strings). You can also use . Provides metadata about a page. Creates a page metadata object about a particular subclass of . The page type Thrown if is null Thrown if is not a subclass of Gets the subclass of that describes the page. Gets a regular expression that is expected to match the Url of the page, or null if unknown. Returns true if the page is expected to always be accessed using HTTPS. Gets the FireFox client port. Gets the name of a variable that stores a reference to the document within FireFox. A collection of user-defined control objects. The control subclass Creates a control collection from an element collection. The element type The element collection to wrap The control collection Thrown if is null This logger class writes it's output to a string The following code attaches the StringLogWriter to WatiN and writes a LogAction. Logger.LogWriter = new StringLogWriter(); Logger.LogAction("Attached StringLogWriter"); private StringBuilder keeping the log private method to write the log line message to write Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. 2 flag to indicate inclusion of a timestamp (in "yyyy-mm-ddThh:nn:ss" format) data string containing the log A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. This class provides specialized functionality for a HTML td element. Gets the table that contains this cell. Gets the table body that contains this cell. Gets the table row that contains this cell. Gets the table row that contains this cell. Gets the index of the in the of the parent . The index of the cell. This class provides specialized functionality for a HTML para element. This class provides specialized functionality for a Frame or IFrame. This constructor will mainly be used by the constructor of FrameCollection to create an instance of a Frame. The domContainer The document within the frame Thrown if the searched for frame can't be found. Determines whether VbScriptMsgBoxDialogHandler can handle the specified window by checking . Valid value is "94C803C5". The window. true if VbScriptMsgBoxDialogHandler can handle the dialog; otherwise, false. When OK is the only button on the msgbox (buttons value = 1) then the button Id = 2. In all other situations the button Id for OK is 1. Initializes a new instance of the class. if set to true will click on the Cancel button of the prompt dialog. Initializes a new instance of the class. The text will be entered in the input field of the prompt dialog after which the OK button will be clicked. Determines whether the window is a prompt dialog by checking the . Valid value is "94C800C4". The window. true if window is a prompt dialog; otherwise, false. Initializes a new instance of the class. This handler will click the "Yes" button at the certificate warning dialog. Initializes a new instance of the class. The button to push. Determines whether the specified window is a certificate dialog by checking . valid value is "94C808C4". The window. true if the specified window is a certificate dialog; otherwise, false. Common client port behaviour. Common behavior for a client port used to communicate with a browsers remote automation server. Writes the specified data to the jssh server. The data to write. Arguments to be passed to Writes the specified data ignoring any errors and reads the response. The data to write. The arguments to be passed to The response to the data written. Writes the specified data and reads the response. The data to write. The arguments to be passed to The response to the data written. Writes the specified data and read the response parsing it as a boolean. The data to write. The arguments to be passed to A boolean value from the response to the data written. Writes the and read as int. The data to write. The arguments to be passed to An integer value parsed from the response. Initializes the document. Used by CreateElementVariableName Gets the last response recieved from the jssh server Initializes a new instance of the class. Writes the specified data to the jssh server. The data to write. Arguments to be passed to Writes the specified data ignoring any errors and reads the response. The data to write. The arguments to be passed to The response to the data written. Writes the specified data and reads the response. The data to write. The arguments to be passed to The response to the data written. Writes the specified data and read the response parsing it as a boolean. The data to write. The arguments to be passed to A boolean value from the response to the data written. Writes the and read as int. The data to write. The arguments to be passed to An integer value parsed from the response. Initializes the document. Creates a unique variable name, i.e. doc.watin23 A unique variable. Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. 2 Connects to the Chrome browser and navigates to the specified URL. The URL to connect to. Writes the specified data to the jssh server. The data to write. true if a result is expected. true if error checking should be applied. Arguments to format with the data. Adds the specified to the last response field. The response to add. Gets the name of the javascript variable that references the DOM:document object. Gets the type of java script engine. The type of java script engine. Gets the name of the browser variable. The name of the browser variable. Gets or sets the browser process. The browser process. Gets or sets the last response without any cleaning applied to it. The last response raw. Gets or sets the entire response from the remote server so far. The response from the remote server so far. Gets or sets the last reponse recieved from the jssh server Gets a value indicating whether the last response was true. Gets a value indicating whether last response is null. true if last response is null; otherwise, false. Gets LastResponseAsInt. The last response as int. Exceptions thrown by the Chrome web browser. Initializes a new instance of the class. Initializes a new instance of the class. The message. Initializes a new instance of the class. The message. The innerexception. Initializes a new instance of the class. The that holds the serialized object data about the exception being thrown. The that contains contextual information about the source or destination. The parameter is null. The class name is null or is zero (0). Assists with finding components generically by type. This class contains functionality to capture an image from a web page and save it to a file. The code was written by Doug Weems at http://www.codeproject.com/KB/graphics/IECapture.aspx Captures an image of the current page on the current browser via _domContainer to disk The filename. Place the url text as an overlay on the screenshot. Draws guides on the image to show which part of the page is visible for different resolutions. Off by default Percentage for scaling, default is 100. 0-100 - The Quality category specifies the level of compression for an image. When used to construct an EncoderParameter, the range of useful values for the quality category is from 0 to 100. The lower the number specified, the higher the compression and therefore the lower the quality of the image. Zero would give you the lowest quality image and 100 the highest. This class provides specialized functionality for a HTML Form element. Thrown if waiting for a webpage or element times out. This class provides specialized functionality for a HTML div element. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The HTML div element. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The HTML div element. A strongly-typed resource class, for looking up localized strings, etc. Returns the cached ResourceManager instance used by this class. Overrides the current thread's CurrentUICulture property for all resource lookups using this strongly typed resource class. Looks up a localized string similar to Collection is read-only. Looks up a localized string similar to Collection does not support searching by equality.. Looks up a localized string similar to The control has already been initialized.. Looks up a localized string similar to Closing IE instance. Looks up a localized string similar to The page type is expected to be a subclass of Page.. Looks up a localized string similar to A match operation has been aborted because it appeared to be re-entrant. The exception occurred in an instance of '{0}' with constraint: {1}.. Looks up a localized string similar to (function(){var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,b=0,c=Object.prototype.toString,d=!1,e=!0;[0,0].sort(function(){e=!1;return 0});var f=function(b,d,e,i){e=e||[],d=d||document;var j=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var l,m,n,o,p,r,s,t,u=!0,v=f.isXML(d),w=[],x=b;do{a.exec(""),l=a.exec(x);if(l){x=l[3],w.push(l[1]);if(l[2]){o=l[3];break}}}while(l);if(w.length>1&& [rest of string was truncated]";. Wrapper around the XUL:browser class, see: http://developer.mozilla.org/en/docs/XUL:browser Initializes a new instance of the class. The client port. Load a URL into the document. see: http://developer.mozilla.org/en/docs/XUL:browser#m-loadURI The URL to laod. If false, makes to execution of LoadUri asynchronous. Initializes a new instance of the class. if set to true the OK button will be clicked on. Otherwise the Cancel button will be clicked. Checks if of the is equal to "94C801C5". The window to validate A covariant comparer implementation based on a predicate delegate. Creates a predicate-based comparer. The predicate. Thrown if is null Compares the specified element using the predicate passed in as parameter in the constructor. The element to evaluate. The result of the comparison done by the predicate A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a . This class provides specialized functionality for a HTML input element of type button, submit, image and reset. Initialises a new instance of the class. Mainly used by WatiN internally. The the element is in. The input button or button element. Initialises a new instance of the class. Mainly used by WatiN internally. The the element is in. The input button or button element. The text displayed at the button. The displayed text. The text displayed at the button (alias for the Value property). The displayed text. A page class describes the content and behaviors of a single web page or frame within a web site. Each application page can be modeled as a subclass of . A page class typically provides access to the content and behaviors of the page by defining properties and methods to represent them. In the typical case, the properties of a page class provide access to its elements and state. Likewise, the methods of a page class perform actions or transactions. The page class encapsulates the mechanisms used to access and manipulate the underlying DOM elements which enables test cases to become more focused on verifying application functionality. For example, instead of referring to a text box by its HTML ID everywhere it is used, we can create a page class to describe how the text box is accessed and what it represents (semantically) in terms of the application. In this way, we can create an appropriately named property to provide access to the text box and clearly indicate that it belongs to a given web page in our application. This feature can be used to create a model of a web site (a site map) which helps to improve readability and encourage reuse across tests. How to create a page class: Create a subclass of Page. Add a [Page] attribute to the newly created page. Set the UrlRegex property to a regular expression that is expected to match part of the page's Url. If the page is only accessible via HTTPS then also set the IsSecure property to true. Add properties to provide access to the sub-elements of the page. When the page is used, the property will be set to the containing document (eg. the web browser or a frame). Use this property to locate the sub-elements of the page. Define additional properties and methods as desired to model the state and behaviors of the page. Tips: Multiple pages might share the same basic layout. You can model this structure by using a super class to describe the "master page" or by defining one or more to capture recurring elements such as the page header or footer. Consider a web page that has a username text field, a password text field and a sign in button. Before writing the test for this page, we create a new page class to describe how these controls are found. We can also add a convenient SignIn method that sets both text fields and clicks on the sign in button all at once. Here's how the page class will look: [Page(UrlRegex = "SignIn.aspx", IsSecure = true)] public class SignInPage : Page { public TextField UserNameTextField { get { return Document.TextField(Find.ByName("username")); } } public TextField PasswordNameTextField { get { return Document.TextField(Find.ByName("password")); } } public TextField SignInButton { get { return Document.Button(Find.ByName("signin")); } } public void SignIn(string userName, string password) { // Fill in the username and password fields. UserNameTextField.TypeText(userName); PasswordTextField.TypeText(password); // Click the sign in button. SignInButton.Click(); } } Within the page class, you may also use the and attributes to declaratively refer to elements of the page. Here is part of the same example above using attributes instead of properties. [Page(UrlRegex = "SignIn.aspx", IsSecure = true)] public class SignInPage : Page { [FindBy(Name = "username"), Description("User name text field.")] public TextField UserNameTextField; [FindBy(Name = "password"), Description("Password text field.")] public TextField PasswordNameTextField; [FindBy(Name = "signIn"), Description("Sign in button.")] public TextField SignInButton; // etc... } Finally, within the test we use the functionality of the sign in page like this: browser.Page<SignInPage>>().SignIn("somebody", "letmein"); Creates an uninitialized page instance. Verifies that the document represents the correct page (has the correct Url, etc.). The default implementation calls to verify the 's Url. Subclasses can override this method to customize how document verification takes place. The document to verify, not null The error reporter to invoke is the document's properties fail verification Verifies that the document represents a Url that matches the page metadata. The default implementation uses information from the associated to validate the . Subclasses can override this method to customize how document Url verification takes place. The document url to verify, not null The error reporter to invoke is the document's properties fail verification Verifies that the document is secure if the page metadata says it should be. The default implementation uses information from the associated to validate the . Subclasses can override this method to customize how document Url verification takes place. The document url to verify, not null The error reporter to invoke is the document's properties fail verification Creates an initialized page object from a document. The page type The document or frame represented by the page The page object Thrown if is null Creates an initialized page object from a document. The page type The document or frame represented by the page The page object Thrown if or is null Thrown if is not a subclass of or if it does not have a default constructor Initializes the contents of the page object. Gets declarative metadata about the page. Gets the document or frame that holds the page content. This method calls to ensure that the current document represents the correct page (has the correct Url, etc.). If this verification fails then an exception is thrown. Thrown if the page object does not have a reference to a document or if the document's properties fail validation. Returns true if the current document represents this page (has the correct Url, etc.). The actual check(s) is done by the protected method Reports an error message. The error message to report. Will be thrown when the set expectations using the don't match. A combined constraint that is satisfied only when at least one of two other constraints is satisifed. Creates a new OR constraint. The first constraint The second constraint Thrown if or is null This logger class writes it's output to a file The following code attaches the FileLogWriter to WatiN and writes a LogAction. Logger.LogWriter = new FileLogWriter("LogFile.txt"); Logger.LogAction("Attached FileLogWriter"); Constructor method creating a text file for writing full filepath to write the new log private method to write the log line message to write flag to indicate inclusion of a timestamp (in "yyyy-mm-ddThh:nn:ss" format) Class with some utility methods to explore the HTML of a . Prevent creating an instance of this class (contains only static members) Determines whether the specified is null or empty. The value. true if the specified value is null or empty; otherwise, false. Determines whether the specified is null or empty. The value. true if the specified value is null or empty; otherwise, false. Formats the string in the same sense as string.Format but checks if args is null before calling string.Format to prevent FormatException The format. The args. Turns the style attribute into property syntax. "font-size" will turn into "fontSize" Name of the attribute. Creates typed wrappers of native elements. Registers all element types within an assembly with WatiN. This method registers new element types with WatiN for elements that are not supported out of the box (eg. H1, etc...). It ensures that the correct element type can be returned from find operations that do not specify the type natively. This method does nothing if a given type has already been registered. The assembly containing the subclasses to register Thrown if is null Thrown if the any element type within the assembly is not correctly defined because it is missing a constructor or has no element tag attributes specified Registers an element type with WatiN. This method registers new element types with WatiN for elements that are not supported out of the box (eg. H1, etc...). It ensures that the correct element type can be returned from find operations that do not specify the type natively. This method does nothing if the type has already been registered. The subclass to register Thrown if is null Thrown if is not a subclass of or if it is abstract Thrown if the is not correctly defined because it is missing a constructor or has no element tag attributes specified Creates a typed element wrapper for a given native element. The returned element will be a subclass of that is appropriate for element's tag. The element's DOM container The native element to wrap, or null if none The typed element, or null if none Creates a typed element wrapper for a given native element and ensures it is of a particular type. The returned element will be a subclass of that is appropriate for element's tag. The element's DOM container The native element to wrap, or null if none The typed element, or null if none The element type Creates a typed element wrapper for a given element finder and ensures it is of a particular type. The returned element will be a subclass of that is appropriate for element's tag. The element's DOM container The element finder to wrap, or null if none The typed element, or null if none The element type Creates an untyped element wrapper for a given native element. The returned element is just a generic element container. The element's DOM container The native element to wrap, or null if none The untyped element, or null if none Creates an untyped element wrapper for a given element finder. The returned element is just a generic element container. The element's DOM container The element finder to wrap, or null if none The untyped element, or null if none Gets the list of tags supported by the specified element type class. The element type The list of supported tags Thrown if is null Thrown if is not a valid element type Gets the list of tags supported by the specified element type class. The list of supported tags The element type This class provides specialized functionality for a HTML tbody element. To find rows that contain particular cell values use the constraint as in the following example: // Find a table row with "some text" in the 3rd (!) column. TableBody tableBody = document.Table("my_table").OwnTableBodies[0]; table.OwnTableRow(Find.ByTextInColumn("some text", 2)); To find rows based on other properties of their contents use the constraint as in the following example: // Find a table row with "some text" in any of its columns. TableBody tableBody = document.Table("my_table").OwnTableBodies[0]; table.OwnTableRow(Find.ByExistenceOfRelatedElement(row => row.OwnTableCell("some text"))); Finds a table row within the table body itself (excluding content from any tables that might be nested within it). The element id The table row Finds a table row within the table body itself (excluding content from any tables that might be nested within it). The element id regular expression The table row Finds a table row within the table body itself (excluding content from any tables that might be nested within it). The constraint The table row Finds a table row within the table body itself (excluding content from any tables that might be nested within it). The predicate The table row Gets the table that contains this body. Gets a collection of all table rows within the table body itself (excluding content from any tables that might be nested within it). The table row collection Gets the table rows that are direct children of this , leaving out table rows of any nested tables within this . The table rows collection. This class provides specialized functionality for a HTML table element. To find rows that contain particular cell values use the constraint as in the following example: // Find a table row with "some text" in the 3rd (!) column. Table table = document.Table("my_table"); table.OwnTableRow(Find.ByTextInColumn("some text", 2)); To find rows based on other properties of their contents use the constraint as in the following example: // Find a table row with "some text" in any of its columns. Table table = document.Table("my_table"); table.OwnTableRow(Find.ByExistenceOfRelatedElement(row => row.OwnTableCell("some text"))); Finds a table row within the table itself (excluding content from any tables that might be nested within it). The element id The table row Finds a table row within the table itself (excluding content from any tables that might be nested within it). The element id regular expression The table row Finds a table row within the table itself (excluding content from any tables that might be nested within it). The constraint The table row Finds a table row within the table itself (excluding content from any tables that might be nested within it). The predicate The table row Finds a table body within the table itself (excluding content from any tables that might be nested within it). The element id The table body Finds a table body within the table itself (excluding content from any tables that might be nested within it). The element id regular expression The table body Finds a table body within the table itself (excluding content from any tables that might be nested within it). The constraint The table body Finds a table body within the table itself (excluding content from any tables that might be nested within it). The predicate The table body Finds te first row that has an exact match with in defined as a TD html element. If no match is found, null is returned. This method will look for rows in the first including rows in nested tables. The text to find. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that has an exact match with in defined as a TD html element. If no match is found, null is returned. This method will look for rows in all elements but will ignore rows in nested tables. The text to find. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in the first including rows in nested tables. The regular expression the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in all elements but will ignore rows in nested tables. The regular expression the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in the first including rows in nested tables. The comparer that the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in all elements but will ignore rows in nested tables. The comparer that the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in the first including rows in nested tables. The predicate that the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in all elements but will ignore rows in nested tables. The predicate that the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in the first including rows in nested tables. The predicate that the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Finds te first row that matches in defined as a TD html element. If no match is found, null is returned. This method will look for rows in all elements but will ignore rows in nested tables. The predicate that the cell text must match. Index of the column to find the text in. The searched for ; otherwise null. Gets a collection of all table rows within the table itself (excluding content from any tables that might be nested within it). The table row collection Gets a collection of all table bodies within the table itself (excluding content from any tables that might be nested within it). The table body collection A typed collection of open . Thrown if the specified attribute isn't a valid attribute of the element. For example doing TextField.GetAttribute("src") will throw this exception. This struct is mainly used by WatiN internally and defines the supported html tags for inheritors of . Creates an element tag. The tag name, or null to represent any element Creates an element tag with an input tag type qualifier. The tag name, or null to represent any element The input tag type qualifier, or null if none Creates an element tag object from a native element. The native element The element tag object Thrown if is null Returns true if this tag object matches the specified element. The element to consider True if the tag matches the specified element Thrown if is null Returns true if this tag object matches the specified tag. The element tag to consider True if the tag matches the specified element tag Returns a human-readable string representation of the tag. The tag as a string Returns true if any tag object in the list matches the specified element. The tags against which to match The element to consider True if the tag matches the specified element Thrown if or is null Returns true if any tag object in the list matches the specified tag. The tags against which to match The element tag to consider True if the tag matches the specified element tag Thrown if is null Converts a list of tags to a human-readable string. The list of element tags The element tags as a string Gets the tag name, or null to represent any element. Gets the input tag type qualifier, or null if none. Returns true if the tag represents an input element. Returns true if the tag matches any element. Returns a special tag object that can match any element. Represent the CSS style rule. Initializes a new instance of the class. The underlying . Returns a that represents the current . The value of . This methode can be used if the attribute isn't available as a property of of this class. The attribute name. This could be different then named in the HTML. It should be the name of the property exposed by IE on it's style object. The value of the attribute if available; otherwise null is returned. Retrieves the color of the text of the element. Visit http://msdn.microsoft.com/workshop/author/dhtml/reference/colors/colors_name.asp for a full list of supported RGB colors and their names. The color of the text. Retrieves the color behind the content of the element. Visit http://msdn.microsoft.com/workshop/author/dhtml/reference/colors/colors_name.asp for a full list of supported RGB colors and their names. The color of the background. Retrieves the name of the font used for text in the element. The font family. Retrieves a value that indicates the font size used for text in the element. The size of the font. Retrieves the font style of the element as italic, normal, or oblique. The fount style. Retrieves the height of the element. The height of the element. Retrieves wheter the object is rendered. For a complete list of the values visit http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/display.asp . The display mode. Retrieves the CSS text. The CSS text. This logger class writes it's output to the debug window. The following code attaches the DebugLogWriter to WatiN and writes a LogAction. Open de output window in your debugger to see the result. Logger.LogWriter = new DebugLogWriter; Logger.LogAction("Attached DebugLogWriter"); Thrown if the searched for Browser type can't be found. Thrown if the searched for HtmlDialog can't be found. Pops the most recent message from a queue of displayed alert and confirm windows. Use this method to get the displayed message. The displayed message. if no alerts are present Peeks at the most recent message from a queue of displayed alert and confirm windows, but does not remove it. Use this method to look at the first displayed message but not to remove it. The first displayed message. if no alerts are present Clears all the messages from the queue of displayed alert and confirm windows. See if the dialog has a static control with a controlID of 0xFFFF. This is unique for alert and confirm dialogboxes. Gets the count of the messages in the queue of displayed alert and confirm windows. The count of the alert and confirm messages in the queue. Gets the alert and confirm messages in the queue of displayed alert and confirm windows. The alert and confirm messages in the queue. Enumerate top-level and child windows Get all top-level window information List of window information objects Get all child windows for the specific windows handle (hwnd). List of child windows for parent window A component-based constraint using a comparer. Creates an component constraint. The comparer Thrown if is null Gets the component comparer. A constraint that matches anything. Gets the singleton instance of the Any constraint. This class is used to define the default settings used by WatiN. Use Settings.Instance to access or change these settings. The following example shows you how to change the default time out which is used by the AttachtToIE(findBy) method to attach to an already existing Internet Explorer window or to an Internet Explorer window that will show up within 60 seconds after calling the AttachToIE(findBy) method. public void AttachToIEExample() { // Change de default time out from 30 to 60 seconds. Settings.AttachToBrowserTimeOut = 60; // Start Internet Explorer manually and type // http://watin.sourceforge.net in the navigation bar. // Now Attach to an existing Internet Explorer window IE ie = IE.AttachToIE(Find.ByTitle("WatiN"); System.Diagnostics.Debug.WriteLine(ie.Url); } When you frequently want to change these settings you could also create two or more instances of the Settings class, set the desired defaults and set the settings class to Settings. public void ChangeSettings() { Settings.Instance = LongTimeOut(); // Do something here that requires more time then the defaults Settings.Instance = ShortTimeOut(); // Do something here if you want a short time out to get // the exception quickly incase the item isn't found. } public Settings LongTimeOut() { Settings settings = new Settings(); settings.AttachToBrowserTimeOut = 60; settings.WaitUntilExistsTimeOut = 60; settings.WaitForCompleteTimeOut = 60; return settings; } public Settings ShortTimeOut() { Settings settings = new Settings(); settings.AttachToBrowserTimeOut = 5; settings.WaitUntilExistsTimeOut = 5; settings.WaitForCompleteTimeOut = 5; return settings; } Resets this instance to the initial defaults. Clones this instance. Get or set the default time out used when calling IE ie = IE.AttachToIE(findBy). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default time out used when calling Element.WaitUntilExists(). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default time out used when calling ie.WaitForComplete(). The default value is 30 seconds. Setting the time out to a negative value will throw a . Get or set the default sleep time before WatiN starts checking if a page is loaded in IE. This setting is not applicable to FireFox. The default value is 30 milliseconds. Setting this to a negative value will throw a . Turn highlighting of elements by WatiN on (true) or off (false). Highlighting of an element is done when WatiN fires an event on an element or executes a methode (like TypeText). Set or get the color to highlight elements. Will be used if HighLightElement is set to true. Visit http://msdn.microsoft.com/workshop/author/dhtml/reference/colors/colors_name.asp for a full list of supported RGB colors and their names. Turn auto closing of dialogs on (true) or off (false). You need to set this value before creating or attaching to any Internet Explorer to have effect. Gets or sets a value indicating whether to auto start the dialog watcher at all. This value is evaluated everytime a new IE instance is created true if dialog watcher should be started when a new IE instance is created; otherwise, false. Gets or sets a value indicating whether to move the cursor to the top left of the screen everytime a new IE instance is created. true when mouse should be moved to top left; otherwise, false. Gets or sets a value indicating whether to make a new instance visible. true if you want to make a new instance visible; otherwise, false. Gets or sets a factory to find element by their default characteristics. The default value is a which finds elements by id. Gets or sets a value indicating whether to make a new instance without session cookie merging. true if you want to make a new instance with cookie merging; otherwise, false. read the section on NoMerge at http://blogs.msdn.com/ie/archive/2008/07/28/ie8-and-reliability.aspx Gets or sets a value indicating whether existing FireFox instances will be closed before creating a new instance. true if existing FireFox instances need to be closed otherwise, false. Finds elements within native element containers. Creates an element finder. The DOM container The factory to get the element(s) to search in The element tags considered by the finder, or null if all tags considered The constraint used by the finder to filter elements, or null if no additional constraint If the constraint can only match on element with a particular id, returns the id, otherwise returns null. The id or null if the constraint could match elements with no particular id Used to find elements by a default characteristic such as by id or by some other application-specific rule. Gets a constraint to find an element by matching its default characteristics against the specified string. The string to match against A constraint Gets a constraint to find an element by matching its default characteristics against the specified regular expression. The regular expression to match against A constraint A lazily populated list that fills itself up gradually from an enumeration on demand. The type of element in the list Creates a lazily populated list from an enumeration. The enumeration of elements from which to populate the list lazily Gets the total number of elements in the list. Gets the element with the specified index in the list. The zero-based index The element Thrown if is out of range Initializes a new instance of the class. Use this constructor if you want to Run, Open or Cancel the download. The option to choose on the File Download dialog. Initializes a new instance of the class. Use this contructor if you want to download and save a file. The filename. Handles the dialogs to download (and save) a file Mainly used internally by WatiN. The window. Determines whether the specified window is a file download dialog by checking the style property of the window. It should match window.StyleInHex == "94C80AC4" The window. true if the specified window is a file download dialog; otherwise, false. Determines whether the specified window is a download progress dialog by checking the style property of the window. It should match (window.StyleInHex == "9CCA0BC4") || (window.StyleInHex == "94CA0BC4") The window. true if the specified window is a download progress dialog; otherwise, false. Determines whether the specified window is a file save as dialog by checking the style property of the window. It should match (window.StyleInHex == "96CC20C4") || (window.StyleInHex == "96CC02C4") The window. true if the specified window is a file save as dialog; otherwise, false. Determines if a dialog still exists by checking the the existance of the window.Hwnd and checking if the window is visible. The dialog. true if exists and visible, otherwise false Checks if window is null or . The dialog. true if null or exists, otherwise false Wait until the save/open/run dialog opens. This exists because some web servers are slower to start a file than others. duration in seconds to wait Wait until the download progress window does not exist any more duration in seconds to wait Gets a value indicating whether this instance has handled a file download dialog. true if this instance has handled a file download dialog; otherwise, false. Gets the full save as filename used when the downloaded file will be saved to disk. The save as filename. Class that supports comparing a instance with a string value. Initializes a new instance of the class. If the value is true, then will compare case-insensitively with "true" otherwise will compare case-insensitively with "false" The chrome document class, giving access to common document elements. Initializes a new instance of the class. The client port. Runs the script. The script code to run. The language the script was written in. Gets the value for the corresponding . Name of the property. The value for the corresponding . Gets the bounds of all matching text substrings within the document. The text to find The text bounds in screen coordinates Gets the FireFox client port. Gets the collection of all elements in the document. Gets the containing frame element, or null if none. Gets the body element for the current docuemnt. The body element. Gets the URL for the current document. The URL for the current document. Gets the title of the current docuemnt. The title of the current document. Gets the active element. The active element. Gets the name of the java script variable. The name of the java script variable. Gets the list of frames. The list of frames of the current document. Gets or sets the document reference. The document reference. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A combined constraint that is satisfied only when two other constraints are both satisifed. Creates a new AND constraint. The first constraint The second constraint Thrown if or is null Gets the first constraint that will be evaluated. The first . Gets the second constraint that will be evaluated. The second . This class provides specialized functionality for a HTML ul and ol elements. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The HTML ul or ol element. Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The HTML ul or ol element. Finds a list item within the list itself (excluding content from any lists that might be nested within it). The element id The list item Finds a list item within the list itself (excluding content from any lists that might be nested within it). The element id regular expression The list item Finds a list item within the list itself (excluding content from any lists that might be nested within it). The constraint The list item Finds a list item within the list itself (excluding content from any lists that might be nested within it). The predicate The list item Gets a collection of all table rows within the table itself (excluding content from any tables that might be nested within it). The table row collection This class provides an easy way of retrying an action for a given number of seconds. The following code shows a basic usage: var action = new TryFuncUntilTimeOut(5); var result = action.Try(() => false == true); Initializes a new instance of the class. The timeout in seconds. Initializes a new instance of the class. The timer instance which will be used when executing . Tries the specified action until the result of the action is not equal to default{T} or the time out is reached. The result type of the action The action. The result of the action of default{T} when time out occured. Gets or sets the maximum interval between retries of the action. Returns the time out period. The timeout. Returns the last exception (thrown by the action) before the time out occured. The last exception. Returns a value indicating whether a time out occured. true if did time out; otherwise, false. Gets or sets the exception message. If set a will be thrown if the action did time out. The exception message. This class provides specialized functionality for a HTML option element. Initializes a new instance of the class. The domContainer. The option element. Initializes a new instance of the class. The domContainer. The finder. De-selects this option in the selectlist (if selected), fires the "onchange" event on the selectlist and waits for it to complete. De-selects this option in the selectlist (if selected), fires the "onchange" event on the selectlist and does not wait for it to complete. Selects this option in the selectlist (if not selected), fires the "onchange" event on the selectlist and waits for it to complete. Selects this option in the selectlist (if not selected), fires the "onchange" event on the selectlist and does not wait for it to complete. Returns the value. The value. Gets a value indicating whether this is selected. true if selected; otherwise, false. Returns the index of this in the . The index. Gets a value indicating whether this is selected by default. true if selected by default; otherwise, false. Gets the parent . The parent . This logger class writes it's output to the console. The following code attaches the ConsoleLogWriter to WatiN and writes a LogAction. Logger.LogWriter = new ConsoleLogWriter; Logger.LogAction("Attached ConsoleLogWriter"); A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A find by default factory that finds elements by id. Thrown if an element is readonly and the current action (like TextField.TypeText) a is not allowed. This class provides specialized functionality for a HTML input element of type checkbox. Initializes a new instance of the class. Mainly used by WatiN internally. The domContainer. The input element. Initializes a new instance of the class. Mainly used by WatiN internally. The domContainer. The finder. The firefox client port used to communicate with the remote automation server jssh. Name of the javascript variable that references the DOM:window object. Name of the javascript function to retrieve only child elements (skip text nodes). true if the method has been called to release resources. Underlying socket used to create a . Finalizes an instance of the class. Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. The url. Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. 2 Reloads the javascript variables that are scoped at the document level. Releases unmanaged and - optionally - managed resources true to release both managed and unmanaged resources; false to release only unmanaged resources. Writes the specified data to the jssh server. The data. The response. Cleans the response. The response. Response from FireFox with out any of the telnet UI characters Defines the default JS variables used to automate this FireFox window. Index of the window. Reads the response from the jssh server. The result Expected. The check For Errors. Sends a command to the FireFox remote server. The data to send. When not connected. Writes a line to the jssh server. Gets a value indicating whether this is connected. true if connected; otherwise, false. Gets the name of the javascript variable that references the DOM:document object. Gets the type of java script engine. The type of java script engine. Gets the name of the browser variable. The name of the browser variable. Gets a value indicating whether the main FireFox window is visible, it's possible that the main FireFox window is not visible if a previous shutdown didn't complete correctly in which case the restore / resume previous session dialog may be visible. Gets a value indicating whether IsRestoreSessionDialogVisible. The is restore session dialog visible. A delegate that selects an element in a position relative to another element. The reference element type The reference element from which the search begins The selected element, possibly a descendant or ancestor of the reference element A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. This class represents an HTML "body" element. Initialises a new instance of the class. Mainly used by WatiN internally. The the element is in. The input button or button element. Initialises a new instance of the class. Mainly used by WatiN internally. The the element is in. The input button or button element. Provides extension methods for . Assigns a description to a component and returns it. The component type. The component. The description, or null if none. The component. Thrown if is null. This class provides specialized functionality for a HTML tr element. Finds a table cell within the table row itself (excluding content from any tables that might be nested within it). The element id The table cell Finds a table cell within the table row itself (excluding content from any tables that might be nested within it). The element id regular expression The table cell Finds a table cell within the table row itself (excluding content from any tables that might be nested within it). The constraint The table cell Finds a table cell within the table row itself (excluding content from any tables that might be nested within it). The predicate The table cell Returns a which can be applied on a to filter out elements contained in a thead section. Following example shows how to get only the rows inside a thead section: var browser = new IE("www.watin.net/examples/tables.htm"); var tableRows = browser.Table("table_id").OwnTableRows; var headerRows = tableRows.Filter(TableRow.IsHeaderRow()); If you don't want header rows in your tablerows collection apply to : var browser = new IE("www.watin.net/examples/tables.htm"); var tableRows = browser.Table("table_id").OwnTableRows; var noHeaderRows = tableRows.Filter(!TableRow.IsHeaderRow()); Returns a which can be applied on a to filter out elements contained in a tfoot section. Following example shows how to get only the rows inside a tfoot section: var browser = new IE("www.watin.net/examples/tables.htm"); var tableRows = browser.Table("table_id").OwnTableRows; var footerRows = tableRows.Filter(TableRow.IsFooterRow()); If you don't want header rows in your tablerows collection apply to : var browser = new IE("www.watin.net/examples/tables.htm"); var tableRows = browser.Table("table_id").OwnTableRows; var noFooterRows = tableRows.Filter(!TableRow.IsFooterRow()); Gets the table that contains this row. Gets the table body that contains this row. Gets the table that contains this row. Gets the index of the in the of the parent . The index of the row. Gets a collection of all table cells within the table row itself (excluding content from any tables that might be nested within it). The table cell collection Gets the table cells that are direct children of this , leaving out table cells of any nested tables within this . The table cells collection. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of open instances. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. Provides low-level support for manipulating cookies, clearing caches and setting internet options. This cookie clearing code is based on the sample code from the following MS KB article: http://support.microsoft.com/default.aspx?scid=kb;EN-US;326201 Beware, the code presented in that article is somewhat buggy so it has been completely rewritten here. Holds state for the duration of the clear cookies operation because we don't have anonymous delegates in .Net 1.1. Wraps a and as an implementation of . Creates a new adapter. The DOM container The native element collection Thrown if or is null enumeration of the logging types action logging type debug logging type The wrapped by this instance. This class provides specialized functionality for a HTML span element. This class provides specialized functionality for a HTML select element. Returns an initialized instance of a SelectList object. Mainly used by the collectionclass SelectLists. The the element is in. The HTML select element. Returns an instance of a SelectList object. Mainly used internally. The the element is in. The element finder to use. This method clears the selected items in the select box and waits for the onchange event to complete after the list is cleared This method selects an item by text. Raises NoValueFoundException if the specified value is not found. The text. This method selects an item by text using the supplied regular expression. Raises NoValueFoundException if the specified value is not found. The regex. Selects an item in a select box, by value. Raises NoValueFoundException if the specified value is not found. The value. Selects an item in a select box by value using the supplied regular expression. Raises NoValueFoundException if the specified value is not found. The regex. Returns the which matches the specified . The text. Returns the which matches the specified . The text. Returns the which matches the specified . The find by to use. Returns the which matches the specified expression. The expression to use. Gets a value indicating whether this allows multiple select. true if multiple; otherwise, false. Returns all the items in the select list as an array. An empty array is returned if the select box has no contents. Returns all the elements in the . Returns the selected option(s) in an array list. Returns the selected item(s) in a . Returns the first selected item in the selectlist. Other items may be selected. Use SelectedItems to get a StringCollection of all selected items. When there's no item selected, the return value will be null. Returns the first selected option in the selectlist. Other options may be selected. Use SelectedOptions to get an ArrayList of all selected options. When there's no option selected, the return value will be null. Gets a value indicating whether this instance has selected items. true if this instance has selected items; otherwise, false. A typed collection of elements within a . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. This class provides specialized functionality for a HTML label element. This class provides specialized functionality for a HTML img element. Thrown if a (java) script failed to run. The innerexception returns the actual exception. This class supports matching a regular expression with a string value. Initializes a new instance of the class. The regex to be used by the . Thrown if is null Matches the given value with the regex. You can override this method and provide your own implementation for the comparison with the given . The value. Should return true or false, which is the default. Gets the regular expression to compare against. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. Summary description for IEElement. This methode can be used if the attribute isn't available as a property of of this class. The attribute name. This could be different then named in the HTML. It should be the name of the property exposed by IE on it's style object. The value of the attribute if available; otherwise null is returned. Gets the underlying object. Gets the DispHtmlBaseElement />. The DispHtmlBaseElement. Fires the event on the element but doesn't wait for it to complete Name of the event to fire The event object properties. Fires the event on the given element. Name of the event to fire The event object properties. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. A typed collection of instances within a or . Initializes a new instance of the class. Mainly used by WatiN internally. The DOM container. The finder. This class provides some basic means to write actions to a logger class. WatiN uses this class to log which actions are done while driving Internet Explorer. Logs the action. These should be messages about "user" actions done by WatiN. A message containing zero or more format items. An object array containing zero or more objects to format Call this function from your code like this: Logger.LogAction("Some message"); or Logger.LogAction("Some message with an {0} to {1}, "item", "format"); Logs the debug message. These should be technical messages from within WatiN. A message containing zero or more format items. An object array containing zero or more objects to format Call this function from your code like this: Logger.LogDebug("Some message"); or Logger.LogDebug("Some message with an {0} to {1}, "item", "format"); base logging method to send data LogTypes enumeration item A message containing zero or more format items. An object array containing zero or more objects to format Base logging method to send data and create the message only when a logWriter is attached LogTypes enumeration item A delegate to create the log message. Gets or sets the log writer. The log writer. This class provides specialized functionality for a HTML link element. This is the main class to access a webpage within a modal or modeless HTML dialog. This class handles the print dialog clicking the Print, Cancel or Apply button. The following code shows the use of this dialog handler IE ie = new IE(); ie.DialogWatcher.Add(new PrintDialogHandler(PrintDialogHandler.ButtonsEnum.Cancel)); ie.GoTo("http://www.someprintdialog.com"); Determines whether the specified window is a print dialog by checking the . Valid values are "96C820C4" or "96C800C4". The window. true if the specified window is a print dialog; otherwise, false. A constraint that produces the inverse result of another constraint. Creates a new NOT constraint. The inner constraint Thrown if is null This class determines if it is possible to get an element by its Id based on the given Constraint. If so it will return an id Following an example on how to use this class: var idHint = IdHinter.GetIdHint(Find.ById("someId")); Gets the id hint. Only returns an Id if is an on an exact Id or if the is an with an on an exact Id and an . The constraint to get the id Hint from. ================================================ FILE: Tools/ThirdParty/log4net/1.0/release/log4net.xml ================================================ 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. 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 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 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 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 . 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. 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. 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 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 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 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. 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 modifier left justify minimum width maximum width comment
%20logger false 20 none Left pad with spaces if the logger name is less than 20 characters long.
%-20logger true 20 none Right pad with spaces if the logger name is less than 20 characters long.
%.30logger NA none 30 Truncate from the beginning if the logger name is longer than 30 characters.
%20.30logger false 20 30 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.30logger true 20 30 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
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. 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. 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. Sends the error information to 's Error method. Log an Error The error message. The exception. Prints the message and the stack trace of the exception on the standard error output stream. Log an error The error message. Print a the error message passed as parameter on the standard error output stream. 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 The thread local data slot to use to store a PropertiesDictionary. Internal constructor Initializes a new instance of the class. Remove a property the key for the entry to remove Remove a property Clear all properties Clear all properties Get the PropertiesDictionary 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 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. ================================================ FILE: Tools/ThirdParty/log4net/1.1/release/log4net.xml ================================================ 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. 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 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 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 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 . 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. 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. 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 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 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 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. 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 modifier left justify minimum width maximum width comment
%20logger false 20 none Left pad with spaces if the logger name is less than 20 characters long.
%-20logger true 20 none Right pad with spaces if the logger name is less than 20 characters long.
%.30logger NA none 30 Truncate from the beginning if the logger name is longer than 30 characters.
%20.30logger false 20 30 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.30logger true 20 30 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
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. 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. 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. Sends the error information to 's Error method. Log an Error The error message. The exception. Prints the message and the stack trace of the exception on the standard error output stream. Log an error The error message. Print a the error message passed as parameter on the standard error output stream. 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 The thread local data slot to use to store a PropertiesDictionary. Internal constructor Initializes a new instance of the class. Remove a property the key for the entry to remove Remove a property Clear all properties Clear all properties Get the PropertiesDictionary 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 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. ================================================ FILE: Tools/ThirdParty/log4net/2.0/release/log4net.xml ================================================ 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. 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 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 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 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 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. 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. 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 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 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 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. 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 modifier left justify minimum width maximum width comment
%20logger false 20 none Left pad with spaces if the logger name is less than 20 characters long.
%-20logger true 20 none Right pad with spaces if the logger name is less than 20 characters long.
%.30logger NA none 30 Truncate from the beginning if the logger name is longer than 30 characters.
%20.30logger false 20 30 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.30logger true 20 30 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
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. 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. 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. Sends the error information to 's Error method. Log an Error The error message. The exception. Prints the message and the stack trace of the exception on the standard error output stream. Log an error The error message. Print a the error message passed as parameter on the standard error output stream. 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 The thread local data slot to use to store a PropertiesDictionary. Internal constructor Initializes a new instance of the class. Remove a property the key for the entry to remove Remove a property Clear all properties Clear all properties Get the PropertiesDictionary 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 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. ================================================ FILE: Tools/ThirdParty/log4net/3.5/release/log4net.xml ================================================ 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. 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 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 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 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 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. 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. 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 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 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 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. 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 modifier left justify minimum width maximum width comment
%20logger false 20 none Left pad with spaces if the logger name is less than 20 characters long.
%-20logger true 20 none Right pad with spaces if the logger name is less than 20 characters long.
%.30logger NA none 30 Truncate from the beginning if the logger name is longer than 30 characters.
%20.30logger false 20 30 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.30logger true 20 30 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
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. 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. 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. Sends the error information to 's Error method. Log an Error The error message. The exception. Prints the message and the stack trace of the exception on the standard error output stream. Log an error The error message. Print a the error message passed as parameter on the standard error output stream. 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 The thread local data slot to use to store a PropertiesDictionary. Internal constructor Initializes a new instance of the class. Remove a property the key for the entry to remove Remove a property Clear all properties Clear all properties Get the PropertiesDictionary 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 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. ================================================ FILE: Tools/ThirdParty/log4net/4.0/release/log4net.xml ================================================ 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. 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 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 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 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 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. 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. 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 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 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 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. 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 modifier left justify minimum width maximum width comment
%20logger false 20 none Left pad with spaces if the logger name is less than 20 characters long.
%-20logger true 20 none Right pad with spaces if the logger name is less than 20 characters long.
%.30logger NA none 30 Truncate from the beginning if the logger name is longer than 30 characters.
%20.30logger false 20 30 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.30logger true 20 30 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
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. 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. 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. Sends the error information to 's Error method. Log an Error The error message. The exception. Prints the message and the stack trace of the exception on the standard error output stream. Log an error The error message. Print a the error message passed as parameter on the standard error output stream. 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 The thread local data slot to use to store a PropertiesDictionary. Internal constructor Initializes a new instance of the class. Remove a property the key for the entry to remove Remove a property Clear all properties Clear all properties Get the PropertiesDictionary 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 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. ================================================ FILE: Tools/WickedSick.ForumScraper/FluentNhibernateLocalSessionFactoryObject.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using Spring.Data.NHibernate; using NHibernate.Cfg; using NHibernate.Context; using FluentNHibernate.Cfg; using System.Reflection; namespace WickedSick.ForumScraper { public class FluentNhibernateLocalSessionFactoryObject : LocalSessionFactoryObject { private string[] fluentNhibernateMappingAssemblies; /// /// Sets the assemblies to load that contain fluent nhibernate mappings. /// /// The mapping assemblies. public string[] FluentNhibernateMappingAssemblies { get { return fluentNhibernateMappingAssemblies; } set { fluentNhibernateMappingAssemblies = value; } } /// /// Fluent configuration. /// protected override void PostProcessConfiguration(Configuration config) { base.PostProcessConfiguration(config); Fluently.Configure(config) .CurrentSessionContext() .Mappings(m => { foreach (string assemblyName in fluentNhibernateMappingAssemblies) { m.HbmMappings .AddFromAssembly(Assembly.Load(assemblyName)); m.FluentMappings .AddFromAssembly(Assembly.Load(assemblyName)); } }) .BuildConfiguration(); } } } ================================================ FILE: Tools/WickedSick.ForumScraper/ICreateUpdateRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WickedSick.ForumScraper { public interface ICreateUpdateRepository { bool Create(TEntity entity); bool Create(IEnumerable items); bool Update(TEntity entity); } } ================================================ FILE: Tools/WickedSick.ForumScraper/IDeleteRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WickedSick.ForumScraper { public interface IDeleteRepository { bool Delete(TEntity entity); bool Delete(IEnumerable entities); } } ================================================ FILE: Tools/WickedSick.ForumScraper/IReadOnlyRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; namespace WickedSick.ForumScraper { public interface IReadOnlyRepository where TEntity : class { TEntity FindBy(TKey id); IQueryable All(); TEntity FindBy(Expression> expression); IQueryable FilterBy(Expression> expression); } } ================================================ FILE: Tools/WickedSick.ForumScraper/IRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WickedSick.ForumScraper { public interface IRepository : IReadOnlyRepository, ICreateUpdateRepository, IDeleteRepository where TEntity : class { } } ================================================ FILE: Tools/WickedSick.ForumScraper/ISLForumMemberRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WickedSick.ForumScraper { public interface ISLForumMemberRepository: IRepository { } } ================================================ FILE: Tools/WickedSick.ForumScraper/Program.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using Spring.Context; using Spring.Context.Support; using NHibernate; using NHibernate.Context; using System.Threading; namespace WickedSick.ForumScraper { class Program { private static readonly List URLS = new List() { "http://forums.silverlight.net/t/239225.aspx/1/10000?Silverlight+App+s+won+t+run+on+Windows+8+preview", "http://forums.silverlight.net/t/207892.aspx/1/10000?Is+this+official+now", "http://forums.silverlight.net/t/241149.aspx/1/10000?Silverlight+Future+HTML+5+Windows+8+browsers+not+supporting+Pluggins", "http://forums.silverlight.net/t/239727.aspx/1/10000?I+am+a+silverlight+developer+that+must+write+silverlight+code+and+need+to+know+if+he+can", "http://forums.silverlight.net/t/230502.aspx/1/10000?Windows+8+apps+going+html5+wtf", "http://forums.silverlight.net/t/230725.aspx/1/10000?Windows+8+apps+going+html5+wtf+part+2", "http://forums.silverlight.net/t/231470.aspx/1/10000?Windows+8+apps+going+html5+wtf+part+3", "http://forums.silverlight.net/t/239388.aspx/1/10000?What+is+the+future+of+Silverlight+and+XAML+to+build+web+applications" }; static void Main(string[] args) { ExtractMembers(); } private static void ExtractMembers() { IApplicationContext ctx = ContextRegistry.GetContext(); ISLForumMemberRepository repo = (ISLForumMemberRepository)ctx.GetObject("SLForumMemberRepository"); ISessionFactory sessionFactory = (ISessionFactory)ctx.GetObject("FaydeSessionFactory"); ISession session = sessionFactory.OpenSession(); CurrentSessionContext.Bind(session); using (ITransaction transaction = session.BeginTransaction()) { foreach (string url in URLS) { foreach (SLForumMember m in SLForumScraper.ScrapeMembers(url)) { SLForumMember em = repo.FindBy(x => x.Username == m.Username); if (em == null) repo.Create(m); } } transaction.Commit(); } } } } ================================================ FILE: Tools/WickedSick.ForumScraper/Properties/AssemblyInfo.cs ================================================ 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("WickedSick.ForumScraper")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("WickedSick.ForumScraper")] [assembly: AssemblyCopyright("Copyright © 2012")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // 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("64bfa0fe-d860-49ac-819f-22b8ea04e740")] // 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")] ================================================ FILE: Tools/WickedSick.ForumScraper/Repository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using NHibernate; using NHibernate.Linq; using System.Linq.Expressions; namespace WickedSick.ForumScraper { public class Repository : IRepository where T : class { private ISessionFactory _sessionFactory; public ISessionFactory SessionFactory { get { return _sessionFactory; } set { _sessionFactory = value; } } #region IRepository Members public bool Create(T entity) { SessionFactory.GetCurrentSession().Save(entity); return true; } public bool Create(IEnumerable items) { foreach (T item in items) { SessionFactory.GetCurrentSession().SaveOrUpdate(item); } return true; } public bool Update(T entity) { SessionFactory.GetCurrentSession().Update(entity); return true; } public bool Delete(T entity) { SessionFactory.GetCurrentSession().Delete(entity); return true; } public bool Delete(IEnumerable entities) { foreach (T entity in entities) { SessionFactory.GetCurrentSession().Delete(entity); } return true; } #endregion #region IReadOnlyRepository Members public T FindBy(K id) { return SessionFactory.GetCurrentSession().Get(id); } public IQueryable All() { return SessionFactory.GetCurrentSession().Query(); } public T FindBy(Expression> expression) { return FilterBy(expression).SingleOrDefault(); } public IQueryable FilterBy(Expression> expression) { return All().Where(expression).AsQueryable(); } #endregion } } ================================================ FILE: Tools/WickedSick.ForumScraper/SLForumMember.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WickedSick.ForumScraper { public class SLForumMember { public virtual int Id { get; set; } public virtual string Username { get; set; } public virtual string PostLevel { get; set; } public virtual int PostPoints { get; set; } public virtual int PostCount { get; set; } } } ================================================ FILE: Tools/WickedSick.ForumScraper/SLForumMemberMap.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using FluentNHibernate.Mapping; namespace WickedSick.ForumScraper { public class SLForumMemberMap: ClassMap { public SLForumMemberMap() { Table("SLForumMembers"); Id(x => x.Id).Column("SL_FORUM_MEMBER_ID"); Map(x => x.Username); Map(x => x.PostLevel); Map(x => x.PostPoints); Map(x => x.PostCount); } } } ================================================ FILE: Tools/WickedSick.ForumScraper/SLForumMemberRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WickedSick.ForumScraper { public class SLForumMemberRepository: Repository, ISLForumMemberRepository { } } ================================================ FILE: Tools/WickedSick.ForumScraper/SLForumScraper.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using HtmlAgilityPack; using Fizzler.Systems.HtmlAgilityPack; namespace WickedSick.ForumScraper { public static class SLForumScraper { public static IEnumerable ScrapeMembers(string url) { string COMMENT_SEARCH = "li.comment-wrap"; var doc = GetPage(url); return from h in doc.DocumentNode.QuerySelectorAll(COMMENT_SEARCH) select parseMember(h); } private static SLForumMember parseMember(HtmlNode node) { string USERNAME_SEARCH = "h3.post-title a"; string POST_LEVEL_SEARCH = "p.post-level"; string POST_POINTS_SEARCH = "p.post-points"; string POST_COUNT_SEARCH = "p.post-count"; string ppString = node.QuerySelector(POST_POINTS_SEARCH).InnerText; ppString = ppString.Substring(0, ppString.IndexOf(' ')); string pcString = node.QuerySelector(POST_COUNT_SEARCH).InnerText; pcString = pcString.Substring(0, pcString.IndexOf(' ')); return new SLForumMember() { Username = node.QuerySelector(USERNAME_SEARCH).InnerText, PostLevel = node.QuerySelector(POST_LEVEL_SEARCH).InnerText, PostPoints = int.Parse(ppString), PostCount = int.Parse(pcString) }; } private static HtmlDocument GetPage(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); var doc = new HtmlDocument(); doc.Load(response.GetResponseStream(), Encoding.UTF8); return doc; } } } ================================================ FILE: Tools/WickedSick.ForumScraper/WickedSick.ForumScraper.csproj ================================================  Debug x86 8.0.30703 2.0 {53773A4B-2355-41C6-9340-FB9BDA269A28} Exe Properties WickedSick.ForumScraper WickedSick.ForumScraper v4.0 512 x86 true full false bin\Debug\ DEBUG;TRACE prompt 4 x86 pdbonly true bin\Release\ TRACE prompt 4 ..\..\..\wickedsick\ThirdParty\Fizzler\v0.9\Fizzler.Systems.HtmlAgilityPack.dll ..\..\..\wickedsick\ThirdParty\FluentNHibernate\v1.3.0.717\FluentNHibernate.dll ..\..\..\wickedsick\ThirdParty\Fizzler\v0.9\HtmlAgilityPack.dll ..\..\..\wickedsick\ThirdParty\Iesi.Collections\v3.2.0.400\Iesi.Collections.dll ..\..\..\wickedsick\ThirdParty\NHibernate\v3.2.0.4000\NHibernate.dll ..\..\..\wickedsick\ThirdParty\Spring.Net\v1.3.2\.Net 4.0\Spring.Core.dll ..\..\..\wickedsick\ThirdParty\Spring.Net\v1.3.2\.Net 4.0\Spring.Data.dll ..\..\..\wickedsick\ThirdParty\Spring.Net\v1.3.2\.Net 4.0\Spring.Data.NHibernate32.dll ================================================ FILE: Tools/WickedSick.ForumScraper/WickedSick.ForumScraper.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WickedSick.ForumScraper", "WickedSick.ForumScraper.csproj", "{53773A4B-2355-41C6-9340-FB9BDA269A28}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {53773A4B-2355-41C6-9340-FB9BDA269A28}.Debug|x86.ActiveCfg = Debug|x86 {53773A4B-2355-41C6-9340-FB9BDA269A28}.Debug|x86.Build.0 = Debug|x86 {53773A4B-2355-41C6-9340-FB9BDA269A28}.Release|x86.ActiveCfg = Release|x86 {53773A4B-2355-41C6-9340-FB9BDA269A28}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Tools/WickedSick.ForumScraper/app.config ================================================
WickedSick.ForumScraper ================================================ FILE: Tools/WickedSick.MVVM/DialogEx/DialogCompleteParameters.cs ================================================  namespace WickedSick.MVVM.DialogEx { internal class DialogCompleteParameters : IDialogCompleteParameters { public DialogCompleteParameters(bool? result, object data) { Result = result; Data = data; } public bool? Result { get; private set; } public object Data { get; private set; } } } ================================================ FILE: Tools/WickedSick.MVVM/DialogEx/DialogControl.cs ================================================ using System; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; namespace WickedSick.MVVM.DialogEx { /// /// This control has no rendering of its own. /// When provided a ViewType and DataContext, it will construct the view/view model pair and show the dialog. /// The DialogResult along with the manipulated DataContext will be returned in the event "DialogComplete". /// [DesignTimeVisible(false)] public class DialogControl : Control { public static readonly DependencyProperty ViewTypeProperty = DependencyProperty.Register("ViewType", typeof(Type), typeof(DialogControl), new FrameworkPropertyMetadata(new PropertyChangedCallback(TryShowDialog))); public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register("ViewModel", typeof(ObservableObject), typeof(DialogControl), new FrameworkPropertyMetadata(new PropertyChangedCallback(TryShowDialog))); public static readonly DependencyProperty IsDialogVisibleProperty = DependencyProperty.Register("IsDialogVisible", typeof(bool), typeof(DialogControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, TryShowDialog)); public static readonly DependencyProperty DialogCompleteCommandProperty = DependencyProperty.Register("DialogCompleteCommand", typeof(ICommand), typeof(DialogControl)); public static readonly DependencyProperty StartupLocationProperty = DependencyProperty.Register("StartupLocation", typeof(WindowStartupLocation), typeof(DialogControl), new UIPropertyMetadata(WindowStartupLocation.CenterOwner)); public DialogControl() { // The control doesn't have any specific rendering of its own. Visibility = Visibility.Hidden; SetBinding(ViewModelProperty, new Binding("DialogDataContext")); SetBinding(IsDialogVisibleProperty, new Binding("IsRequestingChange") { Mode = BindingMode.TwoWay }); SetBinding(DialogCompleteCommandProperty, new Binding("ChangedCommand")); } public Type ViewType { get { return (Type)GetValue(ViewTypeProperty); } set { SetValue(ViewTypeProperty, value); } } public ObservableObject ViewModel { get { return (ObservableObject)GetValue(ViewModelProperty); } set { SetValue(ViewModelProperty, value); } } public bool IsDialogVisible { get { return (bool)GetValue(IsDialogVisibleProperty); } set { SetValue(IsDialogVisibleProperty, value); } } public ICommand DialogCompleteCommand { get { return (ICommand)GetValue(DialogCompleteCommandProperty); } set { SetValue(DialogCompleteCommandProperty, value); } } public WindowStartupLocation StartupLocation { get { return (WindowStartupLocation)GetValue(StartupLocationProperty); } set { SetValue(StartupLocationProperty, value); } } private static void TryShowDialog(DependencyObject target, DependencyPropertyChangedEventArgs e) { var dc = target as DialogControl; if (dc == null) return; dc.TryShowDialog(); } private bool _IgnoreChanges; private void TryShowDialog() { if (_IgnoreChanges) return; if (!IsDialogVisible) return; if (ViewType == null) return; if (ViewModel == null) return; if (!typeof(Window).IsAssignableFrom(ViewType)) return; Window newDialog = Activator.CreateInstance(ViewType) as Window; newDialog.Owner = Window.GetWindow(this); newDialog.WindowStartupLocation = StartupLocation; newDialog.DataContext = ViewModel; bool? result = newDialog.ShowDialog(); try { _IgnoreChanges = true; var be = GetBindingExpression(IsDialogVisibleProperty); be.UpdateTarget(); SetCurrentValue(IsDialogVisibleProperty, false); } finally { _IgnoreChanges = false; } ICommand completeCommand = DialogCompleteCommand; if (completeCommand != null) { completeCommand.Execute(new DialogCompleteParameters(result, newDialog.DataContext)); } } } } ================================================ FILE: Tools/WickedSick.MVVM/DialogEx/DialogViewModel.cs ================================================ using System; using System.Windows.Threading; namespace WickedSick.MVVM.DialogEx { public class DialogViewModel : DialogViewModel { } public class DialogViewModel : DialogViewModel { } public class DialogViewModel : ViewModelBase { private bool _IsRequestingChange; private RelayCommand _RequestChangeCommand; private ObservableObject _DialogDataContext; private RelayCommand _ChangedCommand; public DialogViewModel() { RequestChangeCommand = new RelayCommand(RequestChange_Execute, RequestChange_CanExecute); ChangedCommand = new RelayCommand(Changed_Execute); } public Action AcceptAction { get; set; } public Action CompleteAction { get; set; } public Func ViewModelBuilder { get; set; } public Func CanChange { get; set; } public bool IsRequestingChange { get { return _IsRequestingChange; } set { _IsRequestingChange = value; OnPropertyChanged("IsRequestingChange"); } } public RelayCommand RequestChangeCommand { get { return _RequestChangeCommand; } set { _RequestChangeCommand = value; OnPropertyChanged("RequestChangeCommand"); } } public ObservableObject DialogDataContext { get { return _DialogDataContext; } set { _DialogDataContext = value; OnPropertyChanged("DialogDataContext"); } } public RelayCommand ChangedCommand { get { return _ChangedCommand; } set { _ChangedCommand = value; OnPropertyChanged("ChangedCommand"); } } private void Changed_Execute(IDialogCompleteParameters parameter) { if (parameter.Result == true) { if (AcceptAction != null) { if (parameter.Data == null) AcceptAction(default(TAccept)); else AcceptAction((TAccept)parameter.Data); } } if (CompleteAction != null) CompleteAction(parameter); } private void RequestChange_Execute(TBuilder parameter) { if (ViewModelBuilder != null) { var vm = ViewModelBuilder(parameter); if (vm == null) return; DialogDataContext = vm; } IsRequestingChange = true; } private bool RequestChange_CanExecute(TBuilder parameter) { if (CanChange != null) return CanChange(parameter); return true; } } } ================================================ FILE: Tools/WickedSick.MVVM/DialogEx/IDialogCompleteParameters.cs ================================================  namespace WickedSick.MVVM.DialogEx { public interface IDialogCompleteParameters { bool? Result { get; } object Data { get; } } } ================================================ FILE: Tools/WickedSick.MVVM/ObservableObject.cs ================================================ using System.ComponentModel; namespace WickedSick.MVVM { public abstract class ObservableObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { var obj = PropertyChanged; if (obj != null) obj(this, new PropertyChangedEventArgs(propertyName)); } } } ================================================ FILE: Tools/WickedSick.MVVM/Properties/AssemblyInfo.cs ================================================ 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("WickedSick.MVVM")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("WickedSick.MVVM")] [assembly: AssemblyCopyright("Copyright © 2012")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // 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("c2c1a525-6fb2-41e2-abc1-4f8d38031878")] // 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")] ================================================ FILE: Tools/WickedSick.MVVM/RelayCommand.cs ================================================ using System; using System.Windows.Input; namespace WickedSick.MVVM { public class RelayCommand : ICommand { private Action _Execute; private Func _CanExecute; public RelayCommand(Action execute) : this(execute, () => true) { } public RelayCommand(Action execute, Func canExecute) { _Execute = execute; _CanExecute = canExecute; } public bool CanExecute(object parameter) { return _CanExecute(); } public event EventHandler CanExecuteChanged; public void ForceCanExecuteChanged() { var obj = CanExecuteChanged; if (obj != null) obj(this, new EventArgs()); } public void Execute(object parameter = null) { _Execute(); } } public class RelayCommand : ICommand { private Action _Execute; private Func _CanExecute; public RelayCommand(Action execute) : this(execute, t => true) { } public RelayCommand(Action execute, Func canExecute) { if (execute == null) throw new ArgumentException("Invalid execute action."); if (canExecute == null) throw new ArgumentException("Invalid can execute func."); _Execute = execute; _CanExecute = canExecute; } public bool CanExecute(object parameter) { return _CanExecute((T)parameter); } public event EventHandler CanExecuteChanged; public void ForceCanExecuteChanged() { var obj = CanExecuteChanged; if (obj != null) obj(this, new EventArgs()); } public void Execute(object parameter) { _Execute((T)parameter); } } } ================================================ FILE: Tools/WickedSick.MVVM/TreeViewEx/TreeViewBehavior.cs ================================================ using System.Windows; using System.Windows.Controls; using System.Windows.Interactivity; namespace WickedSick.MVVM.TreeViewEx { public class TreeViewBehavior : Behavior { public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register( "SelectedItem", typeof(object), typeof(TreeViewBehavior), new PropertyMetadata(OnSelectedItemPropertyChanged)); public object SelectedItem { get { return GetValue(SelectedItemProperty); } set { SetValue(SelectedItemProperty, value); } } private static void OnSelectedItemPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs args) { var item = args.NewValue as TreeViewItem; if (item != null) { item.SetValue(TreeViewItem.IsSelectedProperty, true); } } protected override void OnAttached() { base.OnAttached(); AssociatedObject.SelectedItemChanged += AssociatedObject_SelectedItemChanged; } private void AssociatedObject_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { SelectedItem = e.NewValue; } protected override void OnDetaching() { base.OnDetaching(); if (AssociatedObject != null) AssociatedObject.SelectedItemChanged -= AssociatedObject_SelectedItemChanged; } } } ================================================ FILE: Tools/WickedSick.MVVM/ViewModelBase.cs ================================================  namespace WickedSick.MVVM { public abstract class ViewModelBase : ObservableObject { } } ================================================ FILE: Tools/WickedSick.MVVM/WickedSick.MVVM.csproj ================================================  Debug AnyCPU 8.0.30703 2.0 {C90D69F2-9AB0-468E-8F42-E2C9F7705290} Library Properties WickedSick.MVVM WickedSick.MVVM v4.0 512 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 ================================================ FILE: Tools/WickedSick.Thea/App.xaml ================================================  ================================================ FILE: Tools/WickedSick.Thea/App.xaml.cs ================================================ using System; using System.Runtime.InteropServices; using System.Windows; using WickedSick.Thea.ViewModels; namespace WickedSick.Thea { public partial class App : Application { public void Initialize() { App.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException; try { var vm = new MainViewModel(); App.Current.MainWindow.DataContext = vm; vm.Load(); } catch (Exception) { //logger.Error("Failed to load Update Manager", ex); //MessageBox.Show("Update Manager failed to load properly: " + ex.Message, "Failed to load", MessageBoxButton.OK, MessageBoxImage.Error); App.Current.Shutdown(); } } private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { if (e.Exception is COMException) { e.Handled = true; var vm = App.Current.MainWindow.DataContext as MainViewModel; vm.Load(); } } public void CleanUp(object dataContext) { (dataContext as MainViewModel).Dispose(); } } } ================================================ FILE: Tools/WickedSick.Thea/Controls/LayoutDisplay.xaml ================================================  ================================================ FILE: Tools/WickedSick.Thea/Controls/LayoutDisplay.xaml.cs ================================================ using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Shapes; using WickedSick.Thea.Models; namespace WickedSick.Thea.Controls { public partial class LayoutDisplay : UserControl { public static readonly DependencyProperty LayoutMetricsProperty = DependencyProperty.Register( "LayoutMetrics", typeof(LayoutMetrics), typeof(LayoutDisplay), new PropertyMetadata(LayoutMetricsPropertyChanged)); public LayoutMetrics LayoutMetrics { get { return (LayoutMetrics)GetValue(LayoutMetricsProperty); } set { SetValue(LayoutMetricsProperty, value); } } private static void LayoutMetricsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs args) { (d as LayoutDisplay).Update(args.NewValue as LayoutMetrics); } private Point _Min; private Point _Max; public LayoutDisplay() { InitializeComponent(); } private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e) { Fit(); } protected void InitBackground() { var sx = Math.Floor(_Min.X / 100.0) * 100.0 - 100.0; var sy = Math.Floor(_Min.Y / 100.0) * 100.0 - 100.0; var ex = Math.Ceiling(_Max.X / 100.0) * 100.0 + 100.0; var ey = Math.Ceiling(_Max.Y / 100.0) * 100.0 + 100.0; for (var i = sx; i < ex; i += 100.0) { TheCanvas.Children.Add(CreateBackgroundLine(i, sy, i, ey)); } for (var j = sy; j < ey; j += 100.0) { TheCanvas.Children.Add(CreateBackgroundLine(sx, j, ex, j)); } } protected Line CreateBackgroundLine(double x1, double y1, double x2, double y2) { var line = new Line { X1 = x1, X2 = x2, Y1 = y1, Y2 = y2, }; line.StrokeThickness = 1.0; line.Stroke = new SolidColorBrush(Colors.Gray); line.StrokeDashArray = new DoubleCollection(new[] { 5.0, 5.0 }); return line; } protected void Update(LayoutMetrics metrics) { if (metrics == null) return; try { TheCanvas.Children.Clear(); _Min = new Point(metrics.VisualOffset.X, metrics.VisualOffset.Y); _Max = new Point(_Min.X + (metrics.ActualWidth ?? 0.0), _Min.Y + (metrics.ActualHeight ?? 0.0)); var actualr = new Rectangle { Width = (metrics.ActualWidth ?? 0.0), Height = (metrics.ActualHeight ?? 0.0) }; Canvas.SetLeft(actualr, metrics.VisualOffset.X); Canvas.SetTop(actualr, metrics.VisualOffset.Y); var ax = metrics.AbsoluteXform; actualr.RenderTransform = new MatrixTransform(ax[0], ax[1], ax[3], ax[4], ax[2], ax[5]); actualr.Stroke = new SolidColorBrush(Colors.Black); actualr.StrokeThickness = 2; TheCanvas.Children.Add(actualr); } catch (Exception) { } InitBackground(); Fit(); } protected void Fit() { try { var px = 10.0; var py = 10.0; var avail = new Size(Math.Max(0.0, ActualWidth - px * 2), Math.Max(0.0, ActualHeight - py * 2)); var view = new Rect(_Min.X, _Min.Y, _Max.X - _Min.X, _Max.Y - _Min.Y); var x = new TransformGroup(); x.Children.Add(new TranslateTransform(-view.X, -view.Y)); if (view.Width > 0 && view.Height > 0) x.Children.Add(new ScaleTransform(1 / view.Width, 1 / view.Height)); x.Children.Add(new ScaleTransform(avail.Width, avail.Height)); x.Children.Add(new TranslateTransform(view.X, view.Y)); TheCanvas.LayoutTransform = x; TheCanvas.RenderTransform = new TranslateTransform(px, py); } catch (Exception) { } } } } ================================================ FILE: Tools/WickedSick.Thea/Controls/PerformanceTicker.xaml ================================================  ================================================ FILE: Tools/WickedSick.Thea/Controls/PerformanceTicker.xaml.cs ================================================ using System; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Media; using System.Windows.Shapes; using WickedSick.Thea.Models; namespace WickedSick.Thea.Controls { public partial class PerformanceTicker : UserControl { public static readonly System.Windows.DependencyProperty DataProperty = System.Windows.DependencyProperty.Register( "Data", typeof(ObservableCollection), typeof(PerformanceTicker), new PropertyMetadata(DataPropertyChanged)); public ObservableCollection Data { get { return (ObservableCollection)GetValue(DataProperty); } set { SetValue(DataProperty, value); } } private static void DataPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs args) { var pt = d as PerformanceTicker; pt.DetachData(args.OldValue as ObservableCollection); pt.AttachData(args.NewValue as ObservableCollection); } private Path _Path = new Path(); private PathGeometry _PathGeom = new PathGeometry(); private Point _EndPoint = new Point(0.0, 1.0); private static readonly double SEPARATION_CONSTANT = 1.0 / 100.0; private static readonly double MAX_FPS = 60.0; private TranslateTransform _ChartScrollBarTransform = new TranslateTransform(0.0, 0.0); public PerformanceTicker() { InitializeComponent(); _Path.Data = _PathGeom; _Path.Stroke = new SolidColorBrush(Colors.ForestGreen); _Path.StrokeThickness = 1.0; ChartCanvas.Children.Add(_Path); ChartCanvas.RenderTransform = _ChartScrollBarTransform; ChartScrollBar.Minimum = 0.0; ChartScrollBar.SmallChange = 1.0 * SEPARATION_CONSTANT; ChartScrollBar.LargeChange = ChartScrollBar.SmallChange * 10; ChartScrollBar.ValueChanged += ChartScrollBar_ValueChanged; } protected void AttachData(ObservableCollection data) { if (data == null) return; data.CollectionChanged += data_CollectionChanged; } protected void DetachData(ObservableCollection data) { if (data == null) return; data.CollectionChanged -= data_CollectionChanged; } private void data_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { switch (e.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: AddFrameInfo(e.NewItems[0] as FrameInfo); break; case System.Collections.Specialized.NotifyCollectionChangedAction.Reset: _EndPoint.X = 0.0; _PathGeom.Figures.Clear(); break; } } private void AddFrameInfo(FrameInfo newfi) { if (newfi.TimeDiff <= 0) return; var newEndPoint = _EndPoint; newEndPoint.X += newfi.TimeDiff; var ts = TimeSpan.FromMilliseconds(newfi.TimeDiff); newEndPoint.Y = Math.Min(MAX_FPS, newfi.NumFrames / ts.TotalSeconds) / MAX_FPS; _PathGeom.Figures.Add(new PathFigure(_EndPoint, new[] { new LineSegment(newEndPoint, true) }, false)); _EndPoint = newEndPoint; UpdateScrollBar(); } private void ChartCanvas_SizeChanged(object sender, SizeChangedEventArgs e) { _PathGeom.Transform = new TransformGroup { Children = new TransformCollection { new ScaleTransform(SEPARATION_CONSTANT, ChartCanvas.ActualHeight), new ScaleTransform(1.0, -1.0), new TranslateTransform(0.0, ChartCanvas.ActualHeight), } }; UpdateScrollBar(); } protected void UpdateScrollBar() { var isAtMax = ChartScrollBar.Value == ChartScrollBar.Maximum; var actualEndPoint = _PathGeom.Transform.Transform(_EndPoint); ChartScrollBar.Maximum = Math.Max(0.0, actualEndPoint.X - ChartCanvas.ActualWidth); if (isAtMax) ChartScrollBar.Value = ChartScrollBar.Maximum; } private void ChartScrollBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { _ChartScrollBarTransform.X = -ChartScrollBar.Value; } } } ================================================ FILE: Tools/WickedSick.Thea/Controls/Pill.xaml ================================================  ================================================ FILE: Tools/WickedSick.Thea/Controls/Pill.xaml.cs ================================================ using System.Windows; using System.Windows.Controls; namespace WickedSick.Thea.Controls { public partial class Pill : UserControl { public Pill() { InitializeComponent(); SizeChanged += (s, e) => MetricsChanged(); } public static readonly DependencyProperty StartProperty = DependencyProperty.Register( "Start", typeof(int), typeof(Pill), new PropertyMetadata(0, (d, args) => (d as Pill).MetricsChanged())); public static readonly DependencyProperty LengthProperty = DependencyProperty.Register( "Length", typeof(int), typeof(Pill), new PropertyMetadata(0, (d, args) => (d as Pill).MetricsChanged())); public static readonly DependencyProperty TotalLengthProperty = DependencyProperty.Register( "TotalLength", typeof(int), typeof(Pill), new PropertyMetadata(0, (d, args) => (d as Pill).MetricsChanged())); public int Start { get { return (int)GetValue(StartProperty); } set { SetValue(StartProperty, value); } } public int Length { get { return (int)GetValue(LengthProperty); } set { SetValue(LengthProperty, value); } } public int TotalLength { get { return (int)GetValue(TotalLengthProperty); } set { SetValue(TotalLengthProperty, value); } } protected void MetricsChanged() { if (TotalLength == 0) { LayoutRoot.ColumnDefinitions[0].Width = new GridLength(0, GridUnitType.Pixel); LayoutRoot.ColumnDefinitions[2].Width = new GridLength(0, GridUnitType.Pixel); } else { LayoutRoot.ColumnDefinitions[0].Width = new GridLength((double)Start / (double)TotalLength * ActualWidth, GridUnitType.Pixel); LayoutRoot.ColumnDefinitions[2].Width = new GridLength(((double)TotalLength - (double)Start - (double)Length) / (double)TotalLength * ActualWidth, GridUnitType.Pixel); } } } } ================================================ FILE: Tools/WickedSick.Thea/Helpers/FaydeInterop.cs ================================================ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Runtime.Serialization.Json; using System.Web.Script.Serialization; using Newtonsoft.Json; using WatiN.Core; using WatiN.Core.Exceptions; using WickedSick.Thea.Models; using WickedSick.Thea.ViewModels; using WickedSick.Thea.VisualStudioInterop; namespace WickedSick.Thea.Helpers { public class FaydeInterop : IJavascriptContext { private Browser _Browser; private VisualStudioInstance _VSI; public FaydeInterop(Browser browser) { _Browser = browser; InvalidateCache(); } public bool IsCacheInvalidated { get { IsAlive = VerifyInterop(); return IsAlive && Eval("Fayde.Application.Current.DebugInterop.IsCacheInvalidated") == "true"; } } public bool IsAlive { get; protected set; } public void InvalidateCache() { try { Execute("if (window.Fayde.Application && Fayde.Application.Current.DebugInterop) Fayde.Application.Current.DebugInterop.InvalidateCache();"); } catch (Exception) { } } public IEnumerable GetVisualTree() { IsAlive = VerifyInterop(); if (!IsAlive) return Enumerable.Empty(); var json = RunFunc("GetCache"); var cache = ParseJson(json); if (cache == null) return Enumerable.Empty(); return cache.Children.Select(CreateVisualViewModel); } protected VisualViewModel CreateVisualViewModel(DebugInteropCache cache) { var vvm = new VisualViewModel { ID = cache.ID, Name = cache.Name, TypeName = cache.TypeName, }; if (string.IsNullOrWhiteSpace(vvm.Name)) vvm.Name = null; if (cache.Children != null) vvm.VisualChildren = new ObservableCollection(cache.Children.Select(CreateVisualViewModel)); return vvm; } public IEnumerable GetVisualIDsInHitTest() { IsAlive = VerifyInterop(); if (!IsAlive) return Enumerable.Empty(); var json = RunFunc("GetVisualIDsInHitTest"); return DeserializeList(json); } public void AttachToVisualStudio(VisualStudioInstance instance) { _VSI = instance; _VSI.Attach(); } public IEnumerable GetDependencyProperties() { IsAlive = VerifyInterop(); if (!IsAlive) return Enumerable.Empty(); var json = RunFunc("GetDPCache"); return ParseJson>(json) ?? Enumerable.Empty(); } public IEnumerable GetStorages(int id) { IsAlive = VerifyInterop(); if (!IsAlive) return Enumerable.Empty(); var json = RunFunc("GetStorages", id.ToString()); return DeserializeList(json) .Select(d => new PropertyStorageWrapper { DynamicObject = d, }) .ToList(); } public LayoutMetrics GetLayoutMetrics(int id) { IsAlive = VerifyInterop(); if (!IsAlive) return null; var json = RunFunc("GetLayoutMetrics", id.ToString()); //JsonConvert.DeserializeObject(json); //dynamic des = JsonConvert.DeserializeObject(json); return LayoutMetrics.FromJson(json); } #region Execution Wrapper protected bool VerifyInterop() { try { return !string.IsNullOrWhiteSpace(Eval("Fayde.Application.Current.DebugInterop")); } catch (JavaScriptException) { return false; } } public void Execute(string script) { if (_VSI != null && _VSI.IsDebugging) { try { _VSI.ExecuteStatement(script); } catch (ContextNotAvailableException) { _Browser.RunScript(script); } return; } _Browser.RunScript(script); } public string Eval(string expression) { if (_VSI != null && _VSI.IsDebugging) { try { return _VSI.GetExpression(expression); } catch (ContextNotAvailableException) { } } return _Browser.Eval(expression); } public string EvalAgainstStackFrame(string expression) { if (_VSI != null && _VSI.IsDebugging) { try { return _VSI.GetExpression(expression); } catch (ContextNotAvailableException) { } } return null; } #endregion #region Fayde Interop Js Wrapper private string RunFunc(string functionName, string args = null) { return Eval(string.Format("Fayde.Application.Current.DebugInterop.{0}({1})", functionName, args)); } #endregion private void RefreshIsThisOnStackFrame(VisualViewModel vvm) { vvm.IsThisOnStackFrame = false; if (_VSI == null) return; var obj = _VSI.GetExpression("this._ID") as string; if (obj == null) return; if (obj == vvm.ID.ToString()) vvm.IsThisOnStackFrame = true; } private static T ParseJson(string json) where T : class { var serializer = new DataContractJsonSerializer(typeof(T)); try { using (var ms = new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(json))) { return serializer.ReadObject(ms) as T; } } catch (Exception) { return default(T); } } private static List DeserializeList(string json) { dynamic result = JsonConvert.DeserializeObject(json) ?? Enumerable.Empty(); var list = new List(); foreach (dynamic d in result) { list.Add(d); } return list; } private static List DeserializeList(string json) { dynamic result = JsonConvert.DeserializeObject(json) ?? Enumerable.Empty(); var list = new List(); foreach (dynamic d in result) { list.Add((T)d.Value); } return list; } } } ================================================ FILE: Tools/WickedSick.Thea/Helpers/IJavascriptContext.cs ================================================  namespace WickedSick.Thea.Helpers { public interface IJavascriptContext { bool IsAlive { get; } void Execute(string expression); string Eval(string expression); } } ================================================ FILE: Tools/WickedSick.Thea/IEnumerableEx.cs ================================================ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; namespace WickedSick.Thea { public static class IEnumerableEx { public static void MergeInto(this IList src, IList dest, Func matchFunc, Func> getChildrenFunc) { if (src == null) { dest.Clear(); return; } for (int i = 0; i < dest.Count; i++) { var existing = src.FirstOrDefault(s => matchFunc(s, dest[i])); if (existing != null) { var destChildren = getChildrenFunc(dest[i]); var srcChildren = getChildrenFunc(existing); if (dest == null) dest = srcChildren; destChildren.MergeInto(srcChildren, matchFunc, getChildrenFunc); } else { dest.RemoveAt(i); i--; } } foreach (var newItem in src.Except(dest, matchFunc)) dest.Add(newItem); } public static IEnumerable Except(this IEnumerable first, IEnumerable second, Func matchFunc) { var comparer = new AnonymousComparer { MatchFunc = matchFunc }; return first.Except(second, comparer); } public static IEnumerable Intersect(this IEnumerable first, IEnumerable second, Func matchFunc) { var comparer = new AnonymousComparer { MatchFunc = matchFunc }; return first.Intersect(second, comparer); } } public class AnonymousComparer : IEqualityComparer { public Func MatchFunc { get; set; } public bool Equals(T x, T y) { return MatchFunc != null && MatchFunc(x, y); } public int GetHashCode(T obj) { return 0; } } } ================================================ FILE: Tools/WickedSick.Thea/MainWindow.xaml ================================================  true ");return b.join("")};Silverlight.createObjectEx=function(b){var a=b,c=Silverlight.createObject(a.source,a.parentElement,a.id,a.properties,a.events,a.initParams,a.context);if(a.parentElement==null)return c};Silverlight.buildPromptHTML=function(b){var a="",d=Silverlight.fwlinkRoot,c=b.version;if(b.alt)a=b.alt;else{if(!c)c="";a="Get Microsoft Silverlight";a=a.replace("{1}",c);a=a.replace("{2}",d+"108181")}return a};Silverlight.getSilverlight=function(e){if(Silverlight.onGetSilverlight)Silverlight.onGetSilverlight();var b="",a=String(e).split(".");if(a.length>1){var c=parseInt(a[0]);if(isNaN(c)||c<2)b="1.0";else b=a[0]+"."+a[1]}var d="";if(b.match(/^\d+\056\d+$/))d="&v="+b;Silverlight.followFWLink("149156"+d)};Silverlight.followFWLink=function(a){top.location=Silverlight.fwlinkRoot+String(a)};Silverlight.HtmlAttributeEncode=function(c){var a,b="";if(c==null)return null;for(var d=0;d96&&a<123||a>64&&a<91||a>43&&a<58&&a!=47||a==95)b=b+String.fromCharCode(a);else b=b+"&#"+a+";"}return b};Silverlight.default_error_handler=function(e,b){var d,c=b.ErrorType;d=b.ErrorCode;var a="\nSilverlight error message \n";a+="ErrorCode: "+d+"\n";a+="ErrorType: "+c+" \n";a+="Message: "+b.ErrorMessage+" \n";if(c=="ParserError"){a+="XamlFile: "+b.xamlFile+" \n";a+="Line: "+b.lineNumber+" \n";a+="Position: "+b.charPosition+" \n"}else if(c=="RuntimeError"){if(b.lineNumber!=0){a+="Line: "+b.lineNumber+" \n";a+="Position: "+b.charPosition+" \n"}a+="MethodName: "+b.methodName+" \n"}alert(a)};Silverlight.__cleanup=function(){for(var a=Silverlight._silverlightCount-1;a>=0;a--)window["__slEvent"+a]=null;Silverlight._silverlightCount=0;if(window.removeEventListener)window.removeEventListener("unload",Silverlight.__cleanup,false);else window.detachEvent("onunload",Silverlight.__cleanup)};Silverlight.__getHandlerName=function(b){var a="";if(typeof b=="string")a=b;else if(typeof b=="function"){if(Silverlight._silverlightCount==0)if(window.addEventListener)window.addEventListener("onunload",Silverlight.__cleanup,false);else window.attachEvent("onunload",Silverlight.__cleanup);var c=Silverlight._silverlightCount++;a="__slEvent"+c;window[a]=b}else a=null;return a};Silverlight.onRequiredVersionAvailable=function(){};Silverlight.onRestartRequired=function(){};Silverlight.onUpgradeRequired=function(){};Silverlight.onInstallRequired=function(){};Silverlight.IsVersionAvailableOnError=function(d,a){var b=false;try{if(a.ErrorCode==8001&&!Silverlight.__installationEventFired){Silverlight.onUpgradeRequired();Silverlight.__installationEventFired=true}else if(a.ErrorCode==8002&&!Silverlight.__installationEventFired){Silverlight.onRestartRequired();Silverlight.__installationEventFired=true}else if(a.ErrorCode==5014||a.ErrorCode==2106){if(Silverlight.__verifySilverlight2UpgradeSuccess(a.getHost()))b=true}else b=true}catch(c){}return b};Silverlight.IsVersionAvailableOnLoad=function(b){var a=false;try{if(Silverlight.__verifySilverlight2UpgradeSuccess(b.getHost()))a=true}catch(c){}return a};Silverlight.__verifySilverlight2UpgradeSuccess=function(d){var c=false,b="2.0.31005",a=null;try{if(d.IsVersionSupported(b+".99")){a=Silverlight.onRequiredVersionAvailable;c=true}else if(d.IsVersionSupported(b+".0"))a=Silverlight.onRestartRequired;else a=Silverlight.onUpgradeRequired;if(a&&!Silverlight.__installationEventFired){a();Silverlight.__installationEventFired=true}}catch(e){}return c} ================================================ FILE: litmus/LitmusTests.Web/Web.Debug.config ================================================ ================================================ FILE: litmus/LitmusTests.Web/Web.Release.config ================================================ ================================================ FILE: litmus/LitmusTests.Web/Web.config ================================================  ================================================ FILE: package.json ================================================ { "name": "fayde", "version": "0.19.19", "description": "Cross-platform/cross-browser XAML framework", "main": "Gruntfile.js", "directories": { "test": "test" }, "scripts": { "test": "grunt test" }, "homepage": "https://github.com/BSick7/Fayde", "repository": { "type": "git", "url": "git://github.com/BSick7/Fayde" }, "keywords": [ "xaml", "silverlight", "fayde", "wpf", "mvvm" ], "author": "Brad Sickles ", "license": "MIT", "bugs": { "url": "https://github.com/BSick7/Fayde/issues" }, "devDependencies": { "bower-typings": "^0.1.0", "connect-livereload": "^0.5.0", "del": "^1.2.0", "fayde-unify": "^0.4.14", "glob": "^5.0.5", "gulp": "^3.8.11", "gulp-bower": "0.0.10", "gulp-bump": "^0.3.0", "gulp-connect": "^2.2.0", "gulp-open": "^0.3.2", "gulp-qunit": "^1.2.1", "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^1.5.1", "gulp-task-listing": "^1.0.1", "gulp-typescript": "2.9.0", "gulp-uglify": "^1.2.0", "merge2": "^0.3.3", "run-sequence": "^1.0.2", "version-ts": "^0.1.1", "vinyl-fs": "^2.3.1" } } ================================================ FILE: proto/benchmarks/bitwise/test.html ================================================  Bitwise Benchmark
================================================ FILE: proto/benchmarks/matrix/CanvasMatrix.js ================================================ /* * Copyright (C) 2009 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* CanvasMatrix4 class This class implements a 4x4 matrix. It has functions which duplicate the functionality of the OpenGL matrix stack and glut functions. IDL: [ Constructor(in CanvasMatrix4 matrix), // copy passed matrix into new CanvasMatrix4 Constructor(in sequence array) // create new CanvasMatrix4 with 16 floats (row major) Constructor() // create new CanvasMatrix4 with identity matrix ] interface CanvasMatrix4 { attribute float m11; attribute float m12; attribute float m13; attribute float m14; attribute float m21; attribute float m22; attribute float m23; attribute float m24; attribute float m31; attribute float m32; attribute float m33; attribute float m34; attribute float m41; attribute float m42; attribute float m43; attribute float m44; void load(in CanvasMatrix4 matrix); // copy the values from the passed matrix void load(in sequence array); // copy 16 floats into the matrix sequence getAsArray(); // return the matrix as an array of 16 floats WebGLFloatArray getAsCanvasFloatArray(); // return the matrix as a WebGLFloatArray with 16 values void makeIdentity(); // replace the matrix with identity void transpose(); // replace the matrix with its transpose void invert(); // replace the matrix with its inverse void translate(in float x, in float y, in float z); // multiply the matrix by passed translation values on the right void scale(in float x, in float y, in float z); // multiply the matrix by passed scale values on the right void rotate(in float angle, // multiply the matrix by passed rotation values on the right in float x, in float y, in float z); // (angle is in degrees) void multRight(in CanvasMatrix matrix); // multiply the matrix by the passed matrix on the right void multLeft(in CanvasMatrix matrix); // multiply the matrix by the passed matrix on the left void ortho(in float left, in float right, // multiply the matrix by the passed ortho values on the right in float bottom, in float top, in float near, in float far); void frustum(in float left, in float right, // multiply the matrix by the passed frustum values on the right in float bottom, in float top, in float near, in float far); void perspective(in float fovy, in float aspect, // multiply the matrix by the passed perspective values on the right in float zNear, in float zFar); void lookat(in float eyex, in float eyey, in float eyez, // multiply the matrix by the passed lookat in float ctrx, in float ctry, in float ctrz, // values on the right in float upx, in float upy, in float upz); } */ CanvasMatrix4 = function(m) { if (typeof m == 'object') { if ("length" in m && m.length >= 16) { this.load(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]); return; } else if (m instanceof CanvasMatrix4) { this.load(m); return; } } this.makeIdentity(); } CanvasMatrix4.prototype.load = function() { if (arguments.length == 1 && typeof arguments[0] == 'object') { var matrix = arguments[0]; if ("length" in matrix && matrix.length == 16) { this.m11 = matrix[0]; this.m12 = matrix[1]; this.m13 = matrix[2]; this.m14 = matrix[3]; this.m21 = matrix[4]; this.m22 = matrix[5]; this.m23 = matrix[6]; this.m24 = matrix[7]; this.m31 = matrix[8]; this.m32 = matrix[9]; this.m33 = matrix[10]; this.m34 = matrix[11]; this.m41 = matrix[12]; this.m42 = matrix[13]; this.m43 = matrix[14]; this.m44 = matrix[15]; return; } if (arguments[0] instanceof CanvasMatrix4) { this.m11 = matrix.m11; this.m12 = matrix.m12; this.m13 = matrix.m13; this.m14 = matrix.m14; this.m21 = matrix.m21; this.m22 = matrix.m22; this.m23 = matrix.m23; this.m24 = matrix.m24; this.m31 = matrix.m31; this.m32 = matrix.m32; this.m33 = matrix.m33; this.m34 = matrix.m34; this.m41 = matrix.m41; this.m42 = matrix.m42; this.m43 = matrix.m43; this.m44 = matrix.m44; return; } } this.makeIdentity(); } CanvasMatrix4.prototype.getAsArray = function() { return [ this.m11, this.m12, this.m13, this.m14, this.m21, this.m22, this.m23, this.m24, this.m31, this.m32, this.m33, this.m34, this.m41, this.m42, this.m43, this.m44 ]; } CanvasMatrix4.prototype.getAsWebGLFloatArray = function() { return new WebGLFloatArray(this.getAsArray()); } CanvasMatrix4.prototype.makeIdentity = function() { this.m11 = 1; this.m12 = 0; this.m13 = 0; this.m14 = 0; this.m21 = 0; this.m22 = 1; this.m23 = 0; this.m24 = 0; this.m31 = 0; this.m32 = 0; this.m33 = 1; this.m34 = 0; this.m41 = 0; this.m42 = 0; this.m43 = 0; this.m44 = 1; } CanvasMatrix4.prototype.transpose = function() { var tmp = this.m12; this.m12 = this.m21; this.m21 = tmp; tmp = this.m13; this.m13 = this.m31; this.m31 = tmp; tmp = this.m14; this.m14 = this.m41; this.m41 = tmp; tmp = this.m23; this.m23 = this.m32; this.m32 = tmp; tmp = this.m24; this.m24 = this.m42; this.m42 = tmp; tmp = this.m34; this.m34 = this.m43; this.m43 = tmp; } CanvasMatrix4.prototype.invert = function() { // Calculate the 4x4 determinant // If the determinant is zero, // then the inverse matrix is not unique. var det = this._determinant4x4(); if (Math.abs(det) < 1e-8) return null; this._makeAdjoint(); // Scale the adjoint matrix to get the inverse this.m11 /= det; this.m12 /= det; this.m13 /= det; this.m14 /= det; this.m21 /= det; this.m22 /= det; this.m23 /= det; this.m24 /= det; this.m31 /= det; this.m32 /= det; this.m33 /= det; this.m34 /= det; this.m41 /= det; this.m42 /= det; this.m43 /= det; this.m44 /= det; } CanvasMatrix4.prototype.translate = function(x,y,z) { if (x == undefined) x = 0; if (y == undefined) y = 0; if (z == undefined) z = 0; var matrix = new CanvasMatrix4(); matrix.m41 = x; matrix.m42 = y; matrix.m43 = z; this.multRight(matrix); } CanvasMatrix4.prototype.scale = function(x,y,z) { if (x == undefined) x = 1; if (z == undefined) { if (y == undefined) { y = x; z = x; } else z = 1; } else if (y == undefined) y = x; var matrix = new CanvasMatrix4(); matrix.m11 = x; matrix.m22 = y; matrix.m33 = z; this.multRight(matrix); } CanvasMatrix4.prototype.rotate = function(angle,x,y,z) { // angles are in degrees. Switch to radians angle = angle / 180 * Math.PI; angle /= 2; var sinA = Math.sin(angle); var cosA = Math.cos(angle); var sinA2 = sinA * sinA; // normalize var length = Math.sqrt(x * x + y * y + z * z); if (length == 0) { // bad vector, just use something reasonable x = 0; y = 0; z = 1; } else if (length != 1) { x /= length; y /= length; z /= length; } var mat = new CanvasMatrix4(); // optimize case where axis is along major axis if (x == 1 && y == 0 && z == 0) { mat.m11 = 1; mat.m12 = 0; mat.m13 = 0; mat.m21 = 0; mat.m22 = 1 - 2 * sinA2; mat.m23 = 2 * sinA * cosA; mat.m31 = 0; mat.m32 = -2 * sinA * cosA; mat.m33 = 1 - 2 * sinA2; mat.m14 = mat.m24 = mat.m34 = 0; mat.m41 = mat.m42 = mat.m43 = 0; mat.m44 = 1; } else if (x == 0 && y == 1 && z == 0) { mat.m11 = 1 - 2 * sinA2; mat.m12 = 0; mat.m13 = -2 * sinA * cosA; mat.m21 = 0; mat.m22 = 1; mat.m23 = 0; mat.m31 = 2 * sinA * cosA; mat.m32 = 0; mat.m33 = 1 - 2 * sinA2; mat.m14 = mat.m24 = mat.m34 = 0; mat.m41 = mat.m42 = mat.m43 = 0; mat.m44 = 1; } else if (x == 0 && y == 0 && z == 1) { mat.m11 = 1 - 2 * sinA2; mat.m12 = 2 * sinA * cosA; mat.m13 = 0; mat.m21 = -2 * sinA * cosA; mat.m22 = 1 - 2 * sinA2; mat.m23 = 0; mat.m31 = 0; mat.m32 = 0; mat.m33 = 1; mat.m14 = mat.m24 = mat.m34 = 0; mat.m41 = mat.m42 = mat.m43 = 0; mat.m44 = 1; } else { var x2 = x*x; var y2 = y*y; var z2 = z*z; mat.m11 = 1 - 2 * (y2 + z2) * sinA2; mat.m12 = 2 * (x * y * sinA2 + z * sinA * cosA); mat.m13 = 2 * (x * z * sinA2 - y * sinA * cosA); mat.m21 = 2 * (y * x * sinA2 - z * sinA * cosA); mat.m22 = 1 - 2 * (z2 + x2) * sinA2; mat.m23 = 2 * (y * z * sinA2 + x * sinA * cosA); mat.m31 = 2 * (z * x * sinA2 + y * sinA * cosA); mat.m32 = 2 * (z * y * sinA2 - x * sinA * cosA); mat.m33 = 1 - 2 * (x2 + y2) * sinA2; mat.m14 = mat.m24 = mat.m34 = 0; mat.m41 = mat.m42 = mat.m43 = 0; mat.m44 = 1; } this.multRight(mat); } CanvasMatrix4.prototype.multRight = function(mat) { var m11 = (this.m11 * mat.m11 + this.m12 * mat.m21 + this.m13 * mat.m31 + this.m14 * mat.m41); var m12 = (this.m11 * mat.m12 + this.m12 * mat.m22 + this.m13 * mat.m32 + this.m14 * mat.m42); var m13 = (this.m11 * mat.m13 + this.m12 * mat.m23 + this.m13 * mat.m33 + this.m14 * mat.m43); var m14 = (this.m11 * mat.m14 + this.m12 * mat.m24 + this.m13 * mat.m34 + this.m14 * mat.m44); var m21 = (this.m21 * mat.m11 + this.m22 * mat.m21 + this.m23 * mat.m31 + this.m24 * mat.m41); var m22 = (this.m21 * mat.m12 + this.m22 * mat.m22 + this.m23 * mat.m32 + this.m24 * mat.m42); var m23 = (this.m21 * mat.m13 + this.m22 * mat.m23 + this.m23 * mat.m33 + this.m24 * mat.m43); var m24 = (this.m21 * mat.m14 + this.m22 * mat.m24 + this.m23 * mat.m34 + this.m24 * mat.m44); var m31 = (this.m31 * mat.m11 + this.m32 * mat.m21 + this.m33 * mat.m31 + this.m34 * mat.m41); var m32 = (this.m31 * mat.m12 + this.m32 * mat.m22 + this.m33 * mat.m32 + this.m34 * mat.m42); var m33 = (this.m31 * mat.m13 + this.m32 * mat.m23 + this.m33 * mat.m33 + this.m34 * mat.m43); var m34 = (this.m31 * mat.m14 + this.m32 * mat.m24 + this.m33 * mat.m34 + this.m34 * mat.m44); var m41 = (this.m41 * mat.m11 + this.m42 * mat.m21 + this.m43 * mat.m31 + this.m44 * mat.m41); var m42 = (this.m41 * mat.m12 + this.m42 * mat.m22 + this.m43 * mat.m32 + this.m44 * mat.m42); var m43 = (this.m41 * mat.m13 + this.m42 * mat.m23 + this.m43 * mat.m33 + this.m44 * mat.m43); var m44 = (this.m41 * mat.m14 + this.m42 * mat.m24 + this.m43 * mat.m34 + this.m44 * mat.m44); this.m11 = m11; this.m12 = m12; this.m13 = m13; this.m14 = m14; this.m21 = m21; this.m22 = m22; this.m23 = m23; this.m24 = m24; this.m31 = m31; this.m32 = m32; this.m33 = m33; this.m34 = m34; this.m41 = m41; this.m42 = m42; this.m43 = m43; this.m44 = m44; } CanvasMatrix4.prototype.multLeft = function(mat) { var m11 = (mat.m11 * this.m11 + mat.m12 * this.m21 + mat.m13 * this.m31 + mat.m14 * this.m41); var m12 = (mat.m11 * this.m12 + mat.m12 * this.m22 + mat.m13 * this.m32 + mat.m14 * this.m42); var m13 = (mat.m11 * this.m13 + mat.m12 * this.m23 + mat.m13 * this.m33 + mat.m14 * this.m43); var m14 = (mat.m11 * this.m14 + mat.m12 * this.m24 + mat.m13 * this.m34 + mat.m14 * this.m44); var m21 = (mat.m21 * this.m11 + mat.m22 * this.m21 + mat.m23 * this.m31 + mat.m24 * this.m41); var m22 = (mat.m21 * this.m12 + mat.m22 * this.m22 + mat.m23 * this.m32 + mat.m24 * this.m42); var m23 = (mat.m21 * this.m13 + mat.m22 * this.m23 + mat.m23 * this.m33 + mat.m24 * this.m43); var m24 = (mat.m21 * this.m14 + mat.m22 * this.m24 + mat.m23 * this.m34 + mat.m24 * this.m44); var m31 = (mat.m31 * this.m11 + mat.m32 * this.m21 + mat.m33 * this.m31 + mat.m34 * this.m41); var m32 = (mat.m31 * this.m12 + mat.m32 * this.m22 + mat.m33 * this.m32 + mat.m34 * this.m42); var m33 = (mat.m31 * this.m13 + mat.m32 * this.m23 + mat.m33 * this.m33 + mat.m34 * this.m43); var m34 = (mat.m31 * this.m14 + mat.m32 * this.m24 + mat.m33 * this.m34 + mat.m34 * this.m44); var m41 = (mat.m41 * this.m11 + mat.m42 * this.m21 + mat.m43 * this.m31 + mat.m44 * this.m41); var m42 = (mat.m41 * this.m12 + mat.m42 * this.m22 + mat.m43 * this.m32 + mat.m44 * this.m42); var m43 = (mat.m41 * this.m13 + mat.m42 * this.m23 + mat.m43 * this.m33 + mat.m44 * this.m43); var m44 = (mat.m41 * this.m14 + mat.m42 * this.m24 + mat.m43 * this.m34 + mat.m44 * this.m44); this.m11 = m11; this.m12 = m12; this.m13 = m13; this.m14 = m14; this.m21 = m21; this.m22 = m22; this.m23 = m23; this.m24 = m24; this.m31 = m31; this.m32 = m32; this.m33 = m33; this.m34 = m34; this.m41 = m41; this.m42 = m42; this.m43 = m43; this.m44 = m44; } CanvasMatrix4.prototype.ortho = function(left, right, bottom, top, near, far) { var tx = (left + right) / (left - right); var ty = (top + bottom) / (top - bottom); var tz = (far + near) / (far - near); var matrix = new CanvasMatrix4(); matrix.m11 = 2 / (left - right); matrix.m12 = 0; matrix.m13 = 0; matrix.m14 = 0; matrix.m21 = 0; matrix.m22 = 2 / (top - bottom); matrix.m23 = 0; matrix.m24 = 0; matrix.m31 = 0; matrix.m32 = 0; matrix.m33 = -2 / (far - near); matrix.m34 = 0; matrix.m41 = tx; matrix.m42 = ty; matrix.m43 = tz; matrix.m44 = 1; this.multRight(matrix); } CanvasMatrix4.prototype.frustum = function(left, right, bottom, top, near, far) { var matrix = new CanvasMatrix4(); var A = (right + left) / (right - left); var B = (top + bottom) / (top - bottom); var C = -(far + near) / (far - near); var D = -(2 * far * near) / (far - near); matrix.m11 = (2 * near) / (right - left); matrix.m12 = 0; matrix.m13 = 0; matrix.m14 = 0; matrix.m21 = 0; matrix.m22 = 2 * near / (top - bottom); matrix.m23 = 0; matrix.m24 = 0; matrix.m31 = A; matrix.m32 = B; matrix.m33 = C; matrix.m34 = -1; matrix.m41 = 0; matrix.m42 = 0; matrix.m43 = D; matrix.m44 = 0; this.multRight(matrix); } CanvasMatrix4.prototype.perspective = function(fovy, aspect, zNear, zFar) { var top = Math.tan(fovy * Math.PI / 360) * zNear; var bottom = -top; var left = aspect * bottom; var right = aspect * top; this.frustum(left, right, bottom, top, zNear, zFar); } CanvasMatrix4.prototype.lookat = function(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz) { var matrix = new CanvasMatrix4(); // Make rotation matrix // Z vector var zx = eyex - centerx; var zy = eyey - centery; var zz = eyez - centerz; var mag = Math.sqrt(zx * zx + zy * zy + zz * zz); if (mag) { zx /= mag; zy /= mag; zz /= mag; } // Y vector var yx = upx; var yy = upy; var yz = upz; // X vector = Y cross Z xx = yy * zz - yz * zy; xy = -yx * zz + yz * zx; xz = yx * zy - yy * zx; // Recompute Y = Z cross X yx = zy * xz - zz * xy; yy = -zx * xz + zz * xx; yx = zx * xy - zy * xx; // cross product gives area of parallelogram, which is < 1.0 for // non-perpendicular unit-length vectors; so normalize x, y here mag = Math.sqrt(xx * xx + xy * xy + xz * xz); if (mag) { xx /= mag; xy /= mag; xz /= mag; } mag = Math.sqrt(yx * yx + yy * yy + yz * yz); if (mag) { yx /= mag; yy /= mag; yz /= mag; } matrix.m11 = xx; matrix.m12 = xy; matrix.m13 = xz; matrix.m14 = 0; matrix.m21 = yx; matrix.m22 = yy; matrix.m23 = yz; matrix.m24 = 0; matrix.m31 = zx; matrix.m32 = zy; matrix.m33 = zz; matrix.m34 = 0; matrix.m41 = 0; matrix.m42 = 0; matrix.m43 = 0; matrix.m44 = 1; matrix.translate(-eyex, -eyey, -eyez); this.multRight(matrix); } // Support functions CanvasMatrix4.prototype._determinant2x2 = function(a, b, c, d) { return a * d - b * c; } CanvasMatrix4.prototype._determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3) { return a1 * this._determinant2x2(b2, b3, c2, c3) - b1 * this._determinant2x2(a2, a3, c2, c3) + c1 * this._determinant2x2(a2, a3, b2, b3); } CanvasMatrix4.prototype._determinant4x4 = function() { var a1 = this.m11; var b1 = this.m12; var c1 = this.m13; var d1 = this.m14; var a2 = this.m21; var b2 = this.m22; var c2 = this.m23; var d2 = this.m24; var a3 = this.m31; var b3 = this.m32; var c3 = this.m33; var d3 = this.m34; var a4 = this.m41; var b4 = this.m42; var c4 = this.m43; var d4 = this.m44; return a1 * this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4) - b1 * this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4) + c1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4) - d1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4); } CanvasMatrix4.prototype._makeAdjoint = function() { var a1 = this.m11; var b1 = this.m12; var c1 = this.m13; var d1 = this.m14; var a2 = this.m21; var b2 = this.m22; var c2 = this.m23; var d2 = this.m24; var a3 = this.m31; var b3 = this.m32; var c3 = this.m33; var d3 = this.m34; var a4 = this.m41; var b4 = this.m42; var c4 = this.m43; var d4 = this.m44; // Row column labeling reversed since we transpose rows & columns this.m11 = this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4); this.m21 = - this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4); this.m31 = this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4); this.m41 = - this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4); this.m12 = - this._determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4); this.m22 = this._determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4); this.m32 = - this._determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4); this.m42 = this._determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4); this.m13 = this._determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4); this.m23 = - this._determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4); this.m33 = this._determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4); this.m43 = - this._determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4); this.m14 = - this._determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3); this.m24 = this._determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3); this.m34 = - this._determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3); this.m44 = this._determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3); } ================================================ FILE: proto/benchmarks/matrix/Matrix3D.js ================================================ /// function Matrix3D() { /// _Elements -> 16 element array /// [ 0 1 2 3 ] /// [ 4 5 6 7 ] /// [ 8 9 10 11 ] /// [ 12 13 14 15 ] this._Elements = [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]; } Object.defineProperty(Matrix3D.prototype, "Inverse", { get: function () { if (!this._InverseEls) this._InverseEls = Matrix3D._CalculateInverse(this); var m3 = new Matrix3D(); m3._Elements = this._InverseEls; m3._InverseEls = this._Elements; return m3; } }); Matrix3D.prototype.toString = function () { return this._Elements.toString(); }; Matrix3D.Init = function (A, B) { /// Copies B onto A. /// /// A._Elements = B._Elements.slice(0); }; Matrix3D.CreateAffine = function (matrix) { /// /// var els = matrix._Elements; var m = new Matrix3D(); m._Elements = [ els[0], els[1], 0, els[2], els[3], els[4], 0, els[5], 0, 0, 1, 0, 0, 0, 0, 1 ]; return m; }; Matrix3D.Multiply = function (C, A, B) { /// Sets C = A*B /// /// /// var c = C._Elements; var a = A._Elements; //if user passed in same in-mem Matrix3D for C and B, we don't want to overwrite values as we're using them var b = B._Elements.slice(0); c[0] = a[0] * b[0] + a[4] * b[1] + a[8] * b[2] + a[12] * b[3]; c[4] = a[0] * b[4] + a[4] * b[5] + a[8] * b[6] + a[12] * b[7]; c[8] = a[0] * b[8] + a[4] * b[9] + a[8] * b[10] + a[12] * b[11]; c[12] = a[0] * b[12] + a[4] * b[13] + a[8] * b[14] + a[12] * b[15]; c[1] = a[1] * b[0] + a[5] * b[1] + a[9] * b[2] + a[13] * b[3]; c[5] = a[1] * b[4] + a[5] * b[5] + a[9] * b[6] + a[13] * b[7]; c[9] = a[1] * b[8] + a[5] * b[9] + a[9] * b[10] + a[13] * b[11]; c[13] = a[1] * b[12] + a[5] * b[13] + a[9] * b[14] + a[13] * b[15]; c[2] = a[2] * b[0] + a[6] * b[1] + a[10] * b[2] + a[14] * b[3]; c[6] = a[2] * b[4] + a[6] * b[5] + a[10] * b[6] + a[14] * b[7]; c[10] = a[2] * b[8] + a[6] * b[9] + a[10] * b[10] + a[14] * b[11]; c[14] = a[2] * b[12] + a[6] * b[13] + a[10] * b[14] + a[14] * b[15]; c[3] = a[3] * b[0] + a[7] * b[1] + a[11] * b[2] + a[15] * b[3]; c[7] = a[3] * b[4] + a[7] * b[5] + a[11] * b[6] + a[15] * b[7]; c[11] = a[3] * b[8] + a[7] * b[9] + a[11] * b[10] + a[15] * b[11]; c[15] = a[3] * b[12] + a[7] * b[13] + a[11] * b[14] + a[15] * b[15]; }; Matrix3D.TransformPoint = function (c, A, b) { /// [x, y, z, w] /// /// [x, y, z, w] var e = A._Elements; //if user passed in same in-mem point for c and b, we don't want to overwrite values as we're using them var d = b.slice(0); c[0] = e[0] * d[0] + e[1] * d[1] + e[2] * d[2] + e[3]; c[1] = e[4] * d[0] + e[5] * d[1] + e[6] * d[2] + e[7]; c[2] = e[8] * d[0] + e[9] * d[1] + e[10] * d[2] + e[11]; c[3] = e[12] * d[0] + e[13] * d[1] + e[14] * d[2] + e[15]; }; Matrix3D.TransformBounds = function (m3, bounds) { /// /// /// var idels = [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]; if (!(m3._Elements < idels) && !(m3._Elements > idels)) //identity matrix return new Rect(bounds.X, bounds.Y, bounds.Width, bounds.Height); var p1 = [bounds.X, bounds.Y, 0.0, 1.0]; var p2 = [bounds.X + bounds.Width, bounds.Y, 0.0, 1.0]; var p3 = [bounds.X + bounds.Width, bounds.Y + bounds.Height, 0.0, 1.0]; var p4 = [bounds.X, bounds.Y + bounds.Height, 0.0, 1.0]; var tp = Matrix3D.TransformPoint; tp(p1, m3, p1); tp(p2, m3, p2); tp(p3, m3, p3); tp(p4, m3, p4); var vs = 65536.0; var vsr = 1.0 / vs; p1[0] *= vsr; p1[1] *= vsr; p2[0] *= vsr; p2[1] *= vsr; p3[0] *= vsr; p3[1] *= vsr; p4[0] *= vsr; p4[1] *= vsr; var clipmask = Matrix3D._ClipMask; var cm1 = clipmask(p1); var cm2 = clipmask(p2); var cm3 = clipmask(p3); var cm4 = clipmask(p4); if ((cm1 | cm2 | cm3 | cm4) !== 0) { bounds = new Rect(); if ((cm1 & cm2 & cm3 & cm4) === 0) { NotImplemented("Matrix3D.TransformBounds"); //var r1 = Matrix3D._ClipToBounds(p1, p2, p3, cm1 | cm2 | cm3); //var r2 = Matrix3D._ClipToBounds(p1, p3, p4, cm1 | cm3 | cm4); //if (!r1.IsEmpty()) bounds = bounds.Union(r1); //if (!r2.IsEmpty()) bounds = bounds.Union(r2); } } else { var p1w = 1.0 / p1[3]; var p2w = 1.0 / p2[3]; var p3w = 1.0 / p3[3]; var p4w = 1.0 / p4[3]; p1[0] *= p1w * vs; p1[1] *= p1w * vs; p2[0] *= p2w * vs; p2[1] *= p2w * vs; p3[0] *= p3w * vs; p3[1] *= p3w * vs; p4[0] *= p4w * vs; p4[1] *= p4w * vs; bounds = new Rect(p1[0], p1[1], 0, 0); bounds = bounds.ExtendTo(p2[0], p2[1]); bounds = bounds.ExtendTo(p3[0], p3[1]); bounds = bounds.ExtendTo(p4[0], p4[1]); } return bounds; }; Matrix3D.Equals = function (A, B) { /// Performs equality test on all items in A & B. /// /// /// var elsA = A._Elements; var elsB = B._Elements; if (elsA.length !== elsB.length) return false; return !(elsA < elsB) && !(elsA > elsB); }; Matrix3D.Get2DAffine = function (A) { /// /// var els = A._Elements; if (els[2] === 0.0 && els[6] === 0.0 && els[8] === 0.0 && els[9] === 0.0 && els[10] === 1.0 && els[11] === 0.0 && els[12] === 0.0 && els[13] === 0.0 && els[14] === 0.0 && els[15] === 1.0) { var mt = new Matrix(); mt._Elements = [els[0], els[1], els[3], els[4], els[5], els[7]]; mt._Type = MatrixTypes.Unknown; return mt; } }; Matrix3D._CalculateInverse = function (m) { var els = m._Elements; var tmp = []; tmp[0] = els[5] * els[10] * els[15] - els[5] * els[14] * els[11] - els[6] * els[9] * els[15] + els[6] * els[13] * els[11] + els[7] * els[9] * els[14] - els[7] * els[13] * els[10]; tmp[1] = -els[1] * els[10] * els[15] + els[1] * els[14] * els[11] + els[2] * els[9] * els[15] - els[2] * els[13] * els[11] - els[3] * els[9] * els[14] + els[3] * els[13] * els[10]; tmp[2] = els[1] * els[6] * els[15] - els[1] * els[14] * els[7] - els[2] * els[5] * els[15] + els[2] * els[13] * els[7] + els[3] * els[5] * els[14] - els[3] * els[13] * els[6]; tmp[3] = -els[1] * els[6] * els[11] + els[1] * els[10] * els[7] + els[2] * els[5] * els[11] - els[2] * els[9] * els[7] - els[3] * els[5] * els[10] + els[3] * els[9] * els[6]; tmp[4] = -els[4] * els[10] * els[15] + els[4] * els[14] * els[11] + els[6] * els[8] * els[15] - els[6] * els[12] * els[11] - els[7] * els[8] * els[14] + els[7] * els[12] * els[10]; tmp[5] = els[0] * els[10] * els[15] - els[0] * els[14] * els[11] - els[2] * els[8] * els[15] + els[2] * els[12] * els[11] + els[3] * els[8] * els[14] - els[3] * els[12] * els[10]; tmp[6] = -els[0] * els[6] * els[15] + els[0] * els[14] * els[7] + els[2] * els[4] * els[15] - els[2] * els[12] * els[7] - els[3] * els[4] * els[14] + els[3] * els[12] * els[6]; tmp[7] = els[0] * els[6] * els[11] - els[0] * els[10] * els[7] - els[2] * els[4] * els[11] + els[2] * els[8] * els[7] + els[3] * els[4] * els[10] - els[3] * els[8] * els[6]; tmp[8] = els[4] * els[9] * els[15] - els[4] * els[13] * els[11] - els[5] * els[8] * els[15] + els[5] * els[12] * els[11] + els[7] * els[8] * els[13] - els[7] * els[12] * els[9]; tmp[9] = -els[0] * els[9] * els[15] + els[0] * els[13] * els[11] + els[1] * els[8] * els[15] - els[1] * els[12] * els[11] - els[3] * els[8] * els[13] + els[3] * els[12] * els[9]; tmp[10] = els[0] * els[5] * els[15] - els[0] * els[13] * els[7] - els[1] * els[4] * els[15] + els[1] * els[12] * els[7] + els[3] * els[4] * els[13] - els[3] * els[12] * els[5]; tmp[11] = -els[0] * els[5] * els[11] + els[0] * els[9] * els[7] + els[1] * els[4] * els[11] - els[1] * els[8] * els[7] - els[3] * els[4] * els[9] + els[3] * els[8] * els[5]; tmp[12] = -els[4] * els[9] * els[14] + els[4] * els[13] * els[10] + els[5] * els[8] * els[14] - els[5] * els[12] * els[10] - els[6] * els[8] * els[13] + els[6] * els[12] * els[9]; tmp[13] = els[0] * els[9] * els[14] - els[0] * els[13] * els[10] - els[1] * els[8] * els[14] + els[1] * els[12] * els[10] + els[2] * els[8] * els[13] - els[2] * els[12] * els[9]; tmp[14] = -els[0] * els[5] * els[14] + els[0] * els[13] * els[6] + els[1] * els[4] * els[14] - els[1] * els[12] * els[6] - els[2] * els[4] * els[13] + els[2] * els[12] * els[5]; tmp[15] = els[0] * els[5] * els[10] - els[0] * els[9] * els[6] - els[1] * els[4] * els[10] + els[1] * els[8] * els[6] + els[2] * els[4] * els[9] - els[2] * els[8] * els[5]; var det = els[0] * tmp[0] + els[4] * tmp[1] + els[8] * tmp[2] + els[12] * tmp[3]; if (det === 0) return; det = 1.0 / det; for (var i = 0; i < 16; i++) { tmp[i] *= det; } return tmp; }; Matrix3D._ClipMask = function (clip) { var mask = 0; if (-clip[0] + clip[3] < 0) mask |= (1 << 0); if ( clip[0] + clip[3] < 0) mask |= (1 << 1); if (-clip[1] + clip[3] < 0) mask |= (1 << 2); if ( clip[1] + clip[3] < 0) mask |= (1 << 3); if ( clip[2] + clip[3] < 0) mask |= (1 << 4); if (-clip[2] + clip[3] < 0) mask |= (1 << 5); return mask; }; ================================================ FILE: proto/benchmarks/matrix/glMatrix-min.js ================================================ // glMatrix v0.9.5 glMatrixArrayType=typeof Float32Array!="undefined"?Float32Array:typeof WebGLFloatArray!="undefined"?WebGLFloatArray:Array;var vec3={};vec3.create=function(a){var b=new glMatrixArrayType(3);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2]}return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a==c){a[0]+=b[0];a[1]+=b[1];a[2]+=b[2];return a}c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c}; vec3.subtract=function(a,b,c){if(!c||a==c){a[0]-=b[0];a[1]-=b[1];a[2]-=b[2];return a}c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a==c){a[0]*=b;a[1]*=b;a[2]*=b;return a}c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c}; vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g==1){b[0]=c;b[1]=d;b[2]=e;return b}}else{b[0]=0;b[1]=0;b[2]=0;return b}g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1];a=a[2];var g=b[0],f=b[1];b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1];a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}; vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1];a=a[2]-b[2];b=Math.sqrt(d*d+e*e+a*a);if(!b){c[0]=0;c[1]=0;c[2]=0;return c}b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var mat3={}; mat3.create=function(a){var b=new glMatrixArrayType(9);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9]}return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a}; mat3.transpose=function(a,b){if(!b||a==b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=0;b[4]=a[3];b[5]=a[4];b[6]=a[5];b[7]=0;b[8]=a[6];b[9]=a[7];b[10]=a[8];b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};var mat4={};mat4.create=function(a){var b=new glMatrixArrayType(16);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15]}return b}; mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a}; mat4.transpose=function(a,b){if(!b||a==b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b}; mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],o=a[11],m=a[12],n=a[13],p=a[14];a=a[15];return m*k*h*e-j*n*h*e-m*f*l*e+g*n*l*e+j*f*p*e-g*k*p*e-m*k*d*i+j*n*d*i+m*c*l*i-b*n*l*i-j*c*p*i+b*k*p*i+m*f*d*o-g*n*d*o-m*c*h*o+b*n*h*o+g*c*p*o-b*f*p*o-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a}; mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],o=a[10],m=a[11],n=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*n,y=k*r-o*n,z=k*s-m*n,C=l*r-o*p,D=l*s-m*p,E=o*s-m*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+o*v-m*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-n*w+r*t-s*B)*q;b[7]=(k*w-o*t+m*B)*q;b[8]=(f*D-h*z+j*x)*q; b[9]=(-c*D+d*z-g*x)*q;b[10]=(n*v-p*t+s*A)*q;b[11]=(-k*v+l*t-m*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-n*u+p*B-r*A)*q;b[15]=(k*u-l*B+o*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,o=-k*g+h*i,m=j*g-f*i,n=c*l+d*o+e*m;if(!n)return null;n=1/n;b||(b=mat3.create());b[0]=l*n;b[1]=(-k*d+e*j)*n;b[2]=(h*d-e*f)*n;b[3]=o*n;b[4]=(k*c-e*i)*n;b[5]=(-h*c+e*g)*n;b[6]=m*n;b[7]=(-j*c+d*i)*n;b[8]=(f*c-d*g)*n;return b}; mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],o=a[9],m=a[10],n=a[11],p=a[12],r=a[13],s=a[14];a=a[15];var A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14];b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*o+u*r;c[2]=A*g+B*j+t*m+u*s;c[3]=A*f+B*k+t*n+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*o+y*r;c[6]=v*g+w*j+x*m+y*s;c[7]=v*f+w*k+x*n+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*o+E*r;c[10]=z* g+C*j+D*m+E*s;c[11]=z*f+C*k+D*n+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*o+b*r;c[14]=q*g+F*j+G*m+b*s;c[15]=q*f+F*k+G*n+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1];b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c}; mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2];b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c}; mat4.translate=function(a,b,c){var d=b[0],e=b[1];b=b[2];if(!c||a==c){a[12]=a[0]*d+a[4]*e+a[8]*b+a[12];a[13]=a[1]*d+a[5]*e+a[9]*b+a[13];a[14]=a[2]*d+a[6]*e+a[10]*b+a[14];a[15]=a[3]*d+a[7]*e+a[11]*b+a[15];return a}var g=a[0],f=a[1],h=a[2],i=a[3],j=a[4],k=a[5],l=a[6],o=a[7],m=a[8],n=a[9],p=a[10],r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=o;c[8]=m;c[9]=n;c[10]=p;c[11]=r;c[12]=g*d+j*e+m*b+a[12];c[13]=f*d+k*e+n*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+o*e+r*b+a[15];return c}; mat4.scale=function(a,b,c){var d=b[0],e=b[1];b=b[2];if(!c||a==c){a[0]*=d;a[1]*=d;a[2]*=d;a[3]*=d;a[4]*=e;a[5]*=e;a[6]*=e;a[7]*=e;a[8]*=b;a[9]*=b;a[10]*=b;a[11]*=b;return a}c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c}; mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1];c=c[2];var f=Math.sqrt(e*e+g*g+c*c);if(!f)return null;if(f!=1){f=1/f;e*=f;g*=f;c*=f}var h=Math.sin(b),i=Math.cos(b),j=1-i;b=a[0];f=a[1];var k=a[2],l=a[3],o=a[4],m=a[5],n=a[6],p=a[7],r=a[8],s=a[9],A=a[10],B=a[11],t=e*e*j+i,u=g*e*j+c*h,v=c*e*j-g*h,w=e*g*j-c*h,x=g*g*j+i,y=c*g*j+e*h,z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;if(d){if(a!=d){d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15]}}else d=a;d[0]=b*t+o*u+r*v;d[1]=f*t+m*u+s*v;d[2]=k*t+n*u+A*v;d[3]=l*t+p*u+B* v;d[4]=b*w+o*x+r*y;d[5]=f*w+m*x+s*y;d[6]=k*w+n*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+o*e+r*g;d[9]=f*z+m*e+s*g;d[10]=k*z+n*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];if(c){if(a!=c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c}; mat4.rotateY=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];if(c){if(a!=c){c[4]=a[4];c[5]=a[5];c[6]=a[6];c[7]=a[7];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c}; mat4.rotateZ=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];if(c){if(a!=c){c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c}; mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b=a*b;return mat4.frustum(-b,b,-a,a,c,d,e)}; mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f}; mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e=a[0],g=a[1];a=a[2];var f=c[0],h=c[1],i=c[2];c=b[1];var j=b[2];if(e==b[0]&&g==c&&a==j)return mat4.identity(d);var k,l,o,m;c=e-b[0];j=g-b[1];b=a-b[2];m=1/Math.sqrt(c*c+j*j+b*b);c*=m;j*=m;b*=m;k=h*b-i*j;i=i*c-f*b;f=f*j-h*c;if(m=Math.sqrt(k*k+i*i+f*f)){m=1/m;k*=m;i*=m;f*=m}else f=i=k=0;h=j*f-b*i;l=b*k-c*f;o=c*i-j*k;if(m=Math.sqrt(h*h+l*l+o*o)){m=1/m;h*=m;l*=m;o*=m}else o=l=h=0;d[0]=k;d[1]=h;d[2]=c;d[3]=0;d[4]=i;d[5]=l;d[6]=j;d[7]=0;d[8]=f;d[9]= o;d[10]=b;d[11]=0;d[12]=-(k*e+i*g+f*a);d[13]=-(h*e+l*g+o*a);d[14]=-(c*e+j*g+b*a);d[15]=1;return d};mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4={};quat4.create=function(a){var b=new glMatrixArrayType(4);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3]}return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b}; quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a==b){a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return a}b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a==b){a[0]*=1;a[1]*=1;a[2]*=1;return a}b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2];a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)}; quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f==0){b[0]=0;b[1]=0;b[2]=0;b[3]=0;return b}f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2];a=a[3];var f=b[0],h=b[1],i=b[2];b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c}; quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2];b=a[0];var f=a[1],h=a[2];a=a[3];var i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d;d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c=c*i;var l=d*h;d=d*i;e=e*i;f=g*f;h=g*h;g=g*i;b[0]=1-(l+e);b[1]=k-g;b[2]=c+h;b[3]=k+g;b[4]=1-(j+e);b[5]=d-f;b[6]=c-h;b[7]=d+f;b[8]=1-(j+l);return b}; quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c=c*i;var l=d*h;d=d*i;e=e*i;f=g*f;h=g*h;g=g*i;b[0]=1-(l+e);b[1]=k-g;b[2]=c+h;b[3]=0;b[4]=k+g;b[5]=1-(j+e);b[6]=d-f;b[7]=0;b[8]=c-h;b[9]=d+f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};quat4.slerp=function(a,b,c,d){d||(d=a);var e=c;if(a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]<0)e=-1*c;d[0]=1-c*a[0]+e*b[0];d[1]=1-c*a[1]+e*b[1];d[2]=1-c*a[2]+e*b[2];d[3]=1-c*a[3]+e*b[3];return d}; quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}; ================================================ FILE: proto/benchmarks/matrix/test.html ================================================  Matrix Benchmark

This page benchmarks the performance of several matrix libraries intended for use with WebGL: glMatrix, CanvasMatrix, and Matrix3D
Benchmark times are averaged over 10 runs of 20,000 iterations of the target operation.

================================================ FILE: proto/silo/UnitTestValidation.htm ================================================  ================================================ FILE: proto/silo/brush-transform.html ================================================  ================================================ FILE: proto/silo/heightTest.htm ================================================  Testing Percentage Heights ================================================ FILE: proto/silo/hittest.html ================================================ 
================================================ FILE: proto/silo/image-load.html ================================================  ================================================ FILE: proto/silo/keyboard.html ================================================
MMMMMMMMMMMMMMMMMMMMMMMMm MMMMMMMMMMMMMMMMmmmmmmmMMMMMMMMMMm
================================================ FILE: proto/silo/lineargradient-pattern.html ================================================  ================================================ FILE: proto/silo/matrix-multiplypoint.html ================================================  ================================================ FILE: proto/silo/multiple-composite.html ================================================  ================================================ FILE: proto/silo/overrides.html ================================================  ================================================ FILE: proto/silo/radial-gradient.html ================================================  ================================================ FILE: proto/silo/silo1.html ================================================  ================================================ FILE: src/Clipboard/BasicClipboard.ts ================================================ module Fayde.Clipboard { export class BasicClipboard implements IClipboard { CopyText(text: string) { var res = (window).clipboardData.setData("Text", text); if (!res) alert("Your browser do not allow copy to the clipboard."); } GetTextContents(callback: (text: string) => void) { var text = (window).clipboardData.getData("Text"); callback(text); } } } ================================================ FILE: src/Clipboard/Create.ts ================================================ module Fayde.Clipboard { export function Create(): IClipboard { if ((window).clipboardData) return new BasicClipboard(); return new NetscapeClipboard(); } } ================================================ FILE: src/Clipboard/IClipboard.ts ================================================ module Fayde.Clipboard { export interface IClipboard { CopyText(text: string); GetTextContents(callback: (text: string) => void); } var cp = new nullstone.Memoizer((key) => { var div = document.createElement("div"); div.id = key; ((style: CSSStyleDeclaration) => { style.opacity = "0.0"; style.position = "absolute"; style.left = "-300px"; //style.top = "-150px"; })(div.style); document.body.appendChild(div); div.contentEditable = "true"; return div; }); export function memoizePlaceholder(key: string): HTMLDivElement { return cp.memoize(key); } } ================================================ FILE: src/Clipboard/NetscapeClipboard.ts ================================================ /// module Fayde.Clipboard { export class NetscapeClipboard implements IClipboard { private $$fn: (text: string) => void = null; constructor() { document.body.contentEditable = "true"; document.body.style.cursor = "default"; document.body.addEventListener("paste", this.$$notify); } CopyText(text: string) { var div = memoizePlaceholder("special_copy"); div.textContent = text; selectContent(div); tryRequestPrivilege(); // Copy the selected content to the clipboard // Works in Firefox and in Safari before version 5 if (!document.execCommand("copy", false, null)) alert("Your browser does not allow copy to the clipboard. This feature will not function"); } GetTextContents(callback: (text: string) => void) { this.$$fn = callback; } private $$notify = (e: any) => { if (!this.$$fn) return; var ev = e.originalEvent || e; var dt = ev.clipboardData; this.$$fn(dt.getData('text/plain')); this.$$fn = null; } } function selectContent(element: HTMLDivElement) { var rangeToSelect = document.createRange(); rangeToSelect.selectNodeContents(element); // select the contents var selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(rangeToSelect); } function tryRequestPrivilege() { var netscape = window ? (window).netscape : null; if (netscape && netscape.security) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } } } ================================================ FILE: src/Collections/CollectionChangedEventArgs.ts ================================================ module Fayde.Collections { export enum CollectionChangedAction { Add = 1, Remove = 2, Replace = 3, Reset = 4, } Fayde.CoreLibrary.addEnum(CollectionChangedAction, "NotifyCollectionChangedAction"); export class CollectionChangedEventArgs implements nullstone.IEventArgs { Action: CollectionChangedAction; OldStartingIndex: number; NewStartingIndex: number; OldItems: any[]; NewItems: any[]; static Reset(allValues: any[]): CollectionChangedEventArgs { var args = new CollectionChangedEventArgs(); Object.defineProperty(args, "Action", { value: CollectionChangedAction.Reset, writable: false }); Object.defineProperty(args, "OldStartingIndex", { value: 0, writable: false }); Object.defineProperty(args, "NewStartingIndex", { value: -1, writable: false }); Object.defineProperty(args, "OldItems", { value: allValues, writable: false }); Object.defineProperty(args, "NewItems", { value: null, writable: false }); return args; } static Replace(newValue: any, oldValue: any, index: number): CollectionChangedEventArgs { var args = new CollectionChangedEventArgs(); Object.defineProperty(args, "Action", { value: CollectionChangedAction.Replace, writable: false }); Object.defineProperty(args, "OldStartingIndex", { value: -1, writable: false }); Object.defineProperty(args, "NewStartingIndex", { value: index, writable: false }); Object.defineProperty(args, "OldItems", { value: [oldValue], writable: false }); Object.defineProperty(args, "NewItems", { value: [newValue], writable: false }); return args; } static Add(newValue: any, index: number): CollectionChangedEventArgs { var args = new CollectionChangedEventArgs(); Object.defineProperty(args, "Action", { value: CollectionChangedAction.Add, writable: false }); Object.defineProperty(args, "OldStartingIndex", { value: -1, writable: false }); Object.defineProperty(args, "NewStartingIndex", { value: index, writable: false }); Object.defineProperty(args, "OldItems", { value: null, writable: false }); Object.defineProperty(args, "NewItems", { value: [newValue], writable: false }); return args; } static AddRange(newValues: any[], index: number): CollectionChangedEventArgs { var args = new CollectionChangedEventArgs(); Object.defineProperty(args, "Action", { value: CollectionChangedAction.Add, writable: false }); Object.defineProperty(args, "OldStartingIndex", { value: -1, writable: false }); Object.defineProperty(args, "NewStartingIndex", { value: index, writable: false }); Object.defineProperty(args, "OldItems", { value: null, writable: false }); Object.defineProperty(args, "NewItems", { value: newValues, writable: false }); return args; } static Remove(oldValue: any, index: number): CollectionChangedEventArgs { var args = new CollectionChangedEventArgs(); Object.defineProperty(args, "Action", { value: CollectionChangedAction.Remove, writable: false }); Object.defineProperty(args, "OldStartingIndex", { value: index, writable: false }); Object.defineProperty(args, "NewStartingIndex", { value: -1, writable: false }); Object.defineProperty(args, "OldItems", { value: [oldValue], writable: false }); Object.defineProperty(args, "NewItems", { value: null, writable: false }); return args; } } } ================================================ FILE: src/Collections/DeepObservableCollection.ts ================================================ /// module Fayde.Collections { export class DeepObservableCollection extends ObservableCollection { ItemPropertyChanged = new nullstone.Event>(); constructor() { super(); this.CollectionChanged.on(this._OnCollectionChanged, this); } private _OnCollectionChanged(sender: any, e: CollectionChangedEventArgs) { if (e.NewItems) { for (var i = 0; i < e.NewItems.length; i++) { var notify = INotifyPropertyChanged_.as(e.NewItems[i]); if (notify) notify.PropertyChanged.on(this._OnItemPropertyChanged, this); } } if (e.OldItems) { for (var i = 0; i < e.OldItems.length; i++) { var notify = INotifyPropertyChanged_.as(e.OldItems[i]); if (notify) notify.PropertyChanged.off(this._OnItemPropertyChanged, this); } } } private _OnItemPropertyChanged(sender: T, e: PropertyChangedEventArgs) { this.ItemPropertyChanged.raise(this, new ItemPropertyChangedEventArgs(sender, e.PropertyName)); } } } ================================================ FILE: src/Collections/FilteredCollection.ts ================================================ module Fayde.Collections { export interface IFilterItemFunc { (item: T): boolean; } export interface IFilterItemIndexFunc { (item: T, index: number): boolean; } export class FilteredCollection extends DeepObservableCollection { private _Source: DeepObservableCollection; get Source () { return this._Source; } set Source (value: DeepObservableCollection) { this._SetSource(value); } private _Filter: IFilterItemIndexFunc; get Filter () { return this._Filter; } set Filter (value: IFilterItemIndexFunc) { this._Filter = value; this.Update(); } constructor (filter?: IFilterItemFunc, source?: DeepObservableCollection); constructor (filter?: IFilterItemIndexFunc, source?: DeepObservableCollection); constructor (filter?: IFilterItemIndexFunc, source?: DeepObservableCollection) { super(); this.Filter = filter; this._SetSource(source || new DeepObservableCollection()); } private _SetSource (source: DeepObservableCollection) { if (this._Source) { this._Source.CollectionChanged.off(this._OnSourceCollectionChanged, this); this._Source.ItemPropertyChanged.off(this._OnSourceItemPropertyChanged, this); } this._Source = source; if (source) { source.CollectionChanged.on(this._OnSourceCollectionChanged, this); source.ItemPropertyChanged.on(this._OnSourceItemPropertyChanged, this); } this.Update(); } private _OnSourceCollectionChanged (sender: any, e: CollectionChangedEventArgs) { this.Update(); } private _OnSourceItemPropertyChanged (sender: any, e: ItemPropertyChangedEventArgs) { this.Update(); var index = this.Source.IndexOf(e.Item); if (this.Filter && this.Filter(e.Item, index)) this.ItemPropertyChanged.raise(this, e); } Update () { if (!this._Source) return; var filter = this.Filter || ((item: T) => true); for (var i = 0, j = 0, enumerator = this._Source.getEnumerator(); enumerator.moveNext(); i++) { var isIncluded = filter(enumerator.current, i); var isCurrent = j < this.Count && this.GetValueAt(j) === enumerator.current; if (isIncluded && !isCurrent) this.Insert(j, enumerator.current); else if (!isIncluded && isCurrent) this.RemoveAt(j); if (isIncluded) j++; } } } } ================================================ FILE: src/Collections/INotifyCollectionChanged.ts ================================================ module Fayde.Collections { export interface INotifyCollectionChanged { CollectionChanged: nullstone.Event; } export var INotifyCollectionChanged_ = new nullstone.Interface("INotifyCollectionChanged"); INotifyCollectionChanged_.is = (o: any): boolean => { return o && o.CollectionChanged instanceof nullstone.Event; }; } ================================================ FILE: src/Collections/ItemPropertyChangedEventArgs.ts ================================================ /// module Fayde.Collections { export class ItemPropertyChangedEventArgs extends PropertyChangedEventArgs { Item: T; constructor(item: T, propertyName: string) { super(propertyName); Object.defineProperty(this, "Item", { value: item, writable: false }); } } } ================================================ FILE: src/Collections/ObservableCollection.ts ================================================ /// /// module Fayde.Collections { export class ObservableCollection implements nullstone.IEnumerable, nullstone.ICollection, INotifyCollectionChanged, INotifyPropertyChanged { private _ht: T[] = []; getEnumerator (): nullstone.IEnumerator { return nullstone.IEnumerator_.fromArray(this._ht); } CollectionChanged = new nullstone.Event(); PropertyChanged = new nullstone.Event(); get Count (): number { return this._ht.length; } ToArray (): T[] { return this._ht.slice(0); } GetValueAt (index: number): T { var ht = this._ht; if (index < 0 || index >= ht.length) throw new IndexOutOfRangeException(index); return ht[index]; } SetValueAt (index: number, value: T) { var ht = this._ht; if (index < 0 || index >= ht.length) throw new IndexOutOfRangeException(index); var oldValue = ht[index]; ht[index] = value; this.CollectionChanged.raise(this, CollectionChangedEventArgs.Replace(value, oldValue, index)); } Add (value: T) { var index = this._ht.push(value) - 1; this.CollectionChanged.raise(this, CollectionChangedEventArgs.Add(value, index)); this._RaisePropertyChanged("Count"); } AddRange (values: T[]) { var index = this._ht.length; var len = values.length; for (var i = 0; i < len; i++) { this._ht.push(values[i]); } this.CollectionChanged.raise(this, CollectionChangedEventArgs.AddRange(values, index)); this._RaisePropertyChanged("Count"); } Insert (index: number, value: T) { var ht = this._ht; if (index < 0 || index > ht.length) throw new IndexOutOfRangeException(index); if (index >= ht.length) ht.push(value); else ht.splice(index, 0, value); this.CollectionChanged.raise(this, CollectionChangedEventArgs.Add(value, index)); this._RaisePropertyChanged("Count"); } IndexOf (value: T): number { return this._ht.indexOf(value); } Contains (value: T): boolean { return this._ht.indexOf(value) > -1; } Remove (value: T): boolean { var index = this._ht.indexOf(value); if (index < 0) return false; this._ht.splice(index, 1); this.CollectionChanged.raise(this, CollectionChangedEventArgs.Remove(value, index)); this._RaisePropertyChanged("Count"); return true; } RemoveAt (index: number) { if (index < 0 || index >= this._ht.length) throw new IndexOutOfRangeException(index); var item = this._ht.splice(index, 1)[0]; this.CollectionChanged.raise(this, CollectionChangedEventArgs.Remove(item, index)); this._RaisePropertyChanged("Count"); } Clear () { var old = this._ht; this._ht = []; this.CollectionChanged.raise(this, CollectionChangedEventArgs.Reset(old)); this._RaisePropertyChanged("Count"); } private _RaisePropertyChanged (propertyName: string) { this.PropertyChanged.raise(this, new PropertyChangedEventArgs(propertyName)); } } Fayde.CoreLibrary.add(ObservableCollection); nullstone.ICollection_.mark(ObservableCollection); } ================================================ FILE: src/Collections/ReadOnlyObservableCollection.ts ================================================ module Fayde.Collections { export class ReadOnlyObservableCollection implements nullstone.ICollection, INotifyCollectionChanged, INotifyPropertyChanged { get Count (): number { return this._Source.Count; } private _Source: ObservableCollection; CollectionChanged = new nullstone.Event(); PropertyChanged = new nullstone.Event(); constructor (source: ObservableCollection) { this._Source = source; this._Source.CollectionChanged.on(this._OnCollectionChanged, this); this._Source.PropertyChanged.on(this._OnPropertyChanged, this); } GetValueAt (index: number) { return this._Source.GetValueAt(index); } getEnumerator (): nullstone.IEnumerator { return this._Source.getEnumerator(); } ToArray (): T[] { return this._Source.ToArray(); } IndexOf (value: T): number { return this._Source.IndexOf(value); } Contains (value: T): boolean { return this._Source.Contains(value); } private _OnCollectionChanged (sender: any, args: CollectionChangedEventArgs) { this.CollectionChanged.raise(this, args); } private _OnPropertyChanged (sender: any, args: PropertyChangedEventArgs) { this.PropertyChanged.raise(this, args); } SetValueAt (index: number, value: T) { throw new Error("Collection is read only."); } Insert (index: number, value: T) { throw new Error("Collection is read only."); } Add (value: T) { throw new Error("Collection is read only."); } Remove (value: T): boolean { throw new Error("Collection is read only."); } RemoveAt (index: number) { throw new Error("Collection is read only."); } Clear () { throw new Error("Collection is read only."); } } Fayde.CoreLibrary.add(ObservableCollection); nullstone.addTypeInterfaces(ReadOnlyObservableCollection, nullstone.ICollection_, INotifyCollectionChanged_, INotifyPropertyChanged_); } ================================================ FILE: src/Controls/Border.ts ================================================ /// /// module Fayde.Controls { export class Border extends FrameworkElement { CreateLayoutUpdater (): minerva.controls.border.BorderUpdater { return new minerva.controls.border.BorderUpdater(); } static BackgroundProperty = DependencyProperty.RegisterCore("Background", () => Media.Brush, Border); static BorderBrushProperty = DependencyProperty.RegisterCore("BorderBrush", () => Media.Brush, Border); static BorderThicknessProperty = DependencyProperty.Register("BorderThickness", () => Thickness, Border); //TODO: Validator static ChildProperty = DependencyProperty.Register("Child", () => UIElement, Border); static CornerRadiusProperty = DependencyProperty.Register("CornerRadius", () => CornerRadius, Border); //TODO: Validator static PaddingProperty = DependencyProperty.Register("Padding", () => Thickness, Border); //TODO: Validator Background: Media.Brush; BorderBrush: Media.Brush; BorderThickness: minerva.Thickness; Child: UIElement; CornerRadius: CornerRadius; Padding: Thickness; constructor () { super(); this.DefaultStyleKey = Border; } } Fayde.CoreLibrary.add(Border); Markup.Content(Border, Border.ChildProperty); UIReaction(Border.BackgroundProperty, (upd, ov, nv) => { upd.invalidate(); }); UIReaction(Border.BorderBrushProperty, (upd, ov, nv) => { upd.invalidate(); }); UIReaction(Border.BorderThicknessProperty, (upd, ov, nv) => upd.invalidateMeasure(), false, (src, dest) => !!src && !!dest && minerva.Thickness.copyTo(src, dest)); UIReaction(Border.PaddingProperty, (upd, ov, nv) => upd.invalidateMeasure(), false, (src, dest) => !!src && !!dest && minerva.Thickness.copyTo(src, dest)); UIReaction(Border.CornerRadiusProperty, (upd, ov, nv) => upd.invalidate(), false, (src, dest) => !!src && !!dest && minerva.CornerRadius.copyTo(src, dest)); UIReaction(Border.ChildProperty, (upd, ov, nv, border?: Border) => { var node = border.XamlNode; var error = new BError(); if (ov instanceof UIElement) node.DetachVisualChild(ov, error); if (nv instanceof UIElement) node.AttachVisualChild(nv, error); if (error.Message) error.ThrowException(); upd.updateBounds(); upd.invalidateMeasure(); }, false, false); } ================================================ FILE: src/Controls/Button.ts ================================================ /// module Fayde.Controls { export class Button extends Primitives.ButtonBase { constructor() { super(); this.DefaultStyleKey = Button; } OnApplyTemplate() { super.OnApplyTemplate(); this.UpdateVisualState(false); } OnIsEnabledChanged(e: IDependencyPropertyChangedEventArgs) { super.OnIsEnabledChanged(e); this.IsTabStop = e.NewValue; } } Fayde.CoreLibrary.add(Button); TemplateVisualStates(Button, { GroupName: "CommonStates", Name: "Normal" }, { GroupName: "CommonStates", Name: "MouseOver" }, { GroupName: "CommonStates", Name: "Pressed" }, { GroupName: "CommonStates", Name: "Disabled" }, { GroupName: "FocusStates", Name: "Unfocused" }, { GroupName: "FocusStates", Name: "Focused" }); } ================================================ FILE: src/Controls/Canvas.ts ================================================ /// module Fayde.Controls { export class Canvas extends Panel { CreateLayoutUpdater() { return new minerva.controls.canvas.CanvasUpdater(); } static TopProperty: DependencyProperty = DependencyProperty.RegisterAttached("Top", () => Number, Canvas, 0.0); static GetTop(d: DependencyObject): number { return d.GetValue(Canvas.TopProperty); } static SetTop(d: DependencyObject, value: number) { d.SetValue(Canvas.TopProperty, value); } static LeftProperty: DependencyProperty = DependencyProperty.RegisterAttached("Left", () => Number, Canvas, 0.0); static GetLeft(d: DependencyObject): number { return d.GetValue(Canvas.LeftProperty); } static SetLeft(d: DependencyObject, value: number) { d.SetValue(Canvas.LeftProperty, value); } } Fayde.CoreLibrary.add(Canvas); module reactions { UIReactionAttached(Canvas.TopProperty, minerva.controls.canvas.reactTo.top); UIReactionAttached(Canvas.LeftProperty, minerva.controls.canvas.reactTo.left); } } ================================================ FILE: src/Controls/CheckBox.ts ================================================ /// module Fayde.Controls { export class CheckBox extends Primitives.ToggleButton { constructor() { super(); this.DefaultStyleKey = CheckBox; } } Fayde.CoreLibrary.add(CheckBox); TemplateVisualStates(CheckBox, { GroupName: "CommonStates", Name: "Normal" }, { GroupName: "CommonStates", Name: "MouseOver" }, { GroupName: "CommonStates", Name: "Pressed" }, { GroupName: "CommonStates", Name: "Disabled" }, { GroupName: "FocusStates", Name: "Unfocused" }, { GroupName: "FocusStates", Name: "Focused" }, { GroupName: "CheckStates", Name: "Checked" }, { GroupName: "CheckStates", Name: "Unchecked" }, { GroupName: "CheckStates", Name: "Indeterminate" }, { GroupName: "ValidationStates", Name: "InvalidUnfocused" }, { GroupName: "ValidationStates", Name: "InvalidFocused" }, { GroupName: "ValidationStates", Name: "Valid" }); } ================================================ FILE: src/Controls/ColumnDefinition.ts ================================================ /// /// module Fayde.Controls { export class ColumnDefinition extends DependencyObject implements minerva.controls.grid.IColumnDefinition { //NOTE: Will not receive property changes from GridLength static WidthProperty = DependencyProperty.Register("Width", () => GridLength, ColumnDefinition, undefined, Incite); static MaxWidthProperty = DependencyProperty.Register("MaxWidth", () => Number, ColumnDefinition, Number.POSITIVE_INFINITY, Incite); static MinWidthProperty = DependencyProperty.Register("MinWidth", () => Number, ColumnDefinition, 0.0, Incite); static ActualWidthProperty = DependencyProperty.RegisterReadOnly("ActualWidth", () => Number, ColumnDefinition, 0.0); Width: GridLength; MaxWidth: number; MinWidth: number; ActualWidth: number; setActualWidth (value: number) { this.SetCurrentValue(ColumnDefinition.ActualWidthProperty, value); } } Fayde.CoreLibrary.add(ColumnDefinition); import GridUnitType = minerva.controls.grid.GridUnitType; function ConvertColumnDefinition (o: any): ColumnDefinition { if (!o || o instanceof ColumnDefinition) return o; var s: string = o.toString(); var cd = new ColumnDefinition(); if (s.toLowerCase() === "auto") { cd.Width = new GridLength(0, GridUnitType.Auto); return cd; } if (s === "*") { cd.Width = new GridLength(1, GridUnitType.Star); return cd; } var v = parseFloat(s); if (isNaN(v)) throw new XamlParseException("Invalid ColumnDefinition: '" + s + "'."); cd.Width = new GridLength(v, s[s.length - 1] === "*" ? GridUnitType.Star : GridUnitType.Pixel); return cd; } nullstone.registerTypeConverter(ColumnDefinition, ConvertColumnDefinition); export class ColumnDefinitionCollection extends XamlObjectCollection { _RaiseItemAdded (value: ColumnDefinition, index: number) { Incite(this, { item: value, index: index, add: true }); } _RaiseItemRemoved (value: ColumnDefinition, index: number) { Incite(this, { item: value, index: index, add: false }); } } Fayde.CoreLibrary.add(ColumnDefinitionCollection); function ConvertColumnDefinitionCollection (o: any): ColumnDefinitionCollection { if (!o || o instanceof ColumnDefinitionCollection) return o; if (typeof o === "string") { var tokens = (o).split(" "); var len = tokens.length; var cdc = new ColumnDefinitionCollection(); var cd: ColumnDefinition; for (var i = 0; i < len; i++) { if (cd = ConvertColumnDefinition(tokens[i])) cdc.Add(cd); } return cdc; } return undefined; } nullstone.registerTypeConverter(ColumnDefinitionCollection, ConvertColumnDefinitionCollection); } ================================================ FILE: src/Controls/ComboBox.ts ================================================ /// /// /// /// /// module Fayde.Controls { export class ComboBox extends Primitives.Selector { DropDownOpened = new nullstone.Event(); DropDownClosed = new nullstone.Event(); static IsDropDownOpenProperty = DependencyProperty.Register("IsDropDownOpen", () => Boolean, ComboBox, false, (d, args) => (d)._IsDropDownOpenChanged(args)); static ItemContainerStyleProperty = DependencyProperty.Register("ItemContainerStyle", () => Style, ComboBox, undefined, (d, args) => (d).OnItemContainerStyleChanged(args)); static MaxDropDownHeightProperty = DependencyProperty.Register("MaxDropDownHeight", () => Number, ComboBox, Number.POSITIVE_INFINITY, (d, args) => (d)._MaxDropDownHeightChanged(args)); static IsSelectionActiveProperty = Primitives.Selector.IsSelectionActiveProperty; static WatermarkProperty = DependencyProperty.Register("Watermark", () => String, ComboBox, ""); IsDropDownOpen: boolean; ItemContainerStyle: Style; MaxDropDownHeight: number; Watermark: String; private $ContentPresenter: ContentPresenter; private $Popup: Primitives.Popup; private $DropDownToggle: Primitives.ToggleButton; private $DisplayedItem: ComboBoxItem = null; private $SelectionBoxItem: any = null; private $SelectionBoxItemTemplate: DataTemplate = null; private $WatermarkElement: FrameworkElement; private _NullSelFallback: any; private _FocusedIndex: number = -1; constructor() { super(); this.DefaultStyleKey = ComboBox; } private _IsDropDownOpenChanged(args: IDependencyPropertyChangedEventArgs) { var open = args.NewValue; if (this.$Popup != null) this.$Popup.IsOpen = open; if (this.$DropDownToggle != null) this.$DropDownToggle.IsChecked = open; if (open) { this._FocusedIndex = this.Items.Count > 0 ? Math.max(this.SelectedIndex, 0) : -1; if (this._FocusedIndex > -1) { var focusedItem = this.ItemContainersManager.ContainerFromIndex(this._FocusedIndex); if (focusedItem instanceof ComboBoxItem) (focusedItem).Focus(); } this.LayoutUpdated.on(this._UpdatePopupSizeAndPosition, this); this.DropDownOpened.raise(this, null); } else { this.Focus(); this.LayoutUpdated.off(this._UpdatePopupSizeAndPosition, this); this.DropDownClosed.raise(this, null); } var selectedItem = this.SelectedItem; this._UpdateDisplayedItem(open && selectedItem instanceof Fayde.UIElement ? null : selectedItem); this.UpdateVisualState(true); this._CheckWatermarkVisibility(); } private _MaxDropDownHeightChanged(args: IDependencyPropertyChangedEventArgs) { this._UpdatePopupMaxHeight(args.NewValue); } private _GetChildOfType(name: string, type: Function): any { var temp = this.GetTemplateChild(name); if (temp instanceof type) return temp; } OnApplyTemplate() { super.OnApplyTemplate(); this.UpdateVisualState(false); this.$ContentPresenter = this._GetChildOfType("ContentPresenter", ContentPresenter); this.$Popup = this._GetChildOfType("Popup", Primitives.Popup); this.$DropDownToggle = this._GetChildOfType("DropDownToggle", Primitives.ToggleButton); this.$WatermarkElement = this.GetTemplateChild("WatermarkElement", FrameworkElement); if (this.$ContentPresenter != null) this._NullSelFallback = this.$ContentPresenter.Content; if (this.$Popup != null) { this._UpdatePopupMaxHeight(this.MaxDropDownHeight); this.$Popup.WatchOutsideClick(this._PopupClickedOutside, this); var child = this.$Popup.Child; if (child != null) { child.KeyDown.on(this._OnChildKeyDown, this); (child).SizeChanged.on(this._UpdatePopupSizeAndPosition, this); } } if (this.$DropDownToggle != null) { this.$DropDownToggle.Checked.on(this._OnToggleChecked, this); this.$DropDownToggle.Unchecked.on(this._OnToggleUnchecked, this); } this.UpdateVisualState(false); this._UpdateDisplayedItem(this.SelectedItem); } OnItemContainerStyleChanged(args: IDependencyPropertyChangedEventArgs) { var newStyle = Visible ================================================ FILE: test/fayde.json ================================================ { "libs": {}, "themes": {} } ================================================ FILE: test/mocks/BaseTest.xml ================================================ #FF001100 ================================================ FILE: test/mocks/TestControl.ts ================================================ class TestControl extends Fayde.Controls.ContentControl { CallbackFired: boolean = false; TestCallback(sender: any, e: nullstone.IEventArgs) { this.CallbackFired = true; } } export = TestControl; ================================================ FILE: test/mocks/TestConverter.ts ================================================ class TestConverter implements Fayde.Data.IValueConverter { Convert(value: any, targetType: IType, parameter: any, culture: any): any { return value; } ConvertBack(value: any, targetType: IType, parameter: any, culture: any): any { return value; } } nullstone.addTypeInterfaces(TestConverter, Fayde.Data.IValueConverter_); export = TestConverter; ================================================ FILE: test/mocks/TestDictionary.xml ================================================ #FF110000 ================================================ FILE: test/mocks/TestObservable.ts ================================================ class TestObservable extends Fayde.MVVM.ObservableObject { Member1: number = 0; Member2: string = ""; } Fayde.MVVM.NotifyProperties(TestObservable, ["Member1", "Member2"]); export = TestObservable; ================================================ FILE: test/mocks/TestViewModel.ts ================================================ class TestViewModel extends Fayde.MVVM.ViewModelBase { TeamId: number; constructor(teamId: number) { super(); this.TeamId = teamId; } } export = TestViewModel; ================================================ FILE: test/mocks/TestViewModelProvider.ts ================================================ import TestViewModel = require("../mocks/TestViewModel"); class TestViewModelProvider implements Fayde.MVVM.IViewModelProvider { ResolveViewModel(route: Fayde.Navigation.Route) { switch(route.View.toString()) { case "/Views/FantasyTeam.fayde": return new TestViewModel(+route.HashParams["id"]); break; } } } export = TestViewModelProvider; ================================================ FILE: test/runner.ts ================================================ module runner { var testModules = [ ".build/tests/Matrix", ".build/tests/Format", ".build/tests/TypeConverter", ".build/tests/MarkupExpression", ".build/tests/XamlNode", ".build/tests/Provider", ".build/tests/DependencyProperty", ".build/tests/DataTemplate", ".build/tests/Transform", ".build/tests/Timeline", ".build/tests/ItemContainersManager", ".build/tests/Binding", ".build/tests/UriMapper", ".build/tests/DeepObservableCollection", ".build/tests/RouteMapper", ".build/tests/Markup/Basic", ".build/tests/Markup/Controls", ".build/tests/Markup/Framework", ".build/tests/Markup/Resources", ".build/tests/Markup/Media", ".build/tests/MVVM/AutoModel", ".build/tests/Primitives/DateTime", ".build/tests/Text/Proxy", ".build/tests/RadialGradientBrush", ".build/tests/LinearGradientBrush" ]; Fayde.LoadConfigJson((config, err) => { if (err) console.warn("Error loading configuration file.", err); require(testModules, (...modules: any[]) => { for (var i = 0; i < modules.length; i++) { modules[i].load(); } QUnit.load(); QUnit.start(); }); }); } ================================================ FILE: test/tests/Binding.ts ================================================ export function load() { QUnit.module("Binding"); test("BindingExpression with Source", () => { var binding = new Fayde.Data.Binding("Value"); var data = { Value: 12 }; binding.Source = data; var r = new Fayde.Shapes.Rectangle(); var expr = r.SetBinding(Fayde.Shapes.Shape.WidthProperty, binding); strictEqual(expr.DataItem, data, "DataItem should be the source."); strictEqual(expr.ParentBinding, binding, "ParentBinding on expression should be the same as specified binding."); }); test("BindingExpression with DataContext", () => { var binding = new Fayde.Data.Binding("Value"); var vm = { Value: 23 }; var r = new Fayde.Shapes.Rectangle(); r.SetBinding(Fayde.Shapes.Shape.WidthProperty, binding); r.DataContext = vm; equal(r.Width, 23, "Target of binding with datacontext set should have value provided."); }); test("TwoWay + OneWay Binding", () => { var Binding = Fayde.Data.Binding; var BindingMode = Fayde.Data.BindingMode; var vm = new Fayde.MVVM.ViewModelBase(); var backing = {}; Object.defineProperty(vm, "SelectedItem", { get: function () { return backing; }, set: function (value) { backing = value; this.OnPropertyChanged("SelectedItem"); } }); var sp = new Fayde.Controls.StackPanel(); sp.DataContext = vm; var binding = new Binding("SelectedItem"); //2-way binding.Mode = BindingMode.TwoWay; var lb = new Fayde.Controls.ListBox(); lb.SetBinding(Fayde.Controls.Primitives.Selector.SelectedItemProperty, binding); sp.Children.Add(lb); var binding2 = new Binding("SelectedItem"); var binding3 = new Binding("Test"); var tb = new Fayde.Controls.TextBlock(); tb.SetBinding(Fayde.DependencyObject.DataContextProperty, binding2); tb.SetBinding(Fayde.Controls.TextBlock.TextProperty, binding3); sp.Children.Add(tb); equal(tb.Text, "", "TextBlock Text binding should be broken upon initialization since there is not selected item."); var si = { Test: "Hey" }; lb.ItemsSource = >[si]; Fayde.Data.IsCounterEnabled = true; Fayde.Data.DataContextCounter = 0; lb.SelectedItem = si; Fayde.Data.IsCounterEnabled = false; ok(true, "[INFO] Number of BindingExpression DataContext Changes: " + Fayde.Data.DataContextCounter); equal(tb.Text, "Hey", "TextBlock Text should match new selected item on ListBox."); }); test("UpdateSource", () => { var data = { Value: 10 }; var binding = new Fayde.Data.Binding("Value"); binding.Mode = Fayde.Data.BindingMode.TwoWay; binding.Source = data; binding.UpdateSourceTrigger = Fayde.Data.UpdateSourceTrigger.Explicit; var r = new Fayde.Shapes.Rectangle(); var expr = r.SetBinding(Fayde.Shapes.Shape.WidthProperty, binding); r.Width = 100; equal(data.Value, 10, "Explicit Two-Way Binding should not update data until explicitly called."); expr.UpdateSource(); equal(data.Value, 100, "Explicit Two-Way Binding should update after UpdateSource()"); }); } ================================================ FILE: test/tests/DataTemplate.ts ================================================ export function load() { QUnit.module("DataTemplate"); test("Basic Load", () => { var xaml = "" + "" + ""; var dt: Fayde.DataTemplate; try { dt = Fayde.Markup.LoadXaml(null, xaml); } catch (err) { ok(false, "Loading a DataTemplate should not error. " + err.toString()); } strictEqual((dt).constructor, Fayde.DataTemplate, "Resulting object should be a DataTemplate."); var visual = dt.GetVisualTree(null); strictEqual((visual).constructor, Fayde.Controls.Grid, "Root visual from created visual tree should be a Grid."); }); test("Implicit DataTemplate", () => { var xaml = "" + "" + "" + "" + "" + "" + "" + "" + ""; var grid: Fayde.Controls.Grid; try { grid = Fayde.Markup.LoadXaml(null, xaml); } catch (err) { ok(false, "Loading a DataTemplate should not error. " + err.toString()); } ok(grid.Resources.Contains(Color)); var dt = grid.Resources.Get(Color); ok(dt instanceof Fayde.DataTemplate); strictEqual(dt.DataType, Color, "DataType for DataTemplate should be Color."); strictEqual(grid.Children.Count, 1); var cc = grid.Children.GetValueAt(0); ok(cc instanceof Fayde.Controls.ContentControl, "Grid should have a ContentControl."); cc.Measure(new minerva.Size()); var cp = Fayde.VisualTreeHelper.GetChild(cc, 0); ok(cp instanceof Fayde.Controls.ContentPresenter, "ContentControl should have a ContentPresenter."); var tb = Fayde.VisualTreeHelper.GetChild(cp, 0); ok(tb instanceof Fayde.Controls.TextBlock, "ContentPresenter should have a TextBlock."); strictEqual(tb.Text, "0"); }); test("Key/TargetType not specified", () => { var xaml = "" + "" + "" + "" + "" + "" + ""; var grid: Fayde.Controls.Grid; try { grid = Fayde.Markup.LoadXaml(null, xaml); ok(false, "Expected parse error in xaml load."); } catch (err) { ok(err instanceof XamlParseException, err); } }); } ================================================ FILE: test/tests/DeepObservableCollection.ts ================================================ import TestObservable = require("../mocks/TestObservable"); import DeepObservableCollection = Fayde.Collections.DeepObservableCollection; export function load() { QUnit.module("DeepObservableCollection"); test("ItemPropertyChanged", () => { var doc = new DeepObservableCollection(); var to1 = new TestObservable(); var to2 = new TestObservable(); doc.AddRange([to1, to2]); var to1changed = false; var to2changed = false; doc.ItemPropertyChanged.on(onItemPropertyChanged, {}); function onItemPropertyChanged(sender, e: Fayde.Collections.ItemPropertyChangedEventArgs) { to1changed = (e.Item === to1) ? true : to1changed; to2changed = (e.Item === to2) ? true : to2changed; } to1.Member1 = 10; ok(to1changed, "Notification of item property changing for test observable 1"); to2.Member2 = "hey"; ok(to2changed, "Notification of item property changing for test observable 1"); }); test("Cleanup", () => { var doc = new DeepObservableCollection(); var to1 = new TestObservable(); var to2 = new TestObservable(); doc.AddRange([to1, to2]); var to1changed = false; var to2changed = false; doc.ItemPropertyChanged.on(onItemPropertyChanged, {}); function onItemPropertyChanged(sender, e: Fayde.Collections.ItemPropertyChangedEventArgs) { to1changed = (e.Item === to1) ? true : to1changed; to2changed = (e.Item === to2) ? true : to2changed; } doc.Remove(to1); to1.Member1 = 10; ok(!to1changed, "Collection should not notify if item was removed from collection"); doc.Insert(0, to1); var to3 = new TestObservable(); doc.SetValueAt(0, to3); to1.Member1 = 15; ok(!to1changed, "Collection should not notify if item was replaced in collection"); doc.SetValueAt(0, to1); to1.Member1 = 20; ok(to1changed, "Collection should notify of item that was placed back into collection"); to1changed = false; doc.Clear(); to1.Member1 = 25; to2.Member2 = "brad"; ok(!to1changed, "Collection should not notify item 1 property if collection was cleared"); ok(!to2changed, "Collection should not notify item 2 property if collection was cleared"); }); } ================================================ FILE: test/tests/DependencyProperty.ts ================================================ export function load() { QUnit.module("DependencyProperty"); function coercer(dobj: Fayde.DependencyObject, propd: DependencyProperty, value: any): any { if (value < 0) return 0; return value; } function validator(dobj: Fayde.DependencyObject, propd: DependencyProperty, value: any): boolean { return typeof value === "string"; } var Mock3Property = DependencyProperty.RegisterFull("Mock3", () => Number, Fayde.DependencyObject, undefined, undefined, coercer); var Mock4Property = DependencyProperty.RegisterFull("Mock4", () => String, Fayde.DependencyObject, undefined, undefined, undefined, false, validator); test("Coerce", () => { var d = new Fayde.DependencyObject(); d.SetValue(Mock3Property, -1); strictEqual(d.GetValue(Mock3Property), 0) d.SetValue(Mock3Property, 1); strictEqual(d.GetValue(Mock3Property), 1) }); test("Validate", () => { var d = new Fayde.DependencyObject(); d.SetValue(Mock4Property, "1"); strictEqual(d.GetValue(Mock4Property), "1"); d.SetValue(Mock4Property, 1); strictEqual(d.GetValue(Mock4Property), "1"); }); } ================================================ FILE: test/tests/Format.ts ================================================ import Format = Fayde.Localization.Format; export function load() { QUnit.module("Format"); function ft(format: string, num: number, expected: string) { strictEqual(Format(format, num), expected); } function fdt(format: string, dt: DateTime, expected: string) { strictEqual(Format(format, dt), expected); } function ftt(format: string, ts: TimeSpan, expected: string) { strictEqual(Format(format, ts), expected); } function testCustomTimeSpan(msg: string, ts: TimeSpan, format: string, expected: string) { strictEqual(Format(format, ts), expected, msg); } function testCustomDateTime(dt: DateTime, format: string, expected: string) { strictEqual(Format(format, dt), expected, format); } var dt = new DateTime(2014, 4, 10, 8, 37, 46, 0, DateTimeKind.Local); test("DateTime: Short date", () => { fdt("{0:d}", dt, "4/10/2014"); }); test("DateTime: Long date", () => { fdt("{0:D}", dt, "Thursday, April 10, 2014"); }); test("DateTime: Full date/time (short time)", () => { fdt("{0:f}", dt, "Thursday, April 10, 2014 8:37 AM"); }); test("DateTime: Full date/time (long time)", () => { fdt("{0:F}", dt, "Thursday, April 10, 2014 8:37:46 AM"); }); test("DateTime: General date/time (short time)", () => { fdt("{0:g}", dt, "4/10/2014 8:37 AM"); }); test("DateTime: General date/time (long time)", () => { fdt("{0:G}", dt, "4/10/2014 8:37:46 AM"); }); test("DateTime: Month/day", () => { fdt("{0:m}", dt, "April 10"); fdt("{0:M}", dt, "April 10"); }); var dt2 = new DateTime(2014, 4, 10, 12, 37, 46, 0, DateTimeKind.Utc); test("DateTime: RFC123", () => { fdt("{0:r}", dt2, "Thu, 10 Apr 2014 12:37:46 GMT"); fdt("{0:R}", dt2, "Thu, 10 Apr 2014 12:37:46 GMT"); }); test("DateTime: Sortable date/time", () => { fdt("{0:s}", dt, "2014-04-10T08:37:46"); }); test("DateTime: Short time", () => { fdt("{0:t}", dt, "8:37 AM"); }); test("DateTime: Long time", () => { fdt("{0:T}", dt, "8:37:46 AM"); }); test("DateTime: Universal sortable date/time", () => { fdt("{0:u}", dt, "2014-04-10 08:37:46Z"); }); test("DateTime: Universal full date/time", () => { fdt("{0:U}", dt, "Thursday, April 10, 2014 8:37:46 AM"); }); test("DateTime: Year month", () => { fdt("{0:y}", dt, "April, 2014"); fdt("{0:Y}", dt, "April, 2014"); }); test("DateTime: Custom", () => { var dt1 = new DateTime(2014, 1, 1, 5, 1, 2); var dt2 = new DateTime(2014, 1, 15, 15, 16, 17); testCustomDateTime(dt1, "{0:%d}", "1"); testCustomDateTime(dt2, "{0:%d}", "15"); testCustomDateTime(dt1, "{0:dd}", "01"); testCustomDateTime(dt2, "{0:dd}", "15"); testCustomDateTime(dt1, "{0:ddd}", "Wed"); testCustomDateTime(dt1, "{0:dddd}", "Wednesday"); testCustomDateTime(dt1, "{0:%M}", "1"); testCustomDateTime(dt1, "{0:MM}", "01"); testCustomDateTime(dt1, "{0:MMM}", "Jan"); testCustomDateTime(dt1, "{0:MMMM}", "January"); var dt3 = new DateTime(2009, 1, 1); var dt4 = new DateTime(900, 1, 1); testCustomDateTime(dt1, "{0:%y}", "14"); testCustomDateTime(dt3, "{0:%y}", "9"); testCustomDateTime(dt1, "{0:yy}", "14"); testCustomDateTime(dt3, "{0:yy}", "09"); testCustomDateTime(dt4, "{0:yyy}", "900"); testCustomDateTime(dt3, "{0:yyy}", "2009"); testCustomDateTime(dt4, "{0:yyyy}", "0900"); testCustomDateTime(dt3, "{0:yyyy}", "2009"); testCustomDateTime(dt1, "{0:%t}", "A"); testCustomDateTime(dt2, "{0:%t}", "P"); testCustomDateTime(dt1, "{0:tt}", "AM"); testCustomDateTime(dt2, "{0:tt}", "PM"); testCustomDateTime(dt2, "{0:h}", "3"); testCustomDateTime(dt2, "{0:hh}", "03"); testCustomDateTime(dt2, "{0:H}", "15"); testCustomDateTime(dt2, "{0:HH}", "15"); testCustomDateTime(dt1, "{0:%m}", "1"); testCustomDateTime(dt2, "{0:%m}", "16"); testCustomDateTime(dt1, "{0:mm}", "01"); testCustomDateTime(dt2, "{0:mm}", "16"); testCustomDateTime(dt1, "{0:%s}", "2"); testCustomDateTime(dt2, "{0:%s}", "17"); testCustomDateTime(dt1, "{0:ss}", "02"); testCustomDateTime(dt2, "{0:ss}", "17"); var dt5 = new DateTime(0, 0, 0, 0, 0, 0, 123); testCustomDateTime(dt5, "{0:%f}", "1"); testCustomDateTime(dt5, "{0:ff}", "12"); testCustomDateTime(dt5, "{0:fff}", "123"); testCustomDateTime(dt5, "{0:ffff}", "1230"); testCustomDateTime(dt5, "{0:fffff}", "12300"); testCustomDateTime(dt5, "{0:ffffff}", "123000"); testCustomDateTime(dt5, "{0:fffffff}", "1230000"); testCustomDateTime(dt5, "{0:%F}", "1"); testCustomDateTime(dt5, "{0:FF}", "12"); testCustomDateTime(dt5, "{0:FFF}", "123"); testCustomDateTime(dt5, "{0:FFFF}", "123"); testCustomDateTime(dt5, "{0:FFFFF}", "123"); testCustomDateTime(dt5, "{0:FFFFFF}", "123"); testCustomDateTime(dt5, "{0:FFFFFFF}", "123"); /* testCustomDateTime(dt1, "{0:z}", "-4"); testCustomDateTime(dt1, "{0:zz}", "-04"); testCustomDateTime(dt1, "{0:zzz}", "-04:00"); testCustomDateTime(dt1, "{0:K}", ""); testCustomDateTime(dt1, "{0:g}", "A.D."); testCustomDateTime(dt1, "{0:gg}", "A.D."); */ }); test("DateTime: Edge #1", () => { testCustomDateTime(new DateTime(2014, 4, 27), "{0: dd MMM yyyy }", " 27 Apr 2014 "); testCustomDateTime(new DateTime(0, 0, 0, 10, 30, 45), "{0: HH:mm:ss}", " 10:30:45"); }); test("TimeSpan: Constant", () => { ftt("{0:c}", TimeSpan.Zero, "00:00:00"); ftt("{0:c}", new TimeSpan(0, 0, 30, 0), "00:30:00"); ftt("{0:c}", new TimeSpan(0, 0, -30, 0), "-00:30:00"); ftt("{0:c}", new TimeSpan(3, 17, 25, 30, 500), "3.17:25:30.5000000"); }); test("TimeSpan: General short", () => { ftt("{0:g}", new TimeSpan(1, 3, 16, 50, 500), "1:3:16:50.5"); ftt("{0:g}", new TimeSpan(-1, -3, -16, -50, -500), "-1:3:16:50.5"); ftt("{0:g}", new TimeSpan(1, 3, 16, 50, 599), "1:3:16:50.599"); }); test("TimeSpan: General long", () => { ftt("{0:G}", new TimeSpan(18, 30, 0), "0:18:30:00.0000000"); ftt("{0:G}", new TimeSpan(-18, -30, 0), "-0:18:30:00.0000000"); }); test("TimeSpan: Custom", () => { var ts1 = new TimeSpan(6, 14, 32, 17, 685); var ts2 = new TimeSpan(6, 8, 32, 17, 685); var ts3 = new TimeSpan(6, 14, 8, 17, 685); var ts4 = new TimeSpan(6, 8, 5, 17, 685); testCustomTimeSpan("d,%d", ts1, "{0:%d}", "6"); testCustomTimeSpan("d,%d", ts1, "{0:d\\.hh\\:mm}", "6.14:32"); testCustomTimeSpan("dd-dddddddd", ts1, "{0:ddd}", "006"); testCustomTimeSpan("dd-dddddddd", ts1, "{0:dd\\.hh\\:mm}", "06.14:32"); testCustomTimeSpan("h,%h", ts1, "{0:%h}", "14"); testCustomTimeSpan("h,%h", ts1, "{0:hh\\:mm}", "14:32"); testCustomTimeSpan("hh", ts1, "{0:hh}", "14"); testCustomTimeSpan("hh", ts2, "{0:hh}", "08"); testCustomTimeSpan("m,%m", ts3, "{0:%m}", "8"); testCustomTimeSpan("m,%m", ts3, "{0:h\\:m}", "14:8"); testCustomTimeSpan("mm", ts3, "{0:mm}", "08"); testCustomTimeSpan("mm", ts4, "{0:d\\.hh\\:mm\\:ss}", "6.08:05:17"); var ts5 = new TimeSpan(0, 0, 0, 12, 965); testCustomTimeSpan("s,%s", ts5, "{0:%s}", "12"); testCustomTimeSpan("s,%s", ts5, "{0:s\\.fff}", "12.965"); var ts6 = new TimeSpan(0, 0, 0, 6, 965); testCustomTimeSpan("ss", ts6, "{0:ss}", "06"); testCustomTimeSpan("ss", ts6, "{0:ss\\.fff}", "06.965"); var ts7 = new TimeSpan(0, 0, 0, 6, 895); testCustomTimeSpan("f,%f", ts7, "{0:f}", "8"); testCustomTimeSpan("f,%f", ts7, "{0:ss\\.f}", "06.8"); testCustomTimeSpan("ff", ts7, "{0:ff}", "89"); testCustomTimeSpan("ff", ts7, "{0:ss\\.ff}", "06.89"); testCustomTimeSpan("fff", ts7, "{0:fff}", "895"); testCustomTimeSpan("fff", ts7, "{0:ss\\.fff}", "06.895"); testCustomTimeSpan("ffff", ts7, "{0:ffff}", "8950"); testCustomTimeSpan("ffff", ts7, "{0:ss\\.ffff}", "06.8950"); testCustomTimeSpan("F,%F", ts7, "{0:%F}", "8"); testCustomTimeSpan("F,%F", ts7, "{0:ss\\.F}", "06.8"); testCustomTimeSpan("FF", ts7, "{0:FF}", "89"); testCustomTimeSpan("FF", ts7, "{0:ss\\.FF}", "06.89"); testCustomTimeSpan("FFF", ts7, "{0:FFF}", "895"); testCustomTimeSpan("FFF", ts7, "{0:ss\\.FFF}", "06.895"); testCustomTimeSpan("FFFF", ts7, "{0:FFFF}", "895"); testCustomTimeSpan("FFFF", ts7, "{0:ss\\.FFFF}", "06.895"); }); test("Number: Currency", () => { ft("{0:c}", 123.456, "$123.46"); ft("{0:C}", 123.456, "$123.46"); ft("{0:c3}", 123.456, "$123.456"); ft("{0:C3}", 123.456, "$123.456"); ft("{0:c3}", -123.456, "($123.456)"); ft("{0:C3}", -123.456, "($123.456)"); }); test("Number: Decimal", () => { ft("{0:d}", 1234, "1234"); ft("{0:D}", 1234, "1234"); ft("{0:d}", -1234, "-1234"); ft("{0:D}", -1234, "-1234"); ft("{0:d6}", -1234, "-001234"); ft("{0:D6}", -1234, "-001234"); }); test("Number: Exponential", () => { ft("{0:e}", 1052.0329112756, "1.052033e+003"); ft("{0:E}", 1052.0329112756, "1.052033E+003"); ft("{0:e}", -1052.0329112756, "-1.052033e+003"); ft("{0:E}", -1052.0329112756, "-1.052033E+003"); ft("{0:e2}", -1052.0329112756, "-1.05e+003"); ft("{0:E2}", -1052.0329112756, "-1.05E+003"); }); test("Number: Fixed-point", () => { ft("{0:f}", 1234.567, "1234.57"); ft("{0:F}", 1234.567, "1234.57"); ft("{0:f1}", 1234, "1234.0"); ft("{0:F1}", 1234, "1234.0"); ft("{0:f4}", -1234.56, "-1234.5600"); ft("{0:F4}", -1234.56, "-1234.5600"); }); test("Number: General", () => { ft("{0:g}", -123.456, "-123.456"); ft("{0:G}", -123.456, "-123.456"); ft("{0:g4}", 123.4546, "123.5"); ft("{0:G4}", 123.4546, "123.5"); }); test("Number: Number", () => { ft("{0:n}", 1234.567, "1,234.57"); ft("{0:N}", 1234.567, "1,234.57"); ft("{0:n1}", 1234, "1,234.0"); ft("{0:N1}", 1234, "1,234.0"); ft("{0:n3}", -1234.56, "-1,234.560"); ft("{0:N3}", -1234.56, "-1,234.560"); }); test("Number: Percent", () => { ft("{0:p}", 1, "100.00 %"); ft("{0:P}", 1, "100.00 %"); ft("{0:p0}", 0.39678, "40 %"); ft("{0:P0}", 0.39678, "40 %"); ft("{0:p1}", -0.39678, "-39.7 %"); ft("{0:P1}", -0.39678, "-39.7 %"); }); test("Number: Hexadecimal", () => { ft("{0:x}", -1, "ff"); ft("{0:X}", -1, "FF"); ft("{0:x}", 255, "ff"); ft("{0:X}", 255, "FF"); ft("{0:x4}", 255, "00ff"); ft("{0:X4}", 255, "00FF"); ft("{0:x4}", -1, "ffff"); ft("{0:X4}", -1, "FFFF"); }); test("Interpolation", () => { var interp = Fayde.Localization.Format("Testing {0} {1} {2}", 1, 2, 3); strictEqual(interp, "Testing 1 2 3"); }); } ================================================ FILE: test/tests/ItemContainersManager.ts ================================================ import DependencyObject = Fayde.DependencyObject; import FrameworkElement = Fayde.FrameworkElement; import ContentControl = Fayde.Controls.ContentControl; import ItemContainersManager = Fayde.Controls.Internal.ItemContainersManager; import ListBoxItem = Fayde.Controls.ListBoxItem; export function load() { QUnit.module("ItemContainersManager"); var owner: Fayde.Controls.Internal.IItemContainersOwner = { PrepareContainerForItem: function (container: Fayde.UIElement, item: any) { if (!container) return; if (container === item) return; var cc = container; if (cc instanceof ContentControl) cc.Content = item; }, ClearContainerForItem: function (container: Fayde.UIElement, item: any) { }, GetContainerForItem: function (): Fayde.UIElement { return new ContentControl(); }, IsItemItsOwnContainer: function (item: any): boolean { return item instanceof FrameworkElement; } }; test("Enumerator-Full", () => { var icm = new ItemContainersManager(owner); icm.OnItemsAdded(0, [1, 2, 3, 4, 5]); var count = 0; for (var i = 0, enumerator = icm.GetEnumerator(0, 5); enumerator.moveNext(); i++) { strictEqual(enumerator.CurrentItem, i + 1); strictEqual(enumerator.CurrentIndex, i); count++; } strictEqual(count, 5); }); test("Enumerator-Partial", () => { var icm = new ItemContainersManager(owner); icm.OnItemsAdded(0, [1, 2, 3, 4, 5]); var count = 0; for (var i = 2, enumerator = icm.GetEnumerator(2, 2); enumerator.moveNext(); i++) { strictEqual(enumerator.CurrentItem, i + 1); strictEqual(enumerator.CurrentIndex, i); count++; } strictEqual(count, 2); }); test("Enumerator-Overlap", () => { var icm = new ItemContainersManager(owner); icm.OnItemsAdded(0, [1, 2, 3, 4, 5]); var count = 0; for (var i = 4, enumerator = icm.GetEnumerator(4, 2); enumerator.moveNext(); i++) { strictEqual(enumerator.CurrentItem, i + 1); strictEqual(enumerator.CurrentIndex, i); count++; } strictEqual(count, 1); }); test("Generator-ItemsSource", () => { var icm = new ItemContainersManager(owner); icm.OnItemsAdded(0, [1, 2, 3, 4, 5]); for (var i = 0, generator = icm.CreateGenerator(0, 5); generator.Generate(); i++) { ok(generator.Current instanceof ContentControl); if (generator.IsCurrentNew) owner.PrepareContainerForItem(generator.Current, generator.CurrentItem); strictEqual((generator.Current).Content, generator.CurrentItem); strictEqual(generator.CurrentItem, i + 1); strictEqual(generator.CurrentIndex, i); } }); test("Generator-Items", () => { var icm = new ItemContainersManager(owner); var lbi1 = new ListBoxItem(); lbi1.Content = "ListBoxItem1"; var lbi2 = new ListBoxItem(); lbi1.Content = "ListBoxItem2"; var lbi3 = new ListBoxItem(); lbi1.Content = "ListBoxItem3"; var items = [lbi1, lbi2, lbi3]; icm.OnItemsAdded(0, items); for (var i = 0, generator = icm.CreateGenerator(0, 5); generator.Generate(); i++) { strictEqual(generator.GenerateIndex, i); ok(generator.Current instanceof ContentControl); if (generator.IsCurrentNew) owner.PrepareContainerForItem(generator.Current, generator.CurrentItem); strictEqual(generator.CurrentItem, items[i]); strictEqual(generator.CurrentIndex, i); } }); test("Generator-Existing", () => { var icm = new ItemContainersManager(owner); icm.OnItemsAdded(0, [1, 2, 3, 4, 5]); for (var i = 0, generator = icm.CreateGenerator(0, 3); generator.Generate(); i++) { //Create 0,1,2 } for (var i = 0, generator = icm.CreateGenerator(2, 3); generator.Generate(); i++) { strictEqual(generator.GenerateIndex, i); //Create 2,3,4 (2 is the only one that should exist already) ok(generator.IsCurrentNew === (i > 0)); } }); } ================================================ FILE: test/tests/LinearGradientBrush.ts ================================================ export function load() { QUnit.module("LinearGradientBrush"); test("LinearGradientBrush", () => { var radBrush = new Fayde.Media.LinearGradientBrush(); var g1 = new Fayde.Media.GradientStop(); g1.Offset = 0.982; radBrush.GradientStops.Add(g1); var canvas = document.createElement('canvas').getContext('2d'); var bounds = new minerva.Rect(); bounds.width = 10; bounds.height = 10; bounds.x = 1; bounds.y = 1; var pad = radBrush.CreatePad(canvas, bounds); ok(pad, "Pad should be ok even when no gradient stop color is passed."); }); } ================================================ FILE: test/tests/MVVM/AutoModel.ts ================================================ import Entity = Fayde.MVVM.Entity; import IEntity = Fayde.MVVM.IEntity; import AutoModel = Fayde.MVVM.AutoModel; class Person extends Entity { FirstName: string; LastName: string; Age: number = 10; } AutoModel(Person) .Notify("FirstName", "LastName", "Age") .Validate("FirstName", required) .Validate("Age", ageValidation) .Finish(); function required (value: any, propertyName: string, entity: any): any[] { if (value == null || value === "") return [propertyName + " is required."]; } function ageValidation (value: any, propertyName: string, entity: any): any[] { if (value == null) return [propertyName + " is required."]; if (value <= 0) return [propertyName + " must be greater than 0."]; } function toArray (errors: nullstone.IEnumerable): string[] { return errors ? nullstone.IEnumerable_.toArray(errors) : null; } interface IUser { UserName: string; } interface IUserEntity extends IUser, IEntity { } export function load () { QUnit.module("MVVM/AutoModel"); QUnit.test("Initial", (assert) => { var person = new Person(); var changed = {}; person.PropertyChanged.on((sender, args) => changed[args.PropertyName] = (changed[args.PropertyName] || 0) + 1, {}); person.Age = null; strictEqual(changed["Age"], 1); deepEqual(toArray(person.GetErrors("Age")), ["Age is required."]); person.Age = -1; strictEqual(changed["Age"], 2); deepEqual(toArray(person.GetErrors("Age")), ["Age must be greater than 0."]); person.Age = 10; strictEqual(changed["Age"], 3); equal(person.GetErrors("Age"), null); }); QUnit.test("Apply", (assert) => { var user: IUser = { UserName: "BSick7" }; var entity = Entity.ApplyTo(user); AutoModel(entity) .Notify(["UserName"]) .Validate("UserName", required) .Finish(); strictEqual(entity.UserName, "BSick7"); var changed = {}; entity.PropertyChanged.on((sender, args) => changed[args.PropertyName] = (changed[args.PropertyName] || 0) + 1, {}); entity.UserName = null; strictEqual(changed["UserName"], 1); deepEqual(toArray(entity.GetErrors("UserName")), ["UserName is required."]); entity.UserName = "BSick7"; strictEqual(changed["UserName"], 2); equal(entity.GetErrors("UserName"), null); }); } ================================================ FILE: test/tests/Markup/Basic.ts ================================================ import TestControl = require('../../mocks/TestControl'); export function load () { QUnit.module("Markup/Basic"); test("Valid XAML Document", () => { try { var xaml = ""; var root = Fayde.Markup.LoadXaml(null, xaml); ok(false, "An error should let us know that there is no valid default namespace."); } catch (err) { ok(err instanceof XamlParseException, "An error should let us know that there is no valid default namespace."); } }); test("Basic Load", () => { var xaml = ""; var root = Fayde.Markup.LoadXaml(null, xaml); strictEqual((root).constructor, Fayde.Controls.Border, "Root Object should be a Border."); equal(root.Child, null, "Border should not have a child."); }); test("Basic attribute", () => { var xaml = ""; var root = Fayde.Markup.LoadXaml(null, xaml); strictEqual(root.Text, "Testing!", "TextBlock should have Text property set to 'Testing!'."); strictEqual(root.HorizontalAlignment, Fayde.HorizontalAlignment.Right, "Enum Attribute"); }); test("Simple tag", () => { var xaml = "" + "" + "" + "" + "#AABBCC" + "" + "" + "" + ""; var sp = Fayde.Markup.LoadXaml(null, xaml); var bg = sp.Background; strictEqual(bg.Color.ToHexStringNoAlpha(), "#aabbcc", "Color"); }); test("Empty property value", () => { var xaml = "" + "" + "" + "" + ""; try { var sp = Fayde.Markup.LoadXaml(null, xaml); ok(true); } catch (err) { ok(false, err); } }); test("Enum tag", () => { var xaml = "" + "" + "Horizontal" + "" + ""; var sp = Fayde.Markup.LoadXaml(null, xaml); strictEqual(sp.Orientation, Fayde.Orientation.Horizontal, "Orientation"); }); } ================================================ FILE: test/tests/Markup/Controls.ts ================================================ import Grid = Fayde.Controls.Grid; import GridLength = Fayde.Controls.GridLength; import GridUnitType = minerva.controls.grid.GridUnitType; export function load () { QUnit.module("Markup/Controls"); var nsdecl = 'xmlns="' + Fayde.XMLNS + '" xmlns:x="' + Fayde.XMLNSX + '"'; test("Border with Child", () => { var xaml = ""; var root = Fayde.Markup.LoadXaml(null, xaml); var child = root.Child; strictEqual((child).constructor, Fayde.Controls.TextBlock, "Border Child should be a TextBlock."); strictEqual(child.Text, "Hey!", "Border Child should have Text property set to 'Hey!'"); }); test("Panel with Children", () => { var xaml = ""; var root = Fayde.Markup.LoadXaml(null, xaml); strictEqual(root.Children.Count, 2, "There should be 2 children in StackPanel."); var child1 = root.Children.GetValueAt(0); var child2 = root.Children.GetValueAt(1); strictEqual((child1).constructor, Fayde.Controls.Border, "First child should be a Border."); strictEqual((child2).constructor, Fayde.Controls.TextBlock, "Second child should be a TextBlock."); }); test("ContentControl", () => { var xaml = "Hey"; var checkbox = Fayde.Markup.LoadXaml(null, xaml); strictEqual(checkbox.Content, "Hey", "Text Content"); }); test("TextBlock Text", () => { var xaml = "Hey"; var tb = Fayde.Markup.LoadXaml(null, xaml); strictEqual(tb.Text, "Hey", "Text Content"); }); test("ControlTemplate", () => { var xaml = "" + "" + ""; var ct: Fayde.Controls.ControlTemplate; try { ct = Fayde.Markup.LoadXaml(null, xaml); ok(false, "Loading a ControlTemplate should error if no TargetType is specified."); } catch (err) { ok(err instanceof XamlParseException, "Loading a ControlTemplate should error if no TargetType is specified."); } xaml = "" + "" + ""; try { ct = Fayde.Markup.LoadXaml(null, xaml); ok(true, "Loading a ControlTemplate with a TargetType should succeed."); } catch (err) { ok(false, "Loading a ControlTemplate with a TargetType should succeed."); } strictEqual((ct).constructor, Fayde.Controls.ControlTemplate, "Template should be a ControlTemplate."); strictEqual(ct.TargetType, Fayde.Controls.Control, "ControlTemplate.TargetType should be Control."); var visual = ct.GetVisualTree(null); strictEqual((visual).constructor, Fayde.Controls.Grid, "Root visual from created visual tree should be a Grid."); }); test("ItemsPanelTemplate", () => { var xaml = "" + "" + ""; var ipt: Fayde.Controls.ItemsPanelTemplate; try { ipt = Fayde.Markup.LoadXaml(null, xaml); var tempPanel = ipt.GetVisualTree(null); ok(false, "Getting the visual tree for an ItemsPanelTemplate with a non-Panel root visual should error."); } catch (err) { ok(err instanceof XamlParseException, "Getting the visual tree for an ItemsPanelTemplate with a non-Panel root visual should error."); } xaml = "" + "" + ""; try { ipt = Fayde.Markup.LoadXaml(null, xaml); } catch (err) { ok(false, "Loading a ItemsPanelTemplate should not error. " + err.toString()); } strictEqual((ipt).constructor, Fayde.Controls.ItemsPanelTemplate, "Resulting object should be a ItemsPanelTemplate."); var visual = ipt.GetVisualTree(null); strictEqual((visual).constructor, Fayde.Controls.Grid, "Root visual from created visual tree should be a Grid."); }); test("Terse Grid Cols/Rows", () => { var xaml = ""; var grid = Fayde.Markup.LoadXaml(null, xaml); var cols = grid.ColumnDefinitions.ToArray(); strictEqual(cols.length, 3); deepEqual(cols[0].Width, new GridLength(0, GridUnitType.Auto)); deepEqual(cols[1].Width, new GridLength(200, GridUnitType.Pixel)); deepEqual(cols[2].Width, new GridLength(1, GridUnitType.Star)); var rows = grid.RowDefinitions.ToArray(); deepEqual(rows[0].Height, new GridLength(100, GridUnitType.Pixel)); deepEqual(rows[1].Height, new GridLength(1, GridUnitType.Star)); deepEqual(rows[2].Height, new GridLength(0, GridUnitType.Auto)); }); } ================================================ FILE: test/tests/Markup/Framework.ts ================================================ export function load () { QUnit.module("Markup/Framework"); var nsdecl = "xmlns=\"" + Fayde.XMLNS + "\" xmlns:x=\"" + Fayde.XMLNSX + "\""; test("Style", () => { var xaml = "" + "" + "" + "" + ""; var root = Fayde.Markup.LoadXaml(null, xaml); var resources = root.Resources; var style = resources.Get("SomeStyle"); style.Seal(); strictEqual(style.TargetType, Fayde.Controls.Button, "TargetType on Style should be set to Button."); var setters = style.Setters; strictEqual(setters.Count, 1, "There should be 1 setter in the Style."); var setter = setters.GetValueAt(0); strictEqual(setter.Property, Fayde.FrameworkElement.MarginProperty, "Setter Property should be Margin property."); deepEqual(setter.ConvertedValue, new Thickness(1, 1, 1, 1), "Setter Value should be a Thickness (1, 1, 1, 1).") xaml = "" + "" + "" + "" + ""; try { root = Fayde.Markup.LoadXaml(null, xaml); ok(false, "Loading a style without a TargetType should fail."); } catch (err) { ok(err instanceof XamlParseException, "Error from loading a Style without a TargetType should be a XamlParseException."); strictEqual(err.Message, "Style must have a TargetType."); } }); test("Setter+Template Binding", () => { var xaml = "" + "" + "" + "" + ""; var checkbox = Fayde.Markup.LoadXaml(null, xaml); checkbox.ApplyTemplate(); var cp = Fayde.VisualTreeHelper.GetChild(checkbox, 0); strictEqual(cp.HorizontalAlignment, Fayde.HorizontalAlignment.Right, "HorizontalAlignment"); xaml = "" + "" + "" + "" + ""; checkbox = Fayde.Markup.LoadXaml(null, xaml); checkbox.ApplyTemplate(); var r = Fayde.VisualTreeHelper.GetChild(checkbox, 0); strictEqual(r.StrokeThickness, 1, "StrokeThickness"); }); test("HierarchicalDataTemplate", () => { var xaml = "" + "" + ""; var hdt: Fayde.HierarchicalDataTemplate; try { hdt = Fayde.Markup.LoadXaml(null, xaml); } catch (err) { ok(false, "Loading a HierarchicalDataTemplate should not error. " + err.toString()); } strictEqual((hdt).constructor, Fayde.HierarchicalDataTemplate, "Resulting object should be a HierarchicalDataTemplate."); var isexpr = hdt.GetBindingExpression(Fayde.HierarchicalDataTemplate.ItemsSourceProperty); ok(isexpr, "HierarchicalDataTemplate.ItemsSource should have a BindingExpression."); strictEqual(isexpr.ParentBinding.Path.Path, "SomePath", "BindingExpression.ParentBinding should have `Path=SomePath`."); var visual = hdt.GetVisualTree(null); strictEqual((visual).constructor, Fayde.Controls.Grid, "Root visual from created visual tree should be a Grid."); }); test("String to Collection conversion", () => { var xaml = ""; var pg = Fayde.Markup.LoadXaml(null, xaml); strictEqual(pg.Points.Count, 4); var actual = nullstone.IEnumerable_.toArray(pg.Points); deepEqual(actual, [ new Point(0, 0), new Point(100, 0), new Point(100, 100), new Point(0, 100) ]); }); } ================================================ FILE: test/tests/Markup/Media.ts ================================================ import TestControl = require('../../mocks/TestControl'); export function load () { QUnit.module("Markup/Media"); test("VisualStateManager", () => { var xaml = "" + "" + "" + "" + "" + " " + "" + "" + "" + ""; var root = Fayde.Markup.LoadXaml(null, xaml); var groups = Fayde.Media.VSM.VisualStateManager.GetVisualStateGroups(root); strictEqual((groups).constructor, Fayde.Media.VSM.VisualStateGroupCollection, "VisualStateGroups on Grid should be a VisualStateGroupCollection."); strictEqual(groups.Count, 1, "There should be 1 VisualStateGroup in collection."); var states = groups.GetValueAt(0).States; strictEqual(states.Count, 2); var storyboard = states.GetValueAt(0).Storyboard; ok(storyboard == null || storyboard instanceof Fayde.Media.Animation.Storyboard); storyboard = states.GetValueAt(1).Storyboard; ok(storyboard == null || storyboard instanceof Fayde.Media.Animation.Storyboard); }); } ================================================ FILE: test/tests/Markup/Resources.ts ================================================ export function load () { QUnit.module("Markup/Resources"); var nsdecl = "xmlns=\"" + Fayde.XMLNS + "\" xmlns:x=\"" + Fayde.XMLNSX + "\""; test("FrameworkElement Resources", () => { var xaml = "" + "" + "1,2,3,4" + "" + ""; var root = Fayde.Markup.LoadXaml(null, xaml); var resources = root.Resources; ok(resources.Contains("SomeThickness"), "Resources should contain a resource with a key 'SomeThickness'"); var thickness = resources.Get("SomeThickness"); strictEqual(thickness.left, 1, "Thickness.Left must equal 1 and not \"1\"."); strictEqual(thickness.top, 2, "Thickness.Top must equal 2 and not \"2\"."); strictEqual(thickness.right, 3, "Thickness.Right must equal 3 and not \"3\"."); strictEqual(thickness.bottom, 4, "Thickness.Bottom must equal 4 and not \"4\"."); }); test("Explicit Resources", () => { var xaml = "\ \ \ \ \ \ \ "; var grid = Fayde.Markup.LoadXaml(null, xaml); var scb = grid.Resources.Get("SomeColor"); deepEqual(scb.Color, Color.KnownColors.Yellow); }); test("StaticResource external context", () => { var xaml = "\ \ \ \ \ \ \ \ \ "; var grid = Fayde.Markup.LoadXaml(null, xaml); var dt = grid.Resources.Get("SomeTemplate"); var grid2 = dt.GetVisualTree(grid); ok(grid2.Background instanceof Fayde.Media.SolidColorBrush); var scb = grid2.Background; deepEqual(scb.Color, Color.KnownColors.Yellow); }); asyncTest("ResourceDictionary.Source", () => { Fayde.Markup.Resolve("mocks/BaseTest.xml") .then(xm => { QUnit.start(); var rd = Fayde.Markup.Load(null, xm); deepEqual(rd.Get("AnotherColor"), Color.FromHex("#FF001100")); deepEqual(rd.Get("TestColor"), Color.FromHex("#FF110000")); }, err => { QUnit.start(); ok(false, err); }); }); } ================================================ FILE: test/tests/MarkupExpression.ts ================================================ import TestConverter = require('../mocks/TestConverter'); export function load () { QUnit.module("MarkupExpression"); test("x:Null", () => { var xaml = ""; var border = Fayde.Markup.LoadXaml(null, xaml); strictEqual(border.Tag, null, "x:Null"); }); test("x:Type", () => { var xaml = ""; var grid = Fayde.Markup.LoadXaml(null, xaml); strictEqual(grid.Tag, Fayde.Controls.Border, "x:Type"); }); test("x:Static", () => { (window).TestConverter = TestConverter; var xaml = ""; var grid = Fayde.Markup.LoadXaml(null, xaml); ok(grid.Tag instanceof TestConverter, "x:Static"); }); test("TemplateBinding", () => { var xaml = "" + "" + "" + "" + ""; var grid = Fayde.Markup.LoadXaml(null, xaml); var style = grid.Resources.Get("SomeStyle"); style.Seal(); var setter = style.Setters.GetValueAt(0); var template = setter.ConvertedValue; var button = new Fayde.Controls.Button(); var border = template.GetVisualTree(button); button.Padding = new Thickness(1, 2, 3, 4); deepEqual(border.Margin, button.Padding, "After"); }); test("StaticResource", () => { var xaml = "" + "" + "1,2,3,4" + "" + "" + ""; var grid = Fayde.Markup.LoadXaml(null, xaml); var border = grid.Children.GetValueAt(0); deepEqual(border.Margin, new Thickness(1, 2, 3, 4), "Value"); }); test("Binding", () => { var xaml = ""; var grid = Fayde.Markup.LoadXaml(null, xaml); var expr = grid.GetBindingExpression(Fayde.FrameworkElement.MarginProperty); ok(expr instanceof Fayde.Data.BindingExpression, "Type"); var binding = expr.ParentBinding; strictEqual(binding.Path.Path, "TestPath", "Implicit Path"); xaml = ""; grid = Fayde.Markup.LoadXaml(null, xaml); expr = grid.GetBindingExpression(Fayde.FrameworkElement.MarginProperty); binding = expr.ParentBinding; strictEqual(binding.Path.Path, "TestPath", "Explicit Path"); xaml = "" + "" + "" + "" + ""; var combobox = Fayde.Markup.LoadXaml(null, xaml); expr = combobox.GetBindingExpression(Fayde.Controls.Primitives.Selector.SelectedItemProperty); binding = expr.ParentBinding; strictEqual(binding.Path.Path, "TestPath", "Implicit Path"); strictEqual(binding.Mode, Fayde.Data.BindingMode.TwoWay, "Mode"); strictEqual(binding.UpdateSourceTrigger, Fayde.Data.UpdateSourceTrigger.Explicit, "UpdateSourceTrigger"); ok(binding.Converter instanceof TestConverter, "Converter"); xaml = ""; grid = Fayde.Markup.LoadXaml(null, xaml); expr = grid.GetBindingExpression(Fayde.FrameworkElement.MarginProperty); binding = expr.ParentBinding; var rs = binding.RelativeSource; strictEqual(rs.Mode, Fayde.Data.RelativeSourceMode.TemplatedParent, "Mode"); }); test("EventBinding", () => { var methodcalled = false; var vm = { TestMethod: function (e: Fayde.IEventBindingArgs) { methodcalled = true; } }; var xaml = "" + " true