Skip to content

Commit 10d2d67

Browse files
committed
Refactor some logging logic.
1 parent c562d00 commit 10d2d67

File tree

2 files changed

+63
-62
lines changed

2 files changed

+63
-62
lines changed

src/judge0/__init__.py

Lines changed: 4 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import logging
2-
import logging.handlers
32
import os
4-
import sys
53

6-
from pathlib import Path
74
from typing import Union
85

6+
from ._logging import setup_logging
7+
98
from .api import (
109
async_execute,
1110
async_run,
@@ -76,65 +75,8 @@
7675
except: # noqa: E722
7776
pass
7877

79-
80-
def setup_logging(
81-
log_file: Path | None = None,
82-
file_level: int | None = None,
83-
console_level: int | None = None,
84-
) -> None:
85-
"""Set up logging for the package."""
86-
if log_file is None:
87-
try:
88-
log_dir = Path.home() / ".judge0" / "logs"
89-
log_dir.mkdir(parents=True, exist_ok=True)
90-
log_file = log_dir / "judge0.log"
91-
except (OSError, PermissionError):
92-
# Fallback to user's current working directory
93-
log_file = Path("judge0.log")
94-
95-
logger = logging.getLogger("judge0")
96-
logger.setLevel(logging.DEBUG)
97-
98-
# Check if handlers are already added to avoid duplication.
99-
if logger.hasHandlers():
100-
return
101-
102-
# Determine log levels: parameter > env var > default
103-
if file_level is None:
104-
file_level = getattr(
105-
logging, os.getenv("JUDGE0_FILE_LOG_LEVEL", "DEBUG").upper(), logging.DEBUG
106-
)
107-
if console_level is None:
108-
console_level = getattr(
109-
logging, os.getenv("JUDGE0_CONSOLE_LOG_LEVEL", "INFO").upper(), logging.INFO
110-
)
111-
112-
formatter = logging.Formatter(
113-
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
114-
)
115-
116-
# File handler with weekly rotation.
117-
file_handler = logging.handlers.TimedRotatingFileHandler(
118-
filename=log_file,
119-
when="W0", # Rotate every Monday
120-
interval=1,
121-
backupCount=4, # Keep 4 weeks of logs
122-
)
123-
file_handler.setLevel(file_level)
124-
file_handler.setFormatter(formatter)
125-
126-
# Console handler
127-
console_handler = logging.StreamHandler(sys.stdout)
128-
console_handler.setLevel(console_level)
129-
console_handler.setFormatter(formatter)
130-
131-
# Add handlers
132-
logger.addHandler(file_handler)
133-
logger.addHandler(console_handler)
134-
135-
136-
# Call setup logging before intializing the logger below.
137-
setup_logging()
78+
if os.getenv("JUDGE0_ENABLE_LOGGING"):
79+
setup_logging()
13880

13981
logger = logging.getLogger(__name__)
14082
suppress_preview_warning = os.getenv("JUDGE0_SUPPRESS_PREVIEW_WARNING") is not None

src/judge0/_logging.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import logging.handlers
2+
import sys
3+
from pathlib import Path
4+
5+
6+
def setup_logging(
7+
log_file: Path | None = None,
8+
file_level: int | None = None,
9+
console_level: int | None = None,
10+
) -> None:
11+
"""Set up logging for the package."""
12+
if log_file is None:
13+
try:
14+
log_dir = Path.home() / ".judge0" / "logs"
15+
log_dir.mkdir(parents=True, exist_ok=True)
16+
log_file = log_dir / "judge0.log"
17+
except (OSError, PermissionError):
18+
# Fallback to user's current working directory
19+
log_file = Path("judge0.log")
20+
21+
logger = logging.getLogger("judge0")
22+
logger.setLevel(logging.DEBUG)
23+
24+
# Check if handlers are already added to avoid duplication.
25+
if logger.hasHandlers():
26+
return
27+
28+
# Determine log levels: parameter > env var > default
29+
if file_level is None:
30+
file_level = getattr(
31+
logging, os.getenv("JUDGE0_FILE_LOG_LEVEL", "DEBUG").upper(), logging.DEBUG
32+
)
33+
if console_level is None:
34+
console_level = getattr(
35+
logging, os.getenv("JUDGE0_CONSOLE_LOG_LEVEL", "INFO").upper(), logging.INFO
36+
)
37+
38+
formatter = logging.Formatter(
39+
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
40+
)
41+
42+
# File handler with weekly rotation.
43+
file_handler = logging.handlers.TimedRotatingFileHandler(
44+
filename=log_file,
45+
when="W0", # Rotate every Monday
46+
interval=1,
47+
backupCount=4, # Keep 4 weeks of logs
48+
)
49+
file_handler.setLevel(file_level)
50+
file_handler.setFormatter(formatter)
51+
52+
# Console handler
53+
console_handler = logging.StreamHandler(sys.stdout)
54+
console_handler.setLevel(console_level)
55+
console_handler.setFormatter(formatter)
56+
57+
# Add handlers
58+
logger.addHandler(file_handler)
59+
logger.addHandler(console_handler)

0 commit comments

Comments
 (0)