Add log to external file

This commit is contained in:
DingZQ
2025-05-18 19:19:46 +08:00
parent 016722cec1
commit 4a080bb409
2 changed files with 89 additions and 8 deletions

View File

@@ -1,4 +1,7 @@
from logging.handlers import TimedRotatingFileHandler
import influxdb_api import influxdb_api
import os
import logging
import globals import globals
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import schedule import schedule
@@ -8,6 +11,45 @@ from influxdb_client import InfluxDBClient, BucketsApi, WriteApi, OrganizationsA
import simulation import simulation
import influxdb_info import influxdb_info
def setup_logger():
# 创建日志目录
log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)
# 配置基础日志格式
log_format = "%(asctime)s - %(levelname)s - %(message)s"
formatter = logging.Formatter(log_format)
# 创建主 Logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # 全局日志级别
# --- 1. 按日期分割的日志文件 Handler ---
log_file = os.path.join(log_dir, "app.log")
file_handler = TimedRotatingFileHandler(
filename=log_file,
when="midnight", # 每天午夜轮转
interval=1,
backupCount=7,
encoding="utf-8"
)
file_handler.suffix = "simulation-%Y-%m-%d.log" # 文件名格式
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG) # 文件记录所有级别日志
# --- 2. 控制台实时输出 Handler ---
console_handler = logging.StreamHandler() # 默认输出到 sys.stderr (控制台)
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.INFO) # 控制台仅显示 INFO 及以上级别
# 将 Handler 添加到 Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
logger = setup_logger()
# 2025/02/01 # 2025/02/01
def get_next_time() -> str: def get_next_time() -> str:
""" """
@@ -31,7 +73,7 @@ def store_realtime_SCADA_data_job() -> None:
get_real_value_time: str = get_next_time() # get_real_value_time 类型为 str格式为'2025-02-01T18:45:00+08:00' get_real_value_time: str = get_next_time() # get_real_value_time 类型为 str格式为'2025-02-01T18:45:00+08:00'
# 调用函数执行任务 # 调用函数执行任务
influxdb_api.store_realtime_SCADA_data_to_influxdb(get_real_value_time) influxdb_api.store_realtime_SCADA_data_to_influxdb(get_real_value_time)
print('{} -- Successfully store realtime SCADA data.'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) logger.info('{} -- Successfully store realtime SCADA data.'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
# 2025/02/06 # 2025/02/06
@@ -75,9 +117,9 @@ def run_simulation_job() -> None:
# print(modify_pattern_start_time) # print(modify_pattern_start_time)
simulation.run_simulation(name='bb', simulation_type="realtime", modify_pattern_start_time=modify_pattern_start_time) simulation.run_simulation(name='bb', simulation_type="realtime", modify_pattern_start_time=modify_pattern_start_time)
print('{} -- Successfully run simulation and store realtime simulation result.'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) logger.info('{} -- Successfully run simulation and store realtime simulation result.'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
else: else:
print(f"{current_time.strftime('%Y-%m-%d %H:%M:%S')} -- Skipping the simulation task.") logger.info(f"{current_time.strftime('%Y-%m-%d %H:%M:%S')} -- Skipping the simulation task.")
# 2025/02/06 # 2025/02/06

View File

@@ -2,10 +2,50 @@ import influxdb_api
import globals import globals
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import schedule import schedule
import os
import logging
from logging.handlers import TimedRotatingFileHandler
import time import time
from influxdb_client import InfluxDBClient, BucketsApi, WriteApi, OrganizationsApi, Point, QueryApi from influxdb_client import InfluxDBClient, BucketsApi, WriteApi, OrganizationsApi, Point, QueryApi
import influxdb_info import influxdb_info
def setup_logger():
# 创建日志目录
log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)
# 配置基础日志格式
log_format = "%(asctime)s - %(levelname)s - %(message)s"
formatter = logging.Formatter(log_format)
# 创建主 Logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # 全局日志级别
# --- 1. 按日期分割的日志文件 Handler ---
log_file = os.path.join(log_dir, "app.log")
file_handler = TimedRotatingFileHandler(
filename=log_file,
when="midnight", # 每天午夜轮转
interval=1,
backupCount=7,
encoding="utf-8"
)
file_handler.suffix = "scada-%Y-%m-%d.log" # 文件名格式
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG) # 文件记录所有级别日志
# --- 2. 控制台实时输出 Handler ---
console_handler = logging.StreamHandler() # 默认输出到 sys.stderr (控制台)
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.INFO) # 控制台仅显示 INFO 及以上级别
# 将 Handler 添加到 Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger = setup_logger()
# 2025/02/01 # 2025/02/01
def get_next_time() -> str: def get_next_time() -> str:
""" """
@@ -49,16 +89,15 @@ def store_non_realtime_SCADA_data_job() -> None:
# 只在0点、6点、12点、18点执行任务 # 只在0点、6点、12点、18点执行任务
# if current_time.hour % 6 == 0 and current_time.minute == 0: # if current_time.hour % 6 == 0 and current_time.minute == 0:
if current_time.minute % 10 == 0: if current_time.minute % 10 == 0:
print(f"{current_time.strftime('%Y-%m-%d %H:%M:%S')} -- Start store non realtime SCADA data task.") logger.info(f"{current_time.strftime('%Y-%m-%d %H:%M:%S')} -- Start store non realtime SCADA data task.")
# 获取下一个6小时的时间点并更新get_history_data_end_time # 获取下一个6小时的时间点并更新get_history_data_end_time
get_history_data_end_time: str = get_next_time() # get_history_data_end_time 类型为 str格式为'2025-02-06T12:00:00+08:00' get_history_data_end_time: str = get_next_time() # get_history_data_end_time 类型为 str格式为'2025-02-06T12:00:00+08:00'
# print(get_next_time) # print(get_next_time)
# 调用函数执行任务 # 调用函数执行任务
influxdb_api.store_non_realtime_SCADA_data_to_influxdb(get_history_data_end_time) influxdb_api.store_non_realtime_SCADA_data_to_influxdb(get_history_data_end_time)
print('{} -- Successfully store non realtime SCADA data.'.format( logger.info('{} -- Successfully store non realtime SCADA data.'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
else: else:
print(f"{current_time.strftime('%Y-%m-%d %H:%M:%S')} -- Skipping store non realtime SCADA data task.") logger.info(f"{current_time.strftime('%Y-%m-%d %H:%M:%S')} -- Skipping store non realtime SCADA data task.")
# 2025/02/06 # 2025/02/06
@@ -81,7 +120,7 @@ def store_non_realtime_SCADA_data_task() -> None:
time.sleep(1) # 暂停1秒避免过于频繁的任务检查 time.sleep(1) # 暂停1秒避免过于频繁的任务检查
pass pass
except Exception as e: except Exception as e:
print(f"Error occurred in store_non_realtime_SCADA_data_task: {e}") logger.error(f"Error occurred in store_non_realtime_SCADA_data_task: {e}")
if __name__ == "__main__": if __name__ == "__main__":