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
24 changes: 24 additions & 0 deletions loguru/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# How to Use Loguru for Simpler Python Logging

This repository contains code related to the Real Python tutorial [How to Use Loguru for Simpler Python Logging](https://realpython.com/python-loguru/).

## Setup

You should first create and activate a virtual environment:

```sh
$ python -m venv venv/
$ source venv/bin/activate
```

Install the pinned dependencies from `requirements.txt`:

```sh
(venv) $ python -m pip install -r requirements.txt
```

Then you can execute the provided Python scripts, for example:

```sh
(venv) $ python basic_logging.py
```
5 changes: 5 additions & 0 deletions loguru/basic_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from loguru import logger

logger.debug("Debug message")
logger.info("Info message")
logger.error("Error message")
9 changes: 9 additions & 0 deletions loguru/catch_and_log_errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from loguru import logger


@logger.catch
def divide(a, b):
return a / b


divide(10, 0)
16 changes: 16 additions & 0 deletions loguru/context_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import sys

from loguru import logger

logger.remove()
logger.add(sys.stderr, format="{time} | {level} | {message} | {extra}")

user_logger = logger.bind(user_id=123)
user_logger.info("User logged in")
user_logger.info("User started a session")

with logger.contextualize(request_id="abc789"):
logger.info("Processing request")
logger.info("Request completed")

logger.info("Request is processed, this will not show extra context")
24 changes: 24 additions & 0 deletions loguru/custom_json_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import json

from loguru import logger


def simple_serializer(record):
subset = {
"time": record["time"].timestamp(),
"level": record["level"].name,
"message": record["message"],
"context": record["extra"], # Include any bound context
}
return json.dumps(subset)


def add_serialization(record):
record["extra"]["json_output"] = simple_serializer(record)


logger.remove()
logger = logger.patch(add_serialization)
logger.add("custom.json", format="{extra[json_output]}")
logger.bind(user="john").info("User logged in")
logger.bind(order_id=12345).info("Order processed")
12 changes: 12 additions & 0 deletions loguru/customized_log_errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from loguru import logger


@logger.catch(message="Database connection failed", level="ERROR")
def connect_to_db(host, port):
if port < 1000:
raise ValueError("Invalid port number")
# Simulated database connection
return 1 / 0 # Simulate error


connect_to_db("localhost", 123)
22 changes: 22 additions & 0 deletions loguru/debug_with_context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import sys

from loguru import logger

logger.remove()
logger.add(
sys.stderr, format="{time} | {level} | {message} | {extra}", level="TRACE"
)


@logger.catch
def perform_action(user, action):
with logger.contextualize(user=user, action=action):
logger.trace("Starting action")
logger.info("Performing action")
if action not in ["login", "logout"]:
logger.trace("Invalid action detected")
raise ValueError("Invalid action")
logger.success("Action completed")


perform_action("alice", "delete")
8 changes: 8 additions & 0 deletions loguru/file_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import time

from loguru import logger

logger.add(sink="app.log", rotation="5 seconds", retention="1 minute")
for i in range(100):
logger.info(f"Processing item #{i}")
time.sleep(2)
6 changes: 6 additions & 0 deletions loguru/loguru_json_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from loguru import logger

logger.remove()
logger.add("app.json", serialize=True, format="{time} | {level} | {message}")
logger.info("Application started")
logger.warning("Memory usage high")
7 changes: 7 additions & 0 deletions loguru/loguru_json_format.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import sys

from loguru import logger

logger.remove()
logger.add(sys.stderr, serialize=True)
logger.info("User logged in", user_id=123)
1 change: 1 addition & 0 deletions loguru/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
loguru==0.7.3