Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Print timestamp for logging in Python

Tags:

python

I want to print the current timestamp, when an event succeeded or not in my python script. By only adding...

datetime.datetime.now().strftime("%d.%b %Y %H:%M:%S") 

.... at the beginning of each line, te same date appears in every line

[INFO] 04.Feb 2015 20:49:41: cl1 [ OK ] 04.Feb 2015 20:49:41: 8.8.8.8 ONLINE! [INFO] 04.Feb 2015 20:49:41: cl2 [ OK ] 04.Feb 2015 20:49:41: 8.8.8.8 ONLINE! [INFO] 04.Feb 2015 20:49:41: cl3 [ OK ] 04.Feb 2015 20:49:41: 8.8.8.8 ONLINE! 

(I added time.sleep(5)in between)

My next idea was to create a function, calling the current time, but i'm failing at embedding this function to the printcommand.

File rs.py

OK =   "[" + bc.OKGREEN + " OK "  + bc.ENDC + "] " + datetime.datetime.now().strftime("%d.%b %Y %H:%M:%S") INFO = "[" + bc.OKBLUE  + "INFO"  + bc.ENDC + "] " + datetime.datetime.now().strftime("%d.%b %Y %H:%M:%S") WARN = "[" + bc.WARN    + "WARN"  + bc.ENDC + "] " + datetime.datetime.now().strftime("%d.%b %Y %H:%M:%S") ERR =  "[" + bc.ERR     + "FAIL"  + bc.ENDC + "] " + datetime.datetime.now().strftime("%d.%b %Y %H:%M:%S") DEB =  "[" + bc.HEADER  + "DEBUG" + bc.ENDC + "] " + datetime.datetime.now().strftime("%d.%b %Y %H:%M:%S") 

File myapp.py

import rs # importing rs.py  print rs.OK + hostname + "is up!" time.sleep(3) print rs.ERR+ hostname + "is down!" 

Is printing:

>>> [INFO] 04.Feb 2015 20:49:41: xxx is up! >>> [ERR ] 04.Feb 2015 20:49:41: xxx is down! 
like image 617
romanzipp Avatar asked Feb 04 '15 19:02

romanzipp


People also ask

How do I log a timestamp in Python?

We can log the timestamp to the console with the logging module easily by adjusting the basic configuration. import logging logging. basicConfig( format='%(asctime)s %(levelname)-8s %(message)s', level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S') logging.info('Message for the user.


2 Answers

Before the first time you log anything do this:

logging.basicConfig(     format='%(asctime)s %(levelname)-8s %(message)s',     level=logging.INFO,     datefmt='%Y-%m-%d %H:%M:%S') 

Example on the REPL:

>>> import logging >>> logging.basicConfig( ...         format='%(asctime)s %(levelname)-8s %(message)s', ...         level=logging.INFO, ...         datefmt='%Y-%m-%d %H:%M:%S') >>>  >>> logging.info('an info messge') 2017-05-25 00:58:28 INFO     an info messge >>> logging.debug('a debug messag is not shown') >>>  
like image 88
gae123 Avatar answered Sep 19 '22 08:09

gae123


Something like below would do:

formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(message)s',                               datefmt='%Y-%m-%d %H:%M:%S') 

Have a look at the logging module for Python. You don't need to mess about with creating your own date, just let the logging module do it for you. That formatter object can be applied to a logging handler so you can just log with logger.info('This is an info message.'). No print statements required.

Here's a boilerplate procedure I use:

import logging import sys  def setup_custom_logger(name):     formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(message)s',                                   datefmt='%Y-%m-%d %H:%M:%S')     handler = logging.FileHandler('log.txt', mode='w')     handler.setFormatter(formatter)     screen_handler = logging.StreamHandler(stream=sys.stdout)     screen_handler.setFormatter(formatter)     logger = logging.getLogger(name)     logger.setLevel(logging.DEBUG)     logger.addHandler(handler)     logger.addHandler(screen_handler)     return logger  >>> logger = setup_custom_logger('myapp') >>> logger.info('This is a message!') 2015-02-04 15:07:12 INFO     This is a message! >>> logger.error('Here is another') 2015-02-04 15:07:30 ERROR    Here is another 
like image 33
paidhima Avatar answered Sep 22 '22 08:09

paidhima