From 61372cb5ab4e2ae93107b86b4c7317ae5fd9c7fa Mon Sep 17 00:00:00 2001 From: jvilalta Date: Thu, 10 Mar 2011 18:57:40 -0600 Subject: [PATCH] adding support for multiple schedulers. need to test --- .../ClickForensics.Quartz.Manager.csproj | 390 +- .../MainForm.Designer.cs | 39 - ClickForensics.Quartz.Manager/MainForm.cs | 166 +- ClickForensics.Quartz.Manager/packages.config | 4 + packages/log4net.1.2.10/lib/1.0/log4net.dll | Bin 0 -> 266240 bytes packages/log4net.1.2.10/lib/1.0/log4net.xml | 28655 ++++++++++++++++ packages/log4net.1.2.10/lib/1.1/log4net.dll | Bin 0 -> 266240 bytes packages/log4net.1.2.10/lib/1.1/log4net.xml | 28655 ++++++++++++++++ packages/log4net.1.2.10/lib/2.0/log4net.dll | Bin 0 -> 270336 bytes packages/log4net.1.2.10/lib/2.0/log4net.xml | 28655 ++++++++++++++++ packages/log4net.1.2.10/log4net.1.2.10.nupkg | Bin 0 -> 963871 bytes packages/repositories.config | 4 + 12 files changed, 86246 insertions(+), 322 deletions(-) create mode 100644 ClickForensics.Quartz.Manager/packages.config create mode 100644 packages/log4net.1.2.10/lib/1.0/log4net.dll create mode 100644 packages/log4net.1.2.10/lib/1.0/log4net.xml create mode 100644 packages/log4net.1.2.10/lib/1.1/log4net.dll create mode 100644 packages/log4net.1.2.10/lib/1.1/log4net.xml create mode 100644 packages/log4net.1.2.10/lib/2.0/log4net.dll create mode 100644 packages/log4net.1.2.10/lib/2.0/log4net.xml create mode 100644 packages/log4net.1.2.10/log4net.1.2.10.nupkg create mode 100644 packages/repositories.config diff --git a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj index 9ce14cc..f753614 100644 --- a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj +++ b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj @@ -1,93 +1,96 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {D23DACFA-11A1-480E-A6C4-1F37B564523D} - WinExe - Properties - ClickForensics.Quartz.Manager - ClickForensics.Quartz.Manager - v4.0 - 512 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\lib\Common.Logging.dll - - - False - ..\..\quartznet\build\4.0\Debug\Quartz.Server\Quartz.dll - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - Form - - - AddJobForm.cs - - - Form - - - AddListenerForm.cs - + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D23DACFA-11A1-480E-A6C4-1F37B564523D} + WinExe + Properties + ClickForensics.Quartz.Manager + ClickForensics.Quartz.Manager + v4.0 + 512 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\lib\Common.Logging.dll + + + ..\packages\log4net.1.2.10\lib\2.0\log4net.dll + + + False + ..\..\quartznet\build\4.0\Debug\Quartz.Server\Quartz.dll + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + AddJobForm.cs + + + Form + + + AddListenerForm.cs + @@ -102,120 +105,121 @@ SimpleTriggerDisplay.cs - - Form - - - ErrorDialog.cs - - - - UserControl - - - NativeJobDetailDisplay.cs - - - - Form - - - MainForm.cs - - - - - AddJobForm.cs - - - AddListenerForm.cs - + + Form + + + ErrorDialog.cs + + + + UserControl + + + NativeJobDetailDisplay.cs + + + + Form + + + MainForm.cs + + + + + AddJobForm.cs + + + AddListenerForm.cs + DeleteAssembliesForm.cs SimpleTriggerDisplay.cs - - CronTriggerDisplay.cs - - - ErrorDialog.cs - - - MainForm.cs - - - NativeJobDetailDisplay.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - ServerConnectForm.cs - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - + + CronTriggerDisplay.cs + + + ErrorDialog.cs + + + MainForm.cs + + + NativeJobDetailDisplay.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + ServerConnectForm.cs + + + True + Resources.resx + True + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + - - - Form - - - ServerConnectForm.cs - - - UserControl - - - CronTriggerDisplay.cs - - - - - - PreserveNewest - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - + + + Form + + + ServerConnectForm.cs + + + UserControl + + + CronTriggerDisplay.cs + + + + + + PreserveNewest + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + --> \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/MainForm.Designer.cs b/ClickForensics.Quartz.Manager/MainForm.Designer.cs index 530f165..1d4c733 100644 --- a/ClickForensics.Quartz.Manager/MainForm.Designer.cs +++ b/ClickForensics.Quartz.Manager/MainForm.Designer.cs @@ -112,45 +112,6 @@ this.addJobToolStripMenuItem.Text = "Add"; this.addJobToolStripMenuItem.Click += new System.EventHandler(this.addJobToolStripMenuItem_Click); // - // listenersStripMenuItem - // - this.listenersStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.globalListenersToolStripMenuItem, - this.addJobListenerToolStripMenuItem}); - this.listenersStripMenuItem.Enabled = false; - this.listenersStripMenuItem.Name = "listenersStripMenuItem"; - this.listenersStripMenuItem.Size = new System.Drawing.Size(65, 20); - this.listenersStripMenuItem.Text = "Listeners"; - // - // globalListenersToolStripMenuItem - // - this.globalListenersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.addGlobalJobListenerToolStripMenuItem, - this.addTriggerListenerToolStripMenuItem}); - this.globalListenersToolStripMenuItem.Name = "globalListenersToolStripMenuItem"; - this.globalListenersToolStripMenuItem.Size = new System.Drawing.Size(161, 22); - this.globalListenersToolStripMenuItem.Text = "Global"; - // - // addGlobalJobListenerToolStripMenuItem - // - this.addGlobalJobListenerToolStripMenuItem.Name = "addGlobalJobListenerToolStripMenuItem"; - this.addGlobalJobListenerToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.addGlobalJobListenerToolStripMenuItem.Text = "Add Job Listener"; - this.addGlobalJobListenerToolStripMenuItem.Click += new System.EventHandler(this.addGlobalListenerToolStripMenuItem_Click); - // - // addTriggerListenerToolStripMenuItem - // - this.addTriggerListenerToolStripMenuItem.Name = "addTriggerListenerToolStripMenuItem"; - this.addTriggerListenerToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.addTriggerListenerToolStripMenuItem.Text = "Add Trigger Listener"; - // - // addJobListenerToolStripMenuItem - // - this.addJobListenerToolStripMenuItem.Name = "addJobListenerToolStripMenuItem"; - this.addJobListenerToolStripMenuItem.Size = new System.Drawing.Size(161, 22); - this.addJobListenerToolStripMenuItem.Text = "Add Job Listener"; - this.addJobListenerToolStripMenuItem.Click += new System.EventHandler(this.addJobListenerToolStripMenuItem_Click); - // // statusStrip1 // this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { diff --git a/ClickForensics.Quartz.Manager/MainForm.cs b/ClickForensics.Quartz.Manager/MainForm.cs index e525367..66bd3cc 100644 --- a/ClickForensics.Quartz.Manager/MainForm.cs +++ b/ClickForensics.Quartz.Manager/MainForm.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Reflection; using System.Text; using System.Windows.Forms; +using Common.Logging; using Quartz; using Quartz.Collection; using System.Net.Sockets; @@ -24,14 +25,7 @@ namespace ClickForensics.Quartz.Manager { InitializeComponent(); jobGroupsTreeView.AfterSelect += new TreeViewEventHandler(jobGroupsTreeView_AfterSelect); - ctxScheduler.Opening += new CancelEventHandler(ctxScheduler_Opening); jobGroupsTreeView.MouseDown += new MouseEventHandler(jobGroupsTreeView_MouseDown); - - } - - void ctxScheduler_Opening(object sender, CancelEventArgs e) - { - } void jobGroupsTreeView_AfterSelect(object sender, TreeViewEventArgs e) @@ -83,7 +77,8 @@ namespace ClickForensics.Quartz.Manager private void setPauseButtonText() { TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; - if (Scheduler.GetScheduler().GetTriggerState(node.Trigger.Key) == TriggerState.Paused) + QuartzScheduler scheduler = getScheduler(node); + if (scheduler.GetScheduler().GetTriggerState(node.Trigger.Key) == TriggerState.Paused) { btnPause.Text = "Resume"; } @@ -102,11 +97,11 @@ namespace ClickForensics.Quartz.Manager { try { - Scheduler = new QuartzScheduler(form.Server, form.Port, form.Scheduler); - serverConnectStatusLabel.Text = string.Format("Connected to {0}", Scheduler.Address); + QuartzScheduler scheduler = new QuartzScheduler(form.Server, form.Port, form.Scheduler); + serverConnectStatusLabel.Text = string.Format("Connected to {0}", scheduler.Address); connectToolStripMenuItem.Enabled = false; jobsToolStripMenuItem.Enabled = true; - loadJobGroups(); + loadJobGroups(scheduler); updateRunningJobs(); } catch (SocketException ex) @@ -119,18 +114,9 @@ namespace ClickForensics.Quartz.Manager } form.Close(); } - //loadGlobalTriggers(); } - //private void loadGlobalTriggers() - //{ - // foreach (IJobListener jobListener in Scheduler.GetScheduler().GetJobDetail(null,null)..GlobalJobListeners) - // { - // globalTriggersListView.Items.Add(jobListener.Name); - // } - //} - - private void loadJobGroups() + private void loadJobGroups(QuartzScheduler scheduler) { try @@ -138,12 +124,17 @@ namespace ClickForensics.Quartz.Manager this.Cursor = Cursors.WaitCursor; jobDetailsToggle(false); - jobGroupsTreeView.Nodes.Clear(); - SchedulerNode schedulerNode = new SchedulerNode(Scheduler); + + SchedulerNode schedulerNode = new SchedulerNode(scheduler); + if (jobGroupsTreeView.Nodes.ContainsKey(schedulerNode.Name)) + { + jobGroupsTreeView.Nodes.RemoveByKey(schedulerNode.Name); + } + schedulerNode.ContextMenuStrip = ctxScheduler; jobGroupsTreeView.Nodes.Add(schedulerNode); TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Job Groups"); - var jobGroups = Scheduler.GetScheduler().GetJobGroupNames(); + var jobGroups = scheduler.GetScheduler().GetJobGroupNames(); foreach (string jobGroup in jobGroups) { TreeNode jobGroupNode = jobGroupsNode.Nodes.Add(jobGroup); @@ -203,6 +194,7 @@ namespace ClickForensics.Quartz.Manager } catch (Exception ex) { + _Log.Error("Error loading orphan jobs.", ex); schedulerNode.Nodes.Add(string.Format("Unable to add job {0})", jobKey.Name)); } } @@ -230,53 +222,35 @@ namespace ClickForensics.Quartz.Manager } } } - //private void loadJobs() - //{ - // foreach (TreeNode node in jobGroupsTreeView.Nodes) - // { - // addJobNodes(node); - // } - //} private void addJobNodes(TreeNode node) { string group = node.Parent.Text; var groupMatcher = GroupMatcher.GroupContains(group); - var jobKeys = Scheduler.GetScheduler().GetJobKeys(groupMatcher); + QuartzScheduler scheduler = getScheduler(node); + var jobKeys = scheduler.GetScheduler().GetJobKeys(groupMatcher); foreach (var jobKey in jobKeys) { try { - IJobDetail detail = Scheduler.GetScheduler().GetJobDetail(jobKey); + IJobDetail detail = scheduler.GetScheduler().GetJobDetail(jobKey); JobNode jobNode = new JobNode(detail); node.Nodes.Add(jobNode); addTriggerNodes(jobNode); - addListenerNodes(jobNode); } catch (Exception ex) { node.Nodes.Add(string.Format("Unknown Job Type ({0})", jobKey.Name)); //TODO: Do something useful with this exception. Most likely cause is the client does not have a copy of a given dll and can't load the type. + _Log.Error("Error loading jobs.", ex); } } } - private void addListenerNodes(JobNode node) - { - string jobName = node.Text; - string jobGroupName = node.Parent.Text; - //TODO: see joblistenermanager get listeners - //string[] listenerNames = node.Detail.JobListenerNames; - //foreach (string listener in listenerNames) - //{ - // node.Text = string.Format("JL {0}", listenerNames); - //} - //ISet set = Scheduler.GetScheduler().JobListenerNames; - } - private void addTriggerNodes(TreeNode treeNode) { - var triggers = Scheduler.GetScheduler().GetTriggersOfJob(new JobKey(treeNode.Text, treeNode.Parent.Parent.Text)); + QuartzScheduler scheduler = getScheduler(treeNode); + var triggers = scheduler.GetScheduler().GetTriggersOfJob(new JobKey(treeNode.Text, treeNode.Parent.Parent.Text)); TreeNode triggersNode = treeNode.Nodes.Add("Triggers"); foreach (var trigger in triggers) { @@ -309,54 +283,42 @@ namespace ClickForensics.Quartz.Manager timer_Refresh_Running_Jobs.Stop(); listView_RunningJobs.Items.Clear(); - - DataTable table = Scheduler.GetRunningJobs(); - foreach (DataRow row in table.Rows) + foreach (var quartzScheduler in getAllSchedulers()) { - //JobName JobDuration - ListViewItem item = new ListViewItem(new string[] { Convert.ToString(row["JobName"]), Convert.ToString(row["Runtime"]) }); - listView_RunningJobs.Items.Add(item); + DataTable table = quartzScheduler.GetRunningJobs(); + foreach (DataRow row in table.Rows) + { + ListViewItem item = + new ListViewItem(new string[] { Convert.ToString(row["JobName"]), Convert.ToString(row["Runtime"]) }); + listView_RunningJobs.Items.Add(item); + } } StripStatusLabel_Jobs_Refresh_date.Text = DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); - - //reset the timer ( documentation not clear if .stop = restart @ 0 in timing, but changing the interval sure should do that. ) int timer_was = timer_Refresh_Running_Jobs.Interval; timer_Refresh_Running_Jobs.Interval = timer_was + 1; timer_Refresh_Running_Jobs.Interval = timer_was; timer_Refresh_Running_Jobs.Start(); } + catch (Exception ex) + { + _Log.Error("Unable to load running jobs", ex); + } finally { this.Cursor = Cursors.Default; } } - public QuartzScheduler Scheduler { get; set; } - - private void addGlobalListenerToolStripMenuItem_Click(object sender, EventArgs e) - { - AddListenerForm form = new AddListenerForm(); - form.ListenerInterface = typeof(IJobListener); - form.ShowDialog(); - JobDataMap map = new JobDataMap(); - map.Add("type", form.ListenerType); - //Scheduler.ScheduleOneTimeJob(typeof(AddJobListenerJob), map, 0); - loadJobGroups(); - } - private void addJobListenerToolStripMenuItem_Click(object sender, EventArgs e) + private List getAllSchedulers() { - TreeNode selectedNode = jobGroupsTreeView.SelectedNode; - if (selectedNode != null && selectedNode is JobNode) + List schedulers = new List(); + foreach (var node in jobGroupsTreeView.Nodes) { - AddListenerForm form = new AddListenerForm(); - form.ListenerInterface = typeof(IJobListener); - form.ShowDialog(); - //JobHistoryListener listener = new JobHistoryListener(); - //listener.Name = null; - //((JobNode)selectedNode).Detail.AddJobListener(); + schedulers.Add(((SchedulerNode)node).Scheduler); } + return schedulers; } private void addJobToolStripMenuItem_Click(object sender, EventArgs e) @@ -365,11 +327,18 @@ namespace ClickForensics.Quartz.Manager form.ShowDialog(); if (form.JobDetail != null && form.Trigger != null) { - Scheduler.GetScheduler().ScheduleJob(form.JobDetail, form.Trigger); - loadJobGroups(); + QuartzScheduler scheduler = getSelectedScheduler(); + scheduler.GetScheduler().ScheduleJob(form.JobDetail, form.Trigger); + loadJobGroups(scheduler); } } + private QuartzScheduler getSelectedScheduler() + { + TreeNode node = jobGroupsTreeView.SelectedNode; + return getScheduler(node); + } + private void btnRefreshRunningJobs_Click(object sender, EventArgs e) { updateRunningJobs(); @@ -377,13 +346,18 @@ namespace ClickForensics.Quartz.Manager private void btnRefreshJobGroups_Click(object sender, EventArgs e) { - loadJobGroups(); + List schedulers = getAllSchedulers(); + foreach (var quartzScheduler in schedulers) + { + loadJobGroups(quartzScheduler); + } } private void btnRunJobNow_Click(object sender, EventArgs e) { JobNode node = (JobNode)jobGroupsTreeView.SelectedNode; - Scheduler.GetScheduler().TriggerJob(node.Detail.Key); + QuartzScheduler scheduler = getScheduler(node); + scheduler.GetScheduler().TriggerJob(node.Detail.Key); } private void btnDeleteJob_Click(object sender, EventArgs e) @@ -392,41 +366,52 @@ namespace ClickForensics.Quartz.Manager if (selectedNode is JobNode) { JobNode node = (JobNode)jobGroupsTreeView.SelectedNode; - Scheduler.GetScheduler().DeleteJob(node.Detail.Key); + QuartzScheduler scheduler = getScheduler(selectedNode); + scheduler.GetScheduler().DeleteJob(node.Detail.Key); jobGroupsTreeView.SelectedNode.Remove(); } if (selectedNode is TriggerNode) { - Scheduler.GetScheduler().UnscheduleJob(((TriggerNode)selectedNode).Trigger.Key); + QuartzScheduler scheduler = getScheduler(selectedNode); + scheduler.GetScheduler().UnscheduleJob(((TriggerNode)selectedNode).Trigger.Key); } - - //loadJobGroups(); } private void btnPause_Click(object sender, EventArgs e) { TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; - if (Scheduler.GetScheduler().GetTriggerState(node.Trigger.Key) == TriggerState.Paused) + QuartzScheduler scheduler = getScheduler(node); + if (scheduler.GetScheduler().GetTriggerState(node.Trigger.Key) == TriggerState.Paused) { - Scheduler.GetScheduler().ResumeTrigger(node.Trigger.Key); + scheduler.GetScheduler().ResumeTrigger(node.Trigger.Key); } else { - Scheduler.GetScheduler().PauseTrigger(node.Trigger.Key); + scheduler.GetScheduler().PauseTrigger(node.Trigger.Key); } setPauseButtonText(); } + private QuartzScheduler getScheduler(TreeNode node) + { + if (node is SchedulerNode) + { + return ((SchedulerNode)node).Scheduler; + } + return getScheduler(node.Parent); + } + private void btnEdit_Click(object sender, EventArgs e) { TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; + QuartzScheduler scheduler = getScheduler(node); AddJobForm form = new AddJobForm(node); form.ShowDialog(); if (form.JobDetail != null && form.Trigger != null) { - Scheduler.GetScheduler().RescheduleJob(node.Trigger.Key, form.Trigger); - loadJobGroups(); + scheduler.GetScheduler().RescheduleJob(node.Trigger.Key, form.Trigger); + loadJobGroups(scheduler); } } @@ -462,6 +447,7 @@ namespace ClickForensics.Quartz.Manager form.Close(); } } + private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); } } diff --git a/ClickForensics.Quartz.Manager/packages.config b/ClickForensics.Quartz.Manager/packages.config new file mode 100644 index 0000000..5f354f1 --- /dev/null +++ b/ClickForensics.Quartz.Manager/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/log4net.1.2.10/lib/1.0/log4net.dll b/packages/log4net.1.2.10/lib/1.0/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..9e8d77bf783890208419ae230fa7b9513bfdb091 GIT binary patch literal 266240 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�%noJ$pK|wo>Cv8p6xc_wr{k|BwwYkQ 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�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 + + + 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 + + + + + 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 true. + + + + 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 . + + + + + Connects 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. + + + + + 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. + + + + + 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. + + + + + 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=;" + + + + + 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. + + + Nicko Cadell + Gert Driesen + + + + 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 + (). + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + 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 EventID of the event log entry can be + set using the EventLogEventID 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 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. + + + + + + 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 model, , only holds a + write lock while the appender is writing a logging event. + + + 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 checked 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. + + + + + + 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 + + + + + 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 two built in locking models, and . + The former locks the file from the start of logging to the end and the + later lock only for the minimal amount of time when logging each message. + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + + 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. + + + + + + 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 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. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + 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 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 semicolon-delimited list of recipient e-mail addresses. + + + 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 + + + + + + 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 passed as the value for the category name to 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 +
+ + + 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. + + + + + 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. + + + + + + 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 + + + + 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 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. + + + + + + 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. + + + + 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 . + + + + + + 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 . + + + + + + 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. + + + + + Watch a specified config file used to configure a repository + + The repository to configure. + The configuration file to watch. + + + Watch a specified config file used to configure a repository + + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Initializes a new instance of the class. + + 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 + + + + 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. + + + + + + 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 . + + + + + 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 + + + + + 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 + + + + + + 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 + + + + + + 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 + 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. + + + + + + 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) + + + + + + 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 . + + + + + + 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 + + + + + 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. + + + + + + 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 object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + 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 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. + + + + + + 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. + + + + + 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 + + + + 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. + + + + + + + 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. + + + + + + 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. + + + + 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 + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + 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. + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration to + pass to the + method. + + + + + + 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. + + + + + + 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. + + + + + Writer adapter that ignores Close + + + + + 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. + + + + + + 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 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 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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 appender + + the appender 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + 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. + + + + + + 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. + + + + + + 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 . + + + + + + 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 . + + + + + + 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 . + + + + + + 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 . + + + + + + 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. + + + + + + + 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. + + + + + + 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 + + + + + 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 + + + + + + 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 . + + + Nicko Cadell + + + + 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 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 + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this 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. + + + + + + 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 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 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 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 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 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. + + + + + 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. + + + + + + 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 printed on the standard error output stream. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + + + + 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. + + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + 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. + + + + + + Flag to indicate if it is the first error + + + + + String to prefix each message with + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + 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 . + + + + 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. + + + + + + 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 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 . + + + + + 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. + + + + + + Wrapper class used to map converter names to converter types + + + + Wrapper class used to map converter names to converter types + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + The name of the conversion pattern + + + + Gets or sets the name of the conversion pattern + + + + + + Gets or sets the type of the converter + + + The type of the converter + + + + Gets or sets the type of the converter + + + + + + 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 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. + + + + + + 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. + + + + + + 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 + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.1.2.10/lib/1.1/log4net.dll b/packages/log4net.1.2.10/lib/1.1/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..995816f27bd1f38f4d6505fd42314e5b3872b3b3 GIT binary patch literal 266240 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 Ni-B1T{J)8T{|UPv&?o=^ literal 0 HcmV?d00001 diff --git a/packages/log4net.1.2.10/lib/1.1/log4net.xml b/packages/log4net.1.2.10/lib/1.1/log4net.xml new file mode 100644 index 0000000..f20322f --- /dev/null +++ b/packages/log4net.1.2.10/lib/1.1/log4net.xml @@ -0,0 +1,28655 @@ + + + + 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 + + + + + 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 true. + + + + 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 . + + + + + Connects 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. + + + + + 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. + + + + + 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. + + + + + 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=;" + + + + + 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. + + + Nicko Cadell + Gert Driesen + + + + 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 + (). + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + 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 EventID of the event log entry can be + set using the EventLogEventID 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 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. + + + + + + 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 model, , only holds a + write lock while the appender is writing a logging event. + + + 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 checked 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. + + + + + + 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 + + + + + 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 two built in locking models, and . + The former locks the file from the start of logging to the end and the + later lock only for the minimal amount of time when logging each message. + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + + 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. + + + + + + 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 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. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + 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 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 semicolon-delimited list of recipient e-mail addresses. + + + 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 + + + + + + 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 passed as the value for the category name to 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 +
+ + + 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. + + + + + 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. + + + + + + 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 + + + + 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 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. + + + + + + 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. + + + + 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 . + + + + + + 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 . + + + + + + 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. + + + + + Watch a specified config file used to configure a repository + + The repository to configure. + The configuration file to watch. + + + Watch a specified config file used to configure a repository + + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Initializes a new instance of the class. + + 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 + + + + 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. + + + + + + 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 . + + + + + 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 + + + + + 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 + + + + + + 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 + + + + + + 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 + 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. + + + + + + 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) + + + + + + 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 . + + + + + + 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 + + + + + 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. + + + + + + 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 object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + 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 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. + + + + + + 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. + + + + + 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 + + + + 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. + + + + + + + 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. + + + + + + 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. + + + + 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 + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + 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. + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration to + pass to the + method. + + + + + + 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. + + + + + + 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. + + + + + Writer adapter that ignores Close + + + + + 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. + + + + + + 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 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 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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 appender + + the appender 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + 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. + + + + + + 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. + + + + + + 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 . + + + + + + 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 . + + + + + + 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 . + + + + + + 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 . + + + + + + 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. + + + + + + + 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. + + + + + + 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 + + + + + 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 + + + + + + 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 . + + + Nicko Cadell + + + + 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 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 + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this 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. + + + + + + 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 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 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 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 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 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. + + + + + 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. + + + + + + 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 printed on the standard error output stream. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + + + + 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. + + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + 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. + + + + + + Flag to indicate if it is the first error + + + + + String to prefix each message with + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + 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 . + + + + 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. + + + + + + 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 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 . + + + + + 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. + + + + + + Wrapper class used to map converter names to converter types + + + + Wrapper class used to map converter names to converter types + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + The name of the conversion pattern + + + + Gets or sets the name of the conversion pattern + + + + + + Gets or sets the type of the converter + + + The type of the converter + + + + Gets or sets the type of the converter + + + + + + 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 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. + + + + + + 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. + + + + + + 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 + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.1.2.10/lib/2.0/log4net.dll b/packages/log4net.1.2.10/lib/2.0/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..ffc57e11254ad9530867b35d15aaf38eb4747d8d GIT binary patch literal 270336 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 + + + 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 + + + + + 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 true. + + + + 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 . + + + + + Connects 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. + + + + + 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. + + + + + 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. + + + + + 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=;" + + + + + 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. + + + Nicko Cadell + Gert Driesen + + + + 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 + (). + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + 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 EventID of the event log entry can be + set using the EventLogEventID 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 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. + + + + + + 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 model, , only holds a + write lock while the appender is writing a logging event. + + + 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 checked 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. + + + + + + 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 + + + + + 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 two built in locking models, and . + The former locks the file from the start of logging to the end and the + later lock only for the minimal amount of time when logging each message. + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + + 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. + + + + + + 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 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. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + 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 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 semicolon-delimited list of recipient e-mail addresses. + + + 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 + + + + + + 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 passed as the value for the category name to 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 +
+ + + 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. + + + + + 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. + + + + + + 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 + + + + 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 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. + + + + + + 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. + + + + 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 . + + + + + + 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 . + + + + + + 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. + + + + + Watch a specified config file used to configure a repository + + The repository to configure. + The configuration file to watch. + + + Watch a specified config file used to configure a repository + + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Initializes a new instance of the class. + + 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 + + + + 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. + + + + + + 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 . + + + + + 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 + + + + + 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 + + + + + + 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 + + + + + + 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 + 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. + + + + + + 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) + + + + + + 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 . + + + + + + 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 + + + + + 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. + + + + + + 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 object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + 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 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. + + + + + + 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. + + + + + 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 + + + + 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. + + + + + + + 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. + + + + + + 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. + + + + 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 + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + 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. + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration to + pass to the + method. + + + + + + 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. + + + + + + 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. + + + + + Writer adapter that ignores Close + + + + + 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. + + + + + + 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 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 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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 appender + + the appender 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + 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. + + + + + + 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. + + + + + + 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 . + + + + + + 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 . + + + + + + 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 . + + + + + + 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 . + + + + + + 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. + + + + + + + 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. + + + + + + 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 + + + + + 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 + + + + + + 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 . + + + Nicko Cadell + + + + 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 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 + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this 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. + + + + + + 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 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 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 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 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 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. + + + + + 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. + + + + + + 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 printed on the standard error output stream. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + + + + 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. + + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + 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. + + + + + + Flag to indicate if it is the first error + + + + + String to prefix each message with + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + 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 . + + + + 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. + + + + + + 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 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 . + + + + + 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. + + + + + + Wrapper class used to map converter names to converter types + + + + Wrapper class used to map converter names to converter types + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + The name of the conversion pattern + + + + Gets or sets the name of the conversion pattern + + + + + + Gets or sets the type of the converter + + + The type of the converter + + + + Gets or sets the type of the converter + + + + + + 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 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. + + + + + + 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. + + + + + + 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 + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/packages/log4net.1.2.10/log4net.1.2.10.nupkg b/packages/log4net.1.2.10/log4net.1.2.10.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..1495fd753f44915b800e68c2b7d22ebe58907fd2 GIT binary patch literal 963871 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όX|~i0WGtWfkhTVL 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

A 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ͯJxx zHD4_$tyVXbXvQbEn##y$NPrKzxf>@hI&VN?IbHy)nWk zaZso-(kp}@1qVse?=2H*KU}fAQPw&gy}4fH9{eX&Rp!}y8y7(FG7gv_h14U_2fK%_ zDYsbFZKM4)2piAqAjLx&_z88741C%WYCn7P)FGe!^;LdB%W(B|UuC`zxHJ9z84d57 zf%K;Ox=P${`Z+;LpVkzm=gV(E-`~K4;}iP_2w~Jb-ny+mCkU(`nrdB7bLI&S?6r%T z(I5OpBMjzck7F6CTj_b}515L7%Z`b6cFO9D z^@0PssvAm#D11Qd#-Hc!ra5N?Z>4JGS4irMs#Rl^&rS`DE_=Nh6f}%cCz{p}HS^k4 zSsfW9nqUzcf|kA^%FgrYTQ+ z1F~(~rxPq;vLu6uo)XUMx{9pLf3SDMiz?h9#Q@}HHc`etUad-6x&(@DY{cd1Sx2+X zs$3lWY&PSp`!c^u&)3T--k`;z_Bx$V&V!p#s{K5N<6dxbKzPf6Vx%Z(@1$Xp%PMwV zU48AmIDh{CHV@F~ zVsdyC{Qm$;zFIFiDg8RHnX+ux!@tg!=au2vf#xl(YAhsM)ROOTTZRsxz{B|f_AUs^ zkB;7SdEotqX;Yr_s+>u9(P$eRyC6-MrP+iMu%W<&KFKYlXDZZsZ>&4iwnzhBMiP-K z;5DTWK^7!4fuF(Vrzp_y!`dn3k1#& zjo>|M-a zJ+uGckdv?PPW>E{_y22x^RwXiZI;AuhWbB}#P>^J`721b6C`O)oq!(5)F>knOio>? zvpnT5Z!HJ6pPetr=@G{#qvcUSJ%$S<9)q0kByX?sd>I0Z;~1NO$Y)=@Z)&qg^6~L( zWQNMYm|3(*;Ob_G>ofk`86C`^;nYKnv&ai5_ zwJ?6;^t`Q_za7B|8u-nQlg(}x8s6JZ!HxbWlT>mYrbC$3+qjJuK@XBcTJ&YGDl5y` zw{>%G&pkbYSuwp0<^JEwG-9m&f66i)XsS;CU&KPO3?3s*diyrS{kh_*+c{Xb<0^vH z+-_bt>TCw5=WB4D1hzLY-8nf&w_&?)f{o*0XGHN?<)dT*w|GquFg8fmKAs*e*YLNd zM;*t%IH#5N9$185>*cIR%ny!-f7Yfs=*xWgLzRKP^Z);T&i@g!+K+#JF>79fU5{Jx zb|>pFNqSqpea<25CIV%Rx7<0o=9Zc1lBRmepM+3vq}`9Wx{KI1&L)zyw4a~p2)_=K znEa>2R$)LJj`-_Lw0*fV&G8QYzdzIb`R(--{tHPLh-yl&!%~IsTS!vMtGiGl0r#W>q$wjF@^Ejx@^-eB5_t1 z7~^0n;hR#!&)!qMn%^Jf-?QYur7V4styWN9@I*Jp3~iUkZXsJY4s!F(z8`MPp?^EKU5aKd8X=f z)cfUczoggeVx}IJ2Tqrr;0pN?d|Msa=O5u6VZu(DjQBd&q20tx1j04_V78%E)22J+ zUp#t!-Pghhea!EM(!vwo8Xd+Gc3=m2BU>4dL+NoFv+#AfkU!7O+W)Ooulx$ZeNnY) z)$-Y?fzf5QH-mD=E}iheG+QpKHm1QkB1xplTaml;4KdCh5H| zr#x*?(p{S)bKaW-OW603`&%2n+e!7AaeX^xAaLqBn(rHMcX(yYy4|MlzV}1RingY{`IGKi+3Wm0;)mc*o1gelX}O(yapN>^W=A*89v_C8@!P6(V-K(9#H6{C z6zK}07pNwumD#_r(H>^wmR#a1e34jj7>?67JjwH{P3wGB!`==AmZ^BZKkF2{*0@pV>X6qL;KMRA!gCB?as(?+Dh zIVz%Wj5)lmlDf6Oaf=lgpM7D;gn>Qwq|anD{8oa*1UHzRvHwp$oTuk8nO z&c@h2P>bW2S>4#xDKJDYs`pHPUw?g2P~TP1ooP4&uaoP1o)skzM>T~geUdeLttu}` z8_;5DmOg#)I-OTdi|P5gyv(2fC_V7ry8dS~Kd^a)D1s>Yr^W1SWj>!1hu>0f{3PBa zD$?{!0i6PR5#!7Kl!!_{KTR_Mt86$kpln;p%E1r&6z1)a`r!DkzAQg6_0m}Of z>sBNB|D03%bs&BH^|2deakIjV%i@n5Rmkn-`J|-IIEFb}68!UwEMu8p=4F~$v^bA# z#GttWCqf@nd{wk_o@YCj+3i(-j=Z66J3t#U{i^oVF`GvF%PML+qqhP)6bzwpVkFd9lnlN_Uvo0`grmCg9tAOz%98R z+Q+!#ARqdU)AMGYzi~+Kp<&#Retgssy{O)zk6SX< z&mz4-vwvGxN^&WhKIur4(?eoSy6Ys2@-2z&yH<{0Z_kQ@e%5X0@QnfK#;{m7>Hu3eE7VoR$nen zgJvsW)#ug41*!AXOXBU@`Y-|t5hneQ(o=9;xKqTt(#dUw-uG2X4;67$a{NkZAJ`jw zo6p8KBpLD6a?NC-d9&zH2B|Fh?GMg9o)Dx+^3f30klE>g@zY9v-9&hoiByt?o!)}L z|1ajN?|uLOMV!?LYh`tvU4uuM$C@88+5hX93^eGBsXy+~H^6j`*oKI?N2fvE-$w=n z<|JSUf3vUPb{>jz6HOV2~<|szXrJa20;<|_~6j+EWVIuF{P2~YG;q{ zVw< z!e3Ij%}j?~m}xIGZOiJZgH*LdJ{KwGV)3<|!EZ!1Y4OT@zCk!|D}V|bD*%>RzYg1z z+h%zp;Cx=rm~GJO@5#j$E;;5|Ng18lwVAlGKv3GISJm=kxGv}yD)k~OmOrOcMk}Ir z%Dz^5lmN&KbUol_3X=`MJ*UwbBQc0wS+HRE#| zFWbH)ugpSRzX8dLc0z)@tXg4^t~8ScxUSY@pDFcJG*e2LiA&&t!S|e-L_E-)pxb%# zC+M2JL3IZ@DE_}e+CRvc_$=AevR%d6XV4Gf%bQKikNETdwfy<)7W}#R{S7+LX%cS9 zkk7lUbu(vu!^j@P<-aAi$0mDW(H&86f@Q*rW|e^Rtb~O41_snw(TWbpe0WcBlMc+dpEBLUfp zihTe1?L))clbyQ0EM}bgpSix9_PQiRF1|NuwHgk1RTHg=>}ra-<5u+EQA@y8GPd73qR6NfpG{=eDjE0VM)C z2&pGtWG;AhacYq981j}g=DSuaPa|Lk+~1mk`QQYMHw-JO_(QTR=S59Y*=BFibw15! zIkN*qx8FJhT#_#8YnC74+&?1>+I)G-N!8ZFvxfvFkvv7lvJ7UzX}DX?u(4{G(R1mS zXzjp!19tCKK3h*U90;wR(YL|;`6C+|&a_&#lyfuQZ=E;mlGH<+US{PwN2;dgFW%A%dA{w`@|&Fx-&lx-LRW@VQadV*%NwkJ>?gfgAY}IG$GCZ zKh@yZ8Qv`?`No;+NzZ!O(#-tCy2#r%G>6}<$%frF2zb4o2=5Z=!`iqDn-nptw*_e! z)^9ZIDewT8umcchxn}g~yU8_z$}56Geo9Zjd^56m#W)H+&3pBK%NgR&ZzqO+)6a=1 z(x-5d^5xf&*c;~LcJm#~u}b#Ym*dFX&Z=B8nPr~6P4joteD$-VK;Mh)ELK?czw*!` z8!sOB@}fyEDw^YJc`@!V;~52^c}5G0v<6Hwra6whu1S>VwCq%}Lt4?-O&qP0swS;? ziWk0(_Kej3xB1A?_js1AZqG^DT9}1kP@bzpv?2Dw`W~t6D@uQJaxsLvAPbpYXdJN& z@&>no{>>|u|E~=6n{>TZP#bI)wp-kbJ1y?+?(Vb{FYZop4ess^MT$#tDUed!-Q8V- z6Ud+U+xtJ+Gy5zDnaL!Rz@)vOtD)MJ|3rs_R(K7f;b6X+}gsbp0EZZ=Oe$P z<9#p6FGwO5wEp+FQ^UyY*JdHrj1Q5QMLn&ctIpg3IVcLce^a-!1bPcS5M)8754ZI?oDSPc1=_R-@@uB11P63$*A`v~#!8_l zV_SEr8jUfWa`yw*#DaO1rj}&l*l8&L>o`u)X*b$wUz0P7cM&pbU$6ph%<|+?7Vj6_ z2FBs#jW-#raRZXgMSK}^t9%GZESvucDjQn2K2Scv=ODq$~@S1}*&>@Up* zAK&ROGSR-G6(qHDq`1dOzVN9k-(=Gt`;A%Mg@3;u>#G8C2oApf`K+r$E1V6F z{SHA=EB^4W7;f(YLw$0ItPj)C%xGU{%68-;z^Z?VGVO|XEOjZ?EW71NisiH5Yty$S zkFB+J4ApOK>|EaSQ&WTf0p`?DCqlzst^4c?DUMUgPS>krH?jV5DQEr604x3Uqs}t_ z7cXtV5zkDsp=Q6gqhY3jcV!3A>hE=zB@&FmQFRR1=ow5pUhoUbEWW_X7x>_x^!&vs zXnG2p9UgGTk6YrK5Q6?-e;s_(2Kzo`r}D#~Ik3)ZpAzB+~s}H4=tAWQ?EIh=2TY24R$K>_cO#KX=x-H zqYS5nayzMS+Y4_s(a5XMeOm49L&M7S(S@F(l#C0mnT&l7lgrZw&s-~FZ#8A2mfz52 zXF9YHH(Ea6BN=n39VYk9*AM6Idy_Z&*G|?~eVv;_3XP1C;2;K1LPM207`R#nO0Zu&Eoack-CD%#(lts2Da<2B3tais#unZVz<`!TuQ-}Uy> z3XLfr5|&~M7@nr;{Op0AgGAba?4 zZsHsn;Vl5RDV{(@E;nyMfw+|YOXREk1I~u^x4!xWbM$tGPQ3C%Cq6d`>my}Pk_EF> z7ATcExiWne*Mv_rK$;x~Ct=yP^1U0biBq9JYV<32tVKJNnujX}FaD~9ffw%N|9`ju zA2scJTf=?To;aTFANrjSy}21`WRGGAW0459vF981RMj?KFD1G)gr9*CxT=D zBJE$AEN2Mx6yE~lHAbxMNXdW5;CbQ<%D+*LnjBY?X1xS>GY9fd=r}Y96)i(eQxTG{ zt{VWKcP0a){qnL(xjL1vzLnhKQLA@`G~^lh*{|+eyfS~4EtprqA=dp5U{%h;|0QS* zB*UJ*GkBm%ZDgn-d_3$BmiZ+tJr}iZ4n6$L!AO)bsWToC62+9LOR z(#Xfa$0bcs;t;1Cfc#fZ#&@Dkk&DxgPJ`yLxjsY=;J;+=pVZVL1Jy2bG`?Fnt4S;b@nfcKCkt^ zc4$t0LBaU}E_ZSSY>VPGSOy=xpd8)}gT|54>gW703dH7Gjt5~BaXLUEPy_cc+joOlOZ zkpC;FD!O%%8&0`NaQoj#3=vd+ac`Hp6>Hm%$5hO8@0hVr8T_R4Mrx8>PcrDNMF{mh zeYBXfRm;wn<&{Q^$ZWo)l?}uR@I7xCWnk0~ym)?_&KCI3na8xp{Hc!_qK_60ADJcF zWsjYCcowb1^h367P7HZ4-H2%9ANjoJ;0Yy|(=c?S&;h|8v!JG(fUc}$#%LnemY-6wZ|{CzQH`MW`I_alL1P|@ zR?uxeY*bqL%1;)?U?^xZKzb8(A4%i1KbDt*l(e*Rfxpd+60pLw>=j;Hc1NsT{PV}E zk6|tQAq@;^%^*gwPh|gCuHFu znDnbDJX1dY92Cxw3x{OU;NzjBsQqBPO-hXVxfJz`u#_q`gB^_&|!8 z>mK_};r|ht;cPmfzX*}5CD_n%2Ksxs-ti{+W71%5{2NB@F0i)j+j#g5`6~g+uH)*; zG+(C@GMvGI?|5G#iW;O%tHr)mdG&rzdb%#vXWugCEY4-U{?1~AX6C$Y|9d-3q1i`dU2%;1n7OOUTZJ~^kG0n`^foQ zJHMZ})2(VM7vzTgU>1<3{JPrZA(Bfh`cC`mFPA)K+_tbk)RfJU%20M!Wn=l7Aqjeb zIP7+D+^)OrJPEp3!bJer*^F^BTr_`w`T=(z-r>w%t22DzxaMpmmas))nyE` z{y1+O9+Ax3iM5q$_jknJo^qSJx!^3dE$Xq(sO}=#2se=lvs?)Ic$#jC=wQ9|lcFHa z$J6hkyMoQMa&)!>_8hLO-rCQA^QCN=*`hXQ=!W|6WyP9Jv7Wc63RvqJn3Ec8sNq>h zNgsclv&B@s8vPRwZc8DoTQ_y4=9Uo`uJf@Kon!$ty-~_HW{3Jnk)hY6D1z8h+m4ks zHn)F&cWk}XaBT9(T*FV|0qnBf2m0NjW3kFC3_ z(B}_-JpJ86&yWGKULyu4x4f@3EKc!(TtTn776+`vMEweUH|*8 zd)B&oV~LaATHzgA-FE9tZ3St+uh0#$%AN%1{TzbDSWF$aTX^M=D!XC-g^cF9o&=#5 zy`dcQ#5yv$a8TA>Y;9=tJZe41F+9s9Yq`%^FB_SeVoQm%MHqUmvbn|f)pB;cjb~RB zt9Clr@S45SC`>!0oLGGsoui(b!Y3a^1^fLbM^xX$5Tf`2;<`Bh>h|@?e*6;YdO5cc zKdi^Lrz7CpwHgK2hr@wKboE&;Ud2gbq%IDKM4CKB6MOt+Xbbla^D7B?@t=f1Cl07% zf?L40m|OE$TYj#wg-B~ zSQo%-3QkjO9Uwiw-q4M-XQ5hr1w44~Ke(M~rpYa-XA!vvUY3FJ8(uQUZeNb<1_dwa zF@I5!y^D*lWn@9>^Uk-JflizDInK$2r~v}^^nbA^=np>SIMZw{4|QdIJ|`Ba>#>@r>N=vAf)DFZvc%VG6WM~=LX?z za_5@cER!A;+Ku*WsW{TyTOu44pKl5s`xccaGqmnA5P?RV8EKjF#eDEybfHvzg}^>< zo0eY7?>7rL5tAlBN#^dr_qN>I3CZD~koxK;=;hL*wZCvxND51AO*qH{+GB8Hgzu~< zPxYRp;5f7^_6cHEp`5{p?z>y}G)=0{z4V>Ksk%(*`9QRG+B)mzC-?5DH5ryES_7us zzgiW_ZRJ7y^OwpPhk40Hq~jx{(_%k6H^UK_{y?-Ds4{%*z%!~ zX5Gz{J5g~nYT!p=ktxFGXIB5(o(RT$(FzY|HDIH z5f}vS5@m~xtsi(!Lttr&)s3m7`MqzA{r$l*b0y3lh=l_~S$-yMb^i3$Nq%~ho45E_ zI*g^XHNWn~13I$g9Z`D9+>h!`v+UYkJPB$VP}-&Oke|{-`iE&W$zRKY$gmFRK7W|& z{Y*ic*UW)zZsfku7|L89r7(@dMi1?kRFx6ZHlqf%%c0U! zGOTq-6Es}nEmnEmy$C5H9aQL&|1v7IC~C1&mW|`LAd9eB?e;z_pCM)jKXnFGsG<}# z?zx%s*jSiRdSADmJn=CEX7%||>xlos*GVJ<2G&+?K3aJ!hdj{;No{Job<>|2&5ld* zn^;*3s&dIbMJ=&cr|j45@AJ_4Y8_?fHEoagn#me3h zt>p4w?WawV0sfEGxWwofX8~sQkT#)r>BED_PXQP+Pg*?{Y;L%b-G^~~j-jkRODoCt znZ51XmjbyeZyT<1zKn_zQcAPB>NtX<+Sv7r>mUiP+Xvh+I1^Cww`DlEYe#6IyU2^p zZ8r4zk5-Svv6r@hhKea6*_@+wd4R8lrDpxg$wN;WvmZt4{i=K9hPtlTMVVuHz z+-e>Ymqf4bYB2X36N;cPJeKs-mSH9 zQrZ|su8(Q#KXpV-?>f}yeVIa`7cKwwazDzIO8U={Sm6VQWepBbS|eSC*5i^1EdD89widX*fiJnD&W{cJZ0-)I9 zo3xDmw8RIP<2nW|6&ew2@N&_iBe-)UfY5V;J9ekDr=N;JK~R z>X`xH=cyFqj^yOcu{m&{eZeiF-m_^rv-8iVYG*EcpD~~7PvPW7o?jaUr4KvpMS}_b z(NYKI@#Z1QRu^w`33@1z{}T4jN{^hBFCH(hk0Qd-MqC4l-vhsDg@JEdVS{8C28rf? zDd_#Tbo@mg#WnspEi3l^;7*!ub`=|)LEjn=w3FntX?gkERN)*!^x;R=Rd?+JGwWNg zeW$pu`mSZe2)#}1wu~bDPHXO~oBy;PYfP*Kwt_MzGG>Vl_q1-ScyO#sDTXl)wAz#^ zRCw5E8Hez~k5)mcGl(LoN8FQ&ylyPe6p?XiSGSbFios93K*HJ*4MO|d<1)*ZI0+iq znY(Xc+h*TvH(k$T%C#6J9RsvkCbfmEhTo06J|_LI~8?LuL!89K}gxo zJi9DN1p~)aZ%;yq(Uk1Z$Cwe3{tcY0qpB+yelI?bIYjJrqvTHL+BM_XIpFmdl;o{ zq<1)*6qw{O99a(kD03AApkg1fWF;o=l7<8sf7kg%KVL)6aobR%nu|YZ<;3N5r-%$+ ztu{wpY%!Tnb@h8c-5cqQZ~Xc*H8>jTfNLW)Z8E}c;~Ss7=9mze027Sab{w8yEa>Uf zMMQIo0K)O*qd5LkoCy+}_B{DYK6u&2ONLQdsn(!qOl%Rm%(t# z)F5Wy-ks-$sZaSodYflTYj0_5&!Uc&uwh!ge%ibw%1?xmz;&(aR^f<302@yzyIv{fV5P8CHo$Eqijc8QrT-E#U;d}ArXS_gDriK zHTt(B6@GtQwZ19rHI|r%F^|_SUBHBg@B#ikHveJK;E7`@898*gER-GiJQAosx@~Eq z-%N}v`;|np3eQL1f^e*=$U>SMplLnlgtIL>a7LSL;T37rsCLPVA z=CE2eW%K=6OAFYIFD)aMdJuEx-Qugy%B9q2_el54RDgRLmm6{l+zHzP6?{Wmv%Lu8x&VbR)!Vt7I(NO)1zVv zk{YeR)-dYnBuHU02Hi+vsdQl>((DZj)2E56DY>gOO^YUjQRx>R@u@}2YQ(0}J2xNh zwLnMoK7qRMi= zq3Nt0J%7nKYfGNewH^L88&jsJGZzyvVlIth`G)RWXcVzPWslyeb{2|4ATFgllb&RN ziKL8LjFcvsYr+*hy61nM@#$r(QaX?5p^W_FxbHigLCxsrM05&&qjXD;fitw*f?I2c zk?_UHiJGt=#AxQlgBiyN?rkOY23=+%DnvkUVW4C5dwfuEhOf9ABe9qL9%q@I0|0}D&pdJGlIrvG2i&h-tT_ws0d5-Gr8)zz+ zi@-y8ViBXP#9YE1ucmMy@`9FWJZ4vAqfxeimGsBAXcD>&YpdXl#GOn&?U54tuC)dH z>r0vi4a3>o0dz5*%8((|g1%s3VD|*j&q7NOd{KducCXPO#{;ua>rNH;;4z_;2=qn$ zS9`W;p#@-wpgA;5%90&1vGcEZ|&u~ zX)Yta*3{QgjG6O!gm1%%$2bts*$qBdn|_Tu$;~O^-$C!D2=LA3rfSQ})Di6Z+Id2;7MtIw;(a(soA62$3pE28tLwORF){DFwJsv{Sn>8O-o%3suS)E<{yU3&(NDw z;7V(PVzc%02z{15;T!4J`S=@$k_zb6hG8?LENDl?cyO%o*TR0J9o~Xlyzse$gr`9_ zih;<5Umd_A_7>UuqIz70hdSg+%nWK>a)Hen=uM|p#2N^pN)=FU>m@vS;57?kmZ4)m zOTs_D-vv`^WyY8r?4K)7y<3c02dD@iyQm8P^stoqaKBSk=L-6q31!!qT)4nGQRixD zFRa}&4L}h8;iWUr%vsnJCg)79vcpTZwjZ4x;Jt&Vu!nBhgIxoRJzg-bFCB?_$_Qr+ zIM}Tg1Jd~_W&obV?|k}ak<_psQz5|H-@Bj|-DfSe1bE9K8bM1N{#v`+W^H^+ejm|L z9f@$%G8Ecog?KDO=UVds0&NCsypIeIpCyDn{;R(1b01B%b`$cyu455@876BZTH+rq zpbK2y*AvaJepL5qjG&+4S#!cB!J;J5KgmBdn8?Q}Hvew909oQZ$yNHkum+-@(Uon{ zEdc2XoDFL@jo4Y0ML@#=ZqEf#?^q0<#{GC~eu^8l-d~-(5&JL2vmuh=B(0qiN}|H# zn)(+_Eqx(rs1 zR^B^?Kuz^CAf>r_JL-vP1~fw!w2Wqhzqy7d-vc!DIpE*(zV_IMI{_ere>1D;&p>Vh zl-5V0sJT9!vHg(d@8&0aE1C5@0szo!;E$J=`CU?tAc8Bg z+BU@^H2FuqjdJYP<0drEHsmv3qM#@})d>mw;x`Gnm$AlDSrt{chdSsk#)txZxW6`3 z@BVAFW?iFG0x?9#omM?UR1Kw?l%x34IT*RYn=E-$jf|VH2+zy~4HgPzKSSUWf%XyI zQ{|JO<8R#z@zJ*Xyk0)8`E(FBOCis2-|>5( zK6VbU5#0D{v;KbLXpTpoy5*8q#DF3L?~a-M_*_#fQm;EsCk6!)FM6*vtt@BL*+pY9 z4Iy?#POU8l+uPS>SQK5wd^o^j7sfy;7IwYtcLqKvud?;(cWwckIlj7#eZ>5)MC&5s z(;2pN1UNDhFb&)r6EM6Sv51Syi2RIU_&udA68h@IKF2q@tA|(mmTM9p3i7iVw4UjqQZnTb0J0`0YG#dcIV)2C zr*!D!MW?E-kG0n~{P&Q$!tK~su+q(fF1t6yA7Tr1YDbZMX?D6ztLlNq|HPUTU5et-M_j1M*1LbE-m1Veqj$$E8I8VQ0$rT~| ztZyd8h`S1Ej6$5K>=t=)SUO zyf!g>a~oNa15rOk`Fx*v*S|E6`_Dyu78k-kgNvXTc)~yHOQr`pu_J zVu|#1YNs(Tatzah^D@BkHQpRLuU`SL7iV_G|CH=a0izdMfA2X7jQkaV z^-W3MonbhOi*&A#=1T1*tig(fHLAqo%&%EX6A05v`He9H(9+2qU?~hpvRG&P+LOFO z)$`5T|LV-WD?xwxG5^^)?+xHN-FXnVA%KDX*eQ&0l^Ww+IrEk_E9}@kn7bt)NgYsX z;S6xnL=@dLObWIc*0ce!wvZXC0diRS@(sSu!b!YD$o!e>V;za1WXE&d?a2r`;RTdV z__i>i*~HlEISdcGEJ&5e2D&=Dn07>TsVDZpY(2>$Y*dweixmu=H48oIG_yRH-!L`~ z-4JN`WD0iGGYV9s^3z|^dUO02YvcZkg4Z-tih65KVgxmiD(kO*5cxU@pVXeg;;W}p zKLU?8CkXPGnYO1C`AYI!Y-7+oHH$zy)fk&cOg`sjG#?LRz_P<;S*_KR*I*!U7R1Ds zp*7($476KJji^Cn@7TUClV8Kk(A71OocO8AtrRU`X5ng@L3i~#&+=Y{RQt?RmM#un zWQw3I=fVbfEN_#GkG5M(!1p^mG-4)|GqTNBD@n4a>a-0^*)IjIz#^&#s=77{vRB(7 zrW!VbTukBx1bKD{*EyI+#YCZSENGOfrgrO&bW(YUX1iPEpQhz=YN2fEH6`(NMbw(e z(^B3a=Y-Kg-!3Q0hPIZ^SLzO18Z}XB1Hvda`(74E*zD39`^1cl2ah*Dd!KwYA2HMn zqp)L{&a$<{24ebDK zfMMUg+sJnaaJQIz0-_3n6wKvArpsPM%M;@K*AP^{7>A0W(u%al=G_fK{OD>@FQe3! zcOR|U-&Gsh9Y^={vJL<85RMW1FOu1hA(W>HarRE6K4HZFZU5LNWt@crr@`Lm#ky<} z2xG#i(CCn?Oz$E|G%e-g1Jj1R}CA~8qmDCC6jIies82NHTd zM)TYC^R#(o7xzpMJ>)=6BBk}xqchribRH4K7%a38FP3OB&eZY0h64st9 zSNJ>t4T&XFQqnOGotK{AY)2wsx)n{+Nt!z$YvKf!>3r2PTe3d(ovn%!Mlj7|B&oUQ z;hyS!Y1OER!C-*Q+ifdb=syHOlIlg_YGO(Y6&3&ZI|4R2ZDVNTMOJ9;t_;V6H1jLS z1r^pQW@H>ij(=a$Pgx0$dQU}My4cfjTrn8{r#RmfFZx%+UnV*TOl_29NL3pnuByLq zs43j|1FZu3KkUim`6_oCV0-IW^4Y)O12?UgG=sP`&TS0?XsI-Om&&!(L3{&P8`MR! zFuA&$XEJLxfGN-#9yh(qUUa9b2%|Dw`>(2yme`~i%t1>brQ3pSVMUmj*0uH8T>u^@ zR0kY_=(ltlBPB*hbq$*s)}~{kMs8qrTSLw?2sQ4|ioXUQq`ub-=(-&@t^EL&rtxEO zhKWpMG;Z796?yyq&>~Y?tVIMhQCPp^USH>qBCnCU#>Q228-q#sP%h6D^p)=> z4X|;a^Sk-BnjEUv6bxV0iUj(}K41=!ma>D1uJ=WqXMKAA;RK1O1uDk-pgL@reg^yr zP7G;@jXHfZ`O$6a)L#y3WktiQ_z!_KYGH}2VSb5Hq%bIHK!)TeZbp$%lPR5JH6&+=Hqt zuQYvMyB{_~6v55nxM|kn=Hb8U|4FHfeh>PSpc!oxXAw)_yvbx4G>(n0HRBlFCfEat zDi_#(U_9R!x^8w3oDD>Fh=HPAT2~?6%Z^P20pzalNxJfMa62yV`!DccuF-s1FD+l~ zzOhPJ4H1@#us?g(ocZF@ZjVfZ&Ia^W-4+wl{5 z?MHPvlS`R%=Q?u;HGiljQ+|1x=+e*RzJ+YhZX)`Ne{{)0CB*r+ugxctV%f4@){s(f z$i~oc0|1QPG!_n>Jhdd$?5F>;T{&lnyp9c;)uam(>iawq$d^Yl^LQa*@BA5m?WdJ! zvQN#Vx!a!6y;b2Zt<2%9vKq1BlMP12{3j1&E-6^tHs`WSOi|>-ikPJ{#W{kD&WS)S z>N!QlOS(FGwW`K(+Fl_sKmBWGnm%aalpREJVnuz@z(E_qJC*Ttl z;*L$feNt~6BJN~KL|rIKZ92YX8LOqp$o5rUMR56%kNQR$SHO}dIp@GOo0VPc^>}~i54etHrnK-^TXJop?o+yHFC%b`z04Re@>C)mX?Qp7IHlK4 zJE>zKF-u42VM`x#Jomd#O=Uq^#ubk|V53qn^k(+2OBLVOgD->=T^z}s^BpMO^kEgN zDUO^OV}#WY`Xg^1$>+D~eVr3E`ZKd}d$http`trvu&+^Z_b0-r`6C(-qvsaI#dl!p zn$&mBt*zG$z>lXL_UHF00$eetzh0`5S5yoEkdm9k`^99Z6;dDZ@~g7v(TZ(PBOM*( zao7IRsJE8Xcnd|j8<|WPt@K~y|9v>rTF(f&q38hZe^XR!z{9rc^eu3v|Ge?XSd2aE z-p9ab{|iP-%Sezvc_-pPBTJm_Q8TN~ss9IQ#Shgki>k~$yk@Dd6ml0R$^+O1ie53pT#wnBaQ404QIEyZr;58dMT>k&;b1> zU8DBoK;g3y_NI(w&k+Z|wfi&ns=-b^9j!Ody{dcAd8d9`8Ts>AoqnW??Kw@qjMc;` zoK?`)-;~=AbKQl)vLaY_0}(kaxCGsnpT76-cFDbeLzX#$EqcsrCaK53VB53T(ROwb z8D;^s=!`#u95yDa|1aWphph>ZHtOO` z^CtK?oW+&RUyD>|AV0$$UTB#2Dk-1O{I-C#R=m@*vTCCMtA*X5o}&6GwBqnrtK=4$ zp0!DjZ_r$8?_D4oP}MKvQ8*4(04$25@fnP%{V>hB`h#hhWwE~zx5nzGQLgDwhWCIq zIi1d5MwU8}iSbhJ09QcU(k1ZvNoc+HJx=6R)VCNd;fx)urul zzQ83wDM^rN=~Jn=!PfB4+L9KYc-QY$;3r-MOH-GWd|Nus zO`i%*XG%%@p=wxZ0R6u)cD{vMvFk}VCY0}w#L>Gx9;EH$d?V12;GT zo)P%{y3t8d#KhBRzLfg)snY2%c}wIPQ#NN-8Txjunul>A9rCLrBL+Jc4ZWBcyv%A7 ztjX?d@~x=rb4T$bcdhUCl}VwgR$Vhyd>Z&YsHko(UMVWxlMoqiPDIKlc0JVy;)Lm6f3tu zGoxbfrK8pqMfqpD9CTcC;jgflCXwwwN_unltHzT$tkG`z@=3B&4JKisRh9`n-3I;r z;pjCH3h=u(ot2B3lQ8Fc(^t;|UPeT|T*0>Dn}`{{c4 zno$UgCo7UA2RCcefymND6VJYk;1s@Q@K-AjAIJ6F#}TB+>y_yjUdwEP-?_ zh_=Zr7$43EX17uSsGl)l5N*NF@v7Q!;^UES{10*Bt?Rc7=IuYqW4-jT;xr1{%OZo> z{qeNUh&h4J^mr5rg*t?U@Q}NdCv*js#ZM<31?6%?G9|J8(SJ|Qrl^Q)^bJ`UlWnQe z5tD-`Ti_S_Z4#a45UgEI+8EpWU~P1!9jKpDg0B%-D~<+cqNU|V3aOra{4;@{yi>=Y zo7n`i1cgM!>17}OH&oh*5j2f6t;8S9#R;hK z1IUV|$75HOk{fs;lZe}TYRVME@MM7G8lGi;+*LHT?qFvBq^ZEi=6EgTNK%L2{Hb57 zjKj27_}7!q_~9Ge7;cvlHLm93euNSAk-Hi}&OGj`0P##VN+rpL+)q4HLiuJMAy#Ir zQY4T6%(&U%imGMp#N}yc6lcl3uMxgv(%WSJzqCU`kkL#uS_P*bm3~ga zFM}^{FKI#x?jL=utW^n>)&AU%hMx$?vy0 zgo*KMwEqBW?!s?YIFk79MxRt^>8f&9OMdNQej*_X%aRkhurh3Q@bziPNy$Sa63Y;# zhF9{TlgG^ZA#S6E$XC&8_L>5!^?l_frFbQx6@84%m0e#(GW*FX%PdMK! zAluZI*@*(rG%ocpjpEz6#E0HeYK!_&>jybAOCdI8HE5~x+(ZnBa+}HsSTQuGn0g;Ga8DZ%Zwxnr+=KD&45Y zh;XozLwySMD;`gPT@OVx=Y(~7!AxEW4|%Eq=0_SZ;ASM#xQpi9?|%0Q&Gg@0m42pf zd2Ys8cEx8k);kK)H$l-`)8D}fAN}Ee@ZTWvx9`02hagS0fG~fmV9W5FEhuHAGyPB> zWLMiNC5usCyCbIc09983UOlkEdKN~C2Q5p+nW0-_)dtkBlVbIThFIm9-Yn(^BdWeX zTa8lY)noBxRjp&Lh=KV#H*J#zj_l*|hox|^+Arz#gxu3@ z%9q=w?rmh)D6Kf97#}Z2Em;H4>ns7ExP!h+i9FDp1x{w0?g>fEe7qZw2Rf?)2fHB8oy3)YsA0U-6c(o4_ES>LZq{RK z<~Arigf_B{tdnbboHfRK*vt_ooLDO`3=DEx1pHR0oZlav zxD=Kk&Ro5S<;Lg>FMx-~t~vsM6*`LV#{&+Y)P^>}(ZreFp}jjEYRVSpeo9gSnF5qu z*FlTJkk?pbk8ffly_aam%9)+g5iOLA1TJ(wKe=Uk$5QRT79J6YOTT4*ah4Xnli#Y# z(ZBwziwN3ezwW_XAiK2O<|fZ3B)zH$i{6qn5tg1I#lXdXVRiTl$>^ zmKBsI-*rUJj&$+p=w~O%yG}cmw6(-kKZ&mP=ZwP<5%F9eZe>Ps_!P(QOsJWD#Xoj2 z&IE1l+?oqYzIDB&B>3#eR||RS2R2uMO0@DJ&UL3mrU|U)SyzDO*3ct+;>O@CiSwl^ zv2Ac5Ywm!WDRcuScv}d3y{c=imVA#IG;jsDqxvCqZn_@xx1Y~o%je${O%62?M^+<8 ze!Ew!%IuI(HOV)o2sw;n@`(rVu`m%Dx5x?t7`H9TY>WEl>A#+rSm#<5Kflp_1GKP#4)L2T0yb2eMCc;JIJz$V z{afKF%x+~{cO@oOY?)%sRLFI|J|f@<1r*=)1}^_300L(r8E`jN=hoycg0%RXaO^z% z3DWA>6kuimvHuL2)io2yHug4>dq3$uv`mhZ;tVx#X0(s_-lfm9#{e| zx~$Fa6L?Cjs%_}5l1?Cs6}g3XvkMw=_m{YlNlTN*P$E9knOwwj1{nHz*n2!-OgEm< zY$P<(N0eUk!B(`Dav-*A(A0kQ-5Y5{Bsqt@8<1j{cas4egRHJWW`ej|an4zqgXg4$ zbLQ~)`^bSKmj-TQCwCQJpfy6+)aH~&XTjXIa^d=`ImmG}AI`OqYvHui+LKDejU#Hd z5=w!UPqt~e#x%OAHJ7I^rK61&f^9ZG<9Oy_MFWQ^Dgjfnre@2=e|+CG~T)MtT=Y zamkd4ELtv@h0z2xIoX{p790{UF4awtVdB8qqo4BJGMRd%gWwcQwSCh+ugC@_??#r| zs@n{dPTV&^88Pk~uLfs^h&(L3fUQ|f=s7K5`(XCuv}Y37^Blrok0ymcd)guV0%Aq-Ml z0cZ~7o=nU@g;$?sz1zW z3T-+i?pP%9CRY?hFK5|6&D7!>v31tw&NpNS^B4ZbP(9+ z<&BGZ$w$3?3(g7sub&F`YkF$QXHg5wSh$deco9yMd&y;bG|3r}HV;`JCrs-w*acCOF5+zRTJeIE^rD)iy1lu6*;f zjbDqaX~jiy|D!j5N7BoQ-q1$0R<0`Mck! zMN4X5vh0cc_FRH3)I!CMh zi*sh9${TG)m?MM^2YBlRCR_Q0zslIk@GS?4)OF=t3j|T}RFC~?gntRm zUkCJJG?xjWo&4GEh7yVU9&ndnXN>fEZ&#apq>K1x4JNSz0e^T+fhR{i>L+tKWlYA< zKXQAM^@(~w?x#tPTb&p&FM@Y=?(1EmiO(Pc@4yOdkR@E z&sbEPcg1RIttYw=f}KX9r#H6vu5^uKUDI015)I!087(Ul=iYnXLIv}KH(iO$9=Bp_ zc!2=Fq94^(!zLbt*n%Mbtn#R#k|CZq_758gN z{(>}X2a{%SYTz7K6EHIRz!(jNFvq0_!v?}phOdU0*=h$m*Ke82MXqO$nGr;{IrYYD zJ5WV%UGm$?uMG|7Et>oG{Dv&fwdeSh$I|hpwb4A6kAIwv&V7w^Vx8&+EUTT$ z#`uNuNZZ3RhWjeHGajrn9i7e}NRP;YpV$q+dBc^jp<>2{z)E!d1Z-3ys=WWI5L*l< z8{~VruW$OzN4kgF^XwT-;EgGi`-ROfW_Nuo=X6Sc#GnI!gSF%jYJ^GTwt7O_`^5uY z6BV()6)pCuaaS_@d$~g+g_yM>i22>l#xwXM1ql-TQ8%6WN##DtZ9;dLk2YIRzb$oj z50Yq8Ts%UhI*Kpqe!0te4LYv-CO~|dlWrJUXITtRf41v>ohAP%&7pVPUjA1dP;zzpxu*?I8R=Ouh4W+~50#+ca)$+l_78jcwajW7|f9#%gTawmGpq zXWpOhI_sRZ_FphR?Afp9x$o;zZK&`qGs< zLhv8eGTH7vqVt&Cp2+4ytPLh=r|dSm=)q%qync#(0dOYwvHrL|u=!*4r-k>zz zN&oia188UR)n%XW?Z1P;d;w=wB6L!Q1Air-RRtYE9>1J0NDu?dm%|gzU+P2UK4Us30reSxFQY;wt6I zDzKPR^oz%<2hA+fpiVJd^MiJceHC5^2vL|8N*)b`Cd zBMo1u+RDMG-xpo66OXbn(i=-0Syci zo+#V@H=c(mX`?dXtkzPDAN`9OEEk_}inQYL0b0VL;qEb<2B06JN2x0lWbJ$dg@C48r`U8vjNJ4cAXx6sVX|af#sYZQI zynY(koyv!Z%+9AUSKV#d>meG}3;@MHENqJ5-+=T7d^UL)*LQ0+4Yh)@1CKs0+yqTn zp*ifD{ZxB8{k1QY&{v`Oxe8x9EbhdQ6&36GB}zIsJENZO6NU7TF3RfiUtyS6-8xuy z{u{rKxvb%)yYYPzCVv!qrlMj(2+z{b;@t0iYZ}d_>=<<@1qc0!4vg5(V1N);LbQ>r zrh;pybIQkTHZYHsUJB9(PA%!L=zo9R@j!?r_R0(k9gBlG=h-GDmlURs{V1S1)SkPB zT&r>Npu0A~X>{YQJ^zC>^kA2oXWH0FN3^qqv=dAfMoE$rLNsDserq2j-CfP=wy&<| zz#Z%l;a*Y&i>N$~+SEvcnN4H67k`?J6xXd_8QUR#XPs$K;uJ;>)n}W9^OdFYf-p7V zv|+yR3N0V=JK>O_6wViKqc0#ZWtaU?O+ z)MT-h{ll9}N!tPGG%4W7SRGMR!+Pn!*12&x$Oa3G=DR#tM0u^)6=u>Nv|!3M*>U&#^O^*W%u!kOs}6=%VDj1NQc#^IEyZecQ#uY6Cta)DK`)p)HRB*8UndgoT>Xxb)gui%Zs zg0jJ#6gs|SE}#D_)l(Fi8$XLHq`(;*cqa_>kKN?a%1Jj{kK;!Q7b7YNHD&3R*655gm#OKb@iM1KYBtlLE zcDh=c7!#DC@Zs*R@flg|tf1X2^A>i;{1e5#0zOIX+^D4u*yqHjhmaT9m zB5JB_n%OMZf-DEucw!U=8TbQ!Mdajm*9uH>b62ZyK-jqcEf$R^j;<7<(M^16JSwHC z?sSI4nN1?0#RL3LSEGeg%a5sP{zGTDS?+ zJg-+Zn1a(!+=j`4B@n@A2q0ko{R0JTb@2}sno`uJvOw5&m(}1-#>XtsGBy66=a`pE zBBb`Mh@jIIGr$-9rDf$0@}X&UUP;uEn)u%g)Ag63Gd%59t%RP<(wPV*?rsH-5nkjn z+B>mRi+oNYQm>X$I;?7>FZ`%En>#aYgOG06qwQ~}vCimcG|i`8a8TFhuN%+DE}!p? zuh6kKczX}ni0X6bEJ%b3jGVh{{u1!8gx`ew{c9}cd$i&Fs4*Q*o0NDc@~!kvIv4+G zE6Us%Z6BMOM>z>BTi%w{r$wiWI70QskFEWbp=jHY{HmEsKRr?>MTr(mAphN|jHrnE zX?iU6cBvUDow;=#Q+*10LpC2jH%zZ9kx+7VOh%zH_n>^_O$O+>=3A~{sK4i-NKbeB zX0AjRfgxCe`L)-eXiP;g*R{qq-BB=QsrfZ2%QL{yB_P44E@wGEF>B@65yV z@_F2QC&(5*4lm{2`fFbD!u!F~DH-j7?yY-#@r{r`#XCU`_7uJ@>2?I^rK`DvaX@#yYfO`@Ks1kPm&Yb*xck0ZlD-@0gN1e9M#pv**+R`pH0 zY6-va!>Gas{Tl;AT8b}!;nGxm98cGn2E2b(c9O9?n;pI;Li8!za=7td7raN-B#u^vPCq^)}a(JmP@Bk;nA_XP6 zYlR`-fg~kwWJk{~Wgj3ny?^nS|JC9S)FoDbBYARDA7w6vRPj8t%Dh?;oL#>~@D*I4 zJNq8cz|~-o@e5d2dsdWdqUhePUwYW=P*~<)Y!`6#?=s%?5=iS-jkeXg?1yA=2Ze## z4-Ci_@k=!D>t---Q4Ihgdpd{PUD6otX|?ZZc@8(~j_LLtCmD-Cz6vq>!08zQNX7G< zUtBee%W&Fbum2y=N#b^>WOrgrF}dr9-J)G}f-9_6d`SdHfe5L`#OoafBQUSUi=c(% z$>vs-ONCBi{QOJD(qmjDdG!k<3TTR!{jf%J;GwLA%P^uV>XIai?zC!v3#|=+8T`-8 zX523X>yXicCkMW6SHM=%#@w^>EjfG49Fq!T$9&>!_$X)UK3_prSt0Qe?YyszRSry) zlo{1NYsit9etX^P$DW({rMfr$9ZqR^k3DzgUD%RSqdtkrxZc+N4Vj4)!>afCJhEz+ z`_Oq;`S7`xy1iRus=6^F+&&(u7)+OD)i{0ui#fzGqgFg53llo+-QDT4xC?E+Z{zv7 zyx%8FWj5G`Z!?IK_nFtSBnl7XJHQmdJ%)kzO9mc0#MJ#2SLW|)gt$USQJnhe2d0Q3 zfxl}=D&Ff&)QW3LVd3A904sef_0rc1sQPCDMK?=~5?XE9lOfK2JL5vUtl60l(%K#{ zKgUf}ehp3DU$`$)uI-KbG5+-S9xyX|<8d)qs-;mjyUg)gKbrzEhPpd|K#AoqSD-~? zli(H*#ReGBG=S8jv|RcdR4nq&ZLwqA@zII%*ZbJ0f!(g??oJJg^fiaQhHBO1q<=76&eeC`U8vR1&0Gw__^tE!iQvL5$t87>OP}q# zhF-AV(rCWjf4Z4Af+O|E3AN$(Mrg2mW$#(>PxkQ57`(|uyt>*>3DTfO;7Mp%wH z*Q~@mYVC2HEoIYw)6p5&nw{Uefg8VjF1JZ)_Syh>_sb_ZtvW?xqqg~=+GGiYS`!>2 zFM<}$is@HC^XkJIaduvkjdScja~Ih(@;_6sS}$xXrq<^dS!L+N_LX`&4m_j!&R|gIgm0xUwNLK{NA6s7Oc%uZ%{Cj6qOJmRmzLh)gqGK5)6KK|P}}!?`+&6Du#QK{fR$}j zBeqbK5@J(vr%{Zu{sDGWnK^o^$dJw_9%H?3tB1;`)tl#VL=)-mf_u1`vCb-+xYBbF zrQ)8_oVI6g?pKtR3{C5borHj)lMTcEla-EGh5?B`T13z0ztWo=@{6?9hO|SWIFf`h zO_UaJE$u@}qfvl({p6_Q=69>F9MQ-thya2YW})lCgr2Y7Zkj0`KJgKSEG&d;%3{w^+Wu?Qdhx;~MKLk__< zidPU`Puy+ZYzO?%M7OLRFD>VH*=DuG^ZpXp{Iwx#+vz=W*kg_OA=iA<&*s0M%{v@$ z1Cfq}h}kcS+x{)_b%-rWa*^3U_OQZ1BL@vx4xh0O470BRzE|>TTuk0$Tlo&2xvzCB z(un_!t_4JCi~^9azHRjiwd_v-XQKOQ{<>F*y;BbUmK=(f0g-SO?7tZDYxWA!C!S4) zkdi_Za0GIy16oBt*YcmxgfFLZ=206P*WMLg)>P0wvYDIV&pxT_kmsQl*V0*Ft74{O zQIk&dzJHSqIIQ7a-0c;*yC9L8=d)2*Nv0LBV$C%d#wI(f&>@Jbn!prkM>cL6FZ8es z6zXC^8viEkP#*TNH{!-j1+9fsTTx2m3U);5;1GOb2Zg{tjzgx`cuLIAk4wxSVTM@_ zT9}Z~BezeLW7Kn!Glqou##Ge{EhKrtlg1v+8A5oLZb9?GfI&>h*sqL z5!_!s%f|WE#GELT4Qgf~y!NWX1_+>g6!vI(=+zPZjq9%8+e(U@nuT~uvk2~H;y8tr zUssWtMYVRXxgy+>Hc?RieTF&K`+ssl(-ern9*A!+eYs$QwD?%H1t<#)OZ2F$zt!wy zOjhX(ktR{UzwA$Np4}=E=JN~s-+e5O<~p_bBWixG4pkbERZ~_8la1nM#AiQGRoeG3lsQ{tdQ@}zh29Spo0>`3*%!DJ50hL{~z2tOR5EX z{edk)8)ba$K>|}d0K;d<6t4nzQ-0t!Z0~J!K02zCD@b4CIw~}5f>~a%o09&Q&#&&Q z0t3}*2~BrpJT!Sg!rn`D`Wy5zhM6_*K}hjAgd^E_F>C2DYw{)e&)890{lp*hs=;_- zFn1Ni%Oq^LSx9$ld^H_Ynmt;X0kvn9bu#3AX1B};xl!?5I4GWDru!@3{TB^rDI+?1LN$LnaBjRDrncY!@ zk{KpMX_hmXr)Y(Ha{O1oHF&PFEoH>17B-x+&0aGLN_gm+HY=zY;Ijg@l5Lwv+etrN za0Gvat=$3bD)l~ISB~dvV@IJIG-lR5*Y+BwO+R};jJ?6uOLjOuv+yzMt)#IV_c{Ht z1(slt?X&*vd)^HP3>=WOII=oJ8Z{4BgJK6eM4q`9~^)2)-z#v&0Gt2yjPb?|#5 z{Dq!%FAUbFc_ShqVEm)CIn7j#l_^Ud(NLf}lM<5oFwhKR%Dfb*7MUa{l`_my7A-$2 zWg|dVzIEJs%DG`@BH7sJHley z1JT(l-fkCXY8=o#hTNfiV7mKzrxflD?paKn_J*NUf`ero7h#GOMKtj@lDNA|P96nd ze7>5JPipOW4Bx>bLL9ebL*4ik+xk=$jG|5vPljtlJY*)(poozLu1K`ie5z1XW|o?` z0!h((EW8wnaQ56!V=Q*_$+&aAr)~?5$+17a0ajfU!5>noA9ZT5&ztFdd?OH^ZU|2- ztBhUb!Gfe(*~fqXU@~X)m7Qni5VrLr^1E}=>Vj$Dbszm3l&3>HT2v$$lzby3WOz?( z=P^k?wi+sIFB+1gn?w_3H<{k0-=dl~rg6%c3Bx9jMMkt`gz#{HZs!nhUSUY7OfF{< zn0$W?Te`H;<9$9}gg?%nYtFJXCjEn#TzmW8qjlm74(=~rKHn)2hM!ek5^9g3H}ZYKuq?I0n|rl5!)-Eq210B!T4vnOlQ_~LmGBZ zh*fzVT@aBxTy~z9@A2s3pScy}__#x)*u>yvoj3se*$72!xGHw!Ep9EM;oGCv=3uMf zXy5k4$M|c@xj1~|W&+}GD(K^{_ReQ{ly|l60=Cq-h9YH$O4%bl(#Y|bM|zs;jzWif zKs=ZBAA_o&$)UXZ;9;c{f! zAFd#njV}mhb9UDZZ;knjrUZAvDn|h$?;v$L0;L@TDS3C{=h%Pr8lRjsh57v)y5#%A zdk^u2xcMKIKAo=gaqdx%KmLcVK~_48%B-)?-SZ{8mAcAy#llKx(o3T&O#uv#dygAM zRPD-~_MwaaormL}g`!J5VMQd$<_?PExUd0*Ct+UAhhDv=;hMiEsSwX=pr0FW{VUe5 zG=tdZw%x4y?l1q?Sn9_M$0RD}FCq8&=*n2{9?aC)H=|H`%)i9kgOmB-sMY_?4VFB; znPhA0k{0TLKjR7jf1RDxA&>dtmJJ&0I!C=B^7VYWT+{)p4BcesLG2}o@JvZIP%3%K zXA+YuZzCFSa{+#*u7{TT3%Ig`AzZI-FR8ebWzr3X+tbpxR7YldPkO!1jxPFGa40^eGkn_2yoJ?zJ0&58{cbv`GJo;&zOwwUO&B-WpQH1xd(of zZGgGdj#BX2;oEL5M{d_q(20VNHNC7r`xm#W$1%xmJ#CBn?wLf_9HR$JvNx@B8c$HUgD6Iy%|PZLZFo}%{J7;smUulw2d_u^YB&A>Vo$&3TSC3zIrK7 z2l^bG>@d&28DktPr|B$a2mF(I2)@F?rx~!2m`YUF~ng)BMWCc=!NAyeeG_)q5?$u2r&%fdPCgB=6-E6 z&57vTic7pHWe*J-kAutzyPlBuKmA)EV7wglaGM9P0-wkT#6(liHHQf!w+&_x*UYWy zI{NLQ35bk65BB1eS*Q@5*oZ9|Sd3e<$1MgxPuP)Q`_ay1eIIVrmir;}&nX@h2q2|- z0Gn`u;Vo%}py%0D1^CN9oy@3B5Op1kb*Q}+tA8&+8fQ_rUgId*6t~o#5(^RhU%zGl zw(yud*K{ycCT+e%&Co6AXz=fDHO+<%Fqw&2}5o< z+sFIm&~kQMnz*UV=?lJ4yaRlJ9qJVHf2#77RC)Rd6bBSdTL>biF>D{PYWa43%8@Gk zJ;#*c>6!#cpds)XYI*w2lpjE(1Y%1RV;*v{x@q=QRSq92?s(wuEDqX@6IpBORHwJ( zqPjCI!{^OvY^`BqrD@%yp|PaUvUPstb@>{m-SB&d6`m}eAdBGrDy2W&av)C`@P2?O zw{fqvFe-~SZo|a5HPTbzTD(5DkWb&7OrjJW3fM|w*U}-Csn6UNDYPW-pWc87ltP(3 z;TS7>Ha_Px+EGKm%6EE!dP#9?fpvWaZ8mPBBC87602plYJcU;^4Y)MPLs4m`RN`8* zv?Q(anOs~(9`O+ywHs<+ajkJEYW#FjnziXyJD_;`}X-Mbl}r z-)Ax<02eFVB^9`qVRWJQ+U>2!_ywYujJR9&r@e#N*)Z=m58coj zI{llMEkE@8o%XeCgJt0IL~>p<$jb<`A)8@cG*a=D$2%a6b7)9euE897Kwo#AZqnKX z75?`qYcMYb#}?)OP!pkpltgdid5YgG1h9 z{?r~{NlD|Y54=U#6WyF!{mpTrKwJNMcvUv;J^WK5R(de-BOn_9*!j z{h5dPWFdJ*B*BpzZulGuE;<5})$HSCGF402!wgSY_6fOdPW6~*dAvUQLW`Pr($rmp zudjxnZ~R$@5(BQ9FTt zocu(ii?@mvvNi;`S*+zWFRR`Vh!$6G5F5T#@|z@yp9;y;r4z99xOf7~t=YB?!djwRa8*~Q&ZJvB&D{fCfJnH}OWJ<+~fbXvZ4kAjKD3RWv!ntpP zdR?P~n=n=Nr@WlrKt}cXK8p>_k8A}RfRXY#I~}i?A!FhN>Yx?dFs5|FjfI*d!gQYp zplC|*e^8{J=OXkYQ&kMV-$0k_^_S)+#qVG3F374ryt zxJxNm5kCD-;orrVJ1M5QTn48~*;?c+N_K7P%M?^9SgG!fe0JqJH5tBr;?m(bqZhDt z8nY8$(W(^bln28C^4omj%jF} zNzQIwUlF#NJQhR?K;NbvwF-*OJM`lng40D3+vAdwEjE(o zH>c`VM5*GaB4f(9dm}7t^wY}J&R{1zhg{P(Tu`uqYrZ5I{c?o}OAev?oIi7^K-@zN?GXNP@Mn{+*Fgws2SN|oCyBN}f0d104$aA00TIp*AuU+KGP{!xsC7^m z2luR3r02HOIc@cDNSrP7;f^mhCkU(3WZFZg_Ur7{^~ZEOML;JKbL8(r)(SH2@^jx! zg70m`p#!zI$deEt?h4o4T1zFZ5+Nqfru-p!C4~ixRp@W!)P5=av%r(Ebi;iWrl$y- z;!jzH0Au#jVBX}g)V8`NSjfn!MZ8-nFiz$ZaV8dfcE_wf_OXI>I|h~zM#3Li!I2Vd z^N@0IU$aZcrG4H%I&s{)7*N(N=k3%qE*g9YwxS*k!aE!!*PkQf|IgbNpw7zLa(WOh zTVUcWf@0^_W^D10R_t6zKH~#z$um}GTi~n&YwBnmk0X$gM~CTDYfnMW zdvYTy_VvGk>iT#o$%2=ArbpqN_YWAwZW5!H*xfiG9VQ5GqX7G*FjuId62K81RW|)t zy*e8V5-vk|&Gr)-Y|G-b#mU8e8^srw+Af$4A{aHAa68@C9@`#sTloZol*P8pJ%ShN zdWqV##^IVWDF8R?$;+*<=qQB?;L+q>;0%)#r0neAJXS5V3p2T)d-oV<*MTuDYE}QS z#b%M@%8D}bIE3r;9_^-;mnDHZxbn)Vjb%#zp>;|g3~e5mB>o7e<%)+eb9!mWZ$?%& zYq++J*DuQ+?YVQ%RjE6`h^5HaZFBZ8Wpj^^H%O1sal-d|fF~|x#HpS7V>{*UICiPe z2ONfK0_DAVm?DC`AXR|JxV{<;(2#*+<|dkh;_r(;)0aE;)0%?@M=RUms4m(p3!fTw zC?ee|DJysH+3Xe^JiY8<$XWN_hc~PDekZ?!M9mTrf)8A-%Ch#p6IAz^xA<#Ej-Q+x zlPEQ?){Rq(J$Qgq{L+9mtSps?Qafe_p70rL=2!QWrgi&tkk<4JI}q zeh2*d3jmW0_S1=XhQ7O1eDpdY!K16-0Mh|4=Sc5@X_G3??aD7DcOVBmw?`b-$U=@bkeQUDcT)`F5#=zC| z%+=ZPKzCcS^){lz@9#;F!mACPLk;_}_V9_fa7D%ruRqJscdEHudi(OM@a^Xw9etl3 z9ZhE_8>Zc5tGanLwkCB4KKi{<^XUg;;=Z`*^6}~CeqwpiiL;*cim0>k1RnYD!UlGH zZ99Yu?5sHB@gwo$|7h&J#1ALB`qza{0wC$EnvXi#fMZK*lV^8n4JZ|6&P2!*#IzJ) zgg82*%`_t~8Dh>Q<_ebiU7Ihz^QFtB*OIL@p>41rfX!=@l-HuMc5Ow_?Jr4WiN_^t z{^^`t^{ot3xc$xj0r3-5?C?weUf@l;Wz8QezuQ;k;UAYdy&y$2>h2%*xeR~H&V6n3 z_}DkO!rpTF+SSIu1{OM7S0yzt*MFIkw%|;tzUq-(ucE6F?QdC$2>ibx;+@I?Bg8MN z7DryJ7fIt2zn4Zz_vNS^g;RYH@^V6*Qs@n6WNah#0t{e(LQdAt59FlcD1faq7^m+dU1>WzGhg%1n)L5CK$`b@Q9 zK><737VBGm^!CReQ1odnkGKR|Nsu3O0fs;6f=y6G$XHTqN2^33^_JGGQ;`^!-tQE3W3{`%_4Rlb6uFf(F1ibtP|v(I>C@NeFH z{6A)WeLcn*z%l=f$(~TBd*Rj0g%Yz(PywRh>O5g;HI@H_vaR?M-`Z{)%yziJXJ<3S znoc!_Y2?}7IVD!F0?N+pR-v*OOV=8L3HL;COLR?AyAlSin(Q?In3yS+c?_ez=2(X> zaAwA|&@+uT-r*vBX>0)HuX8J_7hJWieptqPnljG7BG=Ms>E9PC6tl@TfP@y7^r(|R z4j`Fr#IRhM=WhlEA(!dF*;&zy3%x2pRwrEYW-Ep_iqhW9y~mod+EafijhEQ}M+s;^ zaU}nsELnIK$XaOq{VchoC@2d(PZh2=Ije!R1=cw@W!-R}b1H6wV#oY>K{nt0Dmlpd z@a&ug*x|Pz{r}Zxq&X%g?r!xyZ}=a=7luf1R%N!8qZ2MWLu4;9$iSdcc!)$vgd4{I&Gsh-G>Z&Y*U*w?f)CVt`6xSB&=ROl8mA!uE@@*x_pnUGr zAhT|9CSOYA=xuTgu3g7F{RQ_)A;{P)>xo=a-Q_)ES3-ZWjr_Qsd zO!`T#AxIi>dZyhf&ZuinWF#m^BgKLi^YuS^x1m3%5SBaOK=n`J#26ttCfomSXbkam`D~|Zs z{Z*DsIc{^4%s&ycC-^$ZzoYeuP|H~BuaF#gBv?w*5=rK#=3fK+uCU1|R| zcgq{;GHg-I*dky&d=H`GCR!D)>eFhjP-^vpJuCQiIt|U;gn~L2xmgJ|iOVqrO&B<7$(` z_C(7j#WLA{bEHV|_NLY#X}c@i9M%13HZmy~V>l;4+J7QIryW%v&>VDx?p9ZkfP3C{ zc+FZ4bcj+dy8m>+s~cq7nNdJ?ku`HC0GhYoId|&<2uL~u>GcET1u(xpzo{n} z?pj!!%ep~<>jo@S;}0Gh)U|l&(B2OJG}2VPi!nbt)Ydy>8~9!u(tq)}1bP&l$Vbm9 zA*s7PK)e6Zg3Xe&vYZQoCT-5J6DB%#Gg9 zeDvD$MBh05eOJ1iD%aWxR*|y8GmiOrub-*?N_4U)*`h<;6yP2qZ+9LEd=*~n;vg&B zU~oQ%aTxa5rr==?mBxSURTMlJfc>7&%Naewy<_8lBbJYAhRe0qzv2x7<1-+0{SvoH zf-vUfmC_#}zZkFZh6`p%>&Em`W=VpVG2jP@Th}7|l*74?t+X;J7p(QB6I_m(O$z7? z{W)6QT*0ru0%G@Eg#){RYsPJeS%PpMCrnrjt^s(ZI<-<;2u@owKWW2>cEaij_!qQN zIVa*%1t(>Kvg@xNGL$42pJ&2^I>%?c<_fjr;pq>-+ z0wun~FgP8}`Hd+R`4F)3@HCj58p3)Q=yX4jK=DIS!BqN!`_HjB~gQHy3&_M5=}?;M&6!&bwiaf%DZ?LM9t3 zlxJ1tP1lYjwUq+ZWV5BSl9c~iG4JNg>aJwm-y^5&O>MyMav=V3IbO9f zVDbCZ6ZqCXxK|X;Zcfgx3$3Ai z1KT(6ZhMQRrMu1nfEMD-C|D=|wJ8ncW6=3A2*vR@c(}i@8jWf|iT{T87h~1Bw&ix~s;{uQ8yOWGZ?k@GBm(ktOWJ`gV^34gTSQL# zoj)Ga9C$^}+O~%`?gVh3D!+i#<$4a2a4Mrzc%?%Hx~|kfGNUhGKGXflttBbu25yDK z=A(l)y>D+4urBW9wFH?jIoJI-$x)0+im^rmy%eSQM(u&SO3}99^z)tqIf4J z?RD50(?Ai}Ic_C=I9RqDb`ylhN(nZVxHQUlxXn9j*vi)i0wUB{QIwFau(@?#WF3(e zA(E&p4ohB-Y!Fo~*^ALH{?wZkF~pow#nxsk5b~JstyFxGa@&TfR42%@NF4=e7Vxtu zFF9wk7b&HLfQ_9bHK-*_DZTK-OG~9snTzY_V$yRbn7J2TH$C!LWQOr&EYF+3NTX@% zufX@25$9{w@RHyV2|`EQF8DTd3$-(U1_^*>XUMvT@}eJ^(@~V!by_6O%=c>lgjQAy zF8-Wdrp9-+OvR_2Ez)PhH_fSBcvC zE{mp$Fp%NybcU>BOxA|3l)~$-&KzoQTB35oWSE6j8(z9=;uxc{?>-sN@jCH3%GNxl z@|24lK{POm+ z9s6^4KU?d877Sp4eq0QfMbmr+sR9xT2z9`<2yOqlN*vB5kSPR_M=n}uQcz9q%xFBQ(F zqdE~iEQ^f7{bf*+>>|3S@6h0=r`O7DI9Y_*CHgu7f;>7%iMIuQ1t`gXUf94ayvDN) zg3gR00*Z^V1l~a*(h530is#feRb5-x(@Q{T@;w;|5SgUxrI5;A2{zv2<&WdaK_hS` zqytE#lp|WR1Qbj;iGNuBzXK$CR6o7xI%nhyF!?cwJQKT6qxkj9brtA?--~3_mw%9Q z0VUB!cCO`kM%)`VKG`ffqIkt(<2!Js`^8tI`iJ)DOXgL4n?=D%97u-n1++o)id)8hP2^T@a{@?;b zrt%(JNg?ukH8i6bM7|cR46Bv3k-p&UpS!Ou9AOYoQQN| z$HIOD-O%1@GoU>ZUcU7{9#-{4m+Oj8G{!(PZQxVUZVVRGGc)Mh=zK%RK{Rz;o9mZY zZ7=OWG$7u5$CvM=Hf^5)ef}1si(%lgEw_yqe$4Z_e>O%R?qtqKX)d-J%*a%#_4aQR z1YKRgTzDwfZhr01*&EGA!X}a#IcBzxL{7Vr>^DuTJ@*}t3wIh`MNeX8Y@}heO`m0? zN7$ZBoKW5zVFW~(SA;4$J^y7ze)vlm{D40n@^byN(xS?=wdHIM`C`PQOm7z)3U|;G z$yiR-xn4M_R1@7yT}RiL?kUKeNC2;g42RDx{wzR#wU0b_cY&Jq*q9MIwd8P1VJB{( zkwb53$&C4r;f<5iKf^DW!b$u_xl}E}9s0OY*3U?$D0$$lK5 z<1}m@iELJd2DP-nLS>8_jilp;EF|xq*Rqn~l~p<;K$>+zw8kX~yc(8{Z*-G&aeFAr z=&qhmwoOYvI_UTxdXAjoOyy<&m1X`xLjEM?=bYKcLByzi<#n34jwxu8Ic-aKU#Wo3 zNvv$(Ny@GuD21eag{4<}zK;sUn~jP$Kd8=%&5miS?47==)E6_$UXgiOzw3Bk)lG#$ z69Su#>HzRu-Ib*f?3$F(4kdLH{_B#}Z)w&1VlRGeH{AywAft6#dt~$tiWd%~&(ui5 zYY)RcAY`u5;lf3T*SO6)DS>l={rP|R%y-c zV)%nA31GG;q|Ilg-2AyCrh_ z?rX@x&(dcg$QGa|?YEVxn!M#F*v6k1XrP?cn_wR6!Fj8nE>y;smQwvejac0yVcPXv0Kz62!1;rUTbIRJl=xOk z;EJmXO4wP{f&HtseKaSF!)9AzGxjQ;3}3{#+*2Jf?kLw9`3nc>jGDq6run7;k+`PT z)m9Rj;|!jVn=T&Us-*WdyEsRCbqRPyyt8LzBAodVpgI1xvLHlAQ2D1IKt}vH9W>RV z#|%GU)?!!Uj@Qc1CrINjY`tm*18+GZ=f0sN^_o7S*K&#|w3i$pVorIc7R_XbW2F$( zHUGg%-(vE|Kkrg}+mJLs;og?9+o{_-HfIij?{VMeCZ+dtTe9HgxyPxQhcFKz4v2lw zm!b+2EwNit*4|dGQ~XE7k@K+BUP>~w&L7iR#o~5PK2k^w{8kdvtC`$6r&bnX(u*V4 zMWq>>HR6^ko;mu@&yUTB+J>&&CMD#VeSd6=Z?JiWlM_AzjU#p&c<|RnoeHnO8?p|&m2Lhe(usc?5d2=$W>W=q2;560(|PLy&5xv4O9HF$%jT5xmeOmbbtB;NF?87 zED``yt`Wd~01PPCK)&tTnj7X38h-}Fr~;B=PDPN9$xD@pgt@i`zPeyu$aebQZ_@tF z;v8VZ5Y%5wYECzB_~b`|ik<-u+m&hDXuHkuQlm|D5-Oe6Vk?MKmd5b}4l^!E)Pjh@ z@5t;_h6JDaQx9+P*qVffk^sCzIu3QTsGfd%LT*o5<>=AC$K_&CeO{fUboJH4M`^XR zS9CI4QwWc@Or}d{ueS#B5mO#U8S;%)!~FvhLkawnqO0Db!q3?un}Y* zh5loICvspU{H(LVSm|#!B^VP~7l0VNi4+cNWi;6)FN7PE6DcgkYszSi3xD!-egFk% z3h(Im;wpNm*mez6*kF?CiSh+;+HcrdxZCn3 z*cdi!o)#S19LbN9XtfD8^1$;>Is^93iWGa{oUWldUeDL?);D_Xg^8^+SbK)e%EP?X!$de8zzrop8@5P%%+0Iq}JK3cBzTJCO#GOSZUC&@e0YXA6QiLxbxRBBLkyGcY1 zQiBkZ>`UD_h(c;?iI#IHWl5rFks69ZGL~v6bxJB}ml_&6?b}o{%|2(&@?5^Z=l6O& ze?0z}M$5cru5(?V&wIPhwS1rP>(d)PM%7#G%5)&LVKs?FQuDurYSPD#r`+rFMRy-dC4k z;;yK*$2Q~y6^`*VlFU|LnKLUkvMF}4_ok|h-L6w3ihnfR$w+GKeD|U)z3%0IW7x-= z*M2F}U+4LwX-3l1sYTs~lK(51blEN8N6XP8k`HrdKmUDc`}#E#wyU496PlX7zq}k7 zQm{p1oL~Ib{6fj@sV_Y$$==8@kvYjz&F&8T-SHTEF)HkG$bNTXa~KkDG3%!lzj|ux zY8`{Z{_aFOXS-!9=5a!gAB4XZy>d=X;+8}&5_Ub?_-gj(*ey~b?-m1G11(&{?RKB$9ZhE%JBG~%_06}HUHw_F6~!M-QIV`?+XYx zSiN%7qO2F95}Wlk|8l;!$nO6<@~-GZ@zcmFp>_MWMW0!_K^%!g-2om`bh`HPZQIv> zM@*rc^ru$~4xW7eTTjPfhaJ^^ZP^0hzE>;Ou6!18Z{hS2^o$tTHEjRpIq1Cr%9psX6DIT8mhM|;9<89v{?wy)e zb8?}Pi`}sw<8^s!r!F5BIsLPRfBK9&IOpv{Ug*!?RaWm-iq>rzZpv%xdNh!?fc$`k za?0Bw)S@t$uac?1m(TeeVqoLRR%8jxE-EpB|ssm;P<+7z!E8aHZk)&j>zx0P)-2EY%dj2UGxYWAqpCy!b$Te8gh zG}~u||M3e;j-5U|CvDcKe;!XC_5b&8uu%8#>@D&07g+m!3r4oexANOAJQ;W8uz|(T zyKAQmmfWc6i5)aO>1@6*>))&2j_*6}={<98^-#(uWoxjg@c%sI+ox=|RAMv$NyoHK zD{8m4RHn|o^71Q#1&1(L^NLh2Sp9reE)orO@>KzSG_9mbU&0vSbLZBHUa*)B$P|)h zsy(Sxtc$M_z=IsxlYR|J)hxQ8D9O+@|7BLxYLBOlfK<0!h|QD-CC#jo^(Sx}H`-QJ zpd(;l{3mpF_j5;l*U+}e5Y)M!l5*DAo}tsBPVllwDJ12mL*w4>anvv71ULL_B?C1oTFM&Ihp9DTnrG`(+{IHwTaXm+BDX?9I^!r~w4B{W zs!i%KOhK9P)CKV{C85_=M7*WE4~0YFEK0jPV7FU;V2Nv_)R%BeT&5&aW$4+Igc-KS z{@d->`}}B&!+1wkgEYO@xh^J^;lK)lWkjF)|MLxYD$-BK9*_uRG!#YAJtEQ;iDq*M zceFev;2*KggG+QqFNYqqrd)1eVy+4sCgeyd$B}k%#677tOkPKTgRBq<8?Q1%%GpYk zI*x!N75mu~JDTQ0_(Zy{hpS>D;_Fl_ChZvJ$S}$s`OYCw(pkvn&_igCXdhKT|FJH> zli~CRlpLZ*43+Bdemq(N2*%n<|H-?3IKM)hVJ$ zq=jos%SJ@BGohnTm9sRK^aBmr%8@yT^y+Ikj=_{O<&At}f0X*t#=*C$xN-q8&A6QF z#F|E^vf)bh4TcAYFh(~?d`Wi?b9|>?Bddl%3Q1$M)%wYWQm!=n?_@G1mB_L~*mfbf z!YbQ+XtQ<3VVwU0bwmB5`?Ir+3gy0jWIS5V9TAecD8@ysLEva>^AfN5D@h$NYZ4}R%7kZFXwmh! z5K1WNMHN$Cqj_!LygGV4%&MUnj0}iuEi=SEUvi{uKac$L2kC^eaMN*L!MI2k=eL8A z=wUDDRQn+b)Frqg1?uIi-uLx#>%_2=ersPklr`@aT!^!7S9{A1DfbmIYOXx0WMMia zWU0*L-?mA8_oI4+;O;|6_CR2{+dO}{{n2l%?bBO)&>rqvT>cUr#iirX9jxTXI)`pi$1;HAs1X3bvIp*@cj5_V|2C0fDV zOP0%mC6#|55&tzc10P`Gdaw}dojzgazgOQxY$l93M9&Wy56_Nug9rIpR1;)U(=SKb zd88goZ3~Bf{mONkJx8MQWz&)JQb@=@V5{HP&A4&FpPq>}bLGDDaHX|cuTKey658V2 zz{m&Rtw2Hgm)W(IjlaO3exaazh4n8IS_hEil9JW%GBkkpFU{OI^^dkCw~tVEXcx0IMn+R8Ey838#7tFykYCXT4?z+S$)GX0Xoa)jIR%!M zjUQs}uQAcjC8NnabQzCyz1~7)fT!vm0_?vQ3KUrO5pl#8O8&if!&_R&mz|K>_uHe2 zJ|>l`65RUP#n*H(r~fNv9tj;oXf#xhMJJG!MCgd_@iu&h! zDP3@s5~8s^$^>Ha4^|R|9fXPPss_SLrm$9LBYOLs(BkSWk%&~FAQyPJ+oeBd#D`smv&I+)L z&xhEH{Qg1@r446Y+L0ei2O8K5SY^f}gf?4(+AVc~7j4rs&nJ^P-r?aP{du~xdl^o!L$xJ1;?=J%jhvA z;kVez89K>9Zz?Wt3#IZpv2^M^;;GUnn%Kfnd4=nEqS;_p7sP{QLa=X7ZF~A>&)3In zO3Sf6n0w7?liQqMgnIXfN$AXv0V}4Wt=#=7M?W#hNVK(&NyuONs7O8)vEpz;ES6CO zhmQP*M7zP^kdPM}_&7XiGD2}jOo(pqHm$tq`Di(~{XA{V@JrKHwKE$qQ1vH$)Z~`! z32`|g6Mj!dts2J}(Bhb0Z`2ef!(qJxRoG?<&&{gqe+KpPhyWxRv=5Dixwcez@4e0$ zbi3RS@8A(~mf93F5=Nip5W5)Pa!4b8iN);5WY_j345ba%;WT6t14M8ehDjWoP$e>%g_pY5Jd;xUn<&KPu z{b`KS$I)^(N;DX(?|9d`1HfXQ7ajhb6#CH@S0~WlxS3O(NdZ6*la5M`Ie@Zj=J-61fRljZED!tafquUG&*yKgj@##2gdx;D2tdPcRxt?w z1%s(e^HHZOudlV!e34k_)C@1bDo-Z8!NqPa(-PD3@UFm|d}TXF;k(}dz%{B5YP?aO z?Oo$_CS{X4L2mQ2Ib>AhZgR|=6e4o<4fM9|)p-9YX{)AR#hRV3?7c0+8MEfnUa(&J z%nf&tKW=ag82Ny6gbArLp-uDS4jVDfN$Yt}*3Tr=8f%o3f`SS)X zPFoD3spqOi;)(3Fr(~vn;t6_=8Y{$fNM6aVXIS0LGw~nO!GmjNcn=!>9SO@wjQafd z(+lBfNW<^KkYupNA==ndqDEA{!~(joS`PX);ewV+v3~wBHEjz=|HYR8$mNnO-1pTm z`49~!C})6{MmVP&0X!n2K}qm|uJ31cUG=BWk|{(MHskcXUzJ!-LdZ21oD4}iC7pp9 zTjB$_;6q-rk;vP=VtNiE78>YXF;W5*N^yt)}MMC#c#2+73Lw4 z&`VBN9sK+66OqIRO;%4r_n^#B1%QwGi;@89oFdiu7W?1TC4Ha%rbVUPvm(}5b=A$} z&ALcTkC6YOXpX^%355#)N`J;$IGvDZVF~br+t9>|>&pSekF`&X>9I}AWG}NP@Q&3# zFWM+i0C>emW^b9kiisGJ^*fSU$kmUQtK_pXMd1qwlB*QF>u$lxIRe(E-#SyKKiZP8 z9>adNjYKslxt@h;`J`%aT~ttCujp10GGz7eA!NPGZ>5%EhV6fJ`5^N)+zFxh#-&k% ze)D7hQTqiZpod8PsWY2IF~b04b1BPeMmp#qadzk*(Qf*@N~~Y(%UMIo2ar-WEt0j+ zdFwP-AHNfQ+URx>F2pjv_3^OzMs#EkA5*omKf6wUE7p6`*T-yqD4yijkGY)~w>-&0 zY|#)$1|`JcwyS(fWG#5j&wFDwzT^<{K_yy5QU*H5E`iy!DrC(Ufhz2hV4-=E_GP6x ztbG3@kQEn5<~ck0#SnR{T0bNPbeZdbcmVe7iqQVEt*5W(>3L-Nk?{ccAY?fFh@a5UdN1lxbHd)T&k)eyyN`dpogi zW?bFE{U&hgw_fy+Qi|<%q@xFW(N@vBDP0R|sgt}3apnV(mqg~_E zONS7?>ku;ZSk1k9c{ckrL|&;sYu%uWj1Cn~%;mb-6=^J|mqa0HpDsl?y5Lhk;g**} zsqM+FWcINWPg2$`Uv7=&dDaoRfHP#^Mp?U&KTv0?`jMb9Vd7}jUvf|@dap5QMh$v= zDy7n>h7vYlmaD(t-u;gahW_Ht4O-{EXGWJ+%0m(SMC0F$IKN)dT=>|H-m}l_gv6I# zg_B&p4tS~zb+N#nr9OKRLtkKHZe$1%*tBM#~mC==64 zDxrhCtu|bW?ipZau2His&%lMOUVdc6mQCnntE4%zRvaECucNN2*5=}1aA^v$mQPAR zeRH2_*ah;;WleSsGJZTdOx3P7$2)ms;e%>aU%zpCLhQktvtwl*^AZGTq(sE^B-Gi*#dd8Qs$?C6HFzq_`POvvs2`OXlg*7^IY%NTAqZ!}T zZvT`kks-jy0uAKezp8uRfU@H?^Vye6Za!2Hy2)4LJ>kvw-7j~XYUllU(Oh@DNN=Kj z$5(#j`qqi}Rw?dJD`)CyXoCrSHQRf2rv9_uH@jUsADX>r>KR_yGrviPde<58IXXIl zm2ha$!wS%lyLhbP^A8<=w5BEC8oDf|N+pcR#XFz3=M=l$Xyq-%%y$W8dq%NNPnK!E_IzmRd`wfaE2 z(XM&@3sCYROFn+tA&HP|2?XfIBr4s;rcFF?l7GtE3)?2egddJFRp(~0>c{Cj(yoIl z*fc4g^;K;&C#P>J)2j%%Dl!mhSc@fvG{rCrVf1Ta&V&loKLY8^F2Pvl^ro?<;^YP_ zuwlQv;=A(@H>SAq=a$l?s9thxb|j?^-;U^|BWqCS!W)ppZz;tlU24Uh{F!kQQvt=_ zukchq4_|uoy*xe3QB$LLcv?IKc(+R1qYlyQ{Aawl@Sw~)y@%KB(gm1tp zhEcbV*x-)z^JZ1=G{%~Qadbi|_3&vd<-d3vHJX3zoEo(|aDVyerWv7_}Af*Fiy~ z?-^sgQJX47k}4jhz3(tuB9biX;sHfx#g+d)ivtPUH*44VhBYDEU16uD>F5Yo=|Qaa zpdCrcL{N$lAy!()2;ZCbOmDFYh;^-OsmJ$SU)Tkjg2Vk{o+gyq^G!(ZQ^|SHptxXG zWF1gNL_E?82`w1{nh|2+&Qq1iR<9$=dS&1Y*BT`BjFmg_o%0xhld(I3Ny1D>$)Dp+ z8f#8-k>$qJ#(x!gAY$$jvJkt2=evcH7ZJkvbv>x8pvR4HXdzG$TqM185HjTr8DDum-PE3H3g%Fo+8K#!H7wPIhtp0YcE z!UWy$@zUp6Pu{*7a|crx>gAFf$-G>?g5THmBh=yg6Lrw`!$ka~bkhNSC`1@&v6}21 zqbhFHR~=2J@Pan&y@)kg<%cByt=dR-Hf`Wqoxf&BE1q6*12wxptugjqEAI7p4bg-{ z?E56X{&_Ylo-!+>QfL*H5GnJZR{vH01V7HFsUb-+y&4?3`xt`@a8X*kPjbYBZK&JsP#zJ|o#5i@V-PbNlu zV|M`=E*fYr6_C?0u?FA`s)MBl6ybX6jtX+M2NL!?q_&3W`NGmi^t!6yA)KR*e*0SP z>s59}*1?CYpYwJ~givR1;E9uid`SE9yGOyO7WW!yR}ct?V;w+8%l&8WGCTlYtnLc@ zAy**RiwPau7b_2*;!^7u=R_G7e^vjH@#lEuYLcg!s+h-waoDtvfp(2Kt0^H^NUvFO zOJB`tWN*)q^96X^b2%b5xwnjz1O5x0AQ&NP4=U(;VXTU&szJiB462W*H5NQ+K2yyW z3!0ECAu@rWL{Um8o<8 zXl^?Of3dNW)TVwFNqpz@uELkO3!d@dQa8ArOS*7cuIQfZ!Ek>3xIR(0K3sr_kC2VQx~u=f|iU1}R_ zat!x7sXUE{dc`tcVUAx3N7*N>3&Bv_Z#=-yD`gX!1D)V|}$0m`*z-eGts8;fXK)fav@ZXLbwU)~8f*!YAZ8OWsVY^h18 z#Dm7s5>8xSGHQmZO^7^H$p)%6e&3U<(>+YwS)q@5-p?av4S);K@pfF#Apa|xa1`_=~*p84Fgdt7lpf6gNy4B>p$pZwKx?q&|~ zHqq#e^UuCb>OU|t@!wN&Vf4l6F;+3Yd5E+6-D*7G#zQpq$?Xr9uf=vM|El^fX|P@zio-_utvmYA1zB^!lROa^C`%q$vO~a7 z`5`X;nkY~`kD^0BvYqebH!@ap1<@wSFH$Y7r=8jz=2{VBV$ByJGT*(Ze%}ZA#H5Ey zc{>)&(bfIeL%)7DLg{{S1v-__C*u$sJUi!E{mXo3SC;zE0M^G8F4`JT1*wx?nC-ay zcP(RpB@bm>Y#B88+Bj1d`)+()FIR8%x4^>Tjk@FqHDwqc_tLsAs)6nLu$LJTsfm^~ z8p^Kc8i0;A;)O=Pl@9+JBV+~xgt?&kxx<0%#iK#S7&0u_y7@2AVrRWLn-q_FM;QMPm}L&-5+FN{xh5Jq8kiZ`e7S)P%rEOC|`JU{B~F^7fcb4;r55p%h=;2@hjZozThYcjCn zOWUrs&g>EMfO0t)xNM{h1%ir#eqY@Sl$A%MF@kY5zKX$-da1{>lcT`R z_B^>g`A|}r$>YI)AWSvuE?rk03}&PH*{oi++=W^TyhNmuagBl2SgXU6?jSRR8R)@6 z7lR$veVm>;%J%LqI`?Dl&)ZOpv?}v=#reBRL+v);L=gFCC0CkE?v> z&W=8Fu&*o_JyRNtn4wDHULa>4Nr=3>X46toY$i>5$z8f5WPARu<|ET*2A!jhV29|L zI(PViav&rASrfijZaCWf8RymbkD@H}Ysg8-mAatLm()>y5C5FBhxdY-wrS3N zIl70X3Ha~M!l(P?3709?*~5^3`!wq}ew5!U%+hz!7F}$B`=->?U%Fo*xKQCq?&Y13 z?!WHW;idAuFsc47?tnN&IiO=6sd4_7&yIuYz`laI%eVJ^B#w%g|GIEInRBggIkx;p z1A9}{=M(FqJ`?6|ZTv2Y_(aVd@Tt#=-v4}9#;u`%ynkS=7Uei^%Xgan3NPTebY)cY0 zpKwqy{}+{u6u7}P*v)-2fKofm^P~3t6U~}_Od?rFm!x2upR8+dqTAS7=@O(7Mc2uB z4N4D0!+o-D-r}ULIdBxzIs8_7uSnIw{~(=cZ&!oB&c+5Oq!y9Pk!e$ozLk-y>=CpK ztiY^cCBvx^i#my44_YxakZ~my`KM8u3A-*bL0_nc`P6)5R*@zEu4LRf*;k@9wB;xq z-TND3tn)J?PhQHlpS{(XJUZ&u_Hy98YW=Rhu_C8&bmH`@kH>b$!lvKmldD&=I$Mda zS=wb!7j56M>fKBChguaL%&dz18P4U45AQ`e0I`?LVzQOb`QvtF`aq^j(1p-?sDHcQehSB=C?-gc#gFfRPMq~NYNG~>J=NW+^e*jLD0eg(oLQ!F$wqjkljN37Le;;dH|UKH?Q zB6)BjkUHpSAg5_!`uc1!XQ>pE0b}CU$n>ByRPwC-QVf;xH&B{PVCMwQ?m`g`q)Bi* z%h*9_1nVLR9<9f^{MhK6x-GD6Hojb0BKo>YR`*92HR!HKe1tKy`>UnD^r^8dVCJ^Y zgp!2(+ahe~3ce~#{ds8`AQ~w(KK(Qa^f|QOTAjR@PrBELt}Y}^MkL(1D~TmCsh%>z zjef?_d8&D1&H2uF^yaaC>0iOqmf}K<=~B^Cl4^OnUM(1id3=#W zM26|oM=qfGAb3$1bsUw6o+0ol zpDyjq$g+|2=j{5UUM8j4g+_r(PKCn>o;beIdcvVwmF2Y22?`M;`=e@u(2IkM~Ox-EH_}=RW!mI^$iv>Z#LnM8m_q z$K}cmrwukdAi9R>^;``m;cZePM^Mcl4Ajp<|I9T%O|1)|_P2=!xVd%|pR}c>;OgBM zsXZ+(8EaGNCy@5Sm)YojcRC2+3|zxL3pifSH;IuQ`(*hOF;5pmNj|HO_R2(|ehc-BLMW zT%A+PwF--rN`D6gtIu29;q@~PR?dvK5sk}04okgySp zT#Z}Si#Qc=xLXGw?cz`WIOVcB^s*UE&AqJFg#N-Ed88(?g$n)NtlWJyLAtxdp4KG^ za$Ie*R{QsmlEKe&qLbCUsX-oy{R!X!E{VxPChWoGS%@(UPB5o-zlrdO;Q%!0>F{KJ zr5kLHch6|$q@5%+^qW;Bi0IAKI{WsU5RYmonuO)-PcC=}Xty%Hk-%(x9K~>h2E&Ol!``RVs zgG9TGc^b(#6qyvN)JXpu7y3)|hqk?qX#$CdEK67fxcpscuA&FbnE)gk>*oC-YX(rx zxPA03ti0=MWec$yRfx8605P!&rGkk(yTIYu$4h;YQ86NxSw}8?;F493r9BqAOF4q1V`wxjbqt9+l@`u7dwEp$y)XdSU3Z;A%Pl#w&hxaE ze>And@+Li6>Ph>Ip%aJ%ph)5K=@~Hb9nq^6gRUa`Tb9#67z3$9uK#rkC0JDqt;K?c zkc8Dy!KPg(OYg_vIr#2In6T-2iW%+xLGWbOflblt>V58KiX)m{bZ|%|s0qR7&~kqb z24oh|(;;q|@4VZkb#3O$*3dXWod$_Mu!$yhE#ZgYz>J7Hymi*CIQR8Qc6m<(CJ~w!2snve-bp<Gs4o|4^#1ZVm5(?5=GoRtYVaNm827J16N}US8R{8!*!j174kw zvutwl8Cfvpj?VhDi{$^9H+Sb)6Mxd=T2CLyq5&sR&0ae0+d^p_L|`2S^t8dUYFyw? zR-D#by5W@PGa0|n5L6%3oIFh%$WqVc>l%D;E~i*N7IUs6tJ?2s>&BTAV3xSz5~ju$ zN#<;aQyM&x2RJj0dj;f~e3|sjpFNn4fY7aEFP)dX<<(sxm~*;nKw&*SWBwRG(&_1m zM6;Y85gch~kD-RbADmu5D!6V>Dels7?#F*Q`%D%>T-+0JIJV1np)PelL@84E5_T~b zW?ycT{UGW1jusX#csY1BlQrVIzw509V6ZQ8=&>LnCSSh(;O4ewRC_kphT0J(=+HA-m~!7k{SNXjkj!-1B(>ua?4D*QP&ocK&8dpSvIty-oRv zEBh>?TU)^dmzcx^1c_%%!Ydl9!gIb?{f^d*`FBOwI)NI6vy z5_J#5^&b^$W9YRa%SXuh+UWszfifBnB~K-z;qYv9{0$2K)UgaNgtf~xOiGTN7GfEB z9`s!D>f+)PBA(g`0WP`{xajH{c-QJ1Eh-+gSxUuM5X1_9$F9UiTvi_}- z`~B3o<3{lL<7qgLGTq!?H7jZF(sIxa|E4Z%;q$!LDxh&U`X*Cv^+Ueuf^gx8Z}rd` z7IBU0T1W+$WvKRU(SIGHO775RKS!UyYQ{u}#?8+yF`9q#>6H6K3979-AAs?OZi6oi zkWSH@w_EPto04&O+w=_LtoNSKr6YlhVk3?Pzx=AijxIQE^pY;Yv|fEiBd1%0j-RoU z&OE}aB9Mb}i>^L|zaNGHT30NM6apejtZ)^(8NBY& zp`9PMaf8JU_%&*@gEKl@VyKET9T{MaJqHLq$WJ(|JbXt>dK)g`miE7aL`o2B^rO1@ zbYXY+2>3gX14YJ#J03^|fwkl?mNEeez>60ij)}vb07~5pdC7%8)S|(d!8Vck7bNAc z`{H! z7x$DsM@a5S0{Mlj7LZ#~RNa9V4#X|EsO-`0LqyB$-o5my&9rb2mcc+9EYUXRl?Ye& zalZkLA%oB&-*<8m{cv1u?OJdvb=F^j(biSXRh!sn_xDG#$y89shm}#iygeTKcLBV; zzkU=_1@-b&0k9u)RV7f*V2Li}PSkMgB6FoATV@~pwiT;*iU$AyfL%L}dXi|RGfHwR zO8&5A1!4&8WUr-(?ORJA{!TI91O!e>`j{CFZw>>Um|_$E%RK(o-&8{Sjx+1=D>XaY zrJ%Z0{{`Q&*7=`nFE;(+c8@%i>m_28Q^;s~?Wb!P-YPnfiB7y`hUG8x{i;dpJ5`*n zI_6@(Vx+{4USj7sr?kIJcV73A34l03jUh*7K0vaqR2HW%@XU&j60cRe9Lf3hM%29b z3UaM!QbAfn9*Y9*v0jGznw!~3jE0VXKE68&5d%GrYD^3Tc_zIH9!PY=dn3A+t2I|! zJcPMB)0~FB%Q@hRgfWI#Qx}gdgWRsA%%}<6_HNWRtJuK1x4J49ErzizdkIzOW;5z+ zk~kb4iJa5 znAN;=yM6G6A=<8~5ZWE`_^-*s8!wozQ5-!@&z>UZ|HA8FSEn1;->~1n{#jBkEudPE zO7Nu#8BJ3HP#!9|+<$xdfsr<{^+<|U2T>eL=yFcF*IcEf{yN!4d2}0y4%HPZMUy@` zf7FWl9?|pai(x2GdVVS=K_m!iCj+Yf9{Sl3OiAryS&FITtDliUwbxhjuVU?|f3tz= z{F80){w!L{T^Fz9AGmyh%I+6I_G;5d@pSIxjho)N0+)=p@qOZ~Ka_yak{3uSUL~#P ziTEHq5jt1O21P8t>k*kB*1+X}w?=OI_O+`9Xj%3;V&T+65E*kD55(IbFst0?S*3H0 zy0F8Gd?rp+j0pY6{e?>gAhKZIp1#ERPAu_U0B!rUKXB*0HR?Y80W#?Iub9eXute|! zIng_D$SCKxt`*Y3SH0!f6m^1x@rYYh2nhnF80AaoAgG$)61HZPGg>~9ad~#oVIS%& z>A4}7dcas05c%XMLun~X;o?gC?DLa}!bJ8yI)YVH8IXk-AtY;ZNcQLI*Kw;CquC=f z;W$Vb=<^005@nxbY+hb211y5I<-Tg89b-gnKS+xK9bGf&f!1@D4W9d7;xT9Q=W8if zHX0)uW^$6*$K9l@t^g;-}``c6*bMO|cz zF0T-SV9Kt5)sGMwB62`NuHF%iD%ek_<3oscuPMm+Z}M*f<^gd)Zu#yOsfQ2j)v-L2 z7o4a!=FaUNp2a2y5a5W0(l>2itPX(Fu{Igs{0HKR(>^kqHF|J^1-%fbvGpLN=lZ;# zy^i*~=f7QYPKZVfx9L;%>NYe%AO3IU2!cE0QMw^##BAarFF3|g#pn*FpG@pSj;=)r z{@9$284hYsIK2RsvqyY^MR$)OuZ7CmVA|0sa7g2~$F0Fv!VR{+{(Q9Qzfb0I4U4^G<^{izEU%b`0w;E;Ior z?j}h!PZMk_K=|aL_A1+uk?c1^+~q$M{C*x80O(;pnTH;#Z}!y)lk)B^O)Fzlf&<1Y zBSbMTj$A^iDW4z|Q?i%-P%!&=7_glf7eJaYjNNzukbN98{ zwz(}l94dXy+l!8G-y6EA${TIxvT%8&LDKh%{}Tyc5BPZrr?d(@{@*;fYf>`3-GdR4 zjaVIY%Yyw@?nj&0uN3(G>C%{!OE@?F(vz?{C2GAYWMd2i@vm-Kd`=&onw!5NbpX+R zne$wk1$HP{&IZRTO6+I7!kZ-aiD@{iD{xXi&bn&q*2NAM^@BhPB=aHn8yrHdgq;IS zr`>8IS0s4fh; zTBUsj7B+~qjNO>Sh|3iFPSfK73D{sTXX7iUn?LKZKh)-4Z}r)>z0^KbyC7K?F$|!E zV1EVBY-lfrm-jlmn}k^->wa068zQaE1gZe;alw)FgF_`N#95Z%=+ya}5E5H^Ow3$h z1SJ0b-ICOkjAf&Yt5)mMF3h3xze;B;;Q_38CF8ODOyl3y6gLOC;^S^S$ZjSkN2`| zv&4kDF=E@i43}v-=-ANO!8XhB+g_iO`4Si1yv~L~*T;nL@QKU3sNAU$E@3SH5fC|)-z`KdApEI+exVxm*$f_x-nPSpYuLx*-jWS+j zp317r=Rw#VAoZ7s%I}oP`g>)+rZ#pkwGGw?Mth`Pzci`@vPHFfM&G6X7oc_w>gEfA zTp$`k!>e_l7X*rZi3Oo4l<#uuWwl{LA^-qKhn?7wxm00zB?WPQwZ@z&b&yWB-cH0~ zshK?nn=9E$0kvK4B-NEbTvQDjc4E+0W0pEM8JV(v<1L$eZb-!dpNBSv;iC1AO}-CS zviIIw08CHb$_4cJflkx9W%+X==pjg3{T1_+-mAD)@)wGLvuW<$#Rd&2yeTI93(zt} z)zi{XRwA~k@jv7PAWo`!i;;X)&051(6NV`>a`rQNRHg%dS?^JG%k0j5_tcwPu-Jn_ ze!P6TyV(~ewf+}ZoxIKt4u?9^*>ZmQs9@#HH;B{SZ2gwcl&45`B%Fyj<7(}g_;k?8 zvlLH0gBkh1y&_XtGxBkE+C?-`aO4y`G{6iqdyQPT|FXM@y$#)ujwc&E$De}vP*lRH zS)ObEatp8u^9wXWzHOn>D+4-%P30OXIvqj9u!E~5N zgEz$jyH&2Xo3eSfE8^ijTz5ovX^uXX&0FiR$aE zyKq^=q`E-XkfWSc!7$jQv8KYYfr`Y2OO-=>%bJ=`85`6Eh+gRsI(4BILFmB+w`LYh zGizt>AiaC`r&d{2ce5qF1nBxB9^*Hmb-=4LFq*h85($q`lRdhtyMZA$p`S~-z`F4R zk*5y>yLn1GHg!ZJNFa3@w5{T_+#`5LFAGWDxm=BWfSdM|${OUy~rpY73WxU7i-5R4sO+eLu zv{=~8F8Ma)e;E$;c!rJtB8Lz-3zFC`cSLOu0ZnBSy6;Ae>MSaq;)uR)>qPS8Rt=)J ziBdjc3oj>63wc)q6}yk&c^99N+~W^2G~`1bJ`p5mE3BqTm@*C6 zpwo!fAZp(^`_%Hp4AhZe|D!v0)Wbhdl*q#J_f+ush2K3{n=WWV5zlXnsb)E2;~O{| z=iu?nq88}St{>p3=cC2xGw35NAzNAW+F~kKM6RB`D;gGd@ei@Q+Re!AC{-u+MQ71l zFZS_{b1!K4cy=5l0s%k1N)JCTDQJtp1`?j;**DgSa-QftxmH&+qt?{%R;_2fLcb%g ze}~{lPQZD*pWDRd$=e)ysZSX7`*ZY2>F-Y6Mr*k}_QmO$a{Hj>_-yZ!hl4m)O!@m; zr3aG&PZxCq1qaQl{^P6~0d1Pm%kWU9y;BxUuBj9a)Nyji6VHd7VULDoEXN-+p^%9< z?A%W6t8Av%cFg$(_LP>@^zcd_SI(Jlel#EQ5n7HLaf7u9g|U;$7Fiw%YNpN>2>HxZ zVg0>~>NCeLq+{FQa~4Ej%;$nN)7(QkID}dO-ZIN(8d}LdKu_lESX%RX;Xw`NY)sni z-INU{jHr0(+@A&UZpRl+M9F<11<=97_2D?|1J&t#pIfg)!W-C16Qad~*8Ox?8F?+5 z6GC|aG(8!WgTxHI4)>t)<#dtWhqbwsrefe@eT(Rk*1cRH?n@!(qGlx$n&Oc5iz^or zK{e>uuiRs?Ws2VgYrqy}C=pXOKU+b-%?X^nr8Y-d{ZS zqe*E(`kxDA&5hS+yXSzgnm()KdYG;$^2J}yUz$zeZ|DTA8cT89- z(Bf&mmFyU9A>3C7#iSj17cst&wwHzwU)bOiCsy~yG=wamLW)|JNs|)Q#M=fo*mEye(@eFkwcF4#41wH!8byt8)3$w>oeVys; zs|54U?BOap9EoOVyeuMBwxAUJWh}s#E~+3jxOAJ`=Re(2!#N*-j4M=+PIXoPfnA$j zP)H8n12W%}Tq8OnmA_QRzR$7&g_c38Z< z@373Ck4TrO#vtRSo8(z=h>Q6A9by)oG;tiSrG?upEAR0z7SWTz zCX-7*`-v{gb5PqB?WK&ZsSdq&w>}az!57rIvz*>4(LB9>LtBUnof%25A;G7mV?+yB zK4(jn<@#YMs$N9zP!fPp6)dy#r(<_*8njlw#rB=ixWI$FEM#!1qY4Dr(XI+uH#Hl4 z$)hfW4{{61iCzK$B2amO>gHfLwx86Hm!lA7~R2 z7yLhzy?IcT- zY11-l)M?W;)igEJY-hROUEklmJnqNie%$x{$8}|CrsK>xpYwUY-mlm5jd_t4YsVPl zIP^9>`yo+1=N~Q-Sw(39+t2Z}1e2BschECJuU>EJ zi3znGXJY;cw*T-??Z67nv)7rxCK|3vq_N_XOsh-8tg2xC`qh>JlEM(;vJ}j6Uqcqc z1*(K%y=fl0X%lFDhh9vWm40w+%18FXB=v zKNd%4{W69#AQ#l2p6W^q`qIRFIu>I!3%Hhb{drAr4x5wV7 zJ;5XQs)+;l{A3)4-)2r8`Qc8Red* zrB9wOdYPC3F>ATCtqDryNO1A@@_&ogq|mk|4wxq?h@ZQfwsD@gv&Al8FmrGrM0_bO ztS{-c3s!>2TYdc-27xcVJve=-z>aKy<6i1?@8!Sl?${17&IK`9Q#=%TP2cRxTkH4b zSh;cibr0!GV&m`>bPs2=qKaE$7(t8{@0R#A!-mh`4IYijFn0EXs}@DF4hLa$bd!Oz zB-+f@vcRBXpoHZb;KXDbDO#r@{&5s!#Rd3R%R~;=?%KOzr63Vy4EWJ`GPxCRl z)!C&pv~cB2x1TFRu>?8AQxrVsu@k_5V%ecc>Iy`zW7u@hq0Jd(T*oO7(oa+WZ0Lyz zubkyf!;Pv}M^Dszb_FzoW<-%0p(ghTQhyikBG9e)gd?Yv7L&iT zQxU`7Pn5=ZcBP0#c!*A6<#mkP^EN4!MgV^Zm?4bx>EOwJ1VVvTp#uW?;VAoMBHqdYG-Kx(&7$c0I5}hRc!RjTo7ZBFt}2=@Q~zhu z$GK&QsIXj6SDP#i~CjZ{C1G&Bqu z%8;d{Q`>rmyk}HA`nVd~PFA3kiex+k6SAyir@Rj~zF-}-C5NnQ3fPpDh(#aW@(UCz%2tuyX3JI$8T=d#u z413p)>$V2>dl<}(91vO@WrQkrsIeFU$b39u0p?8PdiOPTNHJo;R?_!=M%9q!b{zTTp0XK z@IglKo^cpeG>RyCV}8-7%HPpHMV!qjefoTYN5}qYWvuCL-{&PLJ;>JV_ua61G70-v zMF^)`Ecm0`<*>E%A)FHDRZ~#?Z8GiPZs5)V{pLTHDUdaV|2ZOe82(fU` zZB7ikWF_;J;Euu3H5})^BoVR9$rCG zmmkRSz0al`u6gIvHaBzd)VFuCWlEX%^@+6Z@qb{y<>o+AH^u0JpM~#;?rVpl928cU z|5m8?PH6Twy$nr>LxE2QDgf<5qQ*t1u%o0}0|qS+o2r~(zr#B_6LBF=^yubI3o8A+ z)_lG9I5OtM`me3Vg$pSK7QoH6v%xl!_yv{6KRc%Q63LAxcE?=V3m6Qefsxb@50E z6?9DLedGqLMisWwz4FmdAq-H+M}{Lng@i8 zb#A)g)3{9xYGZ7PI?AxhT+Vrae$FE79U;-aS9(Qqea{klFMY|_|H=Lvva+0u8dH99 z;`#FJ?1;q9la1Y_NE?UnWN$Cy7BPwooU1d?%aP^He5TZKh{q+3Z3I*Ll$-8Dsw)%r zXL@yQOi(l*lo%9Y@<_6ygi~$nc0D}(wERUwsEtg7zoO!>@B82OzecNL*53--H~a30 zY-MzMbgKpZf%){e(mJ^Bw>t~k#62y{^<8yZqF>yNXMeB=H!b?IqPfWDT1SSZBDvd} zmDc0^eD8hXu4+ayCebb=9tOX`Z|&Oy&0p3#kLAq5QeA9O3SM%ch&7%s5%Bt)n@{LP z(;bWXp!54Cwka&o%>py*u%wpTeM)T;Np^h95iy{`{>$1y8~^!Py6j4{#G^k@!9^q5 zmGEFJC5S}$LV7JeCB|W&S{g~lDwHMMNB*#KJH>UJ>&pE@MTv(hzMMach&zT2AM=d? zJ^%%p5t`t98|{TX4i!JF@w1z|n_N@&gNp>{^ePbAYRiMlpE-p;sl}r$d!JKQt6v{a zU73W&lqmhdn`MOYD&j`r%zJF=i$$y7uY9S&OdNL{Aj3tQ|68Uc$p5 z>l10OV-Dkka@KbaTCY6VK!5+%X&VnawBIi)=(Rs33T5vKVxKF@sCkx0N@O@K;1QZk zhdYX-r$h(`&R|aS+Ms;y_E`nsjgSo~SC$BWE0ocESj+L<+42!?UJ}2-K4t$6=THD+EMci2;^Mc4Ta~ zm6s8ZQAQXJh8h1CzwS^tEu~4dI(p&fKGyRXYVOu)lvOuV%q3$nJJPtJg01C0Y(YxI z_2|D$*wNJ^V*AQdbRyY1lS4XS%z)wKzEjQv^^A+_IAkI6sKRNW9ZvSC5 z!s7Tm+jLGsYibO=Bp}^`=?5_;=hm+Z>3dGV?TX7w5)X3fD{?%U${*~@Ar-rR-IoYi zOyzB|H-+q#=AFXoi^TQ!$=)wyZ{#OVz_p4SA?OY=iC|3#-C&Z0lwHoE>A0sm#GvBgOGkji>}4QV@L?14X|o|;_gsJ;zF@|cUGsD45ur1XB_vcJ3x zAL4WFf-^#|Cr%|94<8?Yf<|DKt-px;BOWiBxCYF%Qz_p;Ys?8#Srtf2zAu}3IPr_3 z%psAyJf@SU^n#j>rG01^8qy=Z!9Jnqw?9fPG;Sa}<(ib8-S3B`T@mt>X8$@$@yi0{ z@i(5&y18JgAQLXxiHqQf4IiP5IWH4dEJ~efx$t$*k>Ac$eYM!c2GSQRYlPbBbkU8L z)r4;?cJhiG-sgfsu5)GWi)_;NkE_n!=2vU{UQy|5Q)-ecjIfmOXJP%^(N`8QuFC0* z50@7X*K-Rl$aPdQI?(sAlRQy3)59;`S6{>WxuUH_U~STD?}SsmEP)O>=0EabT}CZ- zvL2NAPlDZw&B>j&PWxF6!OuLvx7dC4{^MQ2@dfy804=JIR{VzV*cZ-?T5*<&UENRYB`T8(InrOF53*>1A$%BheR9 zwU(vcCjm2n(T)A&P~}f-{Utk&C;dP9+_&13@V*UM>sIA7LP1pp#=(AW6cu!6OuCj& zn?)Ty{aO#6zE;1>^MQT7UZp9dm{Sv$L{qk$SML`?!!gzV_3Qt#xZ|$`e`J%^nF##? z(2HR?GKk(@2xl)C;N_^eq9uJUB`GQxbSFL-+)y4$9@_4gI*0TNT#AC-OW9n+HR_?jJl+}oEtE35GU;=R zv7NQO+3BI0a8ie!ma*P3WHqHJIEBr7U1I-cv1nCEuF!3sgX@Fsm-+)u#vdSNU7TJ~ zUq^R!FB6q~>0_lzA~#}G1J>>r9ESBZp`V514>U?AUcN@( z`7ETm`@ONs0BMCRD;Ss*khN_iN3yn|BU#(`s$*0CSJw7{RvKr$ZH;iF?Vs?XKBhN# z2P1yZrBm@<-VVKmtCbd+VsS?cK8Pu;#J2({y`}H~h?)PaVJq7+n2wSkd>~)5M+qRO zqh#lT>nlZ+(D3>(|AUVZ|1Q~(#maM^%xsm7_a+r*6J;~NH<>^+40u+a5eSEi6t4RZ zvTb(V#@dyWXWKa{)7@kRvN!Xiw)z+i%n2Bdac9zR^Z6&GRR^l8&%Di^M*mkpiN`z8 zEJ=#bVM~($I2q-vG>I$GV8y{!oY?Spypl+>^xIPURCZ&Zj|^uh9ipq;5@^9~Xo$GP zLiIZgcLT^w<**c)7e}2TA55IxW;ypW=-6(j+!WDg_c*M4gWWVb@o;&J38>PAtTb&` zmpfPFr7J^62m3TWlNYU=7iD$_AM_6AULz>+kg?Xel(h%T{(YNY8yA8&BXUoL8(7>& zgwKgOC&xuX3&%$sZL$_h)HdgNFA2l_tm{WX9gkeRoLwT+ngmguQBsc%cEV>QX98dxcqzq4x6ZUz=r`Lz+wBE* zzRL)S)ZuM0y{kZ_9+M~KXD`mTc$I|99?_U8dHrUJkFN< zMoDButjyKHR8Krd^I701AdTDciqnTWcw7ET;}`=q=~T|<-S>%oG>awNJ3jtlola1>bI_L7VwDc!TZ?M-^GM&oeRhf58ZRMzj`EV~XU z2c#|c2px&(^fAu#jqc7zH!x%>t5#j>sKlE zg6d&jQ-j62Z8>kWR6e0~Pf2dydcy4MN~ZqxS>>k~9hXK8@!DsC6LxK@vgcHm2@%_C zPhAr0C$BFJd|d9bU43>j2T(=6|MKH^vr6iWpJza>jr({fU0cAtmPST?+bBz;+ytx|)tEHk#JuUEPJek0_V>Ro}=_c%zQ|w~B5=<;x?a&En37 zRGYR_9%2u{?_(UfNA$k}FOyLrF4VI0urH@{P^0p_BI}XZSz@yakOJEy3nNFGc_y-> zqsW$CBM6hVM^0v4bEOtzV1`{F8af45d?}Ay)H&=uxNJo)!xg(bm$=K>r+~$&FrP0? zBH=Y-&ow6#RTDQK3&Lx@!J?9Y=m-vA-E~5_N9n_?&#f7X6!5mX!Ir+0_eAnsPkHh= z+NZ$tww1LgzMO~b9=(o3ISz2^i}w|9U-ze5G$EN3-k0nptZtW@ab`3nEwv?2`zxxO zl9b|Z>|SUi$XJ7Q9^$+)%d?&7QOfRLO0m|MZ?xIi8%(t1hllvoZx=&hHTIMJ^;^=m ze@&;@4WGPIico?p3gp-zqD>T@W1FZy_g$A0_eIG5s%+$T=2&~R{&Z**2yp?lX&zQC8m5Ot!*g|Hk_-*pY z`nl_w8`W@b;*mgmbh)fwhc+4UmI~Gqfijni*`({1XhnuxvUKZ)Oy}~yaT1|pyB>M@ zo~iybk=axw z)cUaGY<5A|i6wjgu%F-i%Url%U;{4aw7dmd=S!Wur)B6lsZJeQBuwtdv;szJtS{5b z>j>E*%m4iv(f;XJABLZhd;B3Yt*O<8lG|)*``Lqc_n7~CX=l_L=Lz}!(l>=_SoAL=;^B1r8`id?`Q{bhjN+x;g^n1a~ZT=@~9CueJ%sm6Pcth2n$))q##Yfm^wuUtn#q`!kRZY42~ zA@Fe>*uSXwk8yRy_jdPFmA-o&KWRrNat?oXroE-ze*z}x zwWVhJ$9{E2bvf_k)dA9OSKe^2^3z2QHM+n01zd#}IPd->p&`mo7dX_3{_0@)9{1~~ zN!NABVmWtv(@$X^vAN`*L2qoh&ShW%YBI{lT=imyC9YUHq$~KqT+%+SIm>46VcFv) z(y9{G>9_x{d)5RX%*}3#v&I8R2|KP z4Wi8GW;MM}x0H4N6=%>x!{r2oC}=$pkjko1=ee->wMZFc9hkm!o{ToS)6BG$9t@YKnuBg$Exon~Fdq>Xj zXf5h77NT%`e3(edV#1zRc%)P4eLG?pU^Cm>W^Fjhdf^u8e)3W;cgVy4nJnroU})@m z=@{)P>=Y0rl>Dy94z7X8yZ-eL{top-2CotAFFq7Qppwja&cOBc#l-wkwCnCbWU%Pk zA$B&R_(C>E#%MY9siD{X2Wr>@20zrWB(m9g%=%eH2(;Y#G;h~V36MC_`#+HdUF|$7 zwzFsdwg%ipO(QIy02pt+rg7<2uiV9ivXN z8wV0bA8>ojGBx;f*4>GENyQVQ%WL&If^dz_@7dm^mPco{#IKntG%=WH5U;J)Y10{W zG}vptII}T+UCr75^{Nhd)%gFfui`hJbo$&_8BZ9ImU8VrAM>B%F`e?8e!>S{c`NfQ z&#!E9bDHV2#$Zx;p=Ec)`1}c-o4UL+EwAN%DT_as`P5SGs`MH(s281isLeKx*OoRJ z!65~CwI0bTieDLj&S`eMG+sModil*tuBic_S48|B${?k^tBG|jGVF2X%X@YllbYd4 z1-X8bYqP34oNs+ve=yj;j+;$oo_^mxfmUD-&PTB|W$xIcUoFToRCD_*YWPn(MC|KC_Tmr>5ztWxu3d)M*a{Pi#|9) z++~g%a$8k|E~Dl$2RKh$VzKyxS;%0L$PdiV>wG(f-#%xc2{^ES+XqKd@og#kSrGVL zZ&RQXtjG@iyBV**2bv27x0OKQHL5|I2F_1!vuKf9fc-J_Tk|~Ioit$@q}SR~X>bk)C~1KcSHy6%bRkD_as6aQ<}3QHE(hrtMX%pGoA7#I_C*mUfnk?f+4S zR50_GQl2~|93`xGxe`QX)v&ko_4U-KF2j!J%h=iAx27dyjeXY-0HinqZ%LeaSjB%R zQZGji9^7#Ow6s!+b#uQ+n1Sbj`F8gY`2kQI^{*!=1UkE(n{{%q(gpIXv1Fup2nvn- zlNcMTN9~ztB0l%bu-+EaSwe1vgoCsR@8_TmzXJ@*fNdL>q=1Xx+>m3S?-21#bfPxs%8c}vYbQhVRn z&=GqO&^VfMwm{GUTDDQ>FF}~AUEB#GXX8BuG>t97q?y7M$R1VFK zVEd7`2LKsiVtZ=YSuzs~DchB(UlNvX>K62evRckT*>f|nYuzBGE|MMF5&5-(@_Yf! zRDnOr$R$#2NYC@&2`EAGz6x>kwyCrC({w9#Ts;)~-h4G3Tbw~Uf+h9EuVEf#_ITNx z{V8M|wkkPoumh@HX_VFMfQ2a8P`mVLszlnFi0`TVO{JlNk%;_*JvFTSgo}j(F`AJr z#(H@IV*z{x1Y``j7pFt0Y{F@1_2@EfRvsQzEuzv_?UF++o@b9u+Fl(n8utvUNT-~t zyDXwVM6mVk?>GIS?&n{W8-@5A83S-d{=SX99VUmXg9l86$wtp z&b7K!7Zcv=(UJTGa=>CgwWN~sKfw7f6uRdq3s9pb%7|?w|EseaT{)PH>hBPQ&zk$J z?VC=532g?)7R%;iz|lnvJyE0IS#V(qt2%k_*0d=E*T#&>B=tzhm-(=0E36D`6+#0n z()IxdTi2n}T5Gqq2lWZd{^t$PNRlQP!Dfux;*h%5Du8Z~j`F=MRAJw1p- znzr9t-ls)d^h~08S|POFm3%tFU4}*JQCxf$#cJ22EuOW|cAVx^s2I9>N|6_B(msZ* zGOdRrBTwJ#cG1gGrdeKY5sv6X8CMOW&eAGq34RM1F@$Hd6pa8YE)&h4pUSy+_E6R` zR#MXXHuTPE!oqJgb!kl!ttIN5sL(O3K_)&aGmTM!R6_*bSiV_e+3Y1iGOhB3Xfi?h zwRmTB^JhHbVT}UQhc5miqm3$s!Vz|XX<~Eb@wN0`1;t4Bq0GHewe|NM0BN{*<3Hrr z)oE&Xe-t+Fewa4xYpQ~EXG)Coi$}y^^5~h@$xMP5v}lG;CRPo)NjDdZBwkVK?{n{| z%S&9a95Gueoi-ujm5H@0A>kS!uq&#lV_gky#pe-xmb`@3PA?i-SMN1^-WD1qDTurXsF1j#RVZSa}A)V*cIs@|@6zsuFNCK+Ra#m$YJstAA(SasIuzh4ewF0`lr$sZb z5GiA8-X!Jf2!HBe*V+Yi2*?uPB0JftV?rwXcoXUxMJu|7BY*8jlbDp0G+VR(9lon* z+DhJZn&|5>gZ~MbcTmWObAB?>A_eO&2c2B}JHrh%2&&^l4-RgJ+B9m-sE&``~CO!K3FY3&z)%QvKcV!3f z^?UYT`GuSna=2rg1HaIY-4Fux*$2@?mF*ZQsLdQ}8pXhjJZ_}mTGhjP^no&L-DJ4z zHoK#{XkW>BT8Y-N=^kD(BE{&=UMWNuxIDtKgA0{~Qd1z@EkG(XdwIC8#=MI*BmAcU zKxKHmg$GJ|45f?ljW51i%DfTDj%Uv?DH9cPciSk_KDZA$|H9~8*4-Lf-}lJ-N$_0v zAogLk;4ip%w7`A(PYZO|gEX&Y4GOya=>um3PczvGw_M2LW0Y^N(};cFw(PH4DQf3k zO&mG&QPG#}a7)TZJH5XaSkGY)K|I1d;9E>G^#Boc*nagPCuMx|a6;*bhd^?TAsX+@ zI+80XpwS7-U6;{Li7Cj}WY zvvi8RtrMG5Df50YOt*7$O(;h2!D4PMGo5n(eezfwGlWfj`l^x<6=lqN5H%ttm9aHV zy|;DX<=c+Xx{^}4()?J>BMFS8@u?W?Y z4UK#;W&@z1UFdd}+~iJpTqvK~mV#PdIvrq$JLd~_@u7;J?hu=^2WRA?X0b{xY6!NvE2j(=|pu<+~=PNp&M^nAU%F` z5~?3GLF?)I$?50(@@{eP6PZu5E)1%X8*9WdtsJXIch}RMl^S{%x4twOED&BbrsTys zxUS+@xH0v)SjTT8LOhnWI!E}6E_Q_#;d-*xMNP8&`AF6*MXNMl2lZ(W(?y6WQN}Am zb7X-71&mqpRxLe6YsEJmbX$8E^Hf(DHW492QO4Apr^eI@f04na9GNmCM|KLnSzmrk z5v_s{8a{2#xBNxii2)*xW`GDbp-juc0@_Smz%ofRrtTH%U}cp$m|l)ddjWDrGvI@% z-a2m-4oKFj6>(l!sl$Rdn=Wsa&QY``i3&J#~Iw!2> z5IiWpYtWNPvf`VnIl4G6z%J`qK~8%HamiL5l!aWM{{2=h2Zm%@)$G6H685TlmRTd! z2}bbp|IT16+|d|#ZYb~C^x1^&-O_cpdyq%7l+z9vs>m!zN%2`y zapv5#AM}8c%o%&py5-7!@Sm&uD5T_j^sN$Jb#@ zA3iMpaG{477s$6^eeWw4uDzMmX&PMB!aYQreChC9y>$dHo7%mR4USc5abEGonrENS#h9XX_=F!~9IdzW}{(gQA~T;+$mE_f;R$$TRbz z%q&5RNNRtqMSydS34?JoZb+?n-5O0a)S}_-5v z{45E+V6P;pIj+aKK!^CjD&V4yK0e3Jz4aDq@1!=qtU&BO6L;wwXt431BjrX(Sb0hG zczQxK&=Pi2)17$6@(LLbQ`4lp2nCq*=?!cmW?TD@0T2>Bw!!2yvf<~XLzWv{s=nmv zT%L2HoDO@MPH)EgP|KQO>|Q!N2}Lfk73pFB2rrm_q$XO=oob8MzdJT1>tpN&ty)$hpto}ew`@RV#I#arI2mDx=yz#7S z+LImRX>4)O6gJJxe-zx~+^IzwQ&$7KnJTKgY=gbJ9Y6X{U^p!}>OXh<_bTDDo0}Hr z^}|pO9&Tx$>hiAM**%q`9!oY&>@zr+8q?5wqO#Yx`K0l7Q{8g(49t)6B&W_S$8X)6 zwC^d1E2@k8ASSdW>@4|cqBh3`eX!*>S86cL70N4x9@T*50Da;eHT&$%h2L3Xy*>0a zhdP#**zokS*GY7Z82;q@vJ#eDZ#K~fYfjU4AG)wc%sjt3L;_?R&&$>a+V7;LMxp`w zdElbIyNSH^jnJX2&Mv*#bVO^M#?~gic7AWq{%6~-oEty@t4i={MG!J5hYKwfd}$x% zGeegast{$1GN>-845Ni~95Dyd!4H^_sGTXdi9Kdzb)P@}C5&`P8m7M_svonz;KjDKzByZ13G7Z~`z~8~U!wtf+kepd zxASKMxfGx<&^wO$M8f(UOV_YS4~hTBO4VC~6Hd5J+x7&;7kN3O@Z>IJaXle;e@qa$ z$SRzjuh4pe$1PfIDP|Il(8d6^N(4IIH;2k7H(PJs@T{_g_&{1uV2KP4C-w*l$(_B* zgcaK|qkdEiXB1bn5?P4}>|EnpJNi^NNZOu{U%qCj^&vuxm$o_vRB4;~icSa%Vu)79 zp;j*3?Nj$Ic(#sRiZ^G-G=IOAy`ZOWw>j0YCwE84?IBNBw4WNs+#omIvJ2g|&`e&YeYfWLx?RHk z4&))=k)j_SPSp7K&8}i?&^S3lm$l!>lsU?W zkQiG7wx#k?@w46UWiW3;fInHb9!A{ofV?~Zs;ESZogiUpj-%Z^eFH^gzeKP4)X1xy zci75RVD(h;PK8ur2xTQeIF>EY(X<0kGtjj9-#z_&;;Sn+_gM zPURKZrAFNWuBq?br{b=Du2D9bg{vZWy>8>61|{nk6j4;@r)JW~GcXWN-};L-2a1o@Z=&jkF;xKF)QQ?cwK2!B%1YCA^Qd zCHiZ@rsm^)Fvh4|$M|DM>KN_nzLKuze84T<>H25?Sr;cW#q^lY$8fA;=dgrMR~ zh#iTz$e~?fxD4bIv;`d%`W}X@G54XF197C4d-ccs; zIb2!c)zgU|VNh6q-rv`aWLh#dbC2A!I833>{vUfDUU_K~4!Sdp!xF&u)MC?c5%?~J zOd@4kKexnobm5W&^qFlgR}PK%t!mv|MfOwYS*Fz9);eW+1UcroY{3NPi$R@wY}%#h zMd#(_Ys(lLKU3@1Z6I`H3+cs$jsP5Fq|S{+OC}?o#XkyILynYM@%NE0_6Fc71Opab zD~48~FydhGf%+p##M-^w?Z1HtFM@9S-L#cicLyS`0s=mY8ktYk4-=W~1+L=pjrv&% zZ@>RzAVNq#Hf2aV_R&MAE6mtGv*4~VuZ2e3Oe^~93j5r??$U9i3FyKiozi+>|Kr_7 z;Yq;dICc@D`3>0Z)qF)SZ@_EK)WBz(_maA?k5}R325I9Dx8G(?739NB=(XS}G{fiVOmsrkq`AOC7%Gx}4)mYv%ZZ?gw=eY~%yw(|kL&#r2- zly^02=br+C=KENs)Bky}gkv%~IBEa?Jy=!F?6#b8Lc)%y8!nr6Uzg-_R`PhP8E_<-7!ZB$OV+Q$u1jo_fhdx{iM8_WUz$Axsy0tRP`P$Q+Qv-D94-cE}kJ{r|l-!i3^JKVZ_inRN2Sw(LVMV zsCsEa3a}GX)_qW!w0Pz%SG8Qukz1NFxKn>fxn~|zu=EB!N7E)w`h0cEGnLtC0r)7~ zph=1bwENK{Hcw{zONw_X(!HJvsqGIs*!`PpCbdf~5;5U3ZVxLl^1#>~b%o@+m)Qqo z$RKw0KQC74$k>BRbSVm6ENIV%G<-*XYN93$mTw&5l1}zwvKTMDPsg{k;qTeQdUs>} zpZ`16IC?g*O2eVy;~5IEQ_cQA?O4pt?l(tL+KjKUL4GUY9_dy2N*?ov`8epKqWlL< zBa;tiPtKCYk-8y5c5v>B0mf8mBU1I>*aK=SCu1c|KOoE9vXG66@3Mg!daQcg)g!}R z%~O?Y>zW3i4x1K-Dguf_<3yjy&hjQAeTrT?`rqV(z@U?;Ys|>xgFb3x^1+7+)Gs*k zLq9#?u$!~}+^j~kL;*^8cvZG5W>>{ZIZDBMw{f@jppzDE9+361 zBb=SiEGx177I+u{gn@JB00!f+_=9Y;bXefPdXn)C9zYTJpcBKqcL^E_J`ZNe$4lk@!3fV>akclg&&cB-`i1lQ zm&&dI<9VxSKpt8+^eouW%4>V8zGyi}=@ak37OG9B7c?#h3;Sz1s9Lp!N~6MYbkH&D z{-Xl)qE&TS3ACsN;|az|r|-AvkmleK9sGZxzxg18=5hjS%E9eW)x}G;yO%|3!cwHP zfO8sf;R>}|wEn5#6Gzn0*+uO2V5B0p{)N-?hU!^_BeuOVmid<#{6O{r$&~lWbvEYX zjaf?I`omsm{+~E{S}DxC;r{&|AjsU}K_UrqnbsBC8~SZS*Nk&cG~8+;(?C{fc-dz! zmZCxFu#QT&(lDCU6SeClypD#AL>%G!tD2iZA`W%mTSN@gUc^g%nA_bZ^0?soEh4=@ z=ljNyWBS5Yoz+N39PAmp=QX8qcq^UO#rt1lE#`L^=Q0MXz!o7C=b{68rvYx#K>68K zKt7~Us3^X5J)n|tt!ORLp{PSUd}W&K?xiOpM+^&huw*3SOKLOibv46RYypY%+=Qbt zMp1Jl+tVo-T49N~6fHY2AeBhx1lwW3tt2}2;N3|?)4bc)Nb7*vq2vHh{hV4a;wR=W zli@YZBx=%xZC2;sDCUaF#3B^!v)!OSjQ&IAf0ef(8zBL(o9w6=JypubpyFn}E`#w~ zAY~IHkmuc`dGjmWA(c|0N=2|Bq$KR6pq*gy&G@bJh^MOZDLgZDY3h$?NcK!-?1iLk=3sB>xLez zUSW=Hhe4eooOn`^r*DnrL@y<~ENT&GguDDwXS1dnc;>f?1*voX*fl-6r2994Ht)`e z-8p2BYP1XrY!ren90#640IIosI-ri|b#A~p03i~NLi=A)%t-!-95fn9wgRX8y6vl7 zl-Rp@H3@{8GvxV||C+WB$JA_NE2X_G=dA$wd4hj$7(9i}v{kCSFCMaQF_jiDk76=d zT4@a@rA8g*d7u9JM8{n#Y?x0!4x#B5q^*`E_W)Lu)b6k>t=Lfs^%lMSp3U^E-AE_t zTgz~~2oAERCsHvP@7phdBI6ll_vylhN;DgPqHyfO`{>nEVNkY78=%x9aEaGV;k;CY z+Jl@V)kH(ABrMwfeK@fgo1wAv<`Ru1^$&5NDkONu0V?;>6Om8e-0x+=(Jcxi^ib9G zfdIClXY%&sPRu-h`srf?x|aS0M5b4XgKAH)+ki+wZyNtq&SEZQ7Xs#OTn^{Ahrjz7 zoZD9@hI|yRJ~2}=`>cZL#2}^;WQu#7v3a^YLO&iIHzHAl{z8H!u8hF;h}EDrR{ z=}H$7W#EWOWQ^ZFVx;4Dc(pO;m)MN8kC{>KGDmg*q3|%H$FXTmSsNa761XBW*+78# zZ}KtorX~4e+HBB$7e?jyXM@A)lO}NssbCq}ZkhV2@mIPXgPNHgG=l?JL)QDbYRgMBf*!+han22)r;pJZ8wX9YPlZzFdBu0< zcJjC|=*wG)ky-!*;A{?m@ZO^iw} zs2qoJ*8%V=>jVttmg5!HC<@;mEa!LCv&LUxM^MkYIM}(zHnOM-htQWd`E1X+zw{zL zh0rn7^ws*nZCpCxPHQSY>Xw2#aM7}Xa!E+XKJY*yYM|bUhp>K_t@pf-wQ0lc$TwJS zy4K)B<_Yn`B4g}++iOglxDI&1kxy3APOn$NV`s`%aF-$5Y=}N@@T_KqKeWxt8}fj=Z~O%GCGI)=bt6vi?XmZ@{D_2KqZ`UN1A^Fa?QPjN4OSL{ z*zf(v;J`j~(cob}O!a|zyUM~mpQ^SI(h6yESUeX~Uw5OAP4>(oNey&coek9nzF39H zK0e4jLvgfKB0@tYzR8RBEzf+lWagFzB+Tl;DAz6#U{>0a>h_AdM4%I%_TPr3SDq5+ z$D2;bqb0|HKPQD>QEI=YrkxLEF zB#d8B`dP}3DB;W~#i5ieG=9dRRXT!{Qv-%!{`V8#R=X!x3MO1VF&kbu1R}LHrOI3^ zTL@{p0;nr7Pl-oWUKb;*_Ah&>RPbm`mSpfgAd;L(m zR3KExr^BNUD@^iaOsIKYAcn^i5&p+1rNxoE8ML;$U3b8-`ab+I`)EIrRv+d(`TSN+ zYxL|LN_tk-Uec}o;D=6nB%?wodgaw`>gsxU!OXlBG^#DK&slU)5i#Nb(J3VF;OkI> zakWn%lw=)S@o*HFf%UGA0hZk67Xa=JKHSlY3->p}Se3V+$RX|s2jyr($ zM^@L?Krs}y$_Q9192WXN;rKHlNw-W`4jzdx6u|` zRM0shGyHwaIQr{G1lz6M4;`JG%(j0NH=BBX!}=$|Coo^8-RnR%XM8rejV)eaXXUuT}242-W1krdQZB~59j!~3{i`oo>qri4zvaB>fA7$MAX zu)P8Tyl*X{X~>;0NQW3#Oj$y^lJ@V%!i|}Ti~={2U?387crrWp)A5|>Y%J!)Fb~eq zLuBKz=>xTh0A@FDd}R|L*79SJ>%~>90AUGtZ^Cu&FPmXdYs1{(5tGUM$8vp0c*mAn zNLYtox5m^u=gC9a zK{|GaPYuJ5^#fas*X?O-O8q_=`&YOy!|gkosW|nslI=$|dv`^QeUEymC^L?&?J8mk zRR=tZ_oF)1i}#Z<{mR?3uMm{=m=t6|yb?E=nXj)PP&Yq_X~_SR4Py{LQj63*)A4H2 zT+){S@U;g8*+?sM@0(KgZoX8Q8xZzp@ z*lDz9h+&>35#)C+Xt@oUnN zXNW7hDlMl_4VOm%rHul2^n`54?pi(0FkC87Sh&Mj>qzoE(W*W3>Ny|gFuzHe66`zu z;J2@yWn120k5x7u5xJ?M#!)>MIz?EvTIXY;p@;Qc2vydQah?lyHZ#n*~h{Lo)kjyXad;1G+& zX%jsJ#?S4rFJlcN=iEK5)B^4Lpvt{=3+E;49KPRIrU{s|;YJC9QRlCNWTi-`Y_YJ& z8i>ZeR7}LFH0p(re_Afdpmz0e3)EIt#-3DeAE)!NW}ty7_v~T94ByK!sv??4%j7ZVif0L+nBU>@dleOH9PO{$DN*%q0us97K|7N z3Lt*=R*!|?#=?&;*>Cf{8pak6W>zg9ig&w=wlUl?BCpZD8@iCr zB6gxPJG|lQXFk1b=P+;jkEx8wCs3QGy{z}7bq#a-{+)O6Njh0_*QiX|8g8Q8Iu0qw z3)CYEZ*f0c26Y-hSEc+T1w@M=C0Eo6<26-M4oC_?Q`Nn98YD@x$i`h%z)EQok(qK&%}WN5J?-Qu4l@Bo|;1(}HT|*H@xAI^^tLn9TvSoD^E)g1nWt zV*+IdR0J)ec~F-~-b;#?qAs#I(MDd-f2OQe%(nCLtj;vJ-M~aU};?Zx~xbbq+#E zvPWSgbS*htYLI$u6`HEL#>nP%q9Ip_U7bHBfTuIkQm&U@bXSw7F_`8+O2 zTe0tCb7$`P`Pcf-h7=(<3&YIu-L?GP4)>Sv?)WAILyLw04Tg$OZWGS8iO?jheGrARvxq*qgSg29lCkuc=cAKR)1};j;e;BT z4@znGW&FVtk)SwN?a2lHRHtnjkL|u)8aE)*o_k^S)K(pAAJNwRM&~*2Dn-d|q_=JR zuKlJBvQHT~xxEygXr|2(#^`Au@$kXao9ePJ$kV350_&c#YzX8puuYWH?Vt3fIjzb` z&2aVYPv6_}XEk%PM7%7P%3eN2I%U!LUj4>7l%bTEI&=9s)Nv3}gbsEl#Q z(J6bYE}1{|=F}I2h1i1(dw*W+^KNmh<^$a&v+A2s z?!+J1TEFGg`}J(lyWez_!Eax`c)J@0a-`c-%&yp5_sNu7Af5?yy0L^85Gy?I#i6Ac zFa1fEPSd{ES?h)weLd{0ciBebS|)*6WlF-y}nZbcoTKTP1TS zKCqp_GwJCG?r}&tZj9x+Vf_Aod1;(51w>Kymaq_KZ4frbE!xE4=Bri z-qMwnk4XJC{)M)>F+g(-(lpHp{q} z8Q-Z~2D(gBU@V>g#yKdp3A|lXBQZ<_FknxMZVu9m3aCGp>*$7B*~b1Zl15d>+%9di zE(?>bael$GW?VIP^tlg`&1?P(@o$0T$ybT8)0_GaW3bNwjh$dc!#7NvP(Y}>ql}K` z>0C{j&wIpKgIFOE=R0`w*nyL_Pd3UAVu>k%>xBDs&PoHVVBbkc(Q*47pm@mC$uZ1{ z0u9g)DqwhCLJhF?cEy`4LAueEDh8UAkl#>!*uwAOpaAi8hb zgWcV}B;_4S^V!Y$pxbxazddW@e~=^4b8+96QKZDU0R5Ej+qsUr!(cg=e~-|53hAXe z#%MC1QX7Dd=&$i4Khb=d@CURS@w8gSm_o>^M)`hMghNoX#2hQUU`<)Hp&K^BXo0f~ zGATlD{rKu%R7iAdEiFx9>R~Ku(GWh^i%-%X-Z!Oaf}RillM-)L)XVP)ZNJ4ZO>%adU}R2IJQQ9NHh+Pr zqF(tY?&X7HplT+{_OI!&ZC9_%@1i+7NGIdpb9s3$iktkq4FciU^k2(y=VMw&?thbg z1y=fU#(a}v(LXRj?0ryGK-UpHUwI)BKaNeQc|tJetqDGnZf$dZ`i~&X!d~9g2EZxw zNl~A*0vX2xPv04qpWQU|ET%^VA0v8=Mx(2Kj{P0AdRO0kv(p^%Mu*|)xxRXKzC+Tm zj2ii+@GFVK!kfiE|hdi{E& z?~V1pWT%p@!Xo8L-j#gL9l&>TxGr?Ug2WH@I0JTj1IR15*zyKobOyTDLpj?Fs6p7> zL$|ULz+PRXhR!%VWwyuH8Zjx%)>vi~1pBZ~5bXKvDsi01=c7)0s^}qeqaj2wSp(Y9 zB2U2)e~-A)sNz3e*vE$4_v>8BY_EV&vjJn-lmvaZ$*)c}86@g1TkP4mAH&}L8&Fwe3D=Ck z+f6?{A1l$U7Lnip3YDlXGcH!16rH*ZuB*ilaNQKgVE**baiUL!Lr$AC z*(LOmqNRAKuMw0^ZwacRLx0j;qwB%gLNP|XJ^E9lob{+EVnFI{%Vv-7m!$FYxWF1Z zg_?gMU$W5$>#1#54gt2#_E6pzJNyyQa{y^`vJ^64AUfEeg5u6xHcSmT@d9Ccmg4mm zktaS;Z3-TDeP7zLMNwf~5QZWK1J^)fS5Ir*IUaAOHQepQDl)VMVBE!VwGbzL&n(YR*yp;T)e(-E|usc z-)6xxYLZb$-t73t_H&B|7&*y<3M1q_^xd79HUhii$PCj zqvwa@s=_+y-~o7G<*49Dbb^EkxaXAc=@aVgjN{OtGDXVmkig%LD%z zufG=1cyd0N^8*s?Uxd&w zB4g+qx8@a#@G|vLV-m0}AI}uyh3fM9P;=^Rq;%`}28F$uR)C5frr2hKFlhecegF1o z=lREu(%i2>T=wdsDLCv)ehF&O>$kC{glTa*+|XHhH#fV7BUMvv|AxtCpwJh1zz+}L zXML`b2hD)-6zc!5aNk<_@>OIKs4b{IhD*eUi!JdLPC+DI|w6%k9tW*>ZRC=37bf7&zXVSYnAMG9%rlR}VP9F-LB^ zk!ALbu&R5!Kg*|D()_g8wN4`|Ay;{#2~Qpr)1T#%tO(zXKM0fs4`nMae}DTA=W6

jy@K?*`>1>UX=GnTxi!5@lTV9^N{@}38yN5m~;v&-+H)SJHD-%3Q z2Rb;er}Mbj|^XJXFwh{VBLTN|Ma@z)}BFq?@Yk~^k5Dp^ul`U)a$%~>;2hj&Rq>*R?7H?*Q zETOAn=+k%R;7@V*wVSbrl4AX5^{J9)_aR+;ZXY!eQDY}wC^osztK`mi)meRM`JcA= zQo@@DHQeaT%yyYnQj{t~oKtU$+3DVt!IZd+x|+?Jvqzp_}l?G=;z%{tnTwv;ly|9?><0g4)}ilX1f*+3D) z!a{(_%?DqYB*QjN{Bz=s4}xU9LM{7TrM?W9Gfe#}vH!WL^@#=Lt#5y_Ku3!&3+&N1 z6jaU63Jyi#m7_@B(|9}iY6iQYMwL=0UliAMcT4x^=xGr%0TX zezGO!m_QBHH*4}+X;CX1JTAkXK}X*hQ|E{{(T)mRW61vZJhDGMw}HV?;~X z&*c}x69X5Dsjxdv@iF8QlL-htR>A2CRN|IB>Z=Tdq3gds)zNF9_HrLZe?O(}=9xCB zfePC^W}_`S0{@J?#rUvbLi-w>M&Rb}A&h&`v)-sx_HmUN;!M zDDU65zi)%*eq1d~K9|8+WS!&sTtpAMw^(o!DdTMd&FG!&W=`?#uY&qpsax7~ZMLJ# z5#8p09rP(<KT`|S?hF9;rZWS>&dlhk;f_HV zr3uJclNj^U7|?F9L* zbDLU8{37`>y!5udgq}OeZ%$7C+#e!btZQ+bl%+!XZu^Ieed0t++V0V0h3bdF&jVD@ z_;sDs(VCx98xBJIVKaW?T0lk*nI(A#sb5e+s5e#6lF4iqQ%7m4%9&Fusf2*tD(Nkq zVVt)0NkLiR3rjyP$R~-oW4`yQ(;Ok|^ElzR$KS(Zieh0##UY#y7inuv; zV@K?1Ja!zB_fgI8q0=w)O}3CVBL1~s2nA5hrs6`PvTCTkX2xH?x;6wH4>yGBG$uXi zxaFz7e}?&ks+4cc6ZGaC-Asbaq(3a_@Gucj}sn zu|4d?J*QB#$mcq8HcZ_oc%k8!zD^)7?P1&IF)`|j7cZRh?3>FA+h{|r^8BY=o-R#z zEG+ZXNfbfWT1{9(IJXkbx+ldek=|{8&%fsUuWSe{#dd=wZtCg7yKYl44_&YH6j=FL znhX>^<_%K6vWy|K-*z*t8?k~~_?>kB(%KDed$Wz`o*FS|8x&-#L*1nwRJY#Mn02K- z#JzgbwiyIMt*hl`eGN|}@L_egu~NomZ64nCg2sAg4mYheS97QLnr%P0-J79#_dDtt z1%i*zLYneWJgR(F4xnY(ZUc&fn9?s%$M%XVnx3$66GFC_U*e$;&sT%{-MyNBNc`PGWG6YG=NQFkN7f_Ytdxz)R8s6_IQh)dVCb)AFb zAC#HSOKM6&SPmC#Pf;TAlxJ%zHZKDeirimlXEz}IWV&k-R!ra zvf}IA(-JC&n7$uo^0E3gVsU)}Q!k>X#p;qkRbBZ8LA8R*44|fKP zBDFFG3uHnjE~_`Qp&^wg(cUR z=s`lOL~F$ljR9SR$V@+6(gWrnu23_qO_$0NQ5!ky)*L?3q=)hwQB&~ifI)K18RF-l zJ-rC#Xu;8irrY%e#k8$w_S@1i+s);PY0THO_ow&onB4_|!6s0h3%cWA_tey+%Sah{ z%MuZv5?{L%leVxvE2U50SqX&wQ&Y$C34Jr6098wGsW>y~(C;g!P>u=ntj$y6e6WL+ z7WH{O3Z?8sxm$u|VZ!0C3_er7Yu2=>-TrOyM z$z&=cDtT?9psuZe(a>1swFqB-U6Yp7-kIbv3U%L^p|lg z$_9Aal?2^DnJ{zwb>^r1A}nvcQEu)b93-%{(e-^cwnckc3OgK6k(G4N%YeVFg-o~< zx@vyOs*ejYm_nq5B9JMNtQKRyP9f$RmPp;l7j|$lViO3{3OE*^NWlWkj8;yu*uTRE zxp~HQR!64s(ob83G-}G`Ie#4@g6|J58gLedYzZaQvFBwg`2%wvjy)jdHtJQ{vNbK5 zD?8ce|C%$JHHXUzT#0wc)O&zJSwIkqh%Jl@sl6C71uZ=1Y8IubBtau z#}rOJzUWWf=bt6(bh0YWJ8s`lxg@+rxx(9-c$>7xKx?FJY@ZK|_hjoW z3Lcxs{zs2o*ho|t4xHae7&l#hdFK0lBH<_paAlh&i&Ojsfj()@%m>UM2E~!hQw13n zNdPPz(o;CFCon=ZebNo;9v%>1E#n&)(0z01fNmZiY$~Ucm;+qEEs!YksIP{JGXDrO zZ2xgVtG!iEjUMEa8#7tuS3i^`ndJ)Zq&Qfkj7fvp*OS2;MOz}7;lWc_Jvc}_a#t{E z1xd_P?j|Aj*<@_s*@%)qjh^YBRjrd6CX>TEJO=2Rm@>}PczStY?OaKx<69gny8yq^KereE(kTz`ZyR1 zx*T`my!4v%n`I)iQzLa$Tpwk#Z61T3VFTdQvgwqECu}wLlDV=CqYJ*)j^qU65GguDe-BuEdayz`jDz1W0z< z%Mf~lYC!Mr1U9UlFgx!I_XZ627FH7=9I&G9jW_i;ETLcmJ5X%D0!_>qg!CCqb!gvK zsHSNNEL)qRje~N7PY({pqygC^OPWPN$>fmzD}ZD@Yj`N5>^WTga%ct@35LX+VM)w9 z0X3L98HyIyh=fZo$ZqVm{Bcn;ABxQS%@?D+?zE}%oMOM^vXBtn6Q`EiMK(=s7SN%w z_NTK(hdV`V57E*28g26B;uOFc=8kGHw!)x--4H(=FQ^Z#jy;}l^!iKE?&_y#posfk zc?;T)^cEjQ=exh%9aVSyoq1{X9m3l8v)i@eeEF*NmK(BycAHrjf^e;Us4B4|5acy6z?JK3}KsEmP-wXgkb-iUITrO8u(elEeV! z@fE5$DNqtr84|698O1s|ZX#7Rm6AJqTP_;1B<3)e{E>Z+A5J%yEwbyr*<2wpI&x`W zceBm%q*>Cdu*M3VS+d(82UDBSSO%MFpokm&!N0)~>b*FCWB)y7WO_FSP-4=oYLGDr z3GI(JRC|8%ggK&}KM`wvgar%a)nTZo!89pF^ZEYO+s~s&m`HxT{9i`3^_RiztUr~( zSRHD7En2X|cV2a2RUx@m(I^-6YPlpx%x=3CjeARkFZ3p{ka3=A1QXPQ3)|QR87pjA z9?(i+u=f4+x^ft{2ma&^aY1-jzgZjH_6xM337rBcpF!pil8x)ue;kONyE(`XLtvrA zS}dTWDsp!1&L?Z&T&xTkJ8XAh@%u&Vf%duig{Y4|V5f;oTJ_B97SKgWLlZ{5#S8zd zo|iFu}! zH-}i7EH0P>z{1vuz?i?J{V1o?2JCw&r2b$NtP+r5njo_sHfhgWx7RLG=mMUoNaPND zv7v&(i!(9cBo6)!s@dbM(1iPGHS#Km?6cY-pMYY?>oOMPV0N~pw zb*?7b^W8Z7S?px`8Q13oAd165NTSCgytSs=BbZ%XI5X4eq|OqHOh03%itx0WXsV-x ziv~f60WURf@ISj9{E7ycEV>P-&;RQ-@NQqMS=YQDCj&>O1b$LcafzxA&D?n5AK@cW zXe_?`mWbWootdG13Fw zx@NzGQ=T7or zWWkA#D?2laJvi%(`2FuC+wjFJfigZza^(d`iW!125Sab{WtD&S9eC#c3tn7*l`qg$ zNH(oA)^%fDApXfnK@P){4$Pq@nK|VS=ib()8&vy%3e@FAD_uMZ4or-y(eSEDni`w~ zRb;&}tVA2-6I8&4yxY$KG4Xg2AJRyiQNBnWFFffO(JNusl^e{C@TPrR+~4_is~Wb& zY_+qjc2U{wr%jr$TCLZk^O2&djZGS`qoptnvJI-1g7JE3Dca_A};=wVl9 zw1XNcC*M>t5D5_M9dZ9=n0c(J*zT%rSLeK3S%ac_qBAb0yG$Vs1Y)Jsg1iR}JawqS zxZ&^{H_z@YAj$1)TIhfC%1s_$=<4M|`w8Y3y*rG)R^9tUz+>WL{<{)W=G{-_dSd3i z2V2JEa+50jUK&<+RGEZL8x%dP~ zYV0wQy(cVZ*XtZ1h!9HXTLc+-?>0rvud9(jG4a00X8$n7p&DTEZ83SQUk$N+^;Z>W zN-yL0!=m?K17~#8dhTNQi{+{T{>u<3z6Khc zYL+2wNRLaoFAl8hHfq-?ZER^Fc`XGkh6 zp+;W8!*>wLY-*d+<`Y?csqTElkyULsvBHf`+pFkX5_}_6y%sHadG?EVE*6f3@QOx< z!B@WMJd1W{WGQ$&YxLYvI=p8Q8F@<(%@00#^|RE$jWj;MDU#|(m#uI z6(zCH1#{SfZm7ls5NnB*o*Uh>6^p(x6ZsO1( z(VD>GugKm36L>End7b9+{`j>%ucVjU1|aTpu6lQ__Twtwvipf?%YWGJVauO3(SP!@ z#@|h1ZU`Adc%LpOe;lO*$mEae`}vrxJAb522~|zZFH1#5fd4d4tR(K(+HMkohgfnw zjg5I7E&9a#-m8R^{87f7-~HV<8p8OvKlBOQ%Bye6fZL)1G$~}}p*WlI*X;sFs1G^% z$Gkazx!U@tstD){7FHSd9KOheS?o`diFVUr`^HT;i0hwBFpr`9u{<;zh|C2x~g4L3a=T{NHEa#HH=Tg=qu(|WJnm2;dy zqhW$M1{6&tN?9TS&8eu0QU}d{%gpLHTMfB-453cXE@_~gR>#>~7W030sF(Pm@UI0Y~OMzc;BIGLciUkgAf2swvMVd(O z)Zzbmp>6!iURNoV{M8f~J$f6dk92XiNRXvhsA50l+5Nnc!VG%qhR&xw?h+TgxFaAa zT0ioj2sOKzvKDneM+6?`vP)aB|(pFSFeGR~i`B9CUnA z>UQl~rF{Ir>bZ;YZfa1Uxc9pn*}4JY3taoO1KPh8ltF)`eS2}E6S}x<;GX60D6?g+ zzAxfsV(5O9H-F=;jC_bryZa68jAxGTkA@uA1jj(FmL`3vmU!Uj^V`s|zhovzWAu&U z*WsFOR0b<`NBBDjv$gjzyjyGN$}XlJT|N;|SP<43^bZ~(?cz@oohY1hEJ6J}&eYyx z{cjRf60VeSN4fqk8}&mzhirU6)r(kg5SAZ6*_^wSkbUww-@ZX%TL-|DDOE;x{4ult z*Pp-xni7AC*~=ve-~UZZmQwm)IVx01in!E!Vq(C9@(idO-4)ugyu5;q*}MWZSwtGS z;3uO2z{@lYb3G2|yFkkfBH_FK=(d5H*0>|Ne{_f|?0l3tv9Stjl!kLedIj&NOCbvL zr}1G|tSMO61mO+npM2)$I?UV*A+W;-NKU!!(;Qje0Ev2W{!>lFTVPh$B&dV6-(R^M zc_2&(Kppq3EIEaHb{^^aE8ZgoK+E4qgRFLM%{P3lYqfk`y7qs7n{*B5*J@^N8oY<) z35STnkJS?*uG_esnK6%nV+(m-JD0;iqV!bywd6U7|Af$k+!cp=}Y@uH7QO+5XN` zsFX?TLT|?k&u~KK(u1#R3kHt1U3yVqh2JM1h{(y<#5XdpPMPEzS4QMM-N4KAWsV`6 z)^cwu6zEcnH>9GCah&g^iVo_ylLz1d=g?0U+;8Dh*r2png7bs%(Qrl|^8;dJDoE+< z=~z-u_>onQze=hCHPH{o-Cho(WUcnBq8{DQM6GaszDdzv3Nzlnd=TYb3vY4!Aelm= zMU>T{+qDJM?SF?!gF%Sfn9eB=73fp|<`}%d1BVeJGD+Q5;x7g801aowN&`>y7<31U7qC zex3LvEnDdO^ud}NlXOh?A^X6id{gz8B`(}_c^~kGYK5sPb85Pih9Z3s2RkY#W< zwlwYzjurqtZ1fyjwm3mdd6#Tp^Hpl)*SNZ9DGPZv6eXY|0fJ$gJvyT_QryX=V9{?M zJ%=JqEDx%gr!vi#GtD)2pLQu-+yF6G0o?MRxX60f3&`lc(*_K-qC(<|046A)hYf7g z0z|wN)~XJ=$eK2vU0S(haSQtCOe(LTW_W8&Ryyi(LpyKM^o?emFv?o^EN*vI8@xQA zAZE=qqZ4cDNWaDtpm3G7h8*(OIzEPqY$EI)s#{|}6f*pIrV8>TDx$exu`vLsRz9Yf z$LIX22bF0YfAKEJ*#j&n^vwmdGk9(~xumDYdhk}tS8G)qOcjX+J;(|-lqF0uLCd1( z!>(g1baC7#PRW>p9l054s~*g(v;jKCEVMHaZ zF((w-(@oL~J|F(#+=Rt4d+qGp**MDZNi;;nPoS>wb1E)mx9}xCk4xN4K`E!iN#yl0 z4}ZwPFo0@;C+k|fDI{uye83}HbD-Gdbo-Me4ERL1 zp46}1U8Y$!2%CL8eh396Zig@9g{yarWpjs4G^I|QXv(Oi!K~IjyLAzfIRyHy@)e*Zui`pC{}3WobGna_qB9PIOc|j!z=GbvHN~ zC0wVLS=~QEc0R&xR!Et2M0fk|v%^noP(?i;4hO!L){_XvmjF{}57N=?^tsGJ9~X zet79W#zs-1q)ay6<1|4!6(mJ;Bw3r2;_E2sYL0|e@+^2=tQZr_4;zs9DJ~3frA^w+ z_6nxslz4HrqXKY$E^V>_eZ_j^wc_-A#-Evh$M8_%xcgw}G2IV0Q2FY!Yv)V}zw+0w zvz}H=!qvXUT_vG7wQ2GpP$~Yiz2I=EpgA2z0P8RMT%t7l^$D|$@~W0H>=3UYtrnPV zj?be!U+M#9ufMW(?{|JecV7PJQ7^YWWn53E6==bL5^%kz+vUAt^@I2EX-+GOzWPIi zk&5=+?)iznx2r=xa*dD}kaa4fxo*sJT=Nb5uoKFO|2dyunVyFbN z1a%sF3>0H_huv(i+^91|6=S@fO&A-5vbzMuoT{Z?zvP1(v8FWnl<&S{oFX}q zpn=d~pEjK`hgxnx${saxhcSPj8g#&9}wY;+;pLSov)GqBh4g1@z4SPQXJIE z!>zUnGC4Jc7wUSf6gn|HO#%e%AzWbkOyo8pk&j7gV#L_`6~gaD2U};KXFwVmgu#5U z*=3=onaILI5~o721yr0$GU+Yy;#6^*s`l5_#jR9D_adRTl$iz+z?_LbTg@PZ40Xk;`4)U?TfV2!;Lmyc4UVAmwrqHMGPFD5$r;4DrhUC{

nO`V(ow{XkNuhasfEB>@;(_|Nj$ycr$Kxg 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

iwJn>nkgB2wF9lu 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�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 literal 0 HcmV?d00001 diff --git a/packages/repositories.config b/packages/repositories.config new file mode 100644 index 0000000..cbc7056 --- /dev/null +++ b/packages/repositories.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file