1
0
mirror of https://github.com/otter18/tg_logger.git synced 2025-06-12 21:47:26 +02:00

initial commit

This commit is contained in:
ChernV
2021-01-01 14:54:30 +03:00
committed by GitHub
parent d959bd6866
commit f5f0c73f99
3 changed files with 125 additions and 0 deletions

39
example.py Normal file
View File

@ -0,0 +1,39 @@
# Copyright (c) ChernV (@otter18), 2021.
import logging
import tg_logger
# Logging format
logging.basicConfig(format='%(asctime)s:%(name)s:%(levelname)s - %(message)s')
formatter = logging.Formatter('%(name)s:%(levelname)s - %(message)s')
# Setup TgLoggerHandler
tg_handler = tg_logger.TgLoggerHandler(
token="1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", # tg bot token
users=[111111111], # list of user_id
timeout=10 # default value is 10 seconds
)
tg_handler.setFormatter(formatter)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(tg_handler)
# Test
logger.info("Hello from tg_logger by @chernykh_vladimir")
# TgFileLogger example
tg_files_logger = tg_logger.TgFileLogger(
token="1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", # tg bot token
users=[111111111], # list of user_id
timeout=10 # default is 10 seconds
)
file_name = "test.txt"
with open(file_name, 'w') as example_file:
example_file.write("Hello from tg_logger by otter18")
tg_files_logger.send(file_name, "Test file")
# And one more time...
logger.info("Finishing tg_logger demo")

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
pytelegrambotapi

85
tg_logger.py Normal file
View File

@ -0,0 +1,85 @@
# Copyright (c) ChernV (@otter18), 2021.
import logging
from logging import StreamHandler
from time import time, sleep
from typing import List
import telebot
# logging setup
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
class TgLoggerHandler(StreamHandler):
"""Logger handler for tg_logger"""
def __init__(self, token: str, users: List[int], timeout: int = 10):
"""
Setup TgLoggerHandler tool
:param token: tg bot token to log form
:param users: list of used_id to log to
:param timeout: seconds for retrying to send log if error occupied
"""
super().__init__()
self.token = token
self.users = users
self.timeout = timeout
self.bot = telebot.TeleBot(token=self.token)
def emit(self, record):
msg = self.format(record)
for user_id in self.users:
t0 = time()
while time() - t0 < self.timeout:
try:
self.bot.send_message(user_id, msg)
break
except Exception as ex:
logger.exception("Exception while sending %s to %s:", msg, user_id)
sleep(1)
class TgFileLogger:
"""tg_logger tool to send files"""
def __init__(self, token: str, users: List[int], timeout: int = 10):
"""
Setup TgFileLogger tool
:param token: tg bot token to log form
:param users: list of used_id to log to
:param timeout: seconds for retrying to send log if error occupied
"""
self.token = token
self.users = users
self.timeout = timeout
self.bot = telebot.TeleBot(token=self.token)
def send(self, file_path: str, caption: str = ''):
"""
Function to send file
:param file_path: file path to log
:param caption: text to file with file
:return: None
"""
with open(file_path, 'rb') as data:
for user_id in self.users:
t0 = time()
while time() - t0 < self.timeout:
try:
self.bot.send_document(user_id, data=data, caption=caption)
logger.info("File %s successfully send to %s", file_path, user_id)
break
except Exception as ex:
logger.exception("Exception while sending %s to %s:", file_path, user_id)
sleep(1)