X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FLogger%2FLogger.fs;h=4fc1736412d30bcfc50346698f96219a1c7f992f;hp=df2144f0b8c0216e9bdca7b0d41dfaae6671fe12;hb=2d712781def419c9acc98368f7102b19b064f16d;hpb=d715615d0b1da40fd10e9dbabbd4530cd5125a19 diff --git a/Parasitemia/Logger/Logger.fs b/Parasitemia/Logger/Logger.fs index df2144f..4fc1736 100644 --- a/Parasitemia/Logger/Logger.fs +++ b/Parasitemia/Logger/Logger.fs @@ -33,9 +33,9 @@ type Log () = if isNull path then None else - let filename = path.Substring(path.LastIndexOf(Path.DirectorySeparatorChar) + 1) - let filenameWithoutExtension = filename.Remove(filename.IndexOf('.')) - match Int32.TryParse(filenameWithoutExtension) with + let filename = path.Substring (path.LastIndexOf Path.DirectorySeparatorChar + 1) + let filenameWithoutExtension = filename.Remove (filename.IndexOf '.') + match Int32.TryParse filenameWithoutExtension with | (true, n) -> Some n | _ -> None @@ -44,13 +44,13 @@ type Log () = let [] COMPRESS_ARCHIVED_FILES = true let [] FILENAME_FORMAT = "{0:D4}.log" let [] COMPRESSED_FILE_POSTFIX = ".gzip" - let encoding = Encoding.GetEncoding("UTF-8") + let encoding = Encoding.GetEncoding "UTF-8" let compress (filename : string) = - use inputStream = new FileStream(filename, FileMode.Open, FileAccess.Read) + use inputStream = new FileStream (filename, FileMode.Open, FileAccess.Read) let filenameCompressed = filename + COMPRESSED_FILE_POSTFIX - use compressedStream = new GZipStream(new FileStream(filenameCompressed, FileMode.Create, FileAccess.Write), CompressionLevel.Optimal) - inputStream.CopyTo(compressedStream) + use compressedStream = new GZipStream (new FileStream (filenameCompressed, FileMode.Create, FileAccess.Write), CompressionLevel.Optimal) + inputStream.CopyTo compressedStream let moduleName = System.Diagnostics.StackFrame(1).GetMethod().Module.Name @@ -59,9 +59,9 @@ type Log () = let mutable logDir : string = null - let monitor = Object() + let monitor = Object () - let listeners = List() + let listeners = List () let debug = #if DEBUG @@ -70,7 +70,7 @@ type Log () = false #endif - static let instance = new Log() + static let instance = new Log () let openLogFile (entryNumber : int64) = if not (isNull logDir) then @@ -79,40 +79,40 @@ type Log () = then if not (isNull stream) then - stream.Close() + stream.Close () if COMPRESS_ARCHIVED_FILES then compress filename - File.Delete(filename) + File.Delete filename // Search the last id among the log files. let mutable n = 1 - for existingFile in Directory.GetFiles(logDir) do + for existingFile in Directory.GetFiles logDir do match extractNumberFromLogfilepath existingFile with | Some n' when n' > n -> n <- n' | _ -> () - filename <- Path.Combine(logDir, String.Format(FILENAME_FORMAT, n)) + filename <- Path.Combine (logDir, String.Format (FILENAME_FORMAT, n)) try - if File.Exists(filename + COMPRESSED_FILE_POSTFIX) || FileInfo(filename).Length > MAX_SIZE_FILE + if File.Exists (filename + COMPRESSED_FILE_POSTFIX) || FileInfo(filename).Length > MAX_SIZE_FILE then - filename <- Path.Combine(logDir, String.Format(FILENAME_FORMAT, n + 1)) + filename <- Path.Combine (logDir, String.Format (FILENAME_FORMAT, n + 1)) with | :? FileNotFoundException -> () // The file may not exist. - stream <- new StreamWriter(filename, true, encoding) + stream <- new StreamWriter (filename, true, encoding) with - | ex -> Console.Error.WriteLine("Can't open the file log: {0}", ex) + | ex -> Console.Error.WriteLine ("Can't open the file log: {0}", ex) let write (msg : Message) (entryNumber : int64) = openLogFile entryNumber let header = - String.Format( + String.Format ( "{0:yyyy-MM-dd HH:mm:ss.fff} [{1}] {{{2}}} ({3})", - TimeZone.CurrentTimeZone.ToLocalTime(DateTime.UtcNow), + TimeZone.CurrentTimeZone.ToLocalTime DateTime.UtcNow, string msg.Severity, msg.ModuleCaller, - (if String.IsNullOrEmpty(msg.ThreadName) then string msg.ThreadId else sprintf "%s-%i" msg.ThreadName msg.ThreadId) + (if String.IsNullOrEmpty msg.ThreadName then string msg.ThreadId else sprintf "%s-%i" msg.ThreadName msg.ThreadId) ) for listener in listeners do @@ -121,17 +121,17 @@ type Log () = if not (isNull stream) then try - stream.WriteLine("{0} : {1}", header, msg.Message) - stream.Flush() + stream.WriteLine ("{0} : {1}", header, msg.Message) + stream.Flush () with - | :? IOException as ex -> Console.Error.WriteLine("Unable to write to the log file: {0}", ex) + | :? IOException as ex -> Console.Error.WriteLine ("Unable to write to the log file: {0}", ex) let writeAgent = - new MailboxProcessor( + new MailboxProcessor ( fun inbox -> let rec loop (nbEntries : int64) = async { - let! command = inbox.Receive() + let! command = inbox.Receive () match command with | Write message -> write message nbEntries @@ -143,29 +143,31 @@ type Log () = ) do - writeAgent.Start() + writeAgent.Start () let setLogDirectory (dir : string) = - lock monitor (fun () -> - logDir <- dir + lock monitor ( + fun () -> + logDir <- dir - if not <| isNull stream then - stream.Close() - stream <- null + if not <| isNull stream then + stream.Close () + stream <- null - try - if not <| Directory.Exists(logDir) - then - Directory.CreateDirectory(logDir) |> ignore - with - | _ -> Console.Error.WriteLine("Unable to create the log directory: {0}", logDir)) + try + if not <| Directory.Exists logDir + then + Directory.CreateDirectory logDir |> ignore + with + | _ -> Console.Error.WriteLine ("Unable to create the log directory: {0}", logDir) + ) interface IDisposable with member this.Dispose () = if not (isNull stream) then - stream.Dispose() - (writeAgent :> IDisposable).Dispose() + stream.Dispose () + (writeAgent :> IDisposable).Dispose () member private this.Write (message : string) (severity : Severity) = let moduleNameCaller = @@ -190,7 +192,7 @@ type Log () = /// Will stop and wait a reply. Used to flush the remaining messages. /// member private this.Stop () = - writeAgent.PostAndReply( + writeAgent.PostAndReply ( fun replyChannel -> Stop replyChannel ) @@ -203,23 +205,24 @@ type Log () = instance.LogDirectory <- dir member this.AddListener (listener : IListener) = - lock monitor (fun () -> - if not <| listeners.Contains(listener) - then - listeners.Add(listener)) + lock monitor ( + fun () -> + if not <| listeners.Contains listener + then + listeners.Add listener + ) member this.RmListener (listener : IListener) = - lock monitor (fun () -> - listeners.Remove(listener) |> ignore) + 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 (severity : Severity) (f : unit -> 'a) (format : Printf.StringFormat<'b, 'a>) : 'b = - let sw = Stopwatch() - sw.Start() + let sw = Stopwatch () + sw.Start () let res = f () - sw.Stop() + sw.Stop () Printf.kprintf (fun s -> instance.Write (s + sprintf " (time: %d ms)" sw.ElapsedMilliseconds) severity; res) format static member Debug format = @@ -242,4 +245,4 @@ type Log () = Printf.kprintf (fun s -> instance.Write s Severity.FATAL) format static member Shutdown () = - instance.Stop() + instance.Stop ()