aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/hydrorollcore/logging.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/hydrorollcore/logging.py')
-rw-r--r--src/hydrorollcore/logging.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/hydrorollcore/logging.py b/src/hydrorollcore/logging.py
new file mode 100644
index 00000000..a559561f
--- /dev/null
+++ b/src/hydrorollcore/logging.py
@@ -0,0 +1,40 @@
+"""HydroRollCore 日志。
+
+HydroRollCore 使用 [loguru](https://github.com/Delgan/loguru) 来记录日志信息。
+自定义 logger 请参考 [loguru](https://github.com/Delgan/loguru) 文档。
+"""
+from datetime import datetime
+from multilogging import multilogger
+from pathlib import Path
+from .settings import DEBUG
+
+
+__all__ = ["logger", "error_or_exception"]
+
+logger = multilogger(
+ name="HydroRoll", payload="Core", level="DEBUG" if DEBUG else "INFO"
+)
+current_path = Path(__file__).resolve().parent
+LOG_PATH = current_path / "logs"
+if not LOG_PATH.exists():
+ LOG_PATH.mkdir(parents=True, exist_ok=True)
+logger.add(
+ sink=LOG_PATH / (datetime.now().strftime("%Y-%m-%d") + ".log"),
+ level="INFO",
+ rotation="10 MB",
+) # 每个日志文件最大为 10MB
+
+
+def error_or_exception(message: str, exception: Exception, verbose: bool = True):
+ # 弃用的方法
+ # logger.remove()
+ # logger.add(
+ # sys.stderr,
+ # format="<magenta>{time:YYYY-MM-DD HH:mm:ss.SSS}</magenta> <level>[{level}]</level> > <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
+ # )
+
+ if verbose:
+ logger.exception(exception)
+ logger.critical(message)
+ else:
+ logger.critical(f"{message} {exception!r}")