v/vlib/log/log.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_ss()}] $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_ss()}] $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_ss()}] $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_ss()}] $s')
default:
l.log_file(s, 'D')
}
}
}