Así que he configurado mi aplicación de Python para iniciar sesión en syslog con Python's SysLogHandler, y todo funciona bien. Excepto por el manejo de múltiples líneas. No es que necesite emitir registros de registro de líneas múltiples tan mal (hago un poco), pero necesito poder leer las excepciones de Python. Estoy usando Ubuntu con rsyslog 4.2.0. Esto es lo que estoy haciendo: CódigoRegistros de registro de varias líneas en syslog
Mar 28 20:11:59 telemachos root: ERROR 'EXCEPTION'#012Traceback (most recent call last):#012 File "./test.py", line 22, in <module>#012 foo()#012 File "./test.py", line 13, in foo#012 bar()#012 File "./test.py", line 16, in bar#012 bla()#012 File "./test.py", line 19, in bla#012 raise Exception("EXCEPTION!")#012Exception: EXCEPTION!
de prueba en caso de que lo necesite:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger()
logger.setLevel(logging.INFO)
syslog = SysLogHandler(address='/dev/log', facility='local0')
formatter = logging.Formatter('%(name)s: %(levelname)s %(message)r')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
def foo():
bar()
def bar():
bla()
def bla():
raise Exception("EXCEPTION!")
try:
foo()
except:
logger.exception("EXCEPTION")
Esto probablemente va a trabajar para su caso, pero si usted está escribiendo una aplicación simultánea de grandes volúmenes, @ respuesta de Nick hará que sea mucho más fácil encontrar todas las líneas que van con su StackTrace. Su solución perderá el nombre de la aplicación y el nombre de nivel para todas las líneas después de la primera, dificultando la búsqueda. – mattbornski
@mattbornski No perderá ninguna información, simplemente no estará en la misma línea. –
Por "perdido" quise decir, en este caso, "no se puede reconstruir". En una aplicación de gran volumen, dividir el significado de su registro en varias líneas a menudo hace que sea imposible volver a montar ya que las líneas de múltiples solicitudes se entrelazan. – mattbornski