From 74696627bbe105e18d612ef8a30f4d8c28c27508 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Mon, 29 May 2023 12:16:02 +0000 Subject: automatic import of python-privex-loghelper --- python-privex-loghelper.spec | 804 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 804 insertions(+) create mode 100644 python-privex-loghelper.spec (limited to 'python-privex-loghelper.spec') diff --git a/python-privex-loghelper.spec b/python-privex-loghelper.spec new file mode 100644 index 0000000..1d82aae --- /dev/null +++ b/python-privex-loghelper.spec @@ -0,0 +1,804 @@ +%global _empty_manifest_terminate_build 0 +Name: python-privex-loghelper +Version: 1.0.6 +Release: 1 +Summary: Small dependency-free class to make logging easier +License: MIT +URL: https://github.com/Privex/python-loghelper +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/82/0a/01acffad0d39165b54e48fdb37ae24187862cac7a357d0e695743c02bbe6/privex_loghelper-1.0.6.tar.gz +BuildArch: noarch + + +%description +# Python Log Helper + +[![PyPi Version](https://img.shields.io/pypi/v/privex-loghelper.svg)](https://pypi.org/project/privex-loghelper/) +![License Button](https://img.shields.io/pypi/l/privex-loghelper) ![PyPI - Downloads](https://img.shields.io/pypi/dm/privex-loghelper) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/privex-loghelper) +![GitHub last commit](https://img.shields.io/github/last-commit/Privex/python-loghelper) + +**Python Log Helper** is a small class designed to simplify the use of the built-in Python Logging Module. + +It has no dependencies, and should be compatible with most versions of Python 2.x and 3.x (though we still recommend a minimum of 3.4). + +It was originally created by [Chris (Someguy123)](https://github.com/Someguy123) for use in personal Python projects, +as well as for use in projects developed at [Privex Inc.](https://github.com/Privex) + +**If this project has helped you, consider [grabbing a VPS or Dedicated Server from Privex](https://www.privex.io) - prices start at as little as 8 USD/mo (we take cryptocurrency!)** + +# License + +**Python Log Helper** was created by [Privex Inc. of Belize City](https://www.privex.io), and licensed under the X11/MIT License. +See the file [LICENSE](https://github.com/Privex/python-loghelper/blob/master/LICENSE) for the license text. + +**TL;DR; license:** + +We offer no warranty. You can copy it, modify it, use it in projects with a different license, and even in commercial (paid for) software. + +The most important rule is - you **MUST** keep the original license text visible (see `LICENSE`) in any copies. + +# Contributing + +We're happy to accept pull requests, no matter how small. + +Please make sure any changes you make meet these basic requirements: + + - No additional dependencies. We want LogHelper to be lightweight and painless to install. + - Any code taken from other projects should be compatible with the MIT License + - This is a new project, and as such, supporting Python versions prior to 3.4 is very low priority. + - However, we're happy to accept PRs to improve compatibility with older versions of Python, as long as it doesn't: + - drastically increase the complexity of the code + - OR cause problems for those on newer versions of Python. + +# Installation + +### Download and install from PyPi using pip + +**Python 3** + +```sh +pip3 install privex-loghelper +``` + +**Python 2** + +```sh +pip install privex-loghelper +``` + +### (Alternative) Manual install from Git + +**Option 1 - Use pip to install straight from Github** + +```sh +pip3 install git+https://github.com/Privex/python-loghelper +``` + +**Option 2 - Clone and install manually** + +```bash +# Clone the repository from Github +git clone https://github.com/Privex/python-loghelper +cd python-loghelper + +# RECOMMENDED INSTALL METHOD +# Use pip to install the source code +pip3 install . + +# ALTERNATIVE INSTALL METHOD +# If you don't have pip, or have issues with installing using it, then you can use setuptools instead. +python3 setup.py install +``` + +# Usage + +The code is very well documented, you can find out all usage documentation in [LogHelper.py](https://github.com/Privex/python-loghelper/blob/master/privex/loghelper/LogHelper.py). + +All functions are type annotated, with detailed pydoc block comments. If you're using a Python optimised IDE such as [PyCharm](https://www.jetbrains.com/pycharm/) it should +offer code completion and help when using the package. + +![Screenshot of PyCharm code completion and docs](https://i.imgur.com/T2a0aTm.png) + +### Basic usage + +The most basic usage is to simply initialise the class with no parameters, and attach a +file handler to send log output to a file. + +```python +# Import the class +from privex.loghelper import LogHelper +# The first param is logger_name - a hierarchical dot-separated name to organise loggers. +# If it's not specified, or is None, it will use the root logger (which will affect some +# third-party packages that don't have their own logging settings) +lh = LogHelper('mylogger') +# Log to a file called test.log in the current directory +lh.add_file_handler('test.log') +# Grab the logger instance +log = lh.get_logger() +# Now let's log 'hello world' to the file. +log.info('hello world') +``` + +After running the above, `test.log` should contain: + +``` +2018-12-05 22:05:18,915 root INFO hello world +``` + +### Copying your logging config to other logger names + +Third party packages often use their own logging instance names. To make it easy for you to copy your settings +to other instances, you can use the `copy_logger(name)` method. + +```python +# Set up logging for your app, log anything >=INFO +lh = LogHelper('myapp', handler_level=logging.INFO) +# Log to a file called test.log in the current directory (note: absolute path is better) +lh.add_file_handler('test.log') +# Now copy your logging level, handlers, and formatting to the logger privex.jsonrpc +lh.copy_logger('privex.jsonrpc') +# You can specify multiple logger names as positional arguments. All specified loggers will +# have their handlers replaced with yours, and have their logging level set to match. +lh.copy_logger('example.app', 'otherexample') +``` + +After copying your settings onto a named logger, all logging using that logger should use your specified handlers, +and your log level. + +This covers modules that access the logger via `logging.getLogger('loggername')`, as well as via Python Logging wrappers +such as privex-loghelper. + +### Splitting error and debug logs into different files + +Something that can make it easier to sift through logs, is to split your normal debug logs from warnings and errors. + +Using the standard `logging` module, this could take 10 lines of code, and is highly repetitive. + +With the Python Log Helper, it's just a few lines. + +```python +# Import the class +from privex.loghelper import LogHelper +# Import logging to be able to specify the verbosity levels +import logging + +# The global level (kwarg `level`) defaults to DEBUG, but the default handler level is only INFO. +# You can specify handler_level to change that. +# To help prevent conflicts from other python packages which use the root ('') logger, you should set a custom +# logger name. +lh = LogHelper(logger_name='my_app', handler_level=logging.DEBUG) + +# Log messages that are DEBUG (default handler and global logging level) or higher to `debug.log` +lh.add_file_handler('debug.log') + +# Log only WARNING or above to `error.log` +lh.add_file_handler('error.log', level=logging.WARNING) + +# Grab the logger instance +log = lh.get_logger() + +# To test that logs are being sent to the correct files, let's try an `info`, a `warning` and an `error` log message. +log.info('something normal is happening') +log.warning('something strange is happening') +log.error('something VERY BAD is happening') + +``` + +After running the above Python script, you should see the following log files: + +**debug.log** + +``` +2018-12-05 22:10:25,253 root INFO something normal is happening +2018-12-05 22:10:25,254 root WARNING something strange is happening +2018-12-05 22:10:25,256 root ERROR something VERY BAD is happening +``` + +**error.log** + +``` +2018-12-05 22:10:25,254 root WARNING something strange is happening +2018-12-05 22:10:25,256 root ERROR something VERY BAD is happening +``` + +As you can see, the `debug.log` saved all of the messages, while `error.log` only saved the warning and the error. + +### Log Rotation + +You can also have painless log rotation, without the need for something like `logrotated`. + +The LogHelper class has a function `add_timed_file_handler` which wraps `logging.handler.TimedRotatingFileHandler`. + +Simply specify the type of interval (`when`) to rotate with, how often it should rotate (`interval`), and how many intervals you +would like to keep before deleting older ones (`backups`). Set `backups` to 0 if you don't want it to delete older logs. + +For more information on `interval`, `when` and `backups`, +see [the official logging docs](https://docs.python.org/3.7/library/logging.handlers.html#timedrotatingfilehandler) + +By default, logs are rotated once (interval=1) per day (when='D'), and removed after 14 days (backups=14). + +```python +# Import the class +from privex.loghelper import LogHelper +# Using sleep to simulate time passing +from time import sleep +lh = LogHelper() +# Log to a file called test.log in the current directory +# Rotate the log every minute, and only keep up to 60 minutes of logs +lh.add_timed_file_handler('test.log', when='M', interval=1, backups=60) +# Grab the logger instance +log = lh.get_logger() +# Now let's log 'hello world' to the file. +log.info('hello world') +log.info('hello world 2') +sleep(60) +log.info('hello world 3') +``` + +We can now see it's generated two timestamped logs, since the interval was set to 1 minute. + +```bash +$ ls -l + -rw-r--r-- 1 user users 58 5 Dec 22:58 test.log.2018-12-05_22-58 + -rw-r--r-- 1 user users 58 5 Dec 22:59 test.log.2018-12-05_22-59 + +$ cat test.log.2018-12-05_22-58 + 2018-12-05 22:58:24,600 root INFO hello world + 2018-12-05 22:58:24,743 root INFO hello world 2 + +$ cat test.log.2018-12-05_22-59 + 2018-12-05 22:59:25,512 root INFO hello world 3 +``` + +# Thanks for reading! + +**If this project has helped you, consider [grabbing a VPS or Dedicated Server from Privex](https://www.privex.io) - prices start at as little as US$8/mo (we take cryptocurrency!)** + + + +%package -n python3-privex-loghelper +Summary: Small dependency-free class to make logging easier +Provides: python-privex-loghelper +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-privex-loghelper +# Python Log Helper + +[![PyPi Version](https://img.shields.io/pypi/v/privex-loghelper.svg)](https://pypi.org/project/privex-loghelper/) +![License Button](https://img.shields.io/pypi/l/privex-loghelper) ![PyPI - Downloads](https://img.shields.io/pypi/dm/privex-loghelper) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/privex-loghelper) +![GitHub last commit](https://img.shields.io/github/last-commit/Privex/python-loghelper) + +**Python Log Helper** is a small class designed to simplify the use of the built-in Python Logging Module. + +It has no dependencies, and should be compatible with most versions of Python 2.x and 3.x (though we still recommend a minimum of 3.4). + +It was originally created by [Chris (Someguy123)](https://github.com/Someguy123) for use in personal Python projects, +as well as for use in projects developed at [Privex Inc.](https://github.com/Privex) + +**If this project has helped you, consider [grabbing a VPS or Dedicated Server from Privex](https://www.privex.io) - prices start at as little as 8 USD/mo (we take cryptocurrency!)** + +# License + +**Python Log Helper** was created by [Privex Inc. of Belize City](https://www.privex.io), and licensed under the X11/MIT License. +See the file [LICENSE](https://github.com/Privex/python-loghelper/blob/master/LICENSE) for the license text. + +**TL;DR; license:** + +We offer no warranty. You can copy it, modify it, use it in projects with a different license, and even in commercial (paid for) software. + +The most important rule is - you **MUST** keep the original license text visible (see `LICENSE`) in any copies. + +# Contributing + +We're happy to accept pull requests, no matter how small. + +Please make sure any changes you make meet these basic requirements: + + - No additional dependencies. We want LogHelper to be lightweight and painless to install. + - Any code taken from other projects should be compatible with the MIT License + - This is a new project, and as such, supporting Python versions prior to 3.4 is very low priority. + - However, we're happy to accept PRs to improve compatibility with older versions of Python, as long as it doesn't: + - drastically increase the complexity of the code + - OR cause problems for those on newer versions of Python. + +# Installation + +### Download and install from PyPi using pip + +**Python 3** + +```sh +pip3 install privex-loghelper +``` + +**Python 2** + +```sh +pip install privex-loghelper +``` + +### (Alternative) Manual install from Git + +**Option 1 - Use pip to install straight from Github** + +```sh +pip3 install git+https://github.com/Privex/python-loghelper +``` + +**Option 2 - Clone and install manually** + +```bash +# Clone the repository from Github +git clone https://github.com/Privex/python-loghelper +cd python-loghelper + +# RECOMMENDED INSTALL METHOD +# Use pip to install the source code +pip3 install . + +# ALTERNATIVE INSTALL METHOD +# If you don't have pip, or have issues with installing using it, then you can use setuptools instead. +python3 setup.py install +``` + +# Usage + +The code is very well documented, you can find out all usage documentation in [LogHelper.py](https://github.com/Privex/python-loghelper/blob/master/privex/loghelper/LogHelper.py). + +All functions are type annotated, with detailed pydoc block comments. If you're using a Python optimised IDE such as [PyCharm](https://www.jetbrains.com/pycharm/) it should +offer code completion and help when using the package. + +![Screenshot of PyCharm code completion and docs](https://i.imgur.com/T2a0aTm.png) + +### Basic usage + +The most basic usage is to simply initialise the class with no parameters, and attach a +file handler to send log output to a file. + +```python +# Import the class +from privex.loghelper import LogHelper +# The first param is logger_name - a hierarchical dot-separated name to organise loggers. +# If it's not specified, or is None, it will use the root logger (which will affect some +# third-party packages that don't have their own logging settings) +lh = LogHelper('mylogger') +# Log to a file called test.log in the current directory +lh.add_file_handler('test.log') +# Grab the logger instance +log = lh.get_logger() +# Now let's log 'hello world' to the file. +log.info('hello world') +``` + +After running the above, `test.log` should contain: + +``` +2018-12-05 22:05:18,915 root INFO hello world +``` + +### Copying your logging config to other logger names + +Third party packages often use their own logging instance names. To make it easy for you to copy your settings +to other instances, you can use the `copy_logger(name)` method. + +```python +# Set up logging for your app, log anything >=INFO +lh = LogHelper('myapp', handler_level=logging.INFO) +# Log to a file called test.log in the current directory (note: absolute path is better) +lh.add_file_handler('test.log') +# Now copy your logging level, handlers, and formatting to the logger privex.jsonrpc +lh.copy_logger('privex.jsonrpc') +# You can specify multiple logger names as positional arguments. All specified loggers will +# have their handlers replaced with yours, and have their logging level set to match. +lh.copy_logger('example.app', 'otherexample') +``` + +After copying your settings onto a named logger, all logging using that logger should use your specified handlers, +and your log level. + +This covers modules that access the logger via `logging.getLogger('loggername')`, as well as via Python Logging wrappers +such as privex-loghelper. + +### Splitting error and debug logs into different files + +Something that can make it easier to sift through logs, is to split your normal debug logs from warnings and errors. + +Using the standard `logging` module, this could take 10 lines of code, and is highly repetitive. + +With the Python Log Helper, it's just a few lines. + +```python +# Import the class +from privex.loghelper import LogHelper +# Import logging to be able to specify the verbosity levels +import logging + +# The global level (kwarg `level`) defaults to DEBUG, but the default handler level is only INFO. +# You can specify handler_level to change that. +# To help prevent conflicts from other python packages which use the root ('') logger, you should set a custom +# logger name. +lh = LogHelper(logger_name='my_app', handler_level=logging.DEBUG) + +# Log messages that are DEBUG (default handler and global logging level) or higher to `debug.log` +lh.add_file_handler('debug.log') + +# Log only WARNING or above to `error.log` +lh.add_file_handler('error.log', level=logging.WARNING) + +# Grab the logger instance +log = lh.get_logger() + +# To test that logs are being sent to the correct files, let's try an `info`, a `warning` and an `error` log message. +log.info('something normal is happening') +log.warning('something strange is happening') +log.error('something VERY BAD is happening') + +``` + +After running the above Python script, you should see the following log files: + +**debug.log** + +``` +2018-12-05 22:10:25,253 root INFO something normal is happening +2018-12-05 22:10:25,254 root WARNING something strange is happening +2018-12-05 22:10:25,256 root ERROR something VERY BAD is happening +``` + +**error.log** + +``` +2018-12-05 22:10:25,254 root WARNING something strange is happening +2018-12-05 22:10:25,256 root ERROR something VERY BAD is happening +``` + +As you can see, the `debug.log` saved all of the messages, while `error.log` only saved the warning and the error. + +### Log Rotation + +You can also have painless log rotation, without the need for something like `logrotated`. + +The LogHelper class has a function `add_timed_file_handler` which wraps `logging.handler.TimedRotatingFileHandler`. + +Simply specify the type of interval (`when`) to rotate with, how often it should rotate (`interval`), and how many intervals you +would like to keep before deleting older ones (`backups`). Set `backups` to 0 if you don't want it to delete older logs. + +For more information on `interval`, `when` and `backups`, +see [the official logging docs](https://docs.python.org/3.7/library/logging.handlers.html#timedrotatingfilehandler) + +By default, logs are rotated once (interval=1) per day (when='D'), and removed after 14 days (backups=14). + +```python +# Import the class +from privex.loghelper import LogHelper +# Using sleep to simulate time passing +from time import sleep +lh = LogHelper() +# Log to a file called test.log in the current directory +# Rotate the log every minute, and only keep up to 60 minutes of logs +lh.add_timed_file_handler('test.log', when='M', interval=1, backups=60) +# Grab the logger instance +log = lh.get_logger() +# Now let's log 'hello world' to the file. +log.info('hello world') +log.info('hello world 2') +sleep(60) +log.info('hello world 3') +``` + +We can now see it's generated two timestamped logs, since the interval was set to 1 minute. + +```bash +$ ls -l + -rw-r--r-- 1 user users 58 5 Dec 22:58 test.log.2018-12-05_22-58 + -rw-r--r-- 1 user users 58 5 Dec 22:59 test.log.2018-12-05_22-59 + +$ cat test.log.2018-12-05_22-58 + 2018-12-05 22:58:24,600 root INFO hello world + 2018-12-05 22:58:24,743 root INFO hello world 2 + +$ cat test.log.2018-12-05_22-59 + 2018-12-05 22:59:25,512 root INFO hello world 3 +``` + +# Thanks for reading! + +**If this project has helped you, consider [grabbing a VPS or Dedicated Server from Privex](https://www.privex.io) - prices start at as little as US$8/mo (we take cryptocurrency!)** + + + +%package help +Summary: Development documents and examples for privex-loghelper +Provides: python3-privex-loghelper-doc +%description help +# Python Log Helper + +[![PyPi Version](https://img.shields.io/pypi/v/privex-loghelper.svg)](https://pypi.org/project/privex-loghelper/) +![License Button](https://img.shields.io/pypi/l/privex-loghelper) ![PyPI - Downloads](https://img.shields.io/pypi/dm/privex-loghelper) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/privex-loghelper) +![GitHub last commit](https://img.shields.io/github/last-commit/Privex/python-loghelper) + +**Python Log Helper** is a small class designed to simplify the use of the built-in Python Logging Module. + +It has no dependencies, and should be compatible with most versions of Python 2.x and 3.x (though we still recommend a minimum of 3.4). + +It was originally created by [Chris (Someguy123)](https://github.com/Someguy123) for use in personal Python projects, +as well as for use in projects developed at [Privex Inc.](https://github.com/Privex) + +**If this project has helped you, consider [grabbing a VPS or Dedicated Server from Privex](https://www.privex.io) - prices start at as little as 8 USD/mo (we take cryptocurrency!)** + +# License + +**Python Log Helper** was created by [Privex Inc. of Belize City](https://www.privex.io), and licensed under the X11/MIT License. +See the file [LICENSE](https://github.com/Privex/python-loghelper/blob/master/LICENSE) for the license text. + +**TL;DR; license:** + +We offer no warranty. You can copy it, modify it, use it in projects with a different license, and even in commercial (paid for) software. + +The most important rule is - you **MUST** keep the original license text visible (see `LICENSE`) in any copies. + +# Contributing + +We're happy to accept pull requests, no matter how small. + +Please make sure any changes you make meet these basic requirements: + + - No additional dependencies. We want LogHelper to be lightweight and painless to install. + - Any code taken from other projects should be compatible with the MIT License + - This is a new project, and as such, supporting Python versions prior to 3.4 is very low priority. + - However, we're happy to accept PRs to improve compatibility with older versions of Python, as long as it doesn't: + - drastically increase the complexity of the code + - OR cause problems for those on newer versions of Python. + +# Installation + +### Download and install from PyPi using pip + +**Python 3** + +```sh +pip3 install privex-loghelper +``` + +**Python 2** + +```sh +pip install privex-loghelper +``` + +### (Alternative) Manual install from Git + +**Option 1 - Use pip to install straight from Github** + +```sh +pip3 install git+https://github.com/Privex/python-loghelper +``` + +**Option 2 - Clone and install manually** + +```bash +# Clone the repository from Github +git clone https://github.com/Privex/python-loghelper +cd python-loghelper + +# RECOMMENDED INSTALL METHOD +# Use pip to install the source code +pip3 install . + +# ALTERNATIVE INSTALL METHOD +# If you don't have pip, or have issues with installing using it, then you can use setuptools instead. +python3 setup.py install +``` + +# Usage + +The code is very well documented, you can find out all usage documentation in [LogHelper.py](https://github.com/Privex/python-loghelper/blob/master/privex/loghelper/LogHelper.py). + +All functions are type annotated, with detailed pydoc block comments. If you're using a Python optimised IDE such as [PyCharm](https://www.jetbrains.com/pycharm/) it should +offer code completion and help when using the package. + +![Screenshot of PyCharm code completion and docs](https://i.imgur.com/T2a0aTm.png) + +### Basic usage + +The most basic usage is to simply initialise the class with no parameters, and attach a +file handler to send log output to a file. + +```python +# Import the class +from privex.loghelper import LogHelper +# The first param is logger_name - a hierarchical dot-separated name to organise loggers. +# If it's not specified, or is None, it will use the root logger (which will affect some +# third-party packages that don't have their own logging settings) +lh = LogHelper('mylogger') +# Log to a file called test.log in the current directory +lh.add_file_handler('test.log') +# Grab the logger instance +log = lh.get_logger() +# Now let's log 'hello world' to the file. +log.info('hello world') +``` + +After running the above, `test.log` should contain: + +``` +2018-12-05 22:05:18,915 root INFO hello world +``` + +### Copying your logging config to other logger names + +Third party packages often use their own logging instance names. To make it easy for you to copy your settings +to other instances, you can use the `copy_logger(name)` method. + +```python +# Set up logging for your app, log anything >=INFO +lh = LogHelper('myapp', handler_level=logging.INFO) +# Log to a file called test.log in the current directory (note: absolute path is better) +lh.add_file_handler('test.log') +# Now copy your logging level, handlers, and formatting to the logger privex.jsonrpc +lh.copy_logger('privex.jsonrpc') +# You can specify multiple logger names as positional arguments. All specified loggers will +# have their handlers replaced with yours, and have their logging level set to match. +lh.copy_logger('example.app', 'otherexample') +``` + +After copying your settings onto a named logger, all logging using that logger should use your specified handlers, +and your log level. + +This covers modules that access the logger via `logging.getLogger('loggername')`, as well as via Python Logging wrappers +such as privex-loghelper. + +### Splitting error and debug logs into different files + +Something that can make it easier to sift through logs, is to split your normal debug logs from warnings and errors. + +Using the standard `logging` module, this could take 10 lines of code, and is highly repetitive. + +With the Python Log Helper, it's just a few lines. + +```python +# Import the class +from privex.loghelper import LogHelper +# Import logging to be able to specify the verbosity levels +import logging + +# The global level (kwarg `level`) defaults to DEBUG, but the default handler level is only INFO. +# You can specify handler_level to change that. +# To help prevent conflicts from other python packages which use the root ('') logger, you should set a custom +# logger name. +lh = LogHelper(logger_name='my_app', handler_level=logging.DEBUG) + +# Log messages that are DEBUG (default handler and global logging level) or higher to `debug.log` +lh.add_file_handler('debug.log') + +# Log only WARNING or above to `error.log` +lh.add_file_handler('error.log', level=logging.WARNING) + +# Grab the logger instance +log = lh.get_logger() + +# To test that logs are being sent to the correct files, let's try an `info`, a `warning` and an `error` log message. +log.info('something normal is happening') +log.warning('something strange is happening') +log.error('something VERY BAD is happening') + +``` + +After running the above Python script, you should see the following log files: + +**debug.log** + +``` +2018-12-05 22:10:25,253 root INFO something normal is happening +2018-12-05 22:10:25,254 root WARNING something strange is happening +2018-12-05 22:10:25,256 root ERROR something VERY BAD is happening +``` + +**error.log** + +``` +2018-12-05 22:10:25,254 root WARNING something strange is happening +2018-12-05 22:10:25,256 root ERROR something VERY BAD is happening +``` + +As you can see, the `debug.log` saved all of the messages, while `error.log` only saved the warning and the error. + +### Log Rotation + +You can also have painless log rotation, without the need for something like `logrotated`. + +The LogHelper class has a function `add_timed_file_handler` which wraps `logging.handler.TimedRotatingFileHandler`. + +Simply specify the type of interval (`when`) to rotate with, how often it should rotate (`interval`), and how many intervals you +would like to keep before deleting older ones (`backups`). Set `backups` to 0 if you don't want it to delete older logs. + +For more information on `interval`, `when` and `backups`, +see [the official logging docs](https://docs.python.org/3.7/library/logging.handlers.html#timedrotatingfilehandler) + +By default, logs are rotated once (interval=1) per day (when='D'), and removed after 14 days (backups=14). + +```python +# Import the class +from privex.loghelper import LogHelper +# Using sleep to simulate time passing +from time import sleep +lh = LogHelper() +# Log to a file called test.log in the current directory +# Rotate the log every minute, and only keep up to 60 minutes of logs +lh.add_timed_file_handler('test.log', when='M', interval=1, backups=60) +# Grab the logger instance +log = lh.get_logger() +# Now let's log 'hello world' to the file. +log.info('hello world') +log.info('hello world 2') +sleep(60) +log.info('hello world 3') +``` + +We can now see it's generated two timestamped logs, since the interval was set to 1 minute. + +```bash +$ ls -l + -rw-r--r-- 1 user users 58 5 Dec 22:58 test.log.2018-12-05_22-58 + -rw-r--r-- 1 user users 58 5 Dec 22:59 test.log.2018-12-05_22-59 + +$ cat test.log.2018-12-05_22-58 + 2018-12-05 22:58:24,600 root INFO hello world + 2018-12-05 22:58:24,743 root INFO hello world 2 + +$ cat test.log.2018-12-05_22-59 + 2018-12-05 22:59:25,512 root INFO hello world 3 +``` + +# Thanks for reading! + +**If this project has helped you, consider [grabbing a VPS or Dedicated Server from Privex](https://www.privex.io) - prices start at as little as US$8/mo (we take cryptocurrency!)** + + + +%prep +%autosetup -n privex-loghelper-1.0.6 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-privex-loghelper -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon May 29 2023 Python_Bot - 1.0.6-1 +- Package Spec generated -- cgit v1.2.3