diff --git a/SteamWareLib/logger.cs b/SteamWareLib/logger.cs
index 35355e4..527a91d 100644
--- a/SteamWareLib/logger.cs
+++ b/SteamWareLib/logger.cs
@@ -1,5 +1,6 @@
using System;
using System.IO;
+using System.Threading;
namespace SteamWare
{
@@ -10,8 +11,6 @@ namespace SteamWare
{
#region dichiarazione variabili
- #region altri dati
-
///
/// directory base x logs
///
@@ -28,9 +27,14 @@ namespace SteamWare
/// controlla se si debba mantenere sotto controllo la dimensioen della cartella logs
///
protected bool _doShrinkFolder;
-
-
- #endregion
+ ///
+ /// Ultima verifica directory (x shrink)
+ ///
+ private static DateTime lastDirCheck;
+ ///
+ /// metodo gestione wirteLock su file log
+ ///
+ private static ReaderWriterLockSlim _readWriteLock = new ReaderWriterLockSlim();
#endregion
@@ -63,6 +67,8 @@ namespace SteamWare
{
_doShrinkFolder = true;
}
+ // all'avvio imposto ultimo check a 23 ore fa... così farà shrink DOPO 1 h da avvio
+ lastDirCheck = DateTime.Now.AddHours(-23);
}
///
/// livello di log applicazione (da web.config, chiave '_logLevel')
@@ -181,25 +187,30 @@ namespace SteamWare
return fatto;
}
///
- /// Vera chaimata scrittura log x override con gestione REDIS di calmierazione
+ /// Vera chiamata scrittura log x override con gestione REDIS di calmierazione
///
///
///
private bool doScriviLog(string _testoPre)
{
+ bool fatto = false;
// attenzione: rimpiazzo eventuali "" con newline...
string _testo = string.Format("{0:H:mm:ss ffff} \t{1}", DateTime.Now, _testoPre.Replace("
", Environment.NewLine).Replace("
", Environment.NewLine).Replace("
", Environment.NewLine));
-
- if (_doShrinkFolder)
+ // se è configurato x shrink ed è passato almeno 1 gg da ultimo check...
+ if (_doShrinkFolder && lastDirCheck.AddDays(1) < DateTime.Now)
{
// verifica dim directory ed eventualmente cancella... - opzionale
shrinkDir();
+ // salvo nuova ora di check
+ lastDirCheck = DateTime.Now;
}
// (ri)genera il nome del file di log...
newLogfileName();
+ // scrivo thread safe
+ fatto = WriteToFileThreadSafe(_logfileName, _testo);
+#if false
// aggiunge in append...
StreamWriter sw = new StreamWriter(_logfileName, true);
- bool fatto;
try
{
sw.WriteLine(_testo);
@@ -210,11 +221,39 @@ namespace SteamWare
catch
{
fatto = false;
- }
-
+ }
+#endif
return fatto;
}
+ ///
+ /// Esecuzione scrittura ThreadSafe
+ ///
+ ///
+ ///
+ public bool WriteToFileThreadSafe(string logPath, string text2write)
+ {
+ bool answ = false;
+ // Set Status to Locked
+ _readWriteLock.EnterWriteLock();
+ try
+ {
+ // Append text to the file
+ using (StreamWriter sw = File.AppendText(logPath))
+ {
+ sw.WriteLine(text2write);
+ sw.Close();
+ answ = true;
+ }
+ }
+ finally
+ {
+ // Release lock
+ _readWriteLock.ExitWriteLock();
+ }
+ return answ;
+ }
+
///
/// scrive un messaggio di log con etichetta pre
///