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. |