Ich versuche, eine grundlegende Logger zu schaffen, die ohne externe Pakete gefärbt werden,Wie die aktuelle Protokollebene in Python Logging-Modul bekommen
# these have to be the first functions so I can use it in the logger settings
def create_log_name(log_path="{}/log", filename="zeus-log-{}.log"):
if not os.path.exists(log_path.format(os.getcwd())):
os.mkdir(log_path.format(os.getcwd()))
find_file_amount = len(os.listdir(log_path.format(os.getcwd())))
full_log_path = "{}/{}".format(log_path.format(os.getcwd()), filename.format(find_file_amount + 1))
return full_log_path
def set_color_value(levelname):
log_set = {
"INFO": "\033[92m{}\033[0m",
"WARNING": "\033[93m{}\033[0m",
"DEBUG": "\033[94m{}\033[0m",
"ERROR": "\033[91m{}\033[0m",
"CRITICAL": "\033[91m{}\033[0m"
}
return log_set[levelname].format(levelname)
logger = logging.getLogger("zeus-log")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(
filename=create_log_name(), mode="a+"
)
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
file_format = logging.Formatter(
'%(asctime)s;%(name)s;%(levelname)s;%(message)s'
)
console_format = logging.Formatter(
"[%(asctime)s {}] %(message)s".format(set_color_value()), "%H:%M:%S"
)
file_handler.setFormatter(file_format)
console_handler.setFormatter(console_format)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
So wie der gerade jetzt, alles, was ich tun muß, ist, die aktuelle Protokollebene erhalten, die in den logging.Formatter
gesetzt werden und es zu meiner kleinen Funktion senden:
console_format = logging.Formatter(
"[%(asctime)s {}] %(message)s".format(set_color_value()), "%H:%M:%S"
)
Ist es möglich, die aktuelle Protokollebene aus dem Logging-Paket zu bekommen?
Zum Beispiel kann sagen, dass ich logger.INFO("test")
passieren brauche ich einen Weg, um diesen INFO
Teil zu bekommen als String von dort set_color_value("INFO")
zurückkehren soll:
Ist das nicht das Niveau zeigen, dass der aktuelle Logger gesetzt zu? Ich brauche einen Weg, um die Logging-Informationen von jedem String aus dem Logger zu bekommen, zum Beispiel sagen wir, dass ich 'logger.FATAL ("test") übergeben 'Ich brauche das' FATAL' Teil als String übergeben – wahwahwah
Diese Antwort beantwortet Was die Frage gestellt hat. Ihre Frage muss verbessert werden, seit ich hier angekommen bin, um nach dieser Antwort zu suchen. –
** Einverstanden. ** Der Inhalt Ihrer Frage steht im Widerspruch zum Titel Ihrer Frage, @wahwahwah. Letzteres dürfte für StackOverflowers (einschließlich mir) interessanter sein. Es ist * seltsamerweise nicht orthogonal, dass die 'logging'-API' setLevel() 'und' getEffectiveLevel() '-Methoden aber * no *' getLevel() '-Methode definiert, wenn sie einfach ein triviales' getLevel (self): return self.level' Methode. '' –