Estoy tratando de capturar las salidas STDERR
en un file de logging; sin embargo, he estado encontrando algunos problemas inconsistentes serios que están haciendo mi tarea más difícil.
En primer lugar, tengo mi ErrorActionPreference
para 'Parar', que probablemente sea parte de los problemas que soporto.
En segundo lugar, he intentado con dos variantes para CADA command git en mi código que se muestra a continuación:
& git add $path2File 2>&1 | Out-File "$LogPath\$tmpLogName" -Append & git commit -m "Some logical update message" 2>&1 | Out-File "$LogPath\$tmpLogName" -Append & git status 2>&1 | Out-File "$LogPath\$tmpLogName" -Append & git push 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git add $path2File 2>&1 >> "$LogPath\$tmpLogName" -Append & git commit -m "Some Logical update message" 2>&1 >> "$LogPath\$tmpLogName" -Append & git status 2>&1 >> "$LogPath\$tmpLogName" -Append & git push 2>&1 >> "$LogPath\$tmpLogName" -Append
Hubo varias otras variantes en las que mezclé qué command usaba esa variante dependiendo de los problemas comunes que había encontrado.
Los principales problemas que he encontrado son:
1) cada STDERR
que se encuentra una salida STDERR
, se trata como un error de terminación, independientemente del post.
2) Mis bashs de crear declaraciones de Try/Catch
han fallado debido a una serie de razones. Los códigos de salida no siempre fueron los mismos para los posts STDERR
exitosos. No se pudieron usar coincidencias de text sin formatting para nada más que advertencias debido a posts que no siempre usan el mismo post o posts similares.
NOTA: Estoy tratando de hacer esto sin cambiar la ErrorActionPreference
less que sea absolutamente necesario.
¿Alguien sabe cómo manejar el logging de los posts STDERR
para los commands de git para que siempre registre las respuestas sin arrojar un error de terminación a exception de los verdaderos errores críticos?
Puedes intentar usar -q para suprimir la salida de git. Todavía debería error, si hay un error de git real.
Creo que también puedes ejecutarlo solo con Powershell, no con el ISE y debería funcionar correctamente
Parece que puedo responder mi propia pregunta esta vez.
Usando git-scm.com/docs , pude aprender que algunos de los commands de git tenían una opción --porcelain
que me permite convertir las salidas en un formatting legible por máquina y canalizarlas a la salida. Luego, usando una combinación de >>
y *>>
según el command, se me ocurrió lo siguiente:
& git checkout --track $branch >> $logFilePath # some set of actions & git add . *>> $logFilePath & git commit -m "some automated update message" *>> $logFilePath & git status --porcelain >> $logFilePath & git push --porcelain >> $logFilePath
Esto me permitió get la información que quería grabar sin los falsos errores de terminación, y si necesitaba enmascarar algo (dirección IP, PI, etc.), podría hacerlo antes de que se registre o se muestre.
Si no hay necesidad de hacerlo, el uso de Tee-Object
también ha sido extremadamente útil para lograr los resultados deseados al mismo time que desencadena los errores de forma adecuada en lugar de simplemente generar un error de terminación simplemente porque proviene de STDERR