Skip to content

Commit 5b55b1c

Browse files
committed
Add package-level logging initialization and enhance LoggingConfig
- Introduced example_package_level_initialisation.py for logging setup. - Updated LoggingConfig to include initialization check and finalization phase. - Refactored imports in conftest.py for consistency.
1 parent fa48b98 commit 5b55b1c

File tree

5 files changed

+48
-2
lines changed

5 files changed

+48
-2
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pre-commit run --all-files
12
repos:
23
- repo: https://github.com/pre-commit/pre-commit-hooks
34
rev: v4.5.0

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to `prismalog` will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [v0.1.3] - 2025-05-28
9+
10+
### Added
11+
- Introduced example_package_level_initialisation.py for logging setup on package level.
12+
- Updated LoggingConfig to include initialization check and finalization phase.
13+
814
## [v0.1.2] - 2025-05-15
915

1016
### Added
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
""" Example package-level initialization script for logging.
2+
This script initializes logging for a package, ensuring that
3+
the logging configuration is set up correctly when the package is imported."""
4+
import logging
5+
import os
6+
7+
from prismalog.config import LoggingConfig
8+
from prismalog.log import get_logger
9+
10+
# Initialize logging when package is imported
11+
if not LoggingConfig.is_initialized():
12+
config_path = os.path.join(os.path.dirname(__file__), "config.yaml")
13+
if os.path.exists(config_path):
14+
LoggingConfig.initialize(config_file=config_path)
15+
16+
# Export commonly used items
17+
__all__ = ["get_logger"]
18+
19+
20+
def get_package_logger(name: str) -> logging.Logger:
21+
"""Get a logger for this package."""
22+
return get_logger(name)
23+
24+
25+
if __name__ == "__main__":
26+
logger = get_package_logger("example_package")
27+
logger.info("This is an example package-level initialization log message.")
28+
logger.debug("Debugging information for package initialization.")
29+
logger.warning("This is a warning during package initialization.")
30+
logger.error("An error occurred during package initialization.")

prismalog/config.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class LoggingConfig:
132132
}
133133

134134
_instance = None
135-
_config: Dict[str, Any] = {} # Add type annotation
135+
_config: Dict[str, Any] = {}
136136
_initialized = False
137137
_debug_mode = False
138138

@@ -162,6 +162,7 @@ def initialize(cls, config_file: Optional[str] = None, use_cli_args: bool = True
162162
The configuration is loaded in two phases:
163163
1. Collection Phase: Gather and convert configurations from all sources
164164
2. Application Phase: Apply configurations in priority order
165+
3. Finalization Phase: Set the initialized flag
165166
166167
Args:
167168
config_file: Path to configuration file (YAML)
@@ -187,6 +188,9 @@ def initialize(cls, config_file: Optional[str] = None, use_cli_args: bool = True
187188
# Phase 2: Apply configurations in priority order
188189
cls._apply_configurations(config_sources)
189190

191+
# Phase 3: Set initialized flag
192+
cls._initialized = True
193+
190194
return cls._config
191195

192196
@classmethod
@@ -792,6 +796,11 @@ def map_level(cls, level: str) -> int:
792796
"CRITICAL": logging.CRITICAL,
793797
}.get(level, logging.INFO)
794798

799+
@classmethod
800+
def is_initialized(cls) -> bool:
801+
"""Check if logging configuration has been initialized."""
802+
return cls._initialized
803+
795804
@classmethod
796805
def reset(cls) -> Type["LoggingConfig"]:
797806
"""

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import pytest
1313

1414
from prismalog.config import LoggingConfig
15-
from prismalog.log import ColoredFormatter, ColoredLogger, CriticalExitHandler, get_logger
15+
from prismalog.log import ColoredLogger, CriticalExitHandler, get_logger
1616

1717

1818
class TestCaptureIO:

0 commit comments

Comments
 (0)