Files
2025-10-13 14:59:37 +08:00

63 lines
1.9 KiB
Python

import sys
import logging
from rich.theme import Theme
from rich.console import Console
from rich.logging import RichHandler
from datetime import datetime
class FlushHandler(logging.StreamHandler):
def emit(self, record):
record_time = datetime.fromtimestamp(record.created).strftime("[%y/%m/%d %H:%M:%S]")
level_name = record.levelname.ljust(8)
msg = self.format(record)
formatted_msg = f"\r{record_time} {level_name} {msg}"
stream = self.stream
stream.write(formatted_msg)
stream.flush()
class Log:
def __init__(self, log_level=logging.DEBUG):
self.log_level = log_level
self.wmi_console = Console(
soft_wrap=True,
tab_size=4,
theme=Theme(
{"logging.level.success": "green"}
)
)
logging.basicConfig(
format="%(message)s",
datefmt="[%X]",
handlers=[],
encoding="utf-8"
)
logging.getLogger("impacket").disabled = True
self.setup_logger1()
self.setup_logger2()
def setup_logger1(self):
logger = logging.getLogger("wmiexec-pro")
logging.addLevelName(100, "SUCCESS")
logger.setLevel(self.log_level)
logger.propagate = False
if not logger.handlers:
logger.addHandler(
RichHandler(
console=self.wmi_console,
rich_tracebacks=True,
tracebacks_show_locals=False
)
)
def setup_logger2(self):
# Set up logging
logger = logging.getLogger("CountdownLogger")
logger.setLevel(self.log_level)
logger.propagate = False
# Use the custom handler
if not logger.handlers:
logger.addHandler(
FlushHandler(sys.stdout)
)