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

📄 mapachelogsql.java

📁 httptunnel.jar httptunnel java 源码
💻 JAVA
字号:
package net.jumperz.app.MApacheLogSql;

import java.io.*;
import java.util.*;
import java.sql.*;
import java.text.*;
import net.jumperz.sql.*;
import net.jumperz.util.*;

public class MApacheLogSql
{
private static final String HSQLDB_JDBC_DRIVER_CLASS_NAME	= "net.jumperz.ext.org.hsqldb.jdbcDriver";

private static final String DEFAULT_DBMS_USER			= "sa";
private static final String DEFAULT_DBMS_PASS			= "";
private static final int BUFSIZE				= 1024;
private static final int OFFSET					= 50;
private static final int METHOD_MAX_LENGTH			= 9;
private static final int URI_MAX_LENGTH				= 1024;
private static final int VERSION_MAX_LENGTH			= 10;

private String dbmsPass	= DEFAULT_DBMS_PASS;
private String dbmsUser	= DEFAULT_DBMS_USER;
private String dbmsUrl;
private String logFileName;
private Connection connection;
private ResultSet rs;
private BufferedReader reader;
//--------------------------------------------------------------------------------
public static void main( String[] args )
throws Exception
{
if( args.length == 0 )
	{
	showUsage();
	return;
	}
MApacheLogSql instance = new MApacheLogSql();
instance.start( args );
}
//--------------------------------------------------------------------------------
private static void showUsage()
{
System.out.println( "Usage: java MApacheLogSql -d dbmsUrl -f logFileName [ -u username ] [ -p password ]" );
}
//--------------------------------------------------------------------------------
public void start( String[] args )
throws Exception
{
try	
	{
	for( int i = 0; i < args.length; ++i )
		{
		if( args[ i ].equals( "-u" ) )
			{
			dbmsUser = args[ i + 1 ];
			++i;
			}
		else if( args[ i ].equals( "-p" ) )
			{
			dbmsPass = args[ i + 1 ];
			++i;
			}
		else if( args[ i ].equals( "-d" ) )
			{
			dbmsUrl = args[ i + 1 ];
			++i;
			}
		else if( args[ i ].equals( "-f" ) )
			{
			logFileName = args[ i + 1 ];
			++i;
			}
		}
	}
catch( IndexOutOfBoundsException e )
	{
	MApacheLogSql.showUsage();
	return;
	}

if( dbmsUser == null
 || dbmsPass == null
 || dbmsUrl == null
 || logFileName == null
  )
	{
	MApacheLogSql.showUsage();
	return;
	}

Class.forName( MSqlUtil.getJdbcDriverClassName( dbmsUrl ) );
connection = DriverManager.getConnection( dbmsUrl, dbmsUser, dbmsPass );
try
	{
	execute();
	}
catch( Exception e )
	{
	e.printStackTrace();
	}
connection.close();
}
//--------------------------------------------------------------------------------
private void execute()
throws SQLException, IOException, ParseException
{
	// input
BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( logFileName ) ) );
String clientIp;
long time;
String requestLine;
String method;
String uri;
String version;
int statusCode;
int size;
String referer;
String userAgent;
String line;


/*
66.196.90.143 - [10/Jun/2004:16:08:55 +0900] "GET / HTTP/1.0" 302 647 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"
 */
while( true )
	{
	line = reader.readLine();
	if( line == null )
		{
		break;
		}

		// clinet IP address
	clientIp = MRegEx.getMatch( "^[0-9.]{1,}", line );

		// time
	String dateStr = MRegEx.getMatch( " \\[(.*) \\+0900\\]", line );
	dateStr = dateStr.replaceAll( "/", " " );
	dateStr = dateStr.replaceFirst( ":", " " );
//	time = DateFormat.getInstance().parse( dateStr ).getTime();
	time = ( new java.util.Date( dateStr ) ).getTime();
	
		//requestLine
	String[] result = getNextPart( line );
	requestLine = result[ 0 ];
	line = result[ 1 ];

		//method, uri, version
	String[] array = requestLine.split( " " );
	if( array.length != 3 )
		{
		System.err.println( line );
		continue;
		}
	method		= array[ 0 ];
	uri		= array[ 1 ];
	version		= array[ 2 ];
	
			//check length
	if( method.length() > METHOD_MAX_LENGTH )
		{
		System.err.println( line );
		continue;
		}
	if( uri.length() > URI_MAX_LENGTH )
		{
		System.err.println( line );
		continue;
		}
	if( version.length() > VERSION_MAX_LENGTH )
		{
		System.err.println( line );
		continue;
		}
	
		//statusCode, size
	statusCode	= Integer.parseInt( MRegEx.getMatch( "^([0-9]{3})", line ) );
	try
		{
		size = Integer.parseInt( MRegEx.getMatch( "^[0-9]{3} ([0-9]{1,})", line ) );
		}
	catch( NumberFormatException e )
		{
		size = 0;
		}

		//referer
	result = getNextPart( line );
	referer = result[ 0 ];
	line = result[ 1 ];

		//userAgent
	result = getNextPart( line );
	userAgent = result[ 0 ];

	String queryString = 
	"insert into tAccess values( ??? );";
	MObjectArray args = new MObjectArray();
	args.add( clientIp );
	args.add( new Timestamp( time ) );
	args.add( method );
	args.add( uri );
	args.add( version );
	args.add( statusCode );
	args.add( size );
	args.add( referer );
	args.add( userAgent );
	MSqlUtil.executeUpdate2( connection, queryString, args );
	}
}
//--------------------------------------------------------------------------------
private String[] getNextPart( String line )
{
int index1 = line.indexOf( '"' );
int index2;
for( int i = 1;; ++i )
	{
	index2 = line.indexOf( '"', index1 + i );
	if( line.charAt( index2 - 1 ) != '\\' )
		{
		break;
		}
	}
String[] result = new String[ 2 ];
result[ 0 ] = line.substring( index1 + 1, index2 );
if( line.length() > index2 + 2 )
	{
	result[ 1 ] = line.substring( index2 + 2 );
	}
return result;
}
//--------------------------------------------------------------------------------
}

⌨️ 快捷键说明

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