21

The Python logging module is cumbersome to use. Is there a more elegant alternative? Integration with desktop notifications would be a plus.

8
  • 5
    Looks promising: packages.python.org/Logbook Commented Oct 7, 2010 at 2:41
  • 3
    In what ways do you find the logging module to be cumbersome? What do you find lacking in its capabilities? Commented Oct 7, 2010 at 3:33
  • 2
    Anyways, for people who are here, just like me, structlog, loguru are two good alternatives Commented Jul 27, 2022 at 3:06
  • 1
    @InAFlash isn't it weird that there is a library for everything in python BUT logging LOL. There's no single decent one. However, structlog looks quite promissing. Commented Aug 3, 2022 at 9:30
  • 1
    @InAFlash it sure does... but not so much if you want to send the logs into a database to let another app analze them and send alarms. Commented Aug 3, 2022 at 9:46

4 Answers 4

8

You can look into Twiggy, it's an early stage attempt to build a more pythonic alternative to the logging module.

Sign up to request clarification or add additional context in comments.

4 Comments

seems dead... last commit was over a year ago
Not dead, but moved. The documentation is at twiggy.readthedocs.org and the development is on Github at github.com/wearpants/twiggy
As of today it seems not to be available for Python 3.x - and also not in a proper state for 2.x, the github readme says: "master is currently in flux and may be broken."
@SHernandez: I tried it today on 3.6 and it works fine. Not sure how robust this is but at least the example ran OK.
6

Checkout logbook, it is much nicer to work with.

Logbook was mentioned in a comment but it deserves its own answer.

1 Comment

Tried it. It has the same problem as stdlib logging: The documentation is not good, in my opinion. And there are a lot less users, so no Google results for questions. I went back to stdlib logging, and found stackoverflow.com/questions/7507825/… most helpful.
5

You might want to have a look at pysimplelog. It's pure python, very simple to use, pip installable and provides what you need

from pysimplelog import Logger
L=Logger()
print L
>>> Logger (Version 0.2.1)
>>> log type  |log name  |level     |std flag  |file flag |
>>> ----------|----------|----------|----------|----------|
>>> debug     |DEBUG     |0.0       |True      |True      |
>>> info      |INFO      |10.0      |True      |True      |
>>> warn      |WARNING   |20.0      |True      |True      |
>>> error     |ERROR     |30.0      |True      |True      |
>>> critical  |CRITICAL  |100.0     |True      |True      |

L.info('I am an info')
>>> 2016-09-26 15:01:17 - logger <INFO> I am an info

L.warn('I am a warning')
>>> 2016-09-26 15:01:17 - logger <WARNING> I am a warning

L.error('I am an error')
>>> 2016-09-26 15:01:17 - logger <ERROR> I am an error

and with those parameters, a 'simplelog.log' file will be created and updated automatically for you

1 Comment

+1 Hey that looks cool! One note however: I would not recommend using logging outside of a function defintion before it is known whether that is safe.
-2
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import logging
import logging.handlers
from logging.config import dictConfig

logger = logging.getLogger(__name__)

DEFAULT_LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
}
def configure_logging(logfile_path):
    """
    Initialize logging defaults for Project.

    :param logfile_path: logfile used to the logfile
    :type logfile_path: string

    This function does:

    - Assign INFO and DEBUG level to logger file handler and console handler

    """
    dictConfig(DEFAULT_LOGGING)

    default_formatter = logging.Formatter(
        "[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s():%(lineno)s] [PID:%(process)d TID:%(thread)d] %(message)s",
        "%d/%m/%Y %H:%M:%S")

    file_handler = logging.handlers.RotatingFileHandler(logfile_path, maxBytes=10485760,backupCount=300, encoding='utf-8')
    file_handler.setLevel(logging.INFO)

    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)

    file_handler.setFormatter(default_formatter)
    console_handler.setFormatter(default_formatter)

    logging.root.setLevel(logging.DEBUG)
    logging.root.addHandler(file_handler)
    logging.root.addHandler(console_handler)



[31/10/2015 22:00:33] [DEBUG] [yourmodulename] [yourfunction_name():9] [PID:61314 TID:140735248744448] this is logger infomation from hello module

you can config logfile with console and file,I don't think desktop notication is a good idea,you can see the log information from console and logfiles

1 Comment

This is not an alternative.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.