|
From: <mis...@us...> - 2007-03-09 17:45:39
|
Revision: 33
http://svn.sourceforge.net/mp-webinterface/?rev=33&view=rev
Author: misterd_sf
Date: 2007-03-09 09:45:37 -0800 (Fri, 09 Mar 2007)
Log Message:
-----------
Updated logging (Added AccessLog and reconfigured logging of the webserver)
fixed a small bug when shutting down the server
Modified Paths:
--------------
trunk/Version2/WebServer/ByteParser.cs
trunk/Version2/WebServer/Connection.cs
trunk/Version2/WebServer/Host.cs
trunk/Version2/WebServer/Request.cs
trunk/Version2/WebServer/Server.cs
trunk/Version2/WindowsService/LoggingConfiguration.xml
Modified: trunk/Version2/WebServer/ByteParser.cs
===================================================================
--- trunk/Version2/WebServer/ByteParser.cs 2007-03-09 14:19:08 UTC (rev 32)
+++ trunk/Version2/WebServer/ByteParser.cs 2007-03-09 17:45:37 UTC (rev 33)
@@ -16,12 +16,14 @@
#region variables
private byte[] _bytes;
private int _pos;
+ private Server _server;
#endregion
#region ctor
- internal ByteParser(byte[] bytes) {
+ internal ByteParser(byte[] bytes, Server server) {
_bytes = bytes;
_pos = 0;
+ _server = server;
}
#endregion
@@ -58,7 +60,7 @@
_pos = _bytes.Length;
} catch (Exception e){
- Server.WriteErrorToLog("Error in ByteParser.\n", e);
+ _server.WriteErrorToLog("Error in ByteParser.\n", e);
}
return line;
}
Modified: trunk/Version2/WebServer/Connection.cs
===================================================================
--- trunk/Version2/WebServer/Connection.cs 2007-03-09 14:19:08 UTC (rev 32)
+++ trunk/Version2/WebServer/Connection.cs 2007-03-09 17:45:37 UTC (rev 33)
@@ -93,7 +93,7 @@
#endregion
#region private static methods
- private static bool CheckLocalServerIP(string remoteIP) {
+ private bool CheckLocalServerIP(string remoteIP) {
try {
IPHostEntry hostEntry = Dns.GetHostEntry(Environment.MachineName);
IPAddress localAddress;
@@ -104,7 +104,7 @@
}
}
} catch (Exception e) {
- Server.WriteErrorToLog("Error while checking Server IP.\n", e);
+ _server.WriteErrorToLog("Error while checking Server IP.\n", e);
}
return false;
}
@@ -155,7 +155,7 @@
_socket.Close();
}
}catch(Exception e){
- Server.WriteErrorToLog("Could not close socket.\n", e);
+ _server.WriteErrorToLog("Could not close socket.\n", e);
} finally {
_socket = null;
}
@@ -190,7 +190,7 @@
return buffer;
} catch (Exception e) {
- Server.WriteErrorToLog("Could not read request bytes.\n", e);
+ _server.WriteErrorToLog("Could not read request bytes.\n", e);
return null;
}
}
@@ -203,7 +203,7 @@
try {
_socket.Send(data, offset, length, SocketFlags.None);
} catch (Exception e) {
- Server.WriteErrorToLog("Could not write body.\n", e);
+ _server.WriteErrorToLog("Could not write body.\n", e);
}
}
@@ -215,7 +215,7 @@
_socket.Send(Encoding.UTF8.GetBytes(headers + body));
}
} catch (Exception e) {
- Server.WriteErrorToLog("Could not write entire response from string.\n", e);
+ _server.WriteErrorToLog("Could not write entire response from string.\n", e);
} finally {
if (!keepAlive) {
Close();
@@ -254,7 +254,7 @@
completed = true;
}
} catch (Exception e) {
- Server.WriteErrorToLog("Could not write entire response from file.\n", e);
+ _server.WriteErrorToLog("Could not write entire response from file.\n", e);
} finally {
if (!keepAlive || !completed)
Close();
@@ -290,7 +290,7 @@
availBytes = _socket.Available;
} catch (Exception e) {
- Server.WriteErrorToLog("Error while waiting for request bytes.\n", e);
+ _server.WriteErrorToLog("Error while waiting for request bytes.\n", e);
}
return availBytes;
@@ -304,7 +304,7 @@
_socket.Send(Encoding.UTF8.GetBytes(headers));
}
} catch (Exception e) {
- Server.WriteErrorToLog("Could not write headers.\n", e);
+ _server.WriteErrorToLog("Could not write headers.\n", e);
}
}
#endregion
Modified: trunk/Version2/WebServer/Host.cs
===================================================================
--- trunk/Version2/WebServer/Host.cs 2007-03-09 14:19:08 UTC (rev 32)
+++ trunk/Version2/WebServer/Host.cs 2007-03-09 17:45:37 UTC (rev 33)
@@ -70,7 +70,7 @@
Request request = new Request(_server, this, conn, _configuration);
request.Process();
} catch (Exception e) {
- Server.WriteErrorToLog("Could not process Request.\n", e);
+ _server.WriteErrorToLog("Could not process Request.\n", e);
} finally {
RemovePendingCall();
}
Modified: trunk/Version2/WebServer/Request.cs
===================================================================
--- trunk/Version2/WebServer/Request.cs 2007-03-09 14:19:08 UTC (rev 32)
+++ trunk/Version2/WebServer/Request.cs 2007-03-09 17:45:37 UTC (rev 33)
@@ -86,6 +86,7 @@
private int _responseStatus;
private StringBuilder _responseHeadersBuilder;
private ArrayList _responseBodyBytes;
+ private String remoteIP;
#endregion
#region static variables
@@ -115,28 +116,33 @@
// 100 response to POST
if (_verb == "POST" && _contentLength > 0 && _preloadedContentLength < _contentLength) {
_connection.Write100Continue();
+ _server.writeErrorAccessLog("Send Error 100 response for request from: " + remoteIP + " for " + this._path);
}
// special case for client script
if (_isClientScriptPath) {
_connection.WriteEntireResponseFromFile(_host.PhysicalClientScriptPath + _path.Substring(_host.NormalizedClientScriptPath.Length), false);
+ _server.writeInfoAccessLog("Send response from file for request from: " + remoteIP + " for " + this._path);
return;
}
// deny access to code, bin, etc.
if (IsRequestForRestrictedDirectory()) {
_connection.WriteErrorAndClose(403);
+ _server.writeErrorAccessLog("Send error 403 (Restricted directory) for request from: " + remoteIP + " for " + this._path);
return;
}
// special case for directory listing
if (ProcessDirectoryListingRequest()) {
+ _server.writeInfoAccessLog("Send directory listing for request from: " + remoteIP + " for " + this._path);
return;
}
PrepareResponse();
// Hand the processing over to HttpRuntime
HttpRuntime.ProcessRequest(this);
+ _server.writeInfoAccessLog("Response send by HttpRuntime request for request from: " + remoteIP + " for " + this._path);
}
private bool checkSecurity() {
@@ -145,6 +151,7 @@
if (!_connection.IsLocal) {
_connection.WriteErrorAndClose(403);
+ _server.writeErrorAccessLog("Send error 403 (Acces Denied by configuration) for request from: " + remoteIP + " for " + this._path);
return false;
}
@@ -158,6 +165,8 @@
}
}
if (!ipFound) {
+ _connection.WriteErrorAndClose(403);
+ _server.writeErrorAccessLog("Send error 403 (Acces Denied by configuration) for request from: " + remoteIP + " for " + this._path);
return false;
}
}
@@ -165,6 +174,7 @@
String uri = _path + _queryString;
if (uri.Length > _configuration.MaxUriLength) {
_connection.WriteErrorAndClose(403, "URI Exceeded Maximum Server Limit.");
+ _server.writeErrorAccessLog("Send error 403 (URI Exceeded Maximum Server Limit) for request from: " + remoteIP + " for " + this._path);
return false;
}
List<String> vrbCollection = _configuration.HTTPMethods;
@@ -177,6 +187,7 @@
if (!vrbFound) {
_connection.WriteErrorAndClose(403);
+ _server.writeErrorAccessLog("Send error 403 (HTTP method not found) for request from: " + remoteIP + " for " + this._path);
return false;
}
return true;
@@ -263,16 +274,20 @@
}
ParseRequestLine();
+ remoteIP = _connection.RemoteIP;
+ _server.writeInfoAccessLog("Request from: " + remoteIP + " for " + this._path);
// Check for bad path
if (IsBadPath()) {
_connection.WriteErrorAndClose(400);
+ _server.writeErrorAccessLog("Send error 400 (Bad Path) for request from: " + remoteIP + " for " + this._path);
return false;
}
// Check if the path is not well formed or is not for the current app
if (!_host.IsVirtualPathInApp(_path, out _isClientScriptPath)) {
_connection.WriteErrorAndClose(404);
+ _server.writeErrorAccessLog("Send error 404 (Path is not well formed) for request from: " + remoteIP + " for " + this._path);
return false;
}
// Check security
@@ -314,7 +329,7 @@
_headerByteStrings = new ArrayList();
// find the end of headers
- ByteParser parser = new ByteParser(_headerBytes);
+ ByteParser parser = new ByteParser(_headerBytes,_server);
for (; ; ) {
ByteString line = parser.ReadLine();
@@ -590,7 +605,7 @@
try {
infos = (new DirectoryInfo(dirPathTranslated)).GetFileSystemInfos();
} catch (Exception e){
- Server.WriteErrorToLog("Could not get all files and subdirs.\n", e);
+ _server.WriteErrorToLog("Could not get all files and subdirs.\n", e);
}
// determine if parent is appropriate
@@ -621,7 +636,7 @@
#endregion
#region private static methods
- private static string UrlEncodeRedirect(string path) {
+ private string UrlEncodeRedirect(string path) {
// this method mimics the logic in HttpResponse.Redirect (which relies on internal methods)
try {
// count non-ascii characters
@@ -659,7 +674,7 @@
path = path.Replace(" ", "%20");
}
} catch (Exception e) {
- Server.WriteErrorToLog("Error in URL Encode Redirect.\n", e);
+ _server.WriteErrorToLog("Error in URL Encode Redirect.\n", e);
}
return path;
}
@@ -947,7 +962,7 @@
_responseBodyBytes.Add(bytes);
}
} catch (Exception e) {
- Server.WriteErrorToLog("Could not send response from memory.\n", e);
+ _server.WriteErrorToLog("Could not send response from memory.\n", e);
}
}
@@ -961,7 +976,7 @@
f = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
SendResponseFromFileStream(f, offset, length);
}catch(Exception e){
- Server.WriteErrorToLog("Could not send response from file (filename).\n", e);
+ _server.WriteErrorToLog("Could not send response from file (filename).\n", e);
} finally {
if (f != null) {
f.Close();
@@ -980,7 +995,7 @@
f = new FileStream(sfh, FileAccess.Read);
SendResponseFromFileStream(f, offset, length);
} catch (Exception e) {
- Server.WriteErrorToLog("Could not send response from file (Handle).\n", e);
+ _server.WriteErrorToLog("Could not send response from file (Handle).\n", e);
} finally {
if (f != null) {
f.Close();
Modified: trunk/Version2/WebServer/Server.cs
===================================================================
--- trunk/Version2/WebServer/Server.cs 2007-03-09 14:19:08 UTC (rev 32)
+++ trunk/Version2/WebServer/Server.cs 2007-03-09 17:45:37 UTC (rev 33)
@@ -17,12 +17,15 @@
using System.Threading;
using System.Web;
using System.Web.Hosting;
+using log4net.Core;
+using log4net;
namespace MPW.WebServer {
public sealed class Server : MarshalByRefObject {
#region variables
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger("WebServer");
+ private ILog log = LogManager.GetLogger("WebServer");
+ private ILog accessLog = LogManager.GetLogger("WebServerAccess");
private ServerConfiguration _configuration;
private WaitCallback _onStart;
@@ -128,11 +131,11 @@
if (_socket != null) {
_socket.Close();
}
+ Thread.Sleep(100);
} catch {
} finally {
_socket = null;
}
-
try {
if (_host != null) {
_host.Shutdown();
@@ -242,10 +245,16 @@
internal void HostStopped() {
_host = null;
}
- internal static void WriteErrorToLog(String message, Exception e) {
+ internal void WriteErrorToLog(String message, Exception e) {
log.Error(message, e);
}
- #endregion
+ internal void writeInfoAccessLog(String message) {
+ accessLog.Info(message);
+ }
+ internal void writeErrorAccessLog(String message) {
+ accessLog.Error(message);
+ }
+ #endregion
}
}
Modified: trunk/Version2/WindowsService/LoggingConfiguration.xml
===================================================================
--- trunk/Version2/WindowsService/LoggingConfiguration.xml 2007-03-09 14:19:08 UTC (rev 32)
+++ trunk/Version2/WindowsService/LoggingConfiguration.xml 2007-03-09 17:45:37 UTC (rev 33)
@@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
- <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
- <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
- </appender>
-
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<applicationName value="MPW" />
<logName value="MPW Service"/>
@@ -20,7 +16,7 @@
<eventLogEntryType value="Error" />
</mapping>
<mapping>
- <level value="WARNING" />
+ <level value="WARN" />
<eventLogEntryType value="Warning" />
</mapping>
<mapping>
@@ -36,9 +32,17 @@
<file value="access.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
+ <conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
+
+ <appender name="MPWFileAppender" type="log4net.Appender.FileAppender">
+ <file value="mpw.log" />
+ <appendToFile value="true" />
+ <layout type="log4net.Layout.PatternLayout">
+ <conversionPattern value="%date %-5level - %message%newline" />
+ </layout>
+ </appender>
<category name="MPW">
<level value="ALL" />
@@ -46,7 +50,7 @@
</category>
<category name="WebServer">
<level value="ALL" />
- <appender-ref ref="ConsoleAppender" />
+ <appender-ref ref="MPWFileAppender" />
<appender-ref ref="EventLogAppender" />
</category>
<category name="WebServerAccess" additivity="false">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|