- Rimossa la sezione "Impostazioni Export" dalla UI e dal code-behind, inclusi controlli, eventi e file legacy di export. - Aggiunta configurazione del livello minimo di log (ErrorOnly, Normal, Informational, Debug, Trace) con guida e legenda colori. - La funzione di log ora filtra i messaggi in base al livello selezionato. - Aggiornati modelli di impostazioni e enum LogLevel per supportare i nuovi livelli. - Refactoring commenti e uniformità sezioni impostazioni. - Migliorata la chiarezza del log di avvio applicazione.
100 lines
4.5 KiB
C#
100 lines
4.5 KiB
C#
using System;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
using AutoBidder.Utilities;
|
|
|
|
namespace AutoBidder
|
|
{
|
|
/// <summary>
|
|
/// Logging functionality with color-coded severity levels and configurable minimum level filtering
|
|
/// </summary>
|
|
public partial class MainWindow
|
|
{
|
|
/// <summary>
|
|
/// Scrive un messaggio nel log globale con filtraggio basato sul livello minimo configurato
|
|
/// </summary>
|
|
/// <param name="message">Messaggio da loggare</param>
|
|
/// <param name="level">Livello di severità del messaggio</param>
|
|
private void Log(string message, LogLevel level = LogLevel.Info)
|
|
{
|
|
Dispatcher.BeginInvoke(() =>
|
|
{
|
|
try
|
|
{
|
|
// Carica impostazioni per ottenere livello minimo e limite righe
|
|
var settings = SettingsManager.Load();
|
|
|
|
// Filtra messaggi in base al livello minimo configurato
|
|
MinimumLogLevel minLevel = MinimumLogLevel.Normal; // Default
|
|
if (Enum.TryParse<MinimumLogLevel>(settings.MinLogLevel, out var parsedLevel))
|
|
{
|
|
minLevel = parsedLevel;
|
|
}
|
|
|
|
// Se il livello del messaggio è maggiore del minimo configurato, ignora
|
|
if ((int)level > (int)minLevel)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var timestamp = DateTime.Now.ToString("HH:mm:ss");
|
|
|
|
// Prefisso in base al livello per chiarezza
|
|
string prefix = level switch
|
|
{
|
|
LogLevel.Error => "[ERROR]",
|
|
LogLevel.Warning => "[WARN]",
|
|
LogLevel.Info => "[INFO]",
|
|
LogLevel.Success => "[OK]",
|
|
LogLevel.Debug => "[DEBUG]",
|
|
LogLevel.Trace => "[TRACE]",
|
|
_ => "[LOG]"
|
|
};
|
|
|
|
var logEntry = $"[{timestamp}] {prefix} {message}";
|
|
|
|
// Color coding based on severity for dark theme
|
|
var color = level switch
|
|
{
|
|
LogLevel.Error => new SolidColorBrush(Color.FromRgb(232, 17, 35)), // #E81123 (Red)
|
|
LogLevel.Warning => new SolidColorBrush(Color.FromRgb(255, 191, 0)), // #FFBF00 (Yellow)
|
|
LogLevel.Success => new SolidColorBrush(Color.FromRgb(0, 216, 0)), // #00D800 (Green)
|
|
LogLevel.Info => new SolidColorBrush(Color.FromRgb(100, 180, 255)), // #64B4FF (Light Blue)
|
|
LogLevel.Debug => new SolidColorBrush(Color.FromRgb(255, 140, 255)), // #FF8CFF (Magenta)
|
|
LogLevel.Trace => new SolidColorBrush(Color.FromRgb(160, 160, 160)), // #A0A0A0 (Gray)
|
|
_ => new SolidColorBrush(Color.FromRgb(204, 204, 204)) // #CCCCCC (Light Gray)
|
|
};
|
|
|
|
var p = new System.Windows.Documents.Paragraph { Margin = new Thickness(0, 2, 0, 2) };
|
|
var r = new System.Windows.Documents.Run(logEntry) { Foreground = color };
|
|
p.Inlines.Add(r);
|
|
LogBox.Document.Blocks.Add(p);
|
|
|
|
// Mantieni solo gli ultimi N paragrafi (configurabile dalle impostazioni)
|
|
int maxLogLines = settings.MaxGlobalLogLines;
|
|
|
|
if (LogBox.Document.Blocks.Count > maxLogLines)
|
|
{
|
|
// Rimuovi i paragrafi più vecchi (primi inseriti)
|
|
int excessCount = LogBox.Document.Blocks.Count - maxLogLines;
|
|
for (int i = 0; i < excessCount; i++)
|
|
{
|
|
if (LogBox.Document.Blocks.FirstBlock != null)
|
|
{
|
|
LogBox.Document.Blocks.Remove(LogBox.Document.Blocks.FirstBlock);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Auto-scroll if near bottom
|
|
if (LogBox.VerticalOffset >= LogBox.ExtentHeight - LogBox.ViewportHeight - 40)
|
|
{
|
|
LogBox.ScrollToEnd();
|
|
}
|
|
}
|
|
catch { }
|
|
});
|
|
}
|
|
}
|
|
}
|