2025-11-28 00:35:46 +09:00

92 lines
2.5 KiB
C#

//
// <copyright file="LogManager.cs" company="Microsoft">
// Copyright (C) Microsoft. All rights reserved.
// </copyright>
//
using System;
using System.IO;
using System.IO.Pipes;
using System.Globalization;
namespace Contoso.EmailService
{
public sealed class LogManager : IDisposable
{
private NamedPipeClientStream clientStream = null;
private StreamWriter streamWriter = null;
public const string ConnectionName = "Contoso.HostedEmail.LogManager_3983E9AC-B6D1-4A2A-881C-4B1CEFCA5266";
private static object singletonLock = new object();
private static LogManager logManager = null;
public static LogManager SingleInstance
{
get
{
if (logManager == null)
{
lock (singletonLock)
{
if (logManager == null) logManager = new LogManager();
}
}
return logManager;
}
}
private LogManager()
{
clientStream = new NamedPipeClientStream(".", ConnectionName, PipeDirection.Out);
streamWriter = new StreamWriter(clientStream);
}
public void Log(string format, params object[] values)
{
try
{
if (!clientStream.IsConnected)
{
clientStream.Connect(0);
}
if (clientStream.IsConnected)
{
string timeStamp = string.Format(CultureInfo.InvariantCulture, "[{0}]: ", DateTime.Now);
streamWriter.WriteLine(timeStamp + format, values);
streamWriter.Flush();
}
else
{
// NamedPipe server is not ready, do nothing
}
}
catch (TimeoutException)
{
// NamedPipe server is not ready, do nothing
}
catch (IOException)
{
// Do nothing
}
catch (ObjectDisposedException)
{
// NamedPipe server is disposed, do nothing
}
}
public void Dispose()
{
if (streamWriter != null)
{
streamWriter.Close();
streamWriter = null;
}
else if (clientStream != null)
{
clientStream.Close();
clientStream = null;
}
}
}
}