001/** 002 * Copyright (C) 2014 Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/ 003 * 004 * This file is part of Dicoogle/dicoogle. 005 * 006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * Dicoogle/dicoogle is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Dicoogle. If not, see <http://www.gnu.org/licenses/>. 018 */ 019package pt.ua.dicoogle.server.web.servlets.management; 020 021import java.io.BufferedReader; 022import java.io.FileReader; 023import java.io.IOException; 024import java.io.PrintWriter; 025import java.util.Map; 026 027import javax.servlet.ServletException; 028import javax.servlet.http.HttpServlet; 029import javax.servlet.http.HttpServletRequest; 030import javax.servlet.http.HttpServletResponse; 031import org.apache.logging.log4j.LogManager; 032import org.apache.logging.log4j.core.Appender; 033import org.apache.logging.log4j.core.appender.FileAppender; 034import org.apache.logging.log4j.core.appender.RandomAccessFileAppender; 035import org.apache.logging.log4j.core.appender.RollingFileAppender; 036import org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender; 037import org.slf4j.Logger; 038import org.slf4j.LoggerFactory; 039import pt.ua.dicoogle.sdk.Utils.Platform; 040 041/** 042 * @author Frederico Silva <fredericosilva@ua.pt> 043 * @author Eduardo Pinho <eduardopinho@ua.pt> 044 */ 045public class LoggerServlet extends HttpServlet { 046 private static final Logger classLogger = LoggerFactory.getLogger(LoggerServlet.class); 047 048 private String logFilename = null; 049 050 protected String logFilename() { 051 if (this.logFilename == null) { 052 org.apache.logging.log4j.Logger logger = LogManager.getLogger(); 053 Map<String, Appender> appenderMap = ((org.apache.logging.log4j.core.Logger) logger).getAppenders(); 054 for (Map.Entry<String,Appender> e : appenderMap.entrySet()) { 055 String filename = null; 056 Appender appender = e.getValue(); 057 if (appender instanceof FileAppender) { 058 filename = ((FileAppender)appender).getFileName(); 059 } else if (appender instanceof RollingFileAppender) { 060 filename = ((RollingFileAppender)appender).getFileName(); 061 } else if (appender instanceof RandomAccessFileAppender) { 062 filename = ((RandomAccessFileAppender)appender).getFileName(); 063 } else if (appender instanceof RollingRandomAccessFileAppender) { 064 filename = ((RollingRandomAccessFileAppender)appender).getFileName(); 065 } 066 if (filename != null) { 067 classLogger.debug("Using \"{}\" as the file for the server log.", filename); 068 this.logFilename = filename; 069 return this.logFilename; 070 } 071 } 072 // no file appender found, use default DICOMLOG.log 073 classLogger.debug("No file appender found, using \"DICOMLOG.log\" as the default logger"); 074 this.logFilename = Platform.homePath() + "DICOMLOG.log"; 075 } 076 return this.logFilename; 077 } 078 079 @Override 080 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 081 throws ServletException, IOException { 082 try (BufferedReader fis = new BufferedReader(new FileReader(logFilename()))) { 083 PrintWriter respWriter = resp.getWriter(); 084 String l; 085 while ((l = fis.readLine()) != null) { 086 respWriter.println(l); 087 } 088 } 089 } 090}