Logging in Python? - python

I have used log4J and log4N on previous not-pythonic projects. I like heirachy of warnings,errors and escalations. The ability to log the error and if it is serious email the support team. Also automatic log file cycling is important as the it will be running on a small LINUX device.
Can I do this with the standard Python logging module or is there a better approach?

Yes, the logging module has log levels DEBUG, INFO, WARNING, ERROR and CRITICAL. You can setup a SMTPHandler to send mail when the logging level is, say, CRITICAL, and you can setup a RotatingFileHandler to limit the number and size of the log files.

The standard Python logging module is explicitly inspired by log4J, so you will almost certainly find it suitable. It has the same hierarchy, and you can define handlers that listen to one or more levels and do something appropriate, whether it's log to a file or to an email address via SMTP. See the Python logging tutorial.

Related

Log Sentry events to stdout

Using the Python Sentry SDK, is it possible to log Sentry events (capture_message, capture_exception, etc.) to stdout, preferably through the logging module? I'm aware of the SDK's logging integration, but as far as I understand, that sends logger messages to Sentry rather than the other way around. The use case for this is testing and debugging.

How to make a log system for tornado

I've read the documentation: http://www.tornadoweb.org/en/stable/log.html
But I still don't know how to make a suitable log for my server, which is built with tornado.
For now, I need such a log system:
It can log everything with time format, and for each day it create a new log file.
It seems that TimedRotatingFileHandler is what I need but I don't know how to use it with tornado.
The Tornado logging streams are just standard loggers from the "logging" python module.
There is nice tutorial on the python website https://docs.python.org/3/howto/logging.html#advanced-logging-tutorial
As per how to set the handler (same tutorial)
https://docs.python.org/3/howto/logging.html#handlers

How to use Python script for logger to write file data to syslog?

I'm trying to find a Python script that uses logger to write file data to syslog. There's an application that outputs reports as log files, but I need these log files to be sent to syslog. I have this code, but I cannot determine how to target the log files and send it to syslog in Python.
This code has me on the right track, but I do not know where to specify the file I need to transfer to syslog. Can someone help steer me in the right direction? Or, perhaps provide the documentation I need?
Syslog handler is a service, not a file
You seem to be confused by trying to specify logfile for syslog.
Quoting Wikipedia:
Syslog is a standard for computer message logging. It permits separation of the software that generates messages from the system that stores them and the software that reports and analyzes them.
As syslog is a service, it decides about what to do with log records on it's own. That is why, you can only say address (like localhost on default port) of the syslog service but have no chance to control more from your (separated) application.
On SysLog side, there is configuration, controlling where should what log entry end up, but this is out of control of your log handler.
If you omit address, it would by default talk to localhost and default syslog port. In such a case it is very likely, you find your log records in /var/log/syslog file.
Forwarding log records from another log to syslog
If you have another log in some file and want to send it to syslog, you must:
parse the log file and find log records
send log records to syslog
However, this might create issues with timestamps of LogRecords as usually the created time is derived automatically at the moment log record is created. But it could be possibly resolved.
Conclusions
Do not expect your logger in Python to decide the file where syslog writhes log records. This must be configured at syslog level, not in your app.
If you have to forward logs from another source, most optimal is to manage that it goes directly there. If you cannot do that, you have to parse the log file and resend log records to syslog handler. Here you will have to resolve details about timestamps in log records.

generating errors and access logs in python

We are realizing that we need error logs and access logs for our service processes. These are long running process like services; they respond to calls made to them.
Hence, we need your help to simply achieve the following:
# for developers
from MyLogger import log
log.error 'something bad something wrong'
log.access 'something something'
I am thinking of designing this MyLogger which will simply redirect an error to stderr and access to stdout, so that I can collect errors to a specific file through configuration for both stderr and stdout.
One more point: these services are nothing but web.py instances.
I guess I'm not looking for a controlling log at various levels, like warn, debug, error, info, etc. My aim is more to have an error log and access log similar to the apache web server. So my developers should not be concerned about using warn, debug, etc. as follows:
log.warn msg
log.debug msg
This is not required.
I just want to have an error log and an access log similar to that of a web server or service.
That "battery" is already included for you in the Python standard logging module.
Python ships with the logging module.

Capture google app engine logging output

How can one view the Google App Engine logs outside the Admin console?
I'm developing, so using dev_appserver.py/the Admin Console and would like to see the logs as the records are emitted.
I'd like to monitor the logging output in a console with standard Unix tools e.g. less/grep/etc, but there doesn't seem to be an option to direct the logging from the dev_appserver.py command, and I can't open a new file in GAE (e.g. a FileHandler), so file handlers won't work, and I think using a socket/udp handler would be a bit of overkill (if it's even possible).
I'm hopeful there are other options to view the log.
Thanks for reading.
The default logger sends logging output to stderr. Use your shell's method of redirecting stderr to a file (in tcsh, (dev_appserver.py > /dev/tty) >& your_logfile.txt, your shell may vary.)
You can also use the logging module in python to change the logger to send directly to a file if you detect it's running locally (os.environ['SERVER_SOFTWARE'].startswith('Dev'))
You can download the logs using the request_logs parameter of appcfg.py
http://code.google.com/appengine/docs/python/tools/uploadinganapp.html#Downloading_Logs
Edit:
This person came up with a way to send logs over XMPP. His solution is for GAE Java, but this could be adapted to python.
http://www.professionalintellectualdevelopment.com/
http://code.google.com/p/gae-xmpp-logger/

Categories

Resources