Logging utilities for managing log output and tracking execution time in the okcourse package.
This module provides functions for setting up logging to both the console and optionally to a file, retrieving package versions, and a context manager for tracking execution time for profiling purposes.
Functions:
| Name | Description | 
|---|---|
| get_logger | Enable logging to the console and optionally to a file for the specified source. | 
| get_top_level_version | Retrieve the version of the specified top-level package. | 
| time_tracker | A  | 
get_logger(
    source_name: str = "okcourse",
    level: int = INFO,
    file_path: Path | None = None,
) -> Logger
Enable logging to the console and optionally to a file for the specified source.
You typically will get the name of the source module or function by calling __name__ in the source.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| source_name | str | The source (module, method, etc.) that will pass log event messages to this logger. | 'okcourse' | 
| level | int | The logging level to set for the logger. | INFO | 
| file_path | Path | None | The path to a file where logs will be written. If not provided, logs are written only to the console. | None | 
Examples:
Get the logger for a module and then set up a couple log events:
# This is the do_things.py module
from log_utils import get_logger
# Get the private logger instance for the do_things module
_log = get_logger(__name__)
# Then use the logger elsewhere in the module to log events
def do_a_thing():
    _log.info("About to do a thing...")
    thing.doer.do(thing)
    _log.info("Did the thing.")
    Retrieve the version of the specified top-level package.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| package_name | str | The name of the top-level package. | required | 
Returns:
| Name | Type | Description | 
|---|---|---|
| str | str | The version of the package. | 
Raises:
| Type | Description | 
|---|---|
| PackageNotFoundError | If the package is not found. | 
    A contextmanager that tracks elapsed time and stores it in the specified attribute of the target object.
Wrap your long-running operation with the time_tracker context manager and pass it the object and the name of the
attribute on the object you want to store the elapsed time in.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| target_object | object | The object where the elapsed time should be recorded. | required | 
| attribute_name | str | The name of the attribute on the given target object where the elapsed time should be stored. | required | 
Examples:
Record time elapsed generating a course's outline in the course's
CourseGenerationInfo: