Я использую свой собственный класс логгера в своих проектах freelance для доступа к журналам через ftp и проверки ошибок. Он записывает отдельный файл для каждого процесса, который выводит на stdout через функцию os.getpid(). Это полезно для библиотеки мультипроцессов python. Но я делаю многопоточность чаще, чем многопроцессорность, и я не знаю, как улучшить свой код, чтобы написать отдельный файл для каждого потока, который выводит на stdout.класс python logger для многопоточности
class Logger(object):
def __init__(self, realstdout, path='logs/'):
today = datetime.datetime.now().isoformat()
if path[-1] != '/':
path = path+'/'
os.mkdir(path + today)
self.pid = str(os.getpid())
self.handler = open(path + today + '/' + self.pid + '.txt', 'w', buffering=0)
self.stdout = realstdout
def write(self, buf):
if buf == '\n' or buf == '(Pdb)':
return
buf = buf.replace('\n', '#')
self.handler.write("[{0}] [{1}] ".format(datetime.datetime.today(), self.pid) + buf + "\n")
self.stdout.write("[{0}] ".format(self.pid) + buf + "\n")
def flush(self):
pass
def __del__(self):
self.handler.close()
Как это сделать?
Хорошая идея, но на самом деле метод журналирования, вызванный из основного потока. В то время как я выводил из него: <_MainThread (MainThread, начато 139944996378368)> – academica