115 lines
3.0 KiB
C#
115 lines
3.0 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
|
|||
|
namespace FluentFTP {
|
|||
|
/// <summary>
|
|||
|
/// Used for transaction logging and debug information.
|
|||
|
/// </summary>
|
|||
|
/// <example>The following example illustrates how to assist in debugging
|
|||
|
/// FluentFTP by getting a transaction log from the server.
|
|||
|
/// <code source="..\Examples\Debug.cs" lang="cs" />
|
|||
|
/// </example>
|
|||
|
public static class FtpTrace {
|
|||
|
|
|||
|
|
|||
|
#if !CORE
|
|||
|
static List<TraceListener> m_listeners = new List<TraceListener>();
|
|||
|
|
|||
|
|
|||
|
static bool m_flushOnWrite = false;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets or sets whether the trace listeners should be flushed or not
|
|||
|
/// after writing to them. Default value is false.
|
|||
|
/// </summary>
|
|||
|
public static bool FlushOnWrite {
|
|||
|
get {
|
|||
|
return m_flushOnWrite;
|
|||
|
}
|
|||
|
set {
|
|||
|
m_flushOnWrite = value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Add a TraceListner to the collection. You can use one of the predefined
|
|||
|
/// TraceListeners in the System.Diagnostics namespace, such as ConsoleTraceListener
|
|||
|
/// for logging to the console, or you can write your own deriving from
|
|||
|
/// System.Diagnostics.TraceListener.
|
|||
|
/// </summary>
|
|||
|
/// <param name="listener">The TraceListener to add to the collection</param>
|
|||
|
public static void AddListener(TraceListener listener) {
|
|||
|
lock (m_listeners) {
|
|||
|
m_listeners.Add(listener);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Remove the specified TraceListener from the collection
|
|||
|
/// </summary>
|
|||
|
/// <param name="listener">The TraceListener to remove from the collection.</param>
|
|||
|
public static void RemoveListener(TraceListener listener) {
|
|||
|
lock (m_listeners) {
|
|||
|
m_listeners.Remove(listener);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Write to the TraceListeners.
|
|||
|
/// </summary>
|
|||
|
/// <param name="message">The message to write</param>
|
|||
|
/// <param name="args">Optional variables if using a format string similar to string.Format()</param>
|
|||
|
public static void Write(string message, params object[] args) {
|
|||
|
Write(string.Format(message, args));
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Write to the TraceListeners
|
|||
|
/// </summary>
|
|||
|
/// <param name="message">The message to write</param>
|
|||
|
public static void Write(string message) {
|
|||
|
#if !CORE
|
|||
|
TraceListener[] listeners;
|
|||
|
|
|||
|
lock (m_listeners) {
|
|||
|
listeners = m_listeners.ToArray();
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#if DEBUG
|
|||
|
Debug.Write(message);
|
|||
|
#endif
|
|||
|
|
|||
|
#if !CORE
|
|||
|
foreach (TraceListener t in listeners) {
|
|||
|
t.Write(message);
|
|||
|
|
|||
|
if (m_flushOnWrite) {
|
|||
|
t.Flush();
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Write to the TraceListeners.
|
|||
|
/// </summary>
|
|||
|
/// <param name="message">The message to write</param>
|
|||
|
/// <param name="args">Optional variables if using a format string similar to string.Format()</param>
|
|||
|
public static void WriteLine(string message, params object[] args) {
|
|||
|
Write(string.Format("{0}{1}", string.Format(message, args), Environment.NewLine));
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Write to the TraceListeners
|
|||
|
/// </summary>
|
|||
|
/// <param name="message">The message to write</param>
|
|||
|
public static void WriteLine(string message) {
|
|||
|
Write(string.Format("{0}{1}", message, Environment.NewLine));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|