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:
39
example.py
Normal file
39
example.py
Normal 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
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
pytelegrambotapi
|
85
tg_logger.py
Normal file
85
tg_logger.py
Normal 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)
|
Reference in New Issue
Block a user