public static void Main()
ProgramExt.ILogger logger = new ProgramExt.Logger(ProgramExt.LogLevel.Info);
var currentGuid = Guid.NewGuid();
var result1 = generateId1(currentGuid, logger);
var result2 = generateId2(currentGuid.ToString().Replace("-", ""), logger);
private static string generateId1(Guid? input = null, ProgramExt.ILogger logger = default)
foreach (byte b in (input ?? Guid.NewGuid()).ToByteArray())
var delta = DateTime.Now.Ticks;
var result = (i - delta).ToString("x");
logger.LogDebug($"{input} => {i} - {delta} = {i - delta:x}");
logger.LogInformation($"Input: {input} => result: {result}");
private static string generateId2(string input = null, ProgramExt.ILogger logger = default)
foreach (byte b in Encoding.UTF8.GetBytes(input ?? Guid.NewGuid().ToString()))
var delta = DateTime.Now.Ticks;
var result = (i - delta).ToString("x");
logger.LogDebug($"{input} => {i} - {delta} = {i - delta:x}");
logger.LogInformation($"Input: {input} => result: {result}");
void LogDebug(string message);
void LogDebug(Exception ex, string message);
void LogTrace(string message);
void LogTrace(Exception ex, string message);
void LogInformation(string message);
void LogInformation(Exception ex, string message);
void LogWarning(string message);
void LogWarning(Exception ex, string message);
void LogError(string message);
void LogError(Exception ex, string message);
public class Logger : ILogger
private readonly LogLevel _logLevel;
public Logger (LogLevel logLevel = 0)
public void LogTrace(string message)
Log((LogLevel)0, message);
public void LogTrace(Exception ex, string message)
Log((LogLevel)0, ex, message);
public void LogDebug(string message)
Log((LogLevel)1, message);
public void LogDebug(Exception ex, string message)
Log((LogLevel)1, ex, message);
public void LogInformation(string message)
Log((LogLevel)2, message);
public void LogInformation(Exception ex, string message)
Log((LogLevel)2, ex, message);
public void LogWarning(string message)
Log((LogLevel)3, message);
public void LogWarning(Exception ex, string message)
Log((LogLevel)3, ex, message);
public void LogError(string message)
Log((LogLevel)4, message);
public void LogError(Exception ex, string message)
Log((LogLevel)4, ex, message);
private void Log(LogLevel logLevel, string message)
if ((int)logLevel >= (int)_logLevel)
Console.WriteLine($"[{DateTimeOffset.UtcNow}] [{logLevel.ToString()}] {message}");
private void Log(LogLevel logLevel, Exception ex, string message)
if ((int)logLevel >= (int)_logLevel)
Console.WriteLine($"[{DateTimeOffset.UtcNow}] [{logLevel.ToString()}] {ex} - {message}");