001: package de.webman.util.log4j;
002:
003: import org.apache.log4j.Layout;
004: import org.apache.log4j.RollingFileAppender;
005: import com.teamkonzept.web.TKEvent;
006: import com.teamkonzept.web.servlet.ServletInterface;
007: import java.io.File;
008: import java.io.IOException;
009:
010: /**
011: Adds functionality to locate the log directory
012: * @author $Author: alex $
013: * @version $Revision: 1.1 $
014: */
015: public class WebmanRollingFileAppender extends RollingFileAppender {
016: private static String documentRoot;
017: private boolean appended = false;
018:
019: /**
020: The default constructor does nothing.
021: */
022: public WebmanRollingFileAppender() {
023: super ();
024: }
025:
026: /**
027: Instantiate a <code>DailyRollingFileAppender</code> and open the
028: file designated by <code>filename</code>. The opened filename will
029: become the ouput destination for this appender.
030: */
031: public WebmanRollingFileAppender(Layout layout, String filename)
032: throws java.io.IOException {
033: super ();
034: // Root bekommen
035: String root = getDocRoot();
036: if (root != null)
037: setFile(root + File.pathSeparator + filename);
038: else
039: setFile(filename);
040:
041: setLayout(layout);
042: }
043:
044: /**
045: ueberschrieben, um das LogVerzeichnis davor zu packen
046: */
047: public void setFile(String name) {
048: String root = getDocRoot();
049: // System.out.println("Docroot : " + root + " Name " + name);
050: if (root != null)
051: super .setFile(root + File.separator + name);
052: else
053: super .setFile(name);
054:
055: }
056:
057: /**
058: ueberschrieben, um das LogVerzeichnis davor zu packen
059: */
060: public void setFile(String name, boolean append)
061: throws java.io.IOException {
062: String root = getDocRoot();
063: //System.out.println("Docroot append: " + root + " NAme:" + name);
064: if (root != null)
065: super .setFile(root + File.separator + name, append);
066: else
067: super .setFile(name, append);
068:
069: }
070:
071: public static void setDocRoot(String root) {
072: documentRoot = root;
073: // appended = false;
074: }
075:
076: /**
077: setzt die Document Root der Webapplication vor den File Namen,
078: damit das log Verzeichnis nicht absolut im Konf-file angegeben werden muss
079: */
080: private String getDocRoot() {
081: if (appended) // nur einmal davorpacken !
082: return null;
083: String contextPath = null;
084: TKEvent event = TKEvent.getEventForThread();
085: if (event != null) {
086: contextPath = ((ServletInterface) event.getHttpInterface())
087: .getContextPath();
088: } else if (documentRoot != null) {
089: contextPath = documentRoot;
090: }
091: contextPath += "log" + File.separator;
092: appended = true;
093: // kurz testen, ob es das Verzeichnis schon gibt
094: File f = new File(contextPath);
095: if (!f.exists())
096: f.mkdir();
097: return contextPath;
098: }
099:
100: }
|