/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.autagent.commands; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jubula.communication.internal.ICommand; import org.eclipse.jubula.communication.internal.message.Message; import org.eclipse.jubula.communication.internal.message.SendServerLogMessage; import org.eclipse.jubula.communication.internal.message.ServerLogResponseMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; import ch.qos.logback.core.FileAppender; /** * @author BREDEX GmbH * @created Feb 8, 2007 */ public class SendServerLogCommand implements ICommand { /** the logger */ private static org.slf4j.Logger log = LoggerFactory.getLogger( SendServerLogCommand.class); /** the message */ private SendServerLogMessage m_message; /** {@inheritDoc} */ @SuppressWarnings("rawtypes") public Message execute() { log.info("sending server log"); //$NON-NLS-1$ ServerLogResponseMessage response = new ServerLogResponseMessage(); // Get location of log file Iterator<Appender<ILoggingEvent>> appenders = new ArrayList<Appender<ILoggingEvent>>().iterator(); FileAppender fileAppender = null; Logger logger = LoggerFactory.getLogger( org.slf4j.Logger.ROOT_LOGGER_NAME); if (logger instanceof ch.qos.logback.classic.Logger) { appenders = ((ch.qos.logback.classic.Logger)logger) .iteratorForAppenders(); } while (appenders.hasNext() && fileAppender == null) { Object enumElement = appenders.next(); if (enumElement instanceof FileAppender) { fileAppender = (FileAppender)enumElement; } } if (fileAppender != null) { final File clientLogFile = new File(fileAppender.getFile()); BufferedReader reader = null; // Send log try { reader = new BufferedReader(new FileReader( clientLogFile)); StringBuffer sb = new StringBuffer(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); //$NON-NLS-1$ } response.setServerLog(sb.toString()); } catch (FileNotFoundException e) { // Set error status response.setStatus(ServerLogResponseMessage.FILE_NOT_FOUND); } catch (IOException ioe) { // Set error status response.setStatus(ServerLogResponseMessage.IO_EXCEPTION); } catch (SecurityException e) { // Set error status response.setStatus(ServerLogResponseMessage.CONFIG_ERROR); } catch (IllegalArgumentException e) { // Set error status response.setStatus(ServerLogResponseMessage.CONFIG_ERROR); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { log.error(e.getLocalizedMessage()); } } } } else { // No file logger found, set error status response.setStatus(ServerLogResponseMessage.FILE_NOT_ENABLED); } return response; } /** {@inheritDoc} */ public Message getMessage() { return m_message; } /** {@inheritDoc} */ public void setMessage(Message message) { m_message = (SendServerLogMessage) message; } /** {@inheritDoc} */ public void timeout() { log.error(this.getClass().getName() + ".timeout() called"); //$NON-NLS-1$ } }