123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #region Apache License
- //
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to you under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //
- #endregion
- using System;
- using System.Globalization;
- using log4net.Layout;
- using log4net.Core;
- using log4net.Util;
- namespace log4net.Appender
- {
- /// <summary>
- /// Appends logging events to the console.
- /// </summary>
- /// <remarks>
- /// <para>
- /// ConsoleAppender appends log events to the standard output stream
- /// or the error output stream using a layout specified by the
- /// user.
- /// </para>
- /// <para>
- /// By default, all output is written to the console's standard output stream.
- /// The <see cref="Target"/> property can be set to direct the output to the
- /// error stream.
- /// </para>
- /// <para>
- /// NOTE: This appender writes each message to the <c>System.Console.Out</c> or
- /// <c>System.Console.Error</c> 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.
- /// </para>
- /// </remarks>
- /// <author>Nicko Cadell</author>
- /// <author>Gert Driesen</author>
- public class ConsoleAppender : AppenderSkeleton
- {
- #region Public Instance Constructors
- /// <summary>
- /// Initializes a new instance of the <see cref="ConsoleAppender" /> class.
- /// </summary>
- /// <remarks>
- /// The instance of the <see cref="ConsoleAppender" /> class is set up to write
- /// to the standard output stream.
- /// </remarks>
- public ConsoleAppender()
- {
- }
- /// <summary>
- /// Initializes a new instance of the <see cref="ConsoleAppender" /> class
- /// with the specified layout.
- /// </summary>
- /// <param name="layout">the layout to use for this appender</param>
- /// <remarks>
- /// The instance of the <see cref="ConsoleAppender" /> class is set up to write
- /// to the standard output stream.
- /// </remarks>
- [Obsolete("Instead use the default constructor and set the Layout property")]
- public ConsoleAppender(ILayout layout) : this(layout, false)
- {
- }
- /// <summary>
- /// Initializes a new instance of the <see cref="ConsoleAppender" /> class
- /// with the specified layout.
- /// </summary>
- /// <param name="layout">the layout to use for this appender</param>
- /// <param name="writeToErrorStream">flag set to <c>true</c> to write to the console error stream</param>
- /// <remarks>
- /// When <paramref name="writeToErrorStream" /> is set to <c>true</c>, output is written to
- /// the standard error output stream. Otherwise, output is written to the standard
- /// output stream.
- /// </remarks>
- [Obsolete("Instead use the default constructor and set the Layout & Target properties")]
- public ConsoleAppender(ILayout layout, bool writeToErrorStream)
- {
- Layout = layout;
- m_writeToErrorStream = writeToErrorStream;
- }
- #endregion Public Instance Constructors
- #region Public Instance Properties
- /// <summary>
- /// Target is the value of the console output stream.
- /// This is either <c>"Console.Out"</c> or <c>"Console.Error"</c>.
- /// </summary>
- /// <value>
- /// Target is the value of the console output stream.
- /// This is either <c>"Console.Out"</c> or <c>"Console.Error"</c>.
- /// </value>
- /// <remarks>
- /// <para>
- /// Target is the value of the console output stream.
- /// This is either <c>"Console.Out"</c> or <c>"Console.Error"</c>.
- /// </para>
- /// </remarks>
- virtual public string Target
- {
- get { return m_writeToErrorStream ? ConsoleError : ConsoleOut; }
- set
- {
- string v = value.Trim();
- if (SystemInfo.EqualsIgnoringCase(ConsoleError, v))
- {
- m_writeToErrorStream = true;
- }
- else
- {
- m_writeToErrorStream = false;
- }
- }
- }
- #endregion Public Instance Properties
- #region Override implementation of AppenderSkeleton
- /// <summary>
- /// This method is called by the <see cref="M:AppenderSkeleton.DoAppend(LoggingEvent)"/> method.
- /// </summary>
- /// <param name="loggingEvent">The event to log.</param>
- /// <remarks>
- /// <para>
- /// Writes the event to the console.
- /// </para>
- /// <para>
- /// The format of the output will depend on the appender's layout.
- /// </para>
- /// </remarks>
- override protected void Append(LoggingEvent loggingEvent)
- {
- #if NETCF_1_0
- // Write to the output stream
- Console.Write(RenderLoggingEvent(loggingEvent));
- #else
- if (m_writeToErrorStream)
- {
- // Write to the error stream
- Console.Error.Write(RenderLoggingEvent(loggingEvent));
- }
- else
- {
- // Write to the output stream
- Console.Write(RenderLoggingEvent(loggingEvent));
- }
- #endif
- }
- /// <summary>
- /// This appender requires a <see cref="Layout"/> to be set.
- /// </summary>
- /// <value><c>true</c></value>
- /// <remarks>
- /// <para>
- /// This appender requires a <see cref="Layout"/> to be set.
- /// </para>
- /// </remarks>
- override protected bool RequiresLayout
- {
- get { return true; }
- }
- #endregion Override implementation of AppenderSkeleton
- #region Public Static Fields
- /// <summary>
- /// The <see cref="ConsoleAppender.Target"/> to use when writing to the Console
- /// standard output stream.
- /// </summary>
- /// <remarks>
- /// <para>
- /// The <see cref="ConsoleAppender.Target"/> to use when writing to the Console
- /// standard output stream.
- /// </para>
- /// </remarks>
- public const string ConsoleOut = "Console.Out";
- /// <summary>
- /// The <see cref="ConsoleAppender.Target"/> to use when writing to the Console
- /// standard error output stream.
- /// </summary>
- /// <remarks>
- /// <para>
- /// The <see cref="ConsoleAppender.Target"/> to use when writing to the Console
- /// standard error output stream.
- /// </para>
- /// </remarks>
- public const string ConsoleError = "Console.Error";
- #endregion Public Static Fields
- #region Private Instances Fields
- private bool m_writeToErrorStream = false;
- #endregion Private Instances Fields
- }
- }
|