Justin Deoliveira ha scritto:
Very nice indeed.

Perhaps as a future enhancement we could add some sort of "download log" utility. Where the entire log is compressed and sent back to the client. Be a nice way to help users submit bug reports.

Easy peasy, here we go (updated patch and screenshot attached)

Cheers
Andrea


--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.

<<inline: downloadLog-nq8.png>>

diff --git a/src/web/core/src/main/java/GeoServerApplication.properties b/src/web/core/src/main/java/GeoServerApplication.properties
index 9f2edfd..f7c3bc2 100644
--- a/src/web/core/src/main/java/GeoServerApplication.properties
+++ b/src/web/core/src/main/java/GeoServerApplication.properties
@@ -253,6 +253,13 @@ LayerPage.th.type        = Type
 LayerPage.th.workspace   = Workspace
 LayerPage.title          = Layers
 
+LogPage.description             = Show the GeoServer log file contents
+LogPage.title                   = GeoServer logs
+LogPage.refresh                 = Refresh
+LogPage.maxLines                = Maximum console lines
+LogPage.download                = Download the full log file
+
+
 #MetadataLinkEditor.noMetadataLinksDefined=No metadata links defined so far
 MetadataLinkEditor.addLink = Add link
 MetadataLinkEditor.format  = Format
diff --git a/src/web/core/src/main/java/applicationContext.xml b/src/web/core/src/main/java/applicationContext.xml
index c599b86..44a51c0 100644
--- a/src/web/core/src/main/java/applicationContext.xml
+++ b/src/web/core/src/main/java/applicationContext.xml
@@ -82,6 +82,15 @@
     <property name="icon" value="../img/icons/silk/server_chart.png"/>
     <property name="order" value="10"/>
   </bean>
+  <bean id="logsPage" class="org.geoserver.web.MenuPageInfo">
+    <property name="id" value="server.admin.logs"/>
+    <property name="titleKey" value="LogPage.title"/>
+    <property name="descriptionKey" value="LogPage.description"/>
+    <property name="componentClass" value="org.geoserver.web.admin.LogPage"/>
+    <property name="category" ref="serverCategory"/>
+    <property name="icon" value="../img/icons/silk/page_white_text.png"/>
+    <property name="order" value="15"/>
+  </bean>
   <bean id="contactMenuPage" class="org.geoserver.web.MenuPageInfo">
     <property name="id" value="server.admin.contact"/>
     <property name="titleKey" value="ContactPage.title"/>
@@ -109,7 +118,7 @@
     <property name="icon" value="../img/icons/silk/cog_photo.png"/>
     <property name="order" value="40"/>
   </bean>
-  <bean id="abountMenuPage" class="org.geoserver.web.MenuPageInfo">
+  <bean id="aboutMenuPage" class="org.geoserver.web.MenuPageInfo">
     <property name="id" value="server.about"/>
     <property name="titleKey" value="AboutGeoServerPage.title"/>
     <property name="descriptionKey" value="AboutGeoServerPage.description"/>
diff --git a/src/web/core/src/main/java/org/geoserver/web/admin/LogPage.html b/src/web/core/src/main/java/org/geoserver/web/admin/LogPage.html
new file mode 100644
index 0000000..fb0cb4b
--- /dev/null
+++ b/src/web/core/src/main/java/org/geoserver/web/admin/LogPage.html
@@ -0,0 +1,22 @@
+<html xmlns:wicket="http://wicket.apache.org/";>
+<wicket:head>
+ <script defer="defer" type="text/javascript">
+   var textArea = document.getElementById('logs');
+   textArea.scrollTop = textArea.scrollHeight;
+ </script>
+</wicket:head>
+<body>
+<wicket:extend>
+    <div style="width:95%">
+       <form wicket:id="form">
+         <div style="float:right"><a href="#" wicket:id="refresh"><wicket:message key="refresh">refresh</wicket:message></a></div>
+         <div style="float:left"><wicket:message key="maxLines">max console lines</wicket:message>&nbsp;<input type="text" wicket:id="lines"/></div>
+       </form>
+       <div><textarea readonly="readonly" style="width:100%;height:50em;font-size:small" wicket:id="logs"></textarea></div>
+       <a href="#" wicket:id="download"><wicket:message key="download">download full log file</wicket:message></a>
+    </div>
+  
+  
+</wicket:extend>
+</body>
+</html>
diff --git a/src/web/core/src/main/java/org/geoserver/web/admin/LogPage.java b/src/web/core/src/main/java/org/geoserver/web/admin/LogPage.java
new file mode 100644
index 0000000..e2c4a6f
--- /dev/null
+++ b/src/web/core/src/main/java/org/geoserver/web/admin/LogPage.java
@@ -0,0 +1,164 @@
+/* Copyright (c) 2001 - 2008 TOPP - www.openplans.org. All rights reserved.
+ * This code is licensed under the GPL 2.0 license, available at the root
+ * application directory.
+ */
+package org.geoserver.web.admin;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.LinkedList;
+import java.util.logging.Level;
+
+import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.SubmitLink;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.protocol.http.WebResponse;
+import org.apache.wicket.util.io.Streams;
+import org.apache.wicket.validation.validator.NumberValidator;
+import org.geoserver.config.GeoServerDataDirectory;
+import org.geoserver.web.GeoServerSecuredPage;
+
+/**
+ * Shows the log file contents
+ * 
+ * @author Andrea Aime - OpenGeo
+ */
+public class LogPage extends GeoServerSecuredPage {
+    static final String LINES = "lines";
+
+    int lines = 1000;
+
+    File logFile;
+
+    public LogPage(PageParameters params) {
+        Form form = new Form("form");
+        add(form);
+
+        // locate the geoserver.log file
+        GeoServerDataDirectory dd = getGeoServerApplication().getBeanOfType(
+                GeoServerDataDirectory.class);
+        File logDirectory = new File(dd.root(), "logs");
+        if (!logDirectory.exists()) {
+            error("Could not find the logs directory inside the data dir: "
+                    + logDirectory.getAbsolutePath());
+        }
+        logFile = new File(logDirectory, "geoserver.log");
+        if (!logFile.exists()) {
+            error("Could not find the GeoServer log file: " + logFile.getAbsolutePath());
+        }
+
+        try {
+            if (params.getKey(LINES) != null) {
+                if (params.getInt(LINES) > 0) {
+                    lines = params.getInt(LINES);
+                }
+            }
+        } catch (Exception e) {
+            LOGGER.log(Level.WARNING, "Error parsing the lines parameter: ", params.getKey(LINES));
+        }
+
+        form.add(new SubmitLink("refresh") {
+            @Override
+            public void onSubmit() {
+                setResponsePage(LogPage.class, new PageParameters(LINES + "="
+                        + String.valueOf(lines)));
+            }
+        });
+
+        TextField lines = new TextField("lines", new PropertyModel(this, "lines"));
+        lines.add(NumberValidator.POSITIVE);
+        form.add(lines);
+
+        TextArea logs = new TextArea("logs", new GSLogsModel());
+        logs.setOutputMarkupId(true);
+        logs.setMarkupId("logs");
+        add(logs);
+
+        add(new Link("download") {
+
+            @Override
+            public void onClick() {
+                RequestCycle.get().setRequestTarget(new IRequestTarget() {
+
+                    public void detach(RequestCycle requestCycle) {
+                    }
+
+                    public void respond(RequestCycle requestCycle) {
+
+                        InputStream is = null;
+                        try {
+                            is = new FileInputStream(logFile);
+
+                            WebResponse r = (WebResponse) requestCycle.getResponse();
+                            r.setAttachmentHeader("geoserver.log");
+                            r.setContentType("text/plain");
+                            Streams.copy(is, r.getOutputStream());
+                        } catch (IOException e) {
+                            throw new RuntimeException(e);
+                        } finally {
+                            if(is != null) {
+                                try {
+                                    is.close();
+                                } catch (IOException e) {
+                                }
+                            }
+                        }
+                    }
+
+                });
+
+            }
+        });
+
+    }
+
+    public class GSLogsModel extends LoadableDetachableModel {
+
+        @Override
+        protected Object load() {
+            BufferedReader br = null;
+            try {
+                // load the logs line by line, keep only the last 1000 lines
+                LinkedList<String> lineList = new LinkedList<String>();
+
+                br = new BufferedReader(new FileReader(logFile));
+                String line;
+                while ((line = br.readLine()) != null) {
+                    lineList.addLast(line);
+                    if (lineList.size() > LogPage.this.lines) {
+                        lineList.removeFirst();
+                    }
+                }
+
+                StringBuilder result = new StringBuilder();
+                for (String logLine : lineList) {
+                    result.append(logLine).append("\n");
+                }
+                return result;
+            } catch (Exception e) {
+                error(e);
+                return e.getMessage();
+            } finally {
+                if (br != null) {
+                    try {
+                        br.close();
+                    } catch (Exception e) {
+                        // ignore
+                    }
+                }
+            }
+        }
+
+    }
+}
diff --git a/src/web/core/src/main/java/org/geoserver/web/img/icons/silk/page_white_text.png b/src/web/core/src/main/java/org/geoserver/web/img/icons/silk/page_white_text.png
new file mode 100644
index 0000000..813f712
Binary files /dev/null and b/src/web/core/src/main/java/org/geoserver/web/img/icons/silk/page_white_text.png differ
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Geoserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to