Saudações.
Tenho uma classe servlet denominada UsuarioChat que possui um método que gera um log num arquivo txt cujo código do método é:
public void addLog(String log) throws IOException{
if (logs.size() == 100) {
logs.remove(0);
}
logs.add(log + "
");
String datalog = new SimpleDateFormat("dd.MM").format(new Date());
/*File arquivoLog = new File("C:\Tomcat\webapps\Chat\WEB-INF\logs\log"
+ datalog + ".txt");*/
Logger logger = Logger.getAnonymousLogger();
FileHandler fh = new FileHandler fh = new FileHandler(getServletContext().getRealPath("//logs//meuArquivo.log");
System.out.println("Passei aqui");
fh.setFormatter(new SimpleFormatter());
logger.addHandler(fh);
logger.info(log);
}
Essa classe esta dentro de Chat/classes dentro do diretorio de servlets do Tomcat.
Dentro de Chat, tenho um diretório chamado logs e quero que o log seja gravado ali sem especificar o endereço físico(C:…) e sim o endereço no servidor.
Mas não acontece nada, se faço somente:
FileHandler fh = new FileHandler(getServletContext().getRealPath("/meuArquivo.log"));
ele grava no raíz do C:.
Tentei com esta classe:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.logging.*;
public class teste extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException{
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title> Testando Servlet </title>");
out.println("</head>");
out.println("<body>");
out.println("Bem Vindo ao Centro de Teste do Servlet");
out.println("<br> <u> Funcionou :-)");
out.println("</body>");
out.println("</html>");
Logger logger = Logger.getAnonymousLogger();
FileHandler fh = new FileHandler(getServletContext( ).getRealPath("//logs//arquivo.txt"));
fh.setFormatter(new SimpleFormatter());
logger.addHandler(fh);
logger.info("testando o arquivo");
}
e funcionou corretamente.
Será que estou usando função ou api errada?
Alguém pode me orientar?