AGMedlem sedan mars 20001 229 inlägg Vill skapa en enkel loggfil, skall lagra allt i en .txt-fil. Undrar därför varför följande inte skapar en fungerande kod:
<%@ page import="java.io.*"%>
<%
try {
BufferedWriter outa = new BufferedWriter(new FileWriter("stat/outfilename.txt"));
outa.write("aString");
outa.close();
}
catch (IOException e) {
}%>
<a href="http://127.0.0.1:8080/tracker.jsp">Test</a>
<%=request.getRemoteAddr()%>
<%=request.getHeader("Referer")%>
Andreas
Det är fungerande kod, däremot gör koden inget vettigt. Det enda som kommer att skrivas till filen är ju strängen "aString".
Jag antar att du vill skriva remote address och referer till loggfilen? Just nu så skriver du ju ut den på JSP-sidan, alltså till klienten, istället för till loggfilen. Ändra så att du skriver dessa till filen istället. Sätt även append till true i FileWriter-konstruktorn så att filen inte skrivs över varje gång en loggrad skall skrivas.
<%@ page import="java.io.*"%>
<%
try {
BufferedWriter outa =
new BufferedWriter(new FileWriter("c:\\outfilename.txt", true));
outa.write(request.getRemoteAddr()+"\n");
outa.write(request.getHeader("Referer")+"\n\n");
outa.close();
}
catch (IOException e) {
}%>
<a href="http://127.0.0.1:8080/tracker.jsp">Test</a>
AGMedlem sedan mars 20001 229 inlägg Problemet löstes, var det relativa sökvägen som ställde till det, filen sparades i webserverkatalogen, knepigt.
Men filen fungerar kanon, den jag nu använder är:
<%@ page import="java.util.Date"%>
<%@ page import="java.io.*"%>
<%
java.text.SimpleDateFormat date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm");
String stats = "";
try {
String timestamp = date.format(new java.util.Date());
String remote = request.getRemoteAddr();
String referer = "";
if(request.getHeader("Referer") == null){
referer = "";
}
else{
referer = request.getHeader("Referer");
}
stats = timestamp + " " + remote + " " + referer + "\n";
BufferedWriter outa = new BufferedWriter(new FileWriter("/members/stat/main.txt", true));
outa.write(stats);
outa.close();
}
catch (Exception e) {
System.out.println("Error: "+e);
}
Andreas
AGMedlem sedan mars 20001 229 inlägg Nu ska jag byta server, och måste då således byta sökväg, ett förfarande jag tycker verkar för onödigt. Finns det några serverparametrar som man enkelt kan slänga in, så man slipepr ändra i framtiden?
Andreas
ViktorMedlem sedan aug. 20021 710 inlägg Du kan ha en config servlet som startas automatiskt när din webapp startar (<load-on-startup>1</load-on-startup> i web.xml servlet delen). I den så sätter du en servlet context parameter till en viss sökväg och läser av den varje gång som du ska göra något med loggen.
<servlet>
<servlet-name>config</servlet-name>
<servlet-class>com.ag.log.config</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>LogPath</param-name>
<param-value>/home/ag/logs/log.txt</param-value>
</init-param>
</servlet>
Men varför inte använda Log4J istället för att göra ett eget system?
/Viktor