2015-07-06 4 views
0

Я изучаю jsp, используя netbeans 8 и GlassFish Server. У меня есть MyLog.javaСтруктура файлов в netbeans с использованием GlassFish

package MyClass; 
import java.util.Date; 
import java.text.SimpleDateFormat; 
import java.io.FileWriter; 
import java.io.PrintWriter; 
import java.io.IOException; 
public class MyLog { 

    private static final SimpleDateFormat TIME_FMT= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); 
    private static PrintWriter log=null; 
    public MyLog(String logpath) throws IOException{ 
     log=new PrintWriter(new FileWriter(logpath,true)); 
    } 

    public static synchronized void println(String s) 
    { 
     log.println(TIME_FMT.format(new java.util.Date())+" - "+s); 
     log.flush(); 
    } 
    public static synchronized void close(){ 
    log.close(); 
    } 
} 

и мое использование класса

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@page import="MyClass.*" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Switch the log ON</title> 
    </head> 
    <body> 
     <% 
      MyLog log =(MyLog) application.getAttribute("logfile"); 

      if (log==null) 
      { 
       try{ 
        log=new MyLog("log/mylog.log"); 
        application.setAttribute("logfile", log); 
        log.println("Logging enabled"); 
        out.println("Logging enabled"); 
       } 
       catch (Exception e) { 
        out.println(e.getMessage()); 
       } 
      } 
      else 
      { 
       log.println("Attempt to enable logging"); 
       out.println("Logging was already enabled"); 
      } 
     %> 
    </body> 
</html> 

так я получаю ошибку, что не может найти файл "LOG/mylog.log".

Я создал log/mylog.log (с каталогом) в веб-папке и даже в папке приложения, но не смог найти этот файл.

Я пытался использовать

нового файла (имя файла) .exists() в отлаживать с существующими файлами, но она всегда дает ложной.

Итак, мой вопрос в том, где я должен поместить свои файлы, чтобы netbeans (или стеклянная рыба) могли его найти?

ответ

0

Этот поиск всегда выполняется в текущем рабочем каталоге , который после развертывания вашего приложения в контейнере зависит от целевого сервера приложений. Но, даже если он найден, вы действительно не можете зависеть от этого, или приложение будет больше не переноситься.

Таким образом, вы можете переместить log каталог внутри WEB_INF директории вашего веб-приложения и доступ к абсолютного местоположения каталога во время выполнения через ServletContext как

log = new MyLog(application.getRealPath("/WEB-INF/log/mylog.log")); 

Предупреждение о: Вы должны хранить log каталог внутри WEB-INF или они станут доступны через браузер для всей всемирной паутины, чтобы увидеть.

Другая альтернатива, если вы не хотите, чтобы ваши файлы журналов вошли в каталог веб-приложения или у вас есть другое центральное расположение для всех журналов на этом сервере, необходимо настроить любое абсолютное расположение каталога, которое вам нравится, как параметр контекста в вашем web.xml.

<web-app> 
    ... 
    <context-param> 
    <param-name>LogPath</param-name> 
    <param-value>/absolute/log/dir/path/file.log</param-value> 
    </context-param> 

Значение затем можно получить доступ через ServletContext снова.

log = new MyLog(application.getInitParam("LogPath")); 

Для случайных лесозаготовок, другая альтернатива можно была бы просто использовать возможности протоколирования, которые приходят с Servlet спецификацией уже реализуемым контейнером. Ниже приведено сообщение об ошибке и трассировка стека связанного исключения с файлом журнала, имя и местоположение которого будет зависеть от вашего контейнера сервлета, но будут доступны в его документации.

application.log("Error message", throwable); 

На сервере Tomcat, журналы должны идти ${TOMCAT_HOME}/logs/catalina.out по умолчанию.


Здесь нет виртуального пути. Оба пути являются относительными; с getRealPath() вы просто решаете, что relativeness (если это слово) против корневого каталога веб-приложения.С вашим подходом слишком относительный путь решался, но против текущего рабочего сервера вашего сервера. Просто вы не смогли найти, где это. Это не фиксированное местоположение и изменения с помощью разных серверов приложений или даже разных версий одного и того же сервера.

+0

Спасибо, это сработало! Была ли моя ошибка использованием виртуального пути вместо реального пути? –

+0

@IlqarRasulov Добавил свой отзыв в качестве обновления. –

Смежные вопросы