-
Notifications
You must be signed in to change notification settings - Fork 0
/
exiftoolgui_log.py
56 lines (41 loc) · 1.51 KB
/
exiftoolgui_log.py
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
import queue
import threading
import atexit
from datetime import datetime
class ExifToolGUILog:
_instance: 'ExifToolGUILog' = None
@classmethod
@property
def Instance(cls) -> 'ExifToolGUILog':
if cls._instance == None:
cls._instance = cls()
return cls._instance
def __init__(self):
self.source_file = 'exiftoolgui.log'
self._queue = queue.Queue()
self._lock = threading.Lock()
self._thread = threading.Thread(target=self.write)
self._thread.daemon = True
self._thread.start()
atexit.register(self._queue.join)
def append(self, cat: str, file: str, message: str) -> None:
message = str(message).strip()
timestamp: str = f"{datetime.now().astimezone().strftime('%Y:%m:%d %H:%M:%S.%f%z')}"
message_f: str = f"{timestamp} [{cat}]: \n SourceFile: {file}\n {message}"
self._queue.put(message_f)
# print("log")
def write(self):
with open(self.source_file, mode='a', encoding='utf-8') as file:
while True:
with self._lock:
message = self._queue.get()
file.write(message + "\n")
file.flush()
self._queue.task_done()
# print("write")
if __name__ == "__main__":
log = ExifToolGUILog.Instance
log.append('test_cat1', 'test_file1', 'test_message1')
log.append('test_cat2', 'test_file2', 'test_message2')
# import time
# time.sleep(5)