import logging
import os
import time
import datetime

from Utils.GetObjectPath import get_object_path
from Utils.ReadYaml import ReadYaml
from Config import Config


class LoggerUtil:
	def creat_log(self, logger_name='log'):
		yml_data = ReadYaml("log_config.yml")
		# 创建一个日志对象
		self.logger = logging.getLogger(logger_name)
		# 设置全局的日志级别（critical>error>waring>info>debug）
		self.logger.setLevel(logging.DEBUG)
		# 防止日志重复
		if not self.logger.handlers:
			# -----------文件日志----------
			# 获得日志文件的名称
			log_name = Config.log_name
			log_level = Config.log_level
			log_format = Config.log_format
			self.file_log_path = Config.root_dir + os.path.sep + 'Logs' + os.sep + log_name + datetime.datetime.now().strftime("%Y%m%d") + "_" + str(int(time.time())) + '.log'
			# print(self.file_log_path)
			# 创建文件日志的控制器
			self.file_hander = logging.FileHandler(self.file_log_path, encoding='utf-8')
			# 设置文件日志的界别
			file_log_lever = str(log_level).lower()
			if file_log_lever == 'debug':
				self.file_hander.setLevel(logging.DEBUG)
			elif file_log_lever == 'info':
				self.file_hander.setLevel(logging.INFO)
			elif file_log_lever == 'warning':
				self.file_hander.setLevel(logging.WARNING)
			elif file_log_lever == 'error':
				self.file_hander.setLevel(logging.ERROR)
			elif file_log_lever == 'critical':
				self.file_hander.setLevel(logging.CRITICAL)
			# 设置文件日志的格式
			self.file_hander.setFormatter(logging.Formatter(log_format))
			# 将控制器加入到日志对象
			self.logger.addHandler(self.file_hander)

			# -----------控制台日志----------
			# 创建控制台日志的控制器
			self.console_hander = logging.StreamHandler()
			#控制台日志格式化
			console_log_format = log_format
			# 设置控制台日志的界别
			console_log_lever = str(log_level).lower()
			if console_log_lever == 'debug':
				self.console_hander.setLevel(logging.DEBUG)
			elif console_log_lever == 'info':
				self.file_hander.setLevel(logging.INFO)
			elif console_log_lever == 'warning':
				self.console_hander.setLevel(logging.WARNING)
			elif console_log_lever == 'error':
				self.console_hander.setLevel(logging.ERROR)
			elif console_log_lever == 'critical':
				self.console_hander.setLevel(logging.CRITICAL)
			# 设置控制台日志的格式
			self.console_hander.setFormatter(logging.Formatter(console_log_format))
			# 将控制器加入到日志对象
			self.logger.addHandler(self.console_hander)
		return self.logger


# 函数：输出正常日志
def write_log(log_message):
	LoggerUtil().creat_log().info(log_message)


# 函数：输出错误日志
def error_log(log_message):
	LoggerUtil().creat_log().error(log_message)
	raise Exception(log_message)

if __name__ == '__main__':
	write_log("正常日志")
	write_log("正常日志")
	# error_log("错误日志")