mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
cleanup necessary namespaces and adjust namespaces for certain classes to better represent what they're for models, helpers and tools are all different and shouldnt really be under the same namespace
66 lines
1.9 KiB
C#
66 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace Bloxstrap.Singletons
|
|
{
|
|
// https://stackoverflow.com/a/53873141/11852173
|
|
public class Logger
|
|
{
|
|
private readonly SemaphoreSlim _semaphore = new(1, 1);
|
|
private readonly List<string> _backlog = new();
|
|
private FileStream? _filestream;
|
|
|
|
public void Initialize(string filename)
|
|
{
|
|
if (_filestream is not null)
|
|
throw new Exception("Logger is already initialized");
|
|
|
|
string? directory = Path.GetDirectoryName(filename);
|
|
|
|
if (directory is not null)
|
|
Directory.CreateDirectory(directory);
|
|
|
|
_filestream = File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.Read);
|
|
|
|
if (_backlog.Count > 0)
|
|
WriteToLog(string.Join("\r\n", _backlog));
|
|
|
|
WriteLine($"[Logger::Logger] Initialized at {filename}");
|
|
}
|
|
|
|
public void WriteLine(string message)
|
|
{
|
|
string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'");
|
|
string outcon = $"{timestamp} {message}";
|
|
string outlog = outcon.Replace(Directories.UserProfile, "<UserProfileFolder>");
|
|
|
|
Debug.WriteLine(outcon);
|
|
WriteToLog(outlog);
|
|
}
|
|
|
|
private async void WriteToLog(string message)
|
|
{
|
|
if (_filestream is null)
|
|
{
|
|
_backlog.Add(message);
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
await _semaphore.WaitAsync();
|
|
await _filestream.WriteAsync(Encoding.Unicode.GetBytes($"{message}\r\n"));
|
|
await _filestream.FlushAsync();
|
|
}
|
|
finally
|
|
{
|
|
_semaphore.Release();
|
|
}
|
|
}
|
|
}
|
|
}
|