Files
ichni_Official/Packages/com.tivadar.best.http/Runtime/Shared/Logger/ILogger.cs
2026-06-15 18:18:16 +08:00

173 lines
6.0 KiB
C#

using System;
namespace Best.HTTP.Shared.Logger
{
[HideFromDocumentation]
public sealed class HideFromDocumentation : Attribute
{
}
/// <summary>
/// Available logging levels.
/// </summary>
public enum Loglevels : int
{
/// <summary>
/// All message will be logged.
/// </summary>
All,
/// <summary>
/// Only Informations and above will be logged.
/// </summary>
Information,
/// <summary>
/// Only Warnings and above will be logged.
/// </summary>
Warning,
/// <summary>
/// Only Errors and above will be logged.
/// </summary>
Error,
/// <summary>
/// Only Exceptions will be logged.
/// </summary>
Exception,
/// <summary>
/// No logging will occur.
/// </summary>
None
}
/// <summary>
/// Represents an output target for log messages.
/// </summary>
/// <remarks>
/// <para>
/// This interface defines methods for writing log messages to an output target.
/// Implementations of this interface are used to configure where log messages
/// should be written.
/// </para>
/// <para>
/// Two of its out-of-the-box implementations are
/// <list type="bullet">
/// <item><description><see cref="UnityOutput">UnityOutput</see></description></item>
/// <item><description><see cref="FileOutput">FileOutput</see></description></item>
/// </list>
/// </para>
/// </remarks>
public interface ILogOutput : IDisposable
{
/// <summary>
/// Gets a value indicating whether the log output supports colored text.
/// </summary>
bool AcceptColor { get; }
/// <summary>
/// Writes a log entry to the output.
/// </summary>
/// <param name="level">The logging level of the entry.</param>
/// <param name="logEntry">The log message to write.</param>
void Write(Loglevels level, string logEntry);
/// <summary>
/// Flushes any buffered log entries to the output.
/// </summary>
void Flush();
}
/// <summary>
/// Represents a filter for further sort out what log entries to include in the final log output.
/// </summary>
public interface IFilter
{
/// <summary>
/// Return <c>true</c> if the division must be included in the output.
/// </summary>
bool Include(string division);
}
/// <summary>
/// Represents a logger for recording log messages.
/// </summary>
public interface ILogger
{
/// <summary>
/// Gets or sets the minimum severity level for logging.
/// </summary>
Loglevels Level { get; set; }
/// <summary>
/// Gets or sets the output target for log messages.
/// </summary>
/// <value>
/// The <see cref="ILogOutput"/> instance used to write log messages.
/// </value>
ILogOutput Output { get; set; }
/// <summary>
/// Gets or sets an output filter to decide what messages are included or not.
/// </summary>
/// <value>The <see cref="IFilter"/> instance used for filtering.</value>
IFilter Filter { get; set; }
/// <summary>
/// Property indicating whether the logger's internal queue is empty or not.
/// </summary>
bool IsEmpty { get; }
/// <summary>
/// Gets a value indicating whether diagnostic logging is enabled.
/// </summary>
/// <remarks>
/// Diagnostic logging is enabled when <see cref="Level"/> is set to <see cref="Loglevels.All"/>.
/// </remarks>
bool IsDiagnostic { get; }
/// <summary>
/// Logs a message with <see cref="Loglevels.All"/> level.
/// </summary>
/// <param name="division">The division or category of the log message.</param>
/// <param name="msg">The verbose log message.</param>
/// <param name="context">The optional <see cref="LoggingContext"/> for additional context.</param>
void Verbose(string division, string msg, LoggingContext context = null);
/// <summary>
/// Logs a message with <see cref="Loglevels.Information"/> level.
/// </summary>
/// <param name="division">The division or category of the log message.</param>
/// <param name="msg">The verbose log message.</param>
/// <param name="context">The optional <see cref="LoggingContext"/> for additional context.</param>
void Information(string division, string msg, LoggingContext context = null);
/// <summary>
/// Logs a message with <see cref="Loglevels.Warning"/> level.
/// </summary>
/// <param name="division">The division or category of the log message.</param>
/// <param name="msg">The verbose log message.</param>
/// <param name="context">The optional <see cref="LoggingContext"/> for additional context.</param>
void Warning(string division, string msg, LoggingContext context = null);
/// <summary>
/// Logs a message with <see cref="Loglevels.Error"/> level.
/// </summary>
/// <param name="division">The division or category of the log message.</param>
/// <param name="msg">The verbose log message.</param>
/// <param name="context">The optional <see cref="LoggingContext"/> for additional context.</param>
void Error(string division, string msg, LoggingContext context = null);
/// <summary>
/// Logs a message with <see cref="Loglevels.Exception"/> level.
/// </summary>
/// <param name="division">The division or category of the log message.</param>
/// <param name="msg">The verbose log message.</param>
/// <param name="context">The optional <see cref="LoggingContext"/> for additional context.</param>
void Exception(string division, string msg, Exception ex, LoggingContext context = null);
}
}