//===================================================================================
// Microsoft patterns & practices
// Composite Application Guidance for Windows Presentation Foundation and Silverlight
//===================================================================================
// Copyright (c) Microsoft Corporation. All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================
// The example companies, organizations, products, domain names,
// e-mail addresses, logos, people, places, and events depicted
// herein are fictitious. No association with any real company,
// organization, product, domain name, email address, logo, person,
// places, or events is intended or should be inferred.
//===================================================================================
using System;
using System.Globalization;
using System.IO;
using Microsoft.Practices.Composite.Properties;
namespace Microsoft.Practices.Composite.Logging
{
/// <summary>
/// Implementation of <see cref="ILoggerFacade"/> that logs into a <see cref="TextWriter"/>.
/// </summary>
public class TextLogger : ILoggerFacade, IDisposable
{
private readonly TextWriter writer;
/// <summary>
/// Initializes a new instance of <see cref="TextLogger"/> that writes to
/// the console output.
/// </summary>
public TextLogger()
: this(Console.Out)
{
}
/// <summary>
/// Initializes a new instance of <see cref="TextLogger"/>.
/// </summary>
/// <param name="writer">The writer to use for writing log entries.</param>
public TextLogger(TextWriter writer)
{
if (writer == null)
throw new ArgumentNullException("writer");
this.writer = writer;
}
/// <summary>
/// Write a new log entry with the specified category and priority.
/// </summary>
/// <param name="message">Message body to log.</param>
/// <param name="category">Category of the entry.</param>
/// <param name="priority">The priority of the entry.</param>
public void Log(string message, Category category, Priority priority)
{
string messageToLog = String.Format(CultureInfo.InvariantCulture, Resources.DefaultTextLoggerPattern, DateTime.Now,
category.ToString().ToUpper(CultureInfo.InvariantCulture), message, priority.ToString());
writer.WriteLine(messageToLog);
}
/// <summary>
/// Disposes the associated <see cref="TextWriter"/>.
/// </summary>
/// <param name="disposing">When <see langword="true"/>, disposes the associated <see cref="TextWriter"/>.</param>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (writer != null)
{
writer.Dispose();
}
}
}
///<summary>
///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
///</summary>
/// <remarks>Calls <see cref="Dispose(bool)"/></remarks>.
///<filterpriority>2</filterpriority>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}