package cn.edu.sjtu.omnilab.syslogdumper; import org.apache.commons.cli.ParseException; import org.apache.log4j.Logger; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * Receive and dump system messages from specific port into on-disk files. * * * @author jianwen */ public class StartLogging { public static void main(String[] args) throws IOException { // Prepare Logger from log4j final Logger LOG = Logger.getLogger(StartLogging.class.getName()); // Create a ConfLogger instance which holds configuration information ConfLogger conf = new ConfLogger(); // Further Parse the Command-line Parameters if (args.length != 0) { try { conf.readCmd(args); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Print Configuration Info LOG.info("Output target: " + conf.getOutTarget() + "; ZooKeepr Quorum:" + conf.getZk() + "; PORT_NUM:" + conf.getPort() + "; BUFF_SIZE:" + conf.getBufsize() + "; Filter-included types: " + conf.getFilter() + "; Name Length: " + conf.getNameLength() + "; Log Head: " + conf.getHead() + "; Table:" + conf.getTbName() + "; Column Family:" + conf.getColName() + "; Output dir name: " + conf.getDirName() + "; Output file size limit: " + conf.getFileLength()); // Initialize the LoggerHBase LoggerAbstract logWriter; if ((conf.getOutTarget() == null) || (conf.getOutTarget().equals("FILE"))) { logWriter = new LoggerFile(conf); LOG.info("Start a new LoggerFile instance."); } else { logWriter = new LoggerFile(conf); LOG.info("Start a new LoggerHBase instance."); } // Prepare UDP Socket DatagramSocket rcvSocket = new DatagramSocket(conf.getPort()); DatagramPacket rcvPacket = new DatagramPacket(new byte[conf.getBufsize()], conf.getBufsize()); LOG.info("Receiving syslog messages..."); // TODO: Get port info from rcvSocket and buf_size from rcvPacket and add them to LOG.info output // Receive and Log message while (true) { rcvSocket.receive(rcvPacket); String msg = new String(rcvPacket.getData(), 0, rcvPacket.getLength()); // Log the message msg = LoggerFile.Filter(msg); if (msg != null) logWriter.log(msg); } } }