2011-03-31 6 views
8

He estado buscando por un tiempo para obtener un buen ejemplo para escribir la salida de proceso & error de secuencia de archivo de registro. Utilizo la biblioteca ejecutiva de apache-commons para ejecutar mi proceso. Después de un ejemplo de código para demostrar queEscritura de salida y error para registrar archivos usando PumpStreamHandler

public static int executeCommand(CommandLine command, Logger log) throws ExecuteException, IOException { 
    DefaultExecutor executor = new DefaultExecutor(); 
    executor.setExitValue(0); 

    PumpStreamHandler psh = new PumpStreamHandler(); 
    executor.setStreamHandler(psh); 

    return executor.execute(command); 
} 

Respuesta

14

A continuación se muestra el código para lograr esto.

class ExecLogHandler extends LogOutputStream { 
    private Logger log; 

    public ExecLogHandler(Logger log, Level logLevel) { 
     super(logLevel.toInt()); 
     this.log = log; 
    } 

    @Override 
    protected void processLine(String line, int logLevel) { 
     log.log(Level.toLevel(logLevel), line); 
    } 
} 

Así es como podemos usar la clase anterior.

public static int executeCommand(CommandLine command, Logger log) throws ExecuteException, IOException { 
    DefaultExecutor executor = new DefaultExecutor(); 
    executor.setExitValue(0); 

    PumpStreamHandler psh = new PumpStreamHandler(new ExecLogHandler(log, Level.DEBUG), new ExecLogHandler(log, Level.ERROR)); 
    executor.setStreamHandler(psh); 

    return executor.execute(command); 
} 

usando Apache-commons ejecutivo como esto hace que el código & la vida (de un programador) de manera sencilla. Pude descartar una gran cantidad de código que utilizaba Runtime.exec para ejecutar comandos de línea de comandos.

Cuestiones relacionadas