init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
132
Framework/Logging/MulticastLogWriter.cs
Normal file
132
Framework/Logging/MulticastLogWriter.cs
Normal file
|
@ -0,0 +1,132 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Kreta.Framework.Exceptions;
|
||||
|
||||
namespace Kreta.Framework.Logging
|
||||
{
|
||||
/// <summary>
|
||||
/// Multicast-oló naplóvezető <see cref="ILogWriter"/> megvalósítás.
|
||||
/// </summary>
|
||||
public sealed class MulticastLogWriter : LogWriterBase
|
||||
{
|
||||
// <<Composite>>
|
||||
|
||||
readonly IList<ILogWriter> m_LogWriters = new List<ILogWriter>();
|
||||
LogLevel m_LogLevel;
|
||||
|
||||
/// <summary>
|
||||
/// Az osztály alapértelmezett konstruktora.
|
||||
/// </summary>
|
||||
public MulticastLogWriter()
|
||||
: this(LogLevel.INFO)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Az osztály konstruktora.
|
||||
/// </summary>
|
||||
/// <param name="logLevel">Naplózási szint</param>
|
||||
public MulticastLogWriter(LogLevel logLevel)
|
||||
{
|
||||
m_LogLevel = logLevel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ggyerek naplóvezetőt vesz fel a listába.
|
||||
/// </summary>
|
||||
/// <param name="writer">A gyerek naplóvezető</param>
|
||||
public void Add(ILogWriter writer)
|
||||
{
|
||||
if (writer == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(writer));
|
||||
}
|
||||
|
||||
if (m_LogWriters.Contains(writer))
|
||||
{
|
||||
throw new InvalidOperationException("The writer is already added.");
|
||||
}
|
||||
|
||||
m_LogWriters.Add(writer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Naplózási szint.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Egy üzenet akkor kerül naplózásra, ha a szintje nagyobb, vagy
|
||||
/// egyenlő, mint ennek a tulajdonságnak az értéke.
|
||||
/// </remarks>
|
||||
public LogLevel Level
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_LogLevel;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_LogLevel = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A gyerek naplóvezetők listája.
|
||||
/// </summary>
|
||||
public IEnumerable<ILogWriter> LogWriters
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_LogWriters;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Naplóba vezeti az üzenetet.
|
||||
/// </summary>
|
||||
/// <param name="message">A naplóba vezetendő üzenet</param>
|
||||
protected override Guid? DoLog(ILogMessage message)
|
||||
{
|
||||
var logId = Guid.NewGuid();
|
||||
MultiLog(message, logId);
|
||||
return logId;
|
||||
}
|
||||
|
||||
protected override void DoLog(ILogMessage message, Guid logId)
|
||||
{
|
||||
MultiLog(message, logId);
|
||||
}
|
||||
|
||||
private void MultiLog(ILogMessage message, Guid logId)
|
||||
{
|
||||
if (message == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.Level < m_LogLevel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
foreach (ILogWriter writer in m_LogWriters.ToArray())
|
||||
{
|
||||
writer.Log(message, logId);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
try
|
||||
{
|
||||
ConsoleLogWriter.WriteLine("Child logwriter threw an exception:", LogLevel.ERROR);
|
||||
ConsoleLogWriter.WriteLine(ExceptionUtil.ExceptionToString(exception), LogLevel.ERROR);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue