https://github.com/lkellermann/logging-decorator
An easy way to log your methods in Python.
https://github.com/lkellermann/logging-decorator
decorators logging python
Last synced: 3 months ago
JSON representation
An easy way to log your methods in Python.
- Host: GitHub
- URL: https://github.com/lkellermann/logging-decorator
- Owner: lkellermann
- License: mit
- Created: 2021-08-27T23:09:03.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2025-08-05T15:24:10.000Z (11 months ago)
- Last Synced: 2025-12-16T11:30:05.972Z (6 months ago)
- Topics: decorators, logging, python
- Language: Python
- Homepage:
- Size: 31.3 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[]()
[](https://github.com/lkellermann/logging-decorator/issues)
[](https://github.com/lkellermann/logging-decorator/pulls)
[](/LICENSE)
LoggingDecorator is a MIT licensed general-purpose software package written in Python that simplyfies the task of logging methods of other Python scripts.
To install this package you can just type in your Python terminal:
```shell
pip install logging-decorator
```
### Requirements
This Python package only works with `Python 3.6` or later.
The simplest use case is logging a generic method and displaying the log on screen.
```python
from LoggingDecorator import logd
@logd
def foo():
print('foo method')
def main():
foo()
if __name__ == '__main__'
main()
```
- Generate `.log` files inside a `log` folder in the current working directory.
```python
from LoggingDecorator import logd
@logd(file=True)
def foo():
print('foo method')
def main():
foo()
if __name__ == '__main__'
main()
```
- Continue running the script if an exception is raised:
```python
from LoggingDecorator import logd
@logd(raise_error=False)
def foo():
print('foo method')
def main():
foo()
if __name__ == '__main__'
main()
```
- Set logging level:
```python
from LoggingDecorator import logd
@logd(logging_level='critical')
def foo():
print('foo method')
def main():
foo()
if __name__ == '__main__'
main()
```
- The available options are: `critical`, `error`, `warning`, `info`, `debug` and `notset`.
## Output Sample
Supose that you have a `foo` project with the following structure:
```
📦foo
┗ 📜foo.py
```
And the contents of the `foo.py` file is the following:
```python
from time import sleep
from LoggingDecorator import logd
@logd(file=True, logging_level='debug')
def foo_sum(a:int, b:int=1):
sleep(3)
return a+b
@logd(file=False, raise_error=True)
def foo_div(a:int, b:int=0):
return a/b
def main():
foo_sum(1)
foo_div(5)
if __name__=='__main__':
main()
```
The method `foo_sum` will print and generate a file like `./foo/log/foo_foo_sum_28Aug2021_114203.log` with the following content:
```
2021-08-28 11:42:03,695 - Working directory: /absolute/path/to/foo
2021-08-28 11:42:03,695 - Module name: __main__
2021-08-28 11:42:03,696 - Method name: foo_sum
2021-08-28 11:42:03,696 - Error message: None
2021-08-28 11:42:03,696 - Start time: 2021-08-28 11:42:00.690282
2021-08-28 11:42:03,696 - End time: 2021-08-28 11:42:03.694016
2021-08-28 11:42:03,696 - Elapsed time: 0:00:03.003734
2021-08-28 11:42:03,697 - Variables: (a: int, b: int = 1)
2021-08-28 11:42:03,697 - Args: None
2021-08-28 11:42:03,697 - Kwargs: None
2021-08-28 11:42:03,697 - Log path: /absolute/path/to/foo/log/foo_foo_sum_28Aug2021_114203.log
```
And the `foo_div` will generate the following message in your screen:
```
2021-08-28 11:42:03,698 - Module name: __main__
2021-08-28 11:42:03,699 - Method name: foo_div
2021-08-28 11:42:03,699 - Error message: division by zero
2021-08-28 11:42:03,699 - Start time: 2021-08-28 11:42:03.698178
2021-08-28 11:42:03,699 - End time: 2021-08-28 11:42:03.698622
2021-08-28 11:42:03,699 - Elapsed time: 0:00:00.000444
2021-08-28 11:42:03,700 - Variables: (a: int, b: int = 0)
2021-08-28 11:42:03,700 - Args: (5,)
2021-08-28 11:42:03,700 - Kwargs: {}
2021-08-28 11:42:03,700 - Log path: None
Traceback (most recent call last):
File "/absolute/path/to/foo/foo.py", line 18, in
main()
File "//absolute/path/to/foo/foo/foo.py", line 15, in main
foo_div(5)
File "/local/python/path/site-packages/LoggingDecorator/LoggingDecorator.py", line 33, in wrapped_function
return LoggingDecorator(*dargs, **dkwargs).call(original_method, *args, **kwargs)
File "/local/python/path/site-packages/LoggingDecorator/LoggingDecorator.py", line 78, in call
return self._summary(original_method,
File "/local/python/path/site-packages/LoggingDecorator/LoggingDecorator.py", line 149, in _summary
raise LogException(error_message)
LoggingDecorator.LoggingDecorator.LogException: LogException[division by zero]
```
- [@lkellermann](https://github.com/lkellermann) - Idea & Initial work