105 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			V
		
	
	
| module log
 | |
| 
 | |
| import os
 | |
| import time
 | |
| import term
 | |
| 
 | |
| pub 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)
 | |
| }
 | |
| 
 | |
| pub 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{
 | |
|         match l.output {
 | |
|             'terminal'{
 | |
|                 f := term.red('E')
 | |
|                 t := time.now()
 | |
|                 println('[$f ${t.format_ss()}] $s')
 | |
|             } else {
 | |
|                 l.log_file(s, 'E')
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| pub fn (l Log) warn(s string){
 | |
|     if l.level >= WARN{
 | |
|         match l.output {
 | |
|             'terminal'{
 | |
|                 f := term.yellow('W')
 | |
|                 t := time.now()
 | |
|                 println('[$f ${t.format_ss()}] $s')
 | |
|             } else {
 | |
|                 l.log_file(s, 'W')
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| pub fn (l Log) info(s string){
 | |
|     if l.level >= INFO{
 | |
|         match l.output {
 | |
|             'terminal'{
 | |
|                 f := term.white('I')
 | |
|                 t := time.now()
 | |
|                 println('[$f ${t.format_ss()}] $s')
 | |
|             } else {
 | |
|               l.log_file(s, 'I')
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| pub fn (l Log) debug(s string){
 | |
|     if l.level >= DEBUG{
 | |
|         match l.output {
 | |
|             'terminal' {
 | |
|                 f := term.blue('D')
 | |
|                 t := time.now()
 | |
|                 println('[$f ${t.format_ss()}] $s')
 | |
|             } else {
 | |
|                 l.log_file(s, 'D')
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |