如何在python的单独设置文件中使用颜色,格式等配置日志记录?



我正在尝试从bash脚本调用python脚本。 (注意:我使用的是python版本3.7( 以下是目录结构(so_test是一个目录(

so_test
shell_script_to_call_py.sh
main_file.py
log_settings.py

文件如下,

shell_script_to_call_py.sh

#!/bin/bash
echo "...Enable Debug..."
python $(cd $(dirname ${BASH_SOURCE[0]}) && pwd)/main_file.py "input_1" --debug
echo "...No Debug..."
python $(cd $(dirname ${BASH_SOURCE[0]}) && pwd)/main_file.py "input_2"

main_file.py

import argparse
import importlib
importlib.import_module("log_settings.py")
from so_test import log_settings

def func1():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")

def func2():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")

def main():
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str, help="input argument 1 is missing")
parser.add_argument("--debug", help="to print debug logs", action="store_true")
args = parser.parse_args()
log_settings.log_conf(args.debug)
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
func1()
func2()

if __name__ == "__main__":
main()

log_settings.py

import logging
from colorlog import ColoredFormatter

def log_config(is_debug_level):
log_format = "%(log_color)s %(levelname)s %(message)s"
if is_debug_level:
logging.root.setLevel(logging.DEBUG)
else:
logging.root.setLevel(logging.INFO)
stream = logging.StreamHandler()
stream.setFormatter(ColoredFormatter(log_format))
global log
log = logging.getLogger('pythonConfig')
log.addHandler(stream)

以下是我面临的两个问题。(作为Python的新手(

  1. 我无法在main_file.py中正确导入log_settings.py
  2. 我想跨不同功能访问 main_file(和其他.py文件(中的 log.debug、log.info 等,其中的设置(格式、颜色等(log_settings.py文件中声明。

我得到了以下更改的代码:

  1. 在函数外部声明 'log' 变量 log_settings.py,以便它可以被其他程序导入。

  2. 将名为 log_config 的函数重命名为 log_conf,该函数在主程序中引用。

  3. 在主程序中,将导入语句更新为 从log_settings导入"日志"和"log_conf">

工作代码:

1.log设置.py

import logging
from colorlog import ColoredFormatter
global log
log = logging.getLogger('pythonConfig')
def log_conf(is_debug_level):
log_format = "%(log_color)s %(levelname)s %(message)s"
if is_debug_level:
logging.root.setLevel(logging.DEBUG)
else:
logging.root.setLevel(logging.INFO)
stream = logging.StreamHandler()
stream.setFormatter(ColoredFormatter(log_format))
log.addHandler(stream)

2. main_file.py

import argparse
import importlib
from log_settings import log_conf, log

def func1():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")

def func2():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")

def main():
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str, help="input argument 1 is missing")
parser.add_argument("--debug", help="to print debug logs", action="store_true")
args = parser.parse_args()
log_conf(args.debug)
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
func1()
func2()

if __name__ == "__main__":
main()

测试

$ python3 main_file.py "input_1" --debug

信息信息测试(以绿色显示(

调试调试测试(以白色显示(

警告警告测试(以黄色显示(

信息信息测试

调试调试测试

警告警告测试

信息信息测试

调试调试测试

警告警告测试

相关内容

  • 没有找到相关文章

最新更新