106 lines
1.8 KiB
V
106 lines
1.8 KiB
V
module log
|
|
|
|
import os
|
|
import time
|
|
import term
|
|
|
|
const (
|
|
FATAL = 1
|
|
ERROR = 2
|
|
WARN = 3
|
|
INFO = 4
|
|
DEBUG = 5
|
|
)
|
|
|
|
interface Logger {
|
|
fatal(s string)
|
|
error(s string)
|
|
warn(s string)
|
|
info(s string)
|
|
debug(s string)
|
|
}
|
|
|
|
struct Log{
|
|
mut:
|
|
level int
|
|
output string
|
|
}
|
|
|
|
|
|
pub fn (l mut Log) set_level(level int){
|
|
l.level = level
|
|
}
|
|
|
|
pub fn (l mut Log) set_output(output string) {
|
|
l.output = output
|
|
}
|
|
|
|
fn (l Log) log_file(s string, e string) {
|
|
filename := l.output
|
|
f := os.open_append(l.output) or {
|
|
panic('error reading file $filename')
|
|
}
|
|
timestamp := time.now().format_ss()
|
|
f.writeln('$timestamp [$e] $s')
|
|
}
|
|
|
|
pub fn (l Log) fatal(s string){
|
|
panic(s)
|
|
}
|
|
|
|
pub fn (l Log) error(s string){
|
|
if l.level >= ERROR{
|
|
switch l.output {
|
|
case 'terminal':
|
|
f := term.red('E')
|
|
t := time.now()
|
|
println('[$f ${t.format()}] $s')
|
|
|
|
default:
|
|
l.log_file(s, 'E')
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn (l Log) warn(s string){
|
|
if l.level >= WARN{
|
|
switch l.output {
|
|
case 'terminal':
|
|
f := term.yellow('W')
|
|
t := time.now()
|
|
println('[$f ${t.format()}] $s')
|
|
|
|
default:
|
|
l.log_file(s, 'W')
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn (l Log) info(s string){
|
|
if l.level >= INFO{
|
|
switch l.output {
|
|
case 'terminal':
|
|
f := term.white('I')
|
|
t := time.now()
|
|
println('[$f ${t.format()}] $s')
|
|
|
|
default:
|
|
l.log_file(s, 'I')
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn (l Log) debug(s string){
|
|
if l.level >= DEBUG{
|
|
switch l.output {
|
|
case 'terminal':
|
|
f := term.blue('D')
|
|
t := time.now()
|
|
println('[$f ${t.format()}] $s')
|
|
|
|
default:
|
|
l.log_file(s, 'D')
|
|
}
|
|
}
|
|
}
|