-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlogger.gd
83 lines (59 loc) · 1.69 KB
/
logger.gd
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
extends Node
const FLUSH_EVERY = 100
const LOGFILE_AMOUNT = 10
const LOGFILE_PATH = 'user://myawesomelogger-%s.log'
const FORMAT = '%s - %s - %s'
const DEBUG = 'debug'
const INFO = 'info'
const WARNING = 'warning'
const ERROR = 'error'
var current_filename = get_logfilename()
var logfile = File.new()
var message_amount = 0
func _init():
logfile.open(current_filename, File.WRITE)
func _exit_tree():
_flush()
func get_logfilename():
var logfilename = null
var last_modified_time = 0
var file = File.new()
for index in range(0, LOGFILE_AMOUNT):
var filename = LOGFILE_PATH % [index]
if not file.file_exists(filename):
logfilename = filename
break
var modified_time = file.get_modified_time(filename)
if modified_time < last_modified_time or last_modified_time == 0:
last_modified_time = modified_time
logfilename = filename
file.close()
return logfilename
func debug(message):
if OS.is_debug_build():
_log(DEBUG, message)
func info(message):
_log(INFO, message)
func warning(message):
_log(WARNING, message, true)
func error(message):
_log(ERROR, message, true)
func _format_time():
var time = OS.get_time()
return '%02d:%02d:%02d' % [time.hour, time.minute, time.second]
func _log(level, message, flush = false):
var log_message = FORMAT % [_format_time(), level, message]
logfile.store_line(log_message)
message_amount += 1
if flush or message_amount > FLUSH_EVERY:
_flush()
# Output to stdout
if OS.is_debug_build():
print(log_message)
func _flush():
message_amount = 0
if logfile != null:
logfile.close()
logfile = File.new()
logfile.open(current_filename, File.READ_WRITE)
logfile.seek_end()