Browse Source

Definitely not stealing

pull/1765/head
Waterball 4 years ago
parent
commit
78f0fe40d2
3 changed files with 126 additions and 0 deletions
  1. +54
    -0
      src/Discord.Net.Core/Logging/DefaultLogger.cs
  2. +41
    -0
      src/Discord.Net.Core/Logging/DefaultLoggerFactory.cs
  3. +31
    -0
      src/Discord.Net.Core/Logging/DefaultLoggerProvider.cs

+ 54
- 0
src/Discord.Net.Core/Logging/DefaultLogger.cs View File

@@ -0,0 +1,54 @@
using Microsoft.Extensions.Logging;
using System;

namespace Discord.Logging
{
internal class DefaultLogger : ILogger
{
private static readonly object _lock = new object();

private LogLevel MinimumLevel { get; }

internal DefaultLogger(LogLevel minLevel = LogLevel.Information)
{
this.MinimumLevel = minLevel;
}

public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
if (!this.IsEnabled(logLevel))
return;

lock (_lock)
{
var ename = eventId.Name;
ename = ename?.Length > 12 ? ename?.Substring(0, 12) : ename;
Console.Write($"[{DateTimeOffset.Now}] [{eventId.Id,-4}/{ename,-12}] ");
Console.Write(logLevel switch
{
LogLevel.Trace => "[Trace] ",
LogLevel.Debug => "[Debug] ",
LogLevel.Information => "[Info ] ",
LogLevel.Warning => "[Warn ] ",
LogLevel.Error => "[Error] ",
LogLevel.Critical => "[Crit ]",
LogLevel.None => "[None ] ",
_ => "[?????] "
});

var message = formatter(state, exception);
Console.WriteLine(message);
if (exception != null)
Console.WriteLine(exception);
}
}

public bool IsEnabled(LogLevel logLevel) => logLevel >= this.MinimumLevel;

public IDisposable BeginScope<TState>(TState state)
{
throw new NotImplementedException();
}
}
}

+ 41
- 0
src/Discord.Net.Core/Logging/DefaultLoggerFactory.cs View File

@@ -0,0 +1,41 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Discord.Logging
{
internal class DefaultLoggerFactory : ILoggerFactory
{
private List<ILoggerProvider> Providers { get; } = new List<ILoggerProvider>();
private bool _isDisposed = false;

public void Dispose()
{
if (this._isDisposed)
return;
this._isDisposed = true;

foreach (var provider in this.Providers)
provider.Dispose();

this.Providers.Clear();
}

public ILogger CreateLogger(string categoryName)
{
if (this._isDisposed)
throw new InvalidOperationException("This logger factory is already disposed.");

// HEHEHE XDXD
var provider = Providers.FirstOrDefault();

return provider?.CreateLogger(categoryName) ?? throw new ArgumentNullException(nameof(provider));
}

public void AddProvider(ILoggerProvider provider)
{
this.Providers.Add(provider);
}
}
}

+ 31
- 0
src/Discord.Net.Core/Logging/DefaultLoggerProvider.cs View File

@@ -0,0 +1,31 @@
using Microsoft.Extensions.Logging;
using System;

namespace Discord.Logging
{
internal class DefaultLoggerProvider : ILoggerProvider
{
private LogLevel MinimumLevel { get; }

private bool _isDisposed = false;

internal DefaultLoggerProvider(LogLevel minLevel = LogLevel.Information)
{
this.MinimumLevel = minLevel;
}

public ILogger CreateLogger(string categoryName)
{
if (this._isDisposed)
throw new InvalidOperationException("This logger provider is already disposed.");

return new DefaultLogger(this.MinimumLevel);
}

public void Dispose()
{
this._isDisposed = true;
}
}
}

Loading…
Cancel
Save