La única solución a trabajar veo sería redirigir stderr a un archivo temporal
java blah.jar %1 %2 2>stderr
y luego busca si algo se ha escrito en el archivo y escribiendo en el registro en ese caso.
for %%i in (stderr) do if %%~zi GTR 0 (
echo Parameters: %1 %2 >>log.txt
type stderr >> log.txt
)
Si los lotes no se ejecutan de forma secuencial, sino más bien al mismo tiempo que necesita para encontrar algo que uniquify la variable temp:
set file=%time::=%
set /a file=file
set file=%file%%random%
java blah.jar %1 %2 2>stderr_%file%
for %%i in (stderr) do if %%~zi GTR 0 (
echo Parameters: %1 %2 >>log.txt
type stderr >> log.txt
)
Esto evitará enfrentamientos entre varios lotes de funcionamiento.Sin embargo, actualmente no está utilizando nada para bloquear la escritura en su archivo de registro y las cosas pueden aparecer fuera de lugar cuando se escriben otras cosas (con otros lotes puede intercalarse en los comandos echo
y type
o, cuando está redireccionando salida de java a ese archivo y, a continuación, puede ser confundida con la producción regular del programa java:
Parameters: foo bar
Some regular output
Parameters: foo2 bar2
More output
NullPointerException at Blah: What we really wanted to have right after the parameters
IOException at Blah: This exception belongs to the parameters foo2 bar2
puede utilizar otro archivo como semáforos para escribir en el registro para evitar las salidas de proceso por lotes que se mezclen: cree el archivo [copy nul file
] cuando desee escribir en el registro, elimínelo posteriormente y antes de intentar crearlo, compruebe si realmente está allí y espere hasta que desaparezca. No puede hacer nada para que el registro stdout se mezcle en el sin embargo, excepto que utiliza ese enfoque de archivo temporal para stdout (y simplemente type
el registro de stdout a log.txt
cuando finalizó el programa Java, pero de nuevo con el uso del semáforo.
Pero eso registraría la salida cada vez que se llamara al archivo por lotes, ¿no es así? Me gustaría evitar eso si es posible y simplemente hacer que inicie sesión si la aplicación java arroja una excepción. – nivlam