7 people like it.
Like the snippet!
F# Logging Module
Self-contained module for scripting or small console programs.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
module Log =
open System
open System.IO
let private logDir = "logs"
let private log kind fmt =
Printf.kprintf (fun s ->
let now = DateTime.Now
let msg = sprintf "[%s] [%s] %s" (now.ToString("s")) kind s
let filename =
Path.Combine (
__SOURCE_DIRECTORY__,
logDir,
sprintf "%s.log" (now.ToString("yyyy-MM-dd")))
Directory.CreateDirectory (Path.GetDirectoryName(filename)) |> ignore
File.AppendAllLines (filename, [|msg|])
printfn "%s" msg) fmt
let fail fmt = log "Fail" fmt
let info fmt = log "Info" fmt
|
namespace System
namespace System.IO
val private logDir : string
val private log : kind:string -> fmt:Printf.StringFormat<'a,unit> -> 'a
val kind : string
val fmt : Printf.StringFormat<'a,unit>
module Printf
from Microsoft.FSharp.Core
val kprintf : continuation:(string -> 'Result) -> format:Printf.StringFormat<'T,'Result> -> 'T
val s : string
val now : DateTime
Multiple items
type DateTime =
struct
new : ticks:int64 -> DateTime + 10 overloads
member Add : value:TimeSpan -> DateTime
member AddDays : value:float -> DateTime
member AddHours : value:float -> DateTime
member AddMilliseconds : value:float -> DateTime
member AddMinutes : value:float -> DateTime
member AddMonths : months:int -> DateTime
member AddSeconds : value:float -> DateTime
member AddTicks : value:int64 -> DateTime
member AddYears : value:int -> DateTime
...
end
--------------------
DateTime ()
(+0 other overloads)
DateTime(ticks: int64) : DateTime
(+0 other overloads)
DateTime(ticks: int64, kind: DateTimeKind) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, calendar: Globalization.Calendar) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, kind: DateTimeKind) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, calendar: Globalization.Calendar) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, millisecond: int) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, millisecond: int, kind: DateTimeKind) : DateTime
(+0 other overloads)
property DateTime.Now: DateTime with get
val msg : string
val sprintf : format:Printf.StringFormat<'T> -> 'T
val filename : string
type Path =
static val DirectorySeparatorChar : char
static val AltDirectorySeparatorChar : char
static val VolumeSeparatorChar : char
static val PathSeparator : char
static val InvalidPathChars : char[]
static member ChangeExtension : path:string * extension:string -> string
static member Combine : [<ParamArray>] paths:string[] -> string + 3 overloads
static member EndsInDirectorySeparator : path:ReadOnlySpan<char> -> bool + 1 overload
static member GetDirectoryName : path:string -> string + 1 overload
static member GetExtension : path:string -> string + 1 overload
...
Path.Combine([<ParamArray>] paths: string []) : string
Path.Combine(path1: string, path2: string) : string
Path.Combine(path1: string, path2: string, path3: string) : string
Path.Combine(path1: string, path2: string, path3: string, path4: string) : string
type Directory =
static member CreateDirectory : path:string -> DirectoryInfo
static member Delete : path:string -> unit + 1 overload
static member EnumerateDirectories : path:string -> IEnumerable<string> + 3 overloads
static member EnumerateFileSystemEntries : path:string -> IEnumerable<string> + 3 overloads
static member EnumerateFiles : path:string -> IEnumerable<string> + 3 overloads
static member Exists : path:string -> bool
static member GetCreationTime : path:string -> DateTime
static member GetCreationTimeUtc : path:string -> DateTime
static member GetCurrentDirectory : unit -> string
static member GetDirectories : path:string -> string[] + 3 overloads
...
Directory.CreateDirectory(path: string) : DirectoryInfo
Path.GetDirectoryName(path: ReadOnlySpan<char>) : ReadOnlySpan<char>
Path.GetDirectoryName(path: string) : string
val ignore : value:'T -> unit
type File =
static member AppendAllLines : path:string * contents:IEnumerable<string> -> unit + 1 overload
static member AppendAllLinesAsync : path:string * contents:IEnumerable<string> * ?cancellationToken:CancellationToken -> Task + 1 overload
static member AppendAllText : path:string * contents:string -> unit + 1 overload
static member AppendAllTextAsync : path:string * contents:string * ?cancellationToken:CancellationToken -> Task + 1 overload
static member AppendText : path:string -> StreamWriter
static member Copy : sourceFileName:string * destFileName:string -> unit + 1 overload
static member Create : path:string -> FileStream + 2 overloads
static member CreateText : path:string -> StreamWriter
static member Decrypt : path:string -> unit
static member Delete : path:string -> unit
...
File.AppendAllLines(path: string, contents: Collections.Generic.IEnumerable<string>) : unit
File.AppendAllLines(path: string, contents: Collections.Generic.IEnumerable<string>, encoding: Text.Encoding) : unit
val printfn : format:Printf.TextWriterFormat<'T> -> 'T
val fail : fmt:Printf.StringFormat<'a,unit> -> 'a
val info : fmt:Printf.StringFormat<'a,unit> -> 'a
More information