webForumDet fria alternativet

Skapa enkel loggfil

Java

4 svar · 460 visningar · startad av AG

Medlem sedan mars 20001 266 inlägg
Frågan#1

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

Medlem sedan apr. 20007 588 inlägg
#2

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>
Medlem sedan mars 20001 266 inlägg
#3

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

Medlem sedan mars 20001 266 inlägg
#4

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

Medlem sedan aug. 20021 752 inlägg
#5

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

293 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
163 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
159 ms — ändringar (db)