Changeset 2755


Ignore:
Timestamp:
03/27/13 15:21:43 (11 years ago)
Author:
twagoo
Message:

Improved reading and serving of log file in the wicket admin frontend
[Fixes #294]

Location:
ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/frontend
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/frontend/ViewLogPage.html

    r633 r2755  
    1010            <a wicket:id="home">AdminHome</a>
    1111        </div>
     12        <p>
     13            <span wicket:id="logLabel">Showing final X bytes (or less) of total N in componentregistry.log:</span><br />
     14            [<a wicket:id="logDownloadLink">Download entire log file</a>]
     15        </p>
    1216        <textarea cols="150" rows="50"  wicket:id="logText" >log text</textarea>
    1317    </body>
  • ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/frontend/ViewLogPage.java

    r625 r2755  
    1 /*
    2  * To change this template, choose Tools | Templates
    3  * and open the template in the editor.
    4  */
    51package clarin.cmdi.componentregistry.frontend;
    62
    73import java.io.File;
     4import java.io.FileNotFoundException;
    85import java.io.IOException;
    9 import org.apache.commons.io.FileUtils;
     6import java.io.RandomAccessFile;
     7import java.text.NumberFormat;
    108import org.apache.log4j.FileAppender;
    119import org.apache.log4j.Logger;
    1210import org.apache.wicket.PageParameters;
     11import org.apache.wicket.markup.html.basic.Label;
    1312import org.apache.wicket.markup.html.form.TextArea;
     13import org.apache.wicket.markup.html.link.DownloadLink;
    1414import org.apache.wicket.markup.html.link.Link;
    1515import org.apache.wicket.model.Model;
     
    1717/**
    1818 *
     19 * @author Twan Goosen <twan.goosen@mpi.nl>
    1920 * @author paucas
    2021 */
    2122public class ViewLogPage extends SecureAdminWebPage {
    2223
    23     public ViewLogPage(final PageParameters pageParameters) throws IOException {
    24         super(pageParameters);
    25         addLinks();
    26 
    27         File file = getLogFile();
    28         String content = FileUtils.readFileToString(file, "UTF-8");
    29         add(new TextArea("logText", new Model(content)));
     24    public ViewLogPage(final PageParameters pageParameters) {
     25        super(pageParameters);
     26        addLinks();
     27        addLogFileContent();
    3028    }
    3129
    3230    private void addLinks() {
    33         add(new Link("home") {
     31        add(new Link("home") {
     32            @Override
     33            public void onClick() {
     34                setResponsePage(AdminHomePage.class);
     35            }
     36        });
     37    }
    3438
    35             @Override
    36             public void onClick() {
    37                 setResponsePage(AdminHomePage.class);
    38             }
    39         });
     39    private void addLogFileContent() {
     40        final int tailSize = 1000000; // Megabyte
     41
     42        final NumberFormat numberFormat = NumberFormat.getIntegerInstance();
     43        numberFormat.setGroupingUsed(true);
     44
     45        final File logFile = getLogFile();
     46        if (logFile != null) {
     47            try {
     48                final RandomAccessFile raLogFile = geFileTail(logFile, tailSize);
     49                final String content = getLogFileContent(raLogFile);
     50
     51                add(new Label("logLabel", String.format("Showing final %s bytes (or less) of total %s in %s:", numberFormat.format(tailSize), numberFormat.format(raLogFile.length()), logFile)));
     52                add(new TextArea("logText", new Model(content)));
     53
     54                add(new DownloadLink("logDownloadLink", logFile));
     55            } catch (IOException ioEx) {
     56                add(new Label("logLabel", "Could not read from log file. See error message below."));
     57                add(new TextArea("logText", new Model(ioEx.getMessage())));
     58            }
     59        }
     60    }
     61
     62    private String getLogFileContent(final RandomAccessFile randomAccessFile) throws IOException {
     63        String currentLine;
     64        StringBuilder contentBuilder = new StringBuilder();
     65        while ((currentLine = randomAccessFile.readLine()) != null) {
     66            contentBuilder.append(currentLine).append("\n");
     67        }
     68        String content = contentBuilder.toString();
     69        return content;
     70    }
     71
     72    private RandomAccessFile geFileTail(File logFile, int tailLength) throws IOException, FileNotFoundException {
     73        // Skip to tail of file
     74        final RandomAccessFile raLogFile = new RandomAccessFile(logFile, "r");
     75        final long startPosition = raLogFile.length() - tailLength;
     76        if (startPosition > 0) {
     77            raLogFile.seek(startPosition);
     78            // Read until end of line so we don't end up halfway some random line
     79            raLogFile.readLine();
     80        }
     81        return raLogFile;
    4082    }
    4183
    4284    private File getLogFile() {
    43         FileAppender appender = (FileAppender) Logger.getRootLogger().getAppender("ROOT");
    44         File logFile = new File(appender.getFile());
    45         return logFile;
     85        // Get file from appender
     86        final FileAppender appender = (FileAppender) Logger.getRootLogger().getAppender("ROOT");
     87        if (appender != null) {
     88            return new File(appender.getFile());
     89        }
     90        return null;
    4691    }
    4792}
Note: See TracChangeset for help on using the changeset viewer.