Metadata-Version: 2.1
Name: fastapi_ndjson_logger
Version: 0.1.4
Summary: A FastAPI middleware for logging requests and responses in NDJSON format
Home-page: https://github.com/analogdata/fastapi-logger
Author: Rajath Kumar
Author-email: rajathkumarks@gmail.com
License: MIT
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Framework :: FastAPI
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi

[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)

![Logo](https://analogdatagh-readmeimg.s3.ap-south-1.amazonaws.com/logo/pyrestsmall.png)

# FastAPI-Logger

**FastAPI-Logger** is a middleware that provides easy-to-use request and response logging for FastAPI applications. It supports log rotation, custom log directory, and handles sensitive data securely by redacting sensitive headers.

---

## Features

- Logs all incoming requests and outgoing responses.
- Supports log rotation with customizable file size and backup count.
- Handles sensitive data by redacting headers like `Authorization`.
- Outputs logs in JSON format for easy integration with log management tools.
- Flexible configuration for log directory and file size.

---

## Requirements

- Python 3.12 or higher
- FastAPI framework

## Installation

Create and activate a virtual environment and then install FastAPI & fastapi_ndjson_logger:

```bash
pip install "fastapi[standard]" fastapi_ndjson_logger
```

## Example 

Create a new FastAPI app and add the middleware to it:

```python
import os

from fastapi import FastAPI
from fastapi_ndjson_logger import RequestResponseLogging

# Create logs directory if it doesn't exist
os.makedirs("logs/request_response_logs", exist_ok=True)

app = FastAPI()
app.add_middleware(
    RequestResponseLogging,
    og_dir=os.path.join("logs", "request_response_logs"),  # Directory for log files
    max_mbytes=8,  # 8 MB max file size
    backup_count=3,  # Keep up to 3 rotated files
)

# Add routes to the app
@app.get("/")
async def read_root():
    return {"Hello": "World"}
```

## Run it

```bash
uvicorn app.main:app --reload
```

## Check the logs

```bash
cat logs/request_response_logs/app_log.ndjson
```

## Configuration Parameters

| Parameter      | Description                                    | Default Value         |
|----------------|------------------------------------------------|-----------------------|
| `log_dir`      | Directory to store log files                  | `app_logs`            |
| `max_mbytes`    | Maximum size of a log file in Mega bytes before rotation | `8` (8 MB) |
| `backup_count` | Number of rotated files to retain             | `5`                   |

## Support

For any questions or issues, feel free to open an issue on the GitHub repository.

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

## Contributing

Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on how to submit improvements and bug fixes. Also, please see the [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).

## Author

[Rajath Kumar K S](https://github.com/analogdata)
