Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/doc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ jobs:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: '3.11'
python-version-file: ".python-version"
- name: Set up cache
uses: actions/cache@v2
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker_push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
packages: write

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

# https://github.com/marketplace/actions/push-to-ghcr
- name: Build and publish a Docker image for ${{ github.repository }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ jobs:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: '3.11'
python-version-file: ".python-version"
- name: Pip Update
run: |
make -s update-pip
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
# test:
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v3
# - uses: actions/checkout@v4
# - name: Disable Logger Outputs
# run: |
# sed -i "s/log_cli = true/log_cli = false/" pyproject.toml
Expand All @@ -35,7 +35,7 @@ jobs:
os: [ubuntu-22.04] # windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Disable Logger Outputs
run: |
sed -i "s/log_cli = true/log_cli = false/" pyproject.toml
Expand Down
10 changes: 6 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ dependencies = []
managed = true
dev-dependencies = [
"pre-commit",
"ruff==0.5.7",
"ruff==0.6.9",
"mypy",
"scalene~=1.5.21.2",
## DOCS
Expand Down Expand Up @@ -94,9 +94,7 @@ line-length = 88
src = ["src"]
respect-gitignore = true

extend-include = [
"*.ipynb"
]
# extend-include = []

extend-exclude = [
"docs",
Expand All @@ -106,6 +104,8 @@ extend-exclude = [
# Ignore `E402` (import violations) in all `__init__.py` files, and in `path/to/file.py`.
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["E402", "F401"]
# "*.ipynb" = ["E501"] # disable line-too-long in notebooks

# "path/to/file.py" = ["E402"]
# 'python_template/__init__.py' = ['F405', 'F403']

Expand Down Expand Up @@ -137,8 +137,10 @@ select = [
"RET", # return
"RUF", # Enable all ruff-specific checks
"SIM", # simplify
"S307", # eval
"T20", # (disallow print statements) keep debugging statements out of the codebase
"W", # pycodestyle warnings
"ASYNC" # async
]

ignore = [
Expand Down
4 changes: 2 additions & 2 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ pytest-xdist==3.6.1
python-dateutil==2.9.0.post0
# via ghp-import
# via jupyter-client
pyyaml==6.0.1
pyyaml==6.0.2
# via mkdocs
# via mkdocs-get-deps
# via pre-commit
Expand All @@ -178,7 +178,7 @@ requests==2.31.0
# via mkdocs-material
rich==13.7.1
# via scalene
ruff==0.5.7
ruff==0.6.9
scalene==1.5.21.4
setuptools==69.5.1
# via nodeenv
Expand Down
1 change: 1 addition & 0 deletions src/python_template/loggers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Custom loggers."""
1 change: 1 addition & 0 deletions src/python_template/loggers/configs/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Loggers configs."""
119 changes: 119 additions & 0 deletions src/python_template/loggers/configs/advanced.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
"""Advanced logging configuration."""

ADVANCED_LOGGER_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"standard": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"},
"error": {
"format": "%(asctime)s - %(name)s - %(levelname)s <PID %(process)d:%(processName)s> %(name)s.%(funcName)s(): %(message)s"
},
},
"handlers": {
"info_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "standard",
"filename": "logs/info.log",
"maxBytes": 10485760, # 10MB
"backupCount": 20,
"encoding": "utf8",
},
"warn_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "WARN",
"formatter": "standard",
"filename": "logs/warn.log",
"maxBytes": 10485760, # 10MB
"backupCount": 20,
"encoding": "utf8",
},
"error_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "error",
"filename": "logs/errors.log",
"maxBytes": 10485760, # 10MB
"backupCount": 20,
"encoding": "utf8",
},
"critical_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "CRITICAL",
"formatter": "standard",
"filename": "logs/critical.log",
"maxBytes": 10485760, # 10MB
"backupCount": 20,
"encoding": "utf8",
},
"debug_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "DEBUG",
"formatter": "standard",
"filename": "logs/debug.log",
"maxBytes": 10485760, # 10MB
"backupCount": 20,
"encoding": "utf8",
},
"root_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "DEBUG",
"formatter": "standard",
"filename": "logs/logs.log",
"maxBytes": 10485760, # 10MB
"backupCount": 20,
"encoding": "utf8",
},
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "standard",
"stream": "ext://sys.stdout",
},
"error_console": {
"class": "logging.StreamHandler",
"level": "ERROR",
"formatter": "error",
},
},
"loggers": {
"": { # root logger
"level": "DEBUG",
"handlers": ["console", "error_console", "root_file_handler"],
"propagate": True,
},
"main": {
"level": "DEBUG",
"handlers": [
"info_file_handler",
"warn_file_handler",
"error_file_handler",
"critical_file_handler",
"debug_file_handler",
],
"propagate": False,
},
"werkzeug": {
"level": "DEBUG",
"handlers": [
"info_file_handler",
"warn_file_handler",
"error_file_handler",
"critical_file_handler",
"debug_file_handler",
],
"propagate": True,
},
"api.app_server": {
"level": "DEBUG",
"handlers": [
"info_file_handler",
"warn_file_handler",
"error_file_handler",
"critical_file_handler",
"debug_file_handler",
],
"propagate": True,
},
},
}
72 changes: 72 additions & 0 deletions src/python_template/loggers/configs/default.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
"""Default logging configuration."""

DEFAULT_LOGGER_CONFIG = {
"version": 1,
"disable_existing_loggers": False, # NOTE: Very important
"formatters": {
"simple": {"format": "%(asctime)s :: %(name)s :: %(message)s"},
"extended": {
"format": "%(asctime)-20s :: %(levelname)-8s :: [%(process)d]%(processName)s :: %(threadName)s[%(thread)d] :: %(pathname)s:%(lineno)d - %(funcName)s :: %(message)s"
},
"aligned": {
"format": "{asctime} :: {levelname:<8s}:: {pathname:<10s}:{lineno} :: {message}",
"style": "{",
},
"base": {
"format": "%(asctime)-20s :: %(levelname)-8s :: %(pathname)s:%(lineno)d:: %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S",
},
"colored": {
"()": "python_template.loggers.formatters.ColoredFormatter",
"format": "%(asctime)-20s :: %(name)-8s :: %(levelname)-8s :: %(pathname)s:%(lineno)d :: %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S",
},
},
"filters": {
"info": {
"()": "python_template.loggers.filters.InfoFilter",
},
"cwd": {
"()": "python_template.loggers.filters.CwdFilter",
},
# "path_shortener": {
# "()": "python_template.loggers.filters.PathShortenerFilter",
# }
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"stream": "ext://sys.stdout",
"formatter": "colored",
"filters": ["cwd"],
},
"file_handler": {
"class": "logging.FileHandler",
"level": "INFO",
"filename": "python_template.log",
"formatter": "base",
"filters": ["cwd"],
},
},
"loggers": {
# NOTE: Default root logger parameters. It is not recommended to
# modify root logger.
"": { # root logger
# "level": "NOTSET", # logs everything
"level": "WARNING",
# "handlers": ["console"],
"propagate": True,
},
"__main__": { # if __name__ == '__main__'
"level": "DEBUG",
"handlers": ["console"],
"propagate": True, # Inherit root handlers
},
"python_template": {
"level": "DEBUG",
"handlers": ["console"], # ,file_handler
"propagate": True, # Inherit root handlers
},
},
}
53 changes: 53 additions & 0 deletions src/python_template/loggers/configs/uvicorn.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
"""Uvicorn logging configuration."""

from typing import Any

LOGGING_CONFIG: dict[str, Any] = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"()": "uvicorn.logging.DefaultFormatter",
"fmt": "%(asctime)s - %(name)s - %(levelprefix)s %(message)s",
"use_colors": None,
},
"access": {
"()": "uvicorn.logging.AccessFormatter",
"fmt": '%(asctime)s - %(name)s - %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
},
"access_file": {
"()": "uvicorn.logging.AccessFormatter",
"fmt": '%(asctime)s - %(name)s - %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
"use_colors": False,
},
},
"handlers": {
"file_handler": {
"formatter": "access_file",
"class": "logging.handlers.RotatingFileHandler",
"filename": "./app.log",
"mode": "a+",
"maxBytes": 10 * 1024 * 1024,
"backupCount": 0,
},
"default": {
"formatter": "default",
"class": "logging.StreamHandler",
"stream": "ext://sys.stderr",
},
"access": {
"formatter": "access",
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
},
},
"loggers": {
"uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": False},
"uvicorn.error": {"level": "INFO"},
"uvicorn.access": {
"handlers": ["access", "file_handler"],
"level": "INFO",
"propagate": False,
},
},
}
Loading