Puede utilizar blowhole
.
blowhole
es una herramienta de línea de comandos que toma una cadena como argumento y la envía al sistema de registro unificado . Es compatible desde Sierra (10.12) hasta Catalina (10.15).
Cómo utilizarlo
(Probado en MacOS Catalina 10.15.5)
Modificar el ProgramArguments
matriz en su .plist
archivo como este:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>COMMAND OPTIONS 2> >(while read; do /path/to/blowhole -e "$REPLY"; done) | while read; do /path/to/blowhole -d "$REPLY"; done</string>
donde COMMAND OPTIONS
es el comando que desea ejecutar, seguido de las opciones que desee.
Aquí, hago uso de bash
El apoyo de la Comisión a redirección ( 2>
), sustitución de procesos ( >()
) y tuberías ( |
) a:
- ordenar el error estándar y la salida estándar del comando
-
procesarlos por separado dentro de dos while
bucles. El primer while
El bucle se ejecuta blowhole -e
para registrar el error estándar con un nivel de "Error":
<timestamp> Error <info> blowhole: [co.eclecticlight.blowhole:general] Blowhole: STANDARD ERROR MESSAGES
y el segundo corre blowhole -d
para registrar la salida estándar con un nivel "predeterminado":
<timestamp> Default <info> blowhole: [co.eclecticlight.blowhole:general] Blowhole: STANDARD OUTPUT MESSAGES
(Ya que blowhole
no puede leer de la entrada estándar, necesitamos while
bucles para alimentar una línea de entrada a la vez).
El blowhole: [co.eclecticlight.blowhole:general] Blowhole:
no es configurable, pero puede añadir un prefijo de su elección a los mensajes registrados. Por ejemplo, ya que menciona offlineimap
en su pregunta:
/path/to/blowhole -d "offlineimap stdout: $REPLY";
y:
/path/to/blowhole -e "offlineimap stderr: $REPLY";
Puede leer las entradas del registro con sudo log show | grep blowhole:general
o sudo log show | grep offlineimap
, si ha añadido el prefijo personalizado. Para leer las entradas de registro a medida que se generan, de forma similar a tail -f
Utilizar show stream
en su lugar.
Alternativamente puede envolver el comando que desea ejecutar en un shell script para que blowhole
registra la salida estándar y el error del comando de forma similar a la anterior. Esto es conveniente si desea ejecutar algún código antes de ejecutar el comando real:
#!/bin/bash
# Add the code you want to execute prior to the actual command here
COMMAND ARGUMENTS \
> >(
while read; do
/path/to/blowhole -d "$REPLY";
done) \
2> >(
while read; do
/path/to/blowhole -e "$REPLY";
done)
A continuación, puede configurar el ProgramArguments
de su .plist
para ejecutar el script en lugar de su comando:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/path/to/script.sh</string>
</array>
Dónde conseguirlo
Puede descargar blowhole
de su página de proyectos o directamente desde aquí . El programa se suministra como un ejecutable firmado, reforzado y notariado (como exige Catalina) y como un paquete instalador.