using System.ComponentModel;
public static void Main()
var ok = EnumEx.GetDescriptionFromEnumValue(Status.Ok);
var s = EnumEx.GetEnumValueFromDescription<Status>("404");
using System.Collections.Generic;
using System.Threading.Tasks;
namespace MemoryCacheDemo
private readonly decimal _sizeLimit = 500;
public void Info(string message)
var stream = WriteLog($"Information_{DateTime.Today:dd-MM-yyyy}.log", message);
stream.WriteLine($"{DateTime.Now.ToString()} - {message}");
public void Info(Type type, string message)
var stream = WriteLog($"Information_{DateTime.Today:dd-MM-yyyy}.log", message);
stream.WriteLine($"{type.Name} - {DateTime.Now.ToString()} - {message}");
public void Error(Exception exception)
var stream = WriteLog($"Error_{DateTime.Today:dd-MM-yyyy}.log", $"{exception}");
stream.WriteLine($"{DateTime.Now.ToString()} - ${exception}");
private StreamWriter WriteLog(string fileName, string message)
var fullPath = Path.Combine(Path.GetDirectoryName(Environment.CurrentDirectory), "logs");
if (!Directory.Exists(fullPath))
Directory.CreateDirectory(fullPath);
var logFilePath = MakeUniqueFileName(fullPath, fileName);
var logFileStream = new FileStream(logFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
logFileStream.Seek(0, SeekOrigin.End);
var logFileWriter = new StreamWriter(logFileStream)
private string GetFilePath(string fullPath, string fileName)
var path = MakeUniqueFileName(fullPath, fileName);
private string MakeUnique(string path)
string dir = Path.GetDirectoryName(path);
string fileName = Path.GetFileNameWithoutExtension(path);
string fileExt = Path.GetExtension(path);
FileInfo fileInfo = new FileInfo(path);
if (fileInfo.Exists && fileInfo.Length > 500)
path = Path.Combine(dir, fileName + "_" + i + fileExt);
path = Path.Combine(dir, fileName + fileExt);
private string GetNextFileName(string fileName)
string extension = Path.GetExtension(fileName);
while (File.Exists(fileName))
fileName = fileName.Replace(extension, "(" + ++i + ")" + extension);
fileName = fileName.Replace("(" + i + ")" + extension, "(" + ++i + ")" + extension);
return Path.GetFileName(fileName);
private string MakeUniqueFileName(string fullPath, string fileName)
DirectoryInfo d = new DirectoryInfo(fullPath);
FileInfo[] files = d.GetFiles("*.log");
var count = files.Where(x => x.Name.Contains(fileName.Split('.')[0])).ToList();
string newFileName = fileName;
for (int i = 1; i <= count.Count; i++)
var path = Path.Combine(fullPath, newFileName);
FileInfo fileInfo = new FileInfo(path);
if (File.Exists(path) && fileInfo.Exists && GetFileSize(fileInfo.Length) > _sizeLimit)
var splitFileName = fileName.Split('.');
newFileName = $"{splitFileName[0]}_{i}.{splitFileName[1]}";
return Path.Combine(fullPath, newFileName);
private decimal GetFileSize(decimal totalBytes)
decimal size = Math.Round(totalBytes / 1024, 2);