Detectar si el programa debe iniciar sesión en systemd journal o stdout

Detectar si el programa debe iniciar sesión en systemd journal o stdout

Estoy actualizando un conjunto de programas para RHEL7, algunos, alguno. Si se inician como servicios systemd, me gustaría que escriban en el diario systemd. Si se ejecutan directamente en la terminal, digamos para realizar pruebas, quiero que escriban en la salida estándar. ¿Cómo puedo hacer esto de la manera más elegante?

Quiero aprovechar las características avanzadas de la revista (gravedad de registro, nombre de archivo, número de línea, nombre de hilo, etc.), por lo que simplemente escribir en la salida estándar no es suficiente.

La búsqueda que hice arrojó consejos para verificar el PID principal del proceso o verificar su cgroup. ¿Existe una mejor manera? Esas parecen soluciones torpes. Lo ideal sería que hubiera una función a la que pudiera llamar o una variable de entorno para verificar.

Información adicional:

(Mi plan alternativo es utilizar un modificador de línea de comandos, pero sería bueno realizar una detección automática).

Respuesta1

En la versión 231 de systemd, la JOURNAL_STREAMvariable de entorno se introdujo para este mismo propósito. Su programa verifica su valor, lo compara con el dispositivo y el número de i-nodo de su error estándar y cambia su comportamiento en consecuencia.

Cuandonoconectado al diario, siempre puede (por supuesto) emplear algo como JSON escrito (como una sola línea por objeto) en error estándar, para tener registros de registro estructurados allí también. RFC 5424 también tiene opciones de datos estructurados (más limitadas).

Respuesta2

systemdya maneja este caso elegantemente para usted, como se documenta ensystemd.exec.

Inicie sesión en STDOUT. Cuando se ejecuta a través de systemd, systemd redirigirá de forma predeterminada STDOUT al diario.

Otra opción es journal+consolesi siempre deseas iniciar sesión en ambos.

Iniciar sesión en STDOUT también es una buena práctica en elDiseño de aplicación de 12 factores.

información relacionada