⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syslogserver.java

📁 與 unix 上相似的syslog daemon, 沒有 log4j 複雜
💻 JAVA
字号:
package com.ice.syslogd;import com.ice.syslog.SyslogDefs;import java.lang.*;import java.io.*;import java.net.*;import java.util.*;public classSyslogServer extends Thread	{	public static final String		RCS_ID = "$Id: SyslogServer.java,v 1.2 1998/07/29 02:13:46 time Exp $";	public static final String		RCS_REV = "$Revision: 1.2 $";	public static final String		RCS_NAME = "$Name:  $";	private static final int	IN_BUF_SZ = (8 * 1024);	private static final int	SYSLOG_PORT = 514;	private boolean				socketOpen;	private int					port;	private DatagramSocket		inSock;	private DatagramPacket		inGram;	private byte[]				inBuffer;		private boolean				debugPacketsReceived;	private boolean				debugMessagesReceived;	private SyslogConfig		configuration;	private ConfigEntryVector	configEntries;	private FeedbackDisplayer	feedback;	public	SyslogServer()		{		this( SyslogDefs.DEFAULT_PORT );		}	public	SyslogServer( int port )		{		super();		this.port = port;		this.socketOpen = false;		this.inBuffer = null;		this.inGram = null;		this.debugPacketsReceived = false;		this.debugMessagesReceived = false;		this.feedback = null;		this.configuration = null;		this.configEntries = null;		}	public SyslogConfig	getConfiguration()		{		return this.configuration;		}	public void	setConfiguration( SyslogConfig configuration )		{		this.configuration = configuration;		this.configEntries = configuration.getConfigEntries();		}	public void	startupServices()		{		try {			this.inSock =				new DatagramSocket( this.port );			this.inBuffer =				new byte[ SyslogServer.IN_BUF_SZ ];			this.socketOpen = true;			}		catch ( SocketException ex )			{			System.err.println				( "FATAL could not create input socket on port '"					+ this.port + "'\n\t" + ex.getMessage() );			this.stop();			}		}	public void	shutdownServices()		{		if ( this.socketOpen )			{			this.inSock.close();			this.socketOpen = false;			}		}	public void	finalize()		{		this.shutdownServices();		this.closeAllActions();		}	public void	openAllActions()		{		for ( int eIdx = 0				; eIdx < this.configEntries.size()					; ++eIdx )			{			ConfigEntry entry =				this.configEntries.entryAt( eIdx );			if ( entry != null )				{				entry.openAction();				}			}		}	public void	closeAllActions()		{		for ( int eIdx = 0				; eIdx < this.configEntries.size()					; ++eIdx )			{			ConfigEntry entry =				this.configEntries.entryAt( eIdx );			if ( entry != null )				{				entry.closeAction();				}			}		}	public void	registerActionDisplay( String name, SyslogDisplayInterface display )		{		for ( int eIdx = 0				; eIdx < this.configEntries.size()					; ++eIdx )			{			ConfigEntry entry =				this.configEntries.entryAt( eIdx );			if ( entry != null )				{				entry.registerActionDisplay( name, display );				}			}		}	public void	setFeedbackDisplayer( FeedbackDisplayer feedback )		{		this.feedback = feedback;		}	public void	displayFeedback( String message )		{		if ( this.feedback != null )			{			this.feedback.displayFeedback( message );			}		}	public void	run()		{		int		packetCount = 0;		this.displayFeedback			( "Establishing communications..." );		this.startupServices();		this.displayFeedback			( "Opening all configuration entries..." );		this.openAllActions();		this.displayFeedback			( "Listening for incoming packets..." );		for ( ; ; )			{			try {				this.inGram =					new DatagramPacket						( this.inBuffer, this.inBuffer.length );							this.inSock.receive( this.inGram );				}			catch ( IOException ex )				{				System.err.println					( "ERROR reading input socket:\n\t"						+ ex.getMessage() );				break;				}			String msgBuf =				new String( this.inGram.getData(), 0,							this.inGram.getLength() );			if ( this.debugPacketsReceived )				System.err.println					( "[" + this.inGram.getLength()						+ "] {" + msgBuf + "}" );			++packetCount;			this.displayFeedback				( "Packets received: " + packetCount + "." );			String hostName =				this.inGram.getAddress().getHostName();			if ( hostName == null )				hostName = "localhost";			this.processMessage( msgBuf, hostName );			}		this.displayFeedback			( "Closing all configuration entries..." );		this.closeAllActions();		this.displayFeedback			( "Shutting down communications..." );		this.shutdownServices();		}	public void	processMessage( String message, String hostName )		{		int lbIdx = message.indexOf( '<' );		int rbIdx = message.indexOf( '>' );		if ( lbIdx < 0 || rbIdx < 0 				|| lbIdx >= (rbIdx - 1) )			{			System.err.println				( "BAD MSG {" + message + "}" );			return;			}				int priCode = 0;		String priStr =			message.substring( lbIdx + 1, rbIdx );		try { priCode = Integer.parseInt( priStr ); }		catch ( NumberFormatException ex )			{			System.err.println				( "ERROR Bad priority code '" + priStr + "'" );			return;			}		int facility = SyslogDefs.extractFacility( priCode );		int priority = SyslogDefs.extractPriority( priCode );		message =			message.substring				( rbIdx + 1, (message.length() - 1) );		//		// Check to see if msg looks non-standard.		// In this case, it means that there is not a standard		// date in the front of the message text.		//		boolean stdMsg = true;		if ( message.length() < 16 )			{			stdMsg = false;			}		else if (	   message.charAt(3)	!= ' '					|| message.charAt(6)	!= ' '					|| message.charAt(9)	!= ':'					|| message.charAt(12)	!= ':'					|| message.charAt(15)	!= ' ' )			{			stdMsg = false;			}		String timestamp;		if ( ! stdMsg )			{			try {				timestamp =					TimestampFormat.getInstance().format						( new Date() );				}			catch ( IllegalArgumentException ex )				{				System.err.println( "ERROR INTERNAL DATE ERROR!" );				timestamp = "";				}			}		else			{			timestamp = message.substring( 0, 15 );			message = message.substring( 16 );			}		lbIdx = message.indexOf( '[' );		rbIdx = message.indexOf( ']' );		int colonIdx = message.indexOf( ':' );		int spaceIdx = message.indexOf( ' ' );				int		processId = 0;		String	processName = "";		String	processIdStr = "";		if ( lbIdx < (rbIdx - 1)				&& colonIdx == (rbIdx + 1)				&& spaceIdx == (colonIdx + 1) )			{			processName = message.substring( 0, lbIdx );			processIdStr = message.substring( lbIdx + 1, rbIdx );			message = message.substring( colonIdx + 2 );			try { processId = Integer.parseInt( processIdStr ); }			catch ( NumberFormatException ex )				{				System.err.println					( "ERROR Bad process id '" + processIdStr + "'" );				processId = 0;				}			}		else if ( lbIdx < 0 && rbIdx < 0					&& colonIdx > 0 && spaceIdx == (colonIdx + 1) )			{			processName = message.substring( 0, colonIdx );			message = message.substring( colonIdx + 2 );			}		if ( this.debugMessagesReceived )			System.err.println				( "[" + facility + ":" + SyslogDefs.getFacilityName(facility)					+ "] ["					+ priority + ":" + SyslogDefs.getPriorityName(priority)					+ "] '"					+ processName + "' '" + processId + "' "					+ timestamp + " " + message );		SyslogMessage logMessage =			new SyslogMessage(				facility, priority, timestamp, hostName,					processName, processId, message );		for ( int eIdx = 0 ; eIdx < this.configEntries.size() ; ++eIdx )			{			ConfigEntry entry =				this.configEntries.entryAt( eIdx );			entry.processMessage( logMessage );			}		}		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -