Add log to external file
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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__":
|
||||||
|
|||||||
Reference in New Issue
Block a user