/******************************************************************************* * Copyright (c) quickfixengine.org All rights reserved. * * This file is part of the QuickFIX FIX Engine * * This file may be distributed under the terms of the quickfixengine.org * license as defined by quickfixengine.org and appearing in the file * LICENSE included in the packaging of this file. * * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. * * See http://www.quickfixengine.org/LICENSE for licensing information. * * Contact ask@quickfixengine.org if any conditions of this licensing * are not clear to you. ******************************************************************************/ package quickfix; /** * Creates a logger that logs messages to to System.out. TThe logged message * categories (incoming, outgoing, events) can be controlled using * SessionSettings. * * @see quickfix.SessionSettings */ public class ScreenLogFactory implements LogFactory { private SessionSettings settings; private boolean incoming; private boolean outgoing; private boolean events; private boolean heartBeats; private boolean includeMillis; /** * Enables incoming message logging. * * Valid values: "Y" or "N"<br/> * Default Value: "N" */ public static final String SETTING_LOG_INCOMING = "ScreenLogShowIncoming"; /** * Enables outgoing message logging. * * Valid values: "Y" or "N"<br/> * Default Value: "N" */ public static final String SETTING_LOG_OUTGOING = "ScreenLogShowOutgoing"; /** * Enables session event logging. * * Valid values: "Y" or "N"<br/> * Default Value: "N" */ public static final String SETTING_LOG_EVENTS = "ScreenLogShowEvents"; /** * Flag for controlling output of heartbeat messages. * * Valid values: "Y" or "N"<br/> * Default Value: "Y" */ public static final String SETTING_LOG_HEARTBEATS = "ScreenLogShowHeartBeats"; /** * Specify whether to include milliseconds in log output time stamps. Off, by * default. */ public static final String SETTING_INCLUDE_MILLIS_IN_TIMESTAMP = "ScreenIncludeMilliseconds"; /** * Create factory using configuration in session settings. * * @param settings * the session settings */ public ScreenLogFactory(SessionSettings settings) { this(true, true, true); this.settings = settings; } /** * * Create factory with explicit control of message categories. * * @param incoming * if true, log incoming messages * @param outgoing * if true, log outgoing messages * @param events * if true, log events */ public ScreenLogFactory(boolean incoming, boolean outgoing, boolean events) { this(incoming, outgoing, events, true); } /** * Default constructor that logs incoming, outgoing, and events without heartbeats. * */ public ScreenLogFactory() { this(true, true, true, false); } /** * * Create factory with explicit control of message categories. * * @param incoming * if true, log incoming messages * @param outgoing * if true, log outgoing messages * @param events * if true, log events * @param logHeartBeats * if true, log heart beat messages (the default) */ public ScreenLogFactory(boolean incoming, boolean outgoing, boolean events, boolean logHeartBeats) { this.incoming = incoming; this.outgoing = outgoing; this.events = events; this.heartBeats = logHeartBeats; } @Override public Log create(SessionID sessionID) { try { incoming = getBooleanSetting(sessionID, ScreenLogFactory.SETTING_LOG_INCOMING, incoming); outgoing = getBooleanSetting(sessionID, ScreenLogFactory.SETTING_LOG_OUTGOING, outgoing); events = getBooleanSetting(sessionID, ScreenLogFactory.SETTING_LOG_EVENTS, events); heartBeats = getBooleanSetting(sessionID, ScreenLogFactory.SETTING_LOG_HEARTBEATS, heartBeats); includeMillis = getBooleanSetting(sessionID, ScreenLogFactory.SETTING_INCLUDE_MILLIS_IN_TIMESTAMP, false); return new ScreenLog(incoming, outgoing, events, heartBeats, includeMillis, sessionID, System.out); } catch (FieldConvertError e) { throw new RuntimeError(e); } catch (ConfigError e) { throw new RuntimeError(e); } } private boolean getBooleanSetting(SessionID sessionID, String key, boolean incoming) throws ConfigError, FieldConvertError { if (settings != null && settings.isSetting(key)) { incoming = settings.getBool(key); } return incoming; } }