Simple logging en python.

Tras muchas idas y venidas con la gestión de logs en python, he llegado a este tutorial de python que resume bastante bien la gestión más básica que se puede hacer en una aplicación con los logs:
En mi caso, los requisitos son:
– El log se guarda en fichero.
– El fichero debe rotar.
– Desde cualquier clase del workspace se puede acceder al log

import logging
import logging.handlers as handlers
 
# Se le puede poner cualquier nombre

logger = logging.getLogger(‘mi_app_name’)
logger.setLevel(logging.INFO)


#Log handler to file:
logHandler = handlers.RotatingFileHandler(‘mi_archivo_salida.log’, maxBytes=1000, backupCount=2)
logHandler.setLevel(logging.INFO)
# output format
formatter = logging.Formatter(‘%(asctime)s – %(name)s – %(levelname)s – %(message)s’)
logHandler.setFormatter(formatter)


logger.addHandler(logHandler)


# Comprobar que todos los logs van al mismo fichero:
logger.info(“Primer mensaje al log de tipo INFO”)
logger.error(“Primer mensaje al log de tipo ERROR”)
En cada clase que se vaya a usar el log, se instancia en el init, y luego se usa como un atributo de la clase:

class ejemplo:
“”” Clase de ejemplo para ver el log “””


def __init__(self):
“””Inicializa el objeto “””
self.logger = logging.getLogger(‘mi_app_name’) # Configurar el log.
 
     def metodo1. (self):
“”” Metodo 1 “””

self.logger.info(‘Mensaje de ejemplo 1’)

 
 
Para saber mucho más sobre los logs en python: https://docs.python.org/3/howto/logging-cookbook.html

Nagios: leer el log con la fecha en formato legible

Para poder leer de forma directa el log de nagios, con la fecha en formato humano, os recomiendo echarle un ojo a este hilo.

A mí me ha funcionado fenomenal este pequeño script de perl:

cat  nagios.log  | grep "servicio" | perl -pe 's/(\d+)/localtime($1)/e'

Pasando las fechas de un numérico  a formato de fecha:

[1380837600]  ----> [Fri Oct  4 10:24:35 2013]

Photosort – Una idea para organizar nuestras fotos

Tenemos un problema tremendo con las fotos. Dos cámaras, dos teléfonos móviles, y un montonazo de fotos sin orden ni concierto. Nuestras necesidades son simples:

Queremos una librería compartida de fotos sin duplicados, ordenadas por fechas

Para ello, el gran Ajo, se ha puesto en marcha y ha creado en python Photosort  disponible en github.Photosort crea una base de datos sencilla, para saber si una foto ha subido ya a nuestro repositorio compartido, incluso si ha subido ya con otro nombre.

También está ya disponible en el repositorio yPi (Python Package Install repository), para que sea mucho más fácil instalarlo en nuestras máquinas.

Se basa en la información exif de la propia foto, y no en la fecha de modificación o creación de las fotos, que puede ser errónea.

Instalación sobre debian 7

apt-get install python-pip
pip install photosort
mkdir ~/.photosort
cd ~/.photosort
wget https://raw.github.com/mangelajo/photosort/master/etc/photosort.yml

Editamos el fichero de configuración yml, con nuestro fuente y nuestro destino. Cuidado con mantener la indentación propia del fichero de yml.

sources:
camera:
dir: '/media/EOS_CAM'
(...)
output:
dir: '/mnt/shared_data/Fotos'
(...)

Con esto, ya podemos ejecutar el comando:

photosort --config .photosort/photosort.yml --debug sync

Para ver qué está haciendo el proceso en cada momento:
tail -f /mnt/shared_data/Fotos/photosort.log