X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FLogger%2FLogger.fs;h=1b4c3325e3c884660e2a9087951d92bd4a0bdc5f;hp=cc023141fc895f21318962af8476ae34a867b65e;hb=b87b35b922551f122228df1fd9c530bbb807935a;hpb=2e3cd07dd099944059ef5e7a7f5ef57ffe3d677b diff --git a/Parasitemia/Logger/Logger.fs b/Parasitemia/Logger/Logger.fs index cc02314..1b4c332 100644 --- a/Parasitemia/Logger/Logger.fs +++ b/Parasitemia/Logger/Logger.fs @@ -21,10 +21,10 @@ type Log () = let moduleName = System.Diagnostics.StackFrame(1).GetMethod().Module.Name - let mutable stream: StreamWriter = null + let mutable stream : StreamWriter = null - let mutable logDir: string = null - let mutable absoluteDir: string = null + let mutable logDir : string = null + let mutable absoluteDir : string = null let mutable nbEntries = 0L @@ -41,42 +41,36 @@ type Log () = static let instance = new Log() - let setLogDirectory (dir: string) = + let setLogDirectory (dir : string) = lock monitor (fun () -> logDir <- dir absoluteDir <- Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), logDir) - if stream <> null - then + if stream <> null then stream.Close() stream <- null try - if not <| Directory.Exists(absoluteDir) - then + if not <| Directory.Exists(absoluteDir) then Directory.CreateDirectory(absoluteDir) |> ignore with | _ as ex -> Console.Error.WriteLine("Unable to create the log directory: {0}", absoluteDir)) let openLogFile () = try - if stream = null || (nbEntries % (int64 nbEntriesCheckSize) = 0L) && stream.BaseStream.Length > maxSizeFile - then - if stream <> null - then + if stream = null || (nbEntries % (int64 nbEntriesCheckSize) = 0L) && stream.BaseStream.Length > maxSizeFile then + if stream <> null then stream.Close() let mutable n = 1 for existingFile in Directory.GetFiles(absoluteDir) do let current_n = ref 0 - if Int32.TryParse(existingFile.Remove(existingFile.LastIndexOf('.')), current_n) && !current_n > n - then + if Int32.TryParse(existingFile.Remove(existingFile.LastIndexOf('.')), current_n) && !current_n > n then n <- !current_n let mutable filename = Path.Combine(absoluteDir, String.Format(filenameFormat, n)) try - if (FileInfo(filename).Length > maxSizeFile) - then + if (FileInfo(filename).Length > maxSizeFile) then filename <- Path.Combine(absoluteDir, String.Format(filenameFormat, n + 1)) with | :? FileNotFoundException -> () // The file may not exist. @@ -90,17 +84,15 @@ type Log () = interface IDisposable with member this.Dispose () = - if stream <> null - then + if stream <> null then stream.Dispose() - member private this.Write (message: string, severity: Severity) = + member private this.Write (message : string, severity : Severity) = lock monitor (fun () -> nbEntries <- nbEntries + 1L openLogFile () - if stream <> null - then + if stream <> null then let mutable moduleNameCaller = moduleName match StackTrace().GetFrames() |> Array.tryPick (fun frame -> let name = frame.GetMethod().Module.Name if name <> moduleName then Some name else None) with @@ -126,45 +118,43 @@ type Log () = | :? IOException as ex -> Console.Error.WriteLine("Unable to write to the log file: {0}", ex)) - member private this.AddListener (listener: IListener) = + member private this.AddListener (listener : IListener) = lock monitor (fun () -> - if not <| listeners.Contains(listener) - then + if not <| listeners.Contains(listener) then listeners.Add(listener)) - member private this.RmListener (listener: IListener) = + member private this.RmListener (listener : IListener) = lock monitor (fun () -> listeners.Remove(listener) |> ignore) - static member AddListener (listener: IListener) = instance.AddListener(listener) - static member RmListener (listener: IListener) = instance.RmListener(listener) + static member AddListener (listener : IListener) = instance.AddListener(listener) + static member RmListener (listener : IListener) = instance.RmListener(listener) - static member LogWithTime (message: string, severity: Severity, f: unit -> 'a option, [] args: Object[]) : 'a option = + static member LogWithTime (message : string, severity : Severity, f : unit -> 'a option, [] args: Object[]) : 'a option = let sw = Stopwatch() sw.Start() let res = f () sw.Stop() - if res.IsSome - then + if res.IsSome then instance.Write(String.Format(message, args) + sprintf " (time: %d ms)" sw.ElapsedMilliseconds, severity) res - static member Debug (message: string, [] args: Object[]) = + static member Debug (message : string, [] args : Object[]) = #if DEBUG instance.Write(String.Format(message, args), Severity.DEBUG) #else () #endif - static member User (message: string, [] args: Object[]) = + static member User (message : string, [] args : Object[]) = instance.Write(String.Format(message, args), Severity.USER) - static member Warning (message: string, [] args: Object[]) = + static member Warning (message : string, [] args : Object[]) = instance.Write(String.Format(message, args), Severity.WARNING) - static member Error (message: string, [] args: Object[]) = + static member Error (message : string, [] args : Object[]) = instance.Write(String.Format(message, args), Severity.ERROR) - static member Fatal (message: string, [] args: Object[]) = + static member Fatal (message : string, [] args : Object[]) = instance.Write(String.Format(message, args), Severity.FATAL)