KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ozoneDB > util > LogWriterLog4JImpl


1 // You can redistribute this software and/or modify it under the terms of
2
// the Ozone Library License version 1 published by ozone-db.org.
3
//
4
// The original code and portions created by SMB are
5
// Copyright (C) 2000 by DigitalSesame. All rights reserved.
6
//
7
// $Id: LogWriterLog4JImpl.java,v 1.9 2004/03/29 20:49:45 wieslawf Exp $
8

9 package org.ozoneDB.util;
10
11 import java.io.*;
12 import org.apache.log4j.*;
13
14 /**
15  * @author <a HREF="mailto:david@d11e.com">David Li</a>
16  * @author Per Nyfelt
17  */

18 public class LogWriterLog4JImpl implements LogWriter {
19     
20     private static final String JavaDoc OZONE_BASE_PACKAGE = "org.ozoneDB";
21     public static final String JavaDoc PATTERN_LAYOUT = "%-6p [%t] %c{1} - %m%n";
22     
23     /* The ozone root category */
24     //private Logger ozoneRoot;
25

26     /**
27      * Current log level
28      */

29     private int currentLogLevel;
30     
31     /**
32      * A set of log target. This is to avoid the duplicated addition
33      * of log target
34      */

35     //private Set logTargets = new HashSet();
36

37     
38     public LogWriterLog4JImpl(File configDir, Level level) throws IOException {
39         
40         setUpLogging(configDir, level);
41         currentLogLevel = level.toInt();
42         
43         // the base logging category for all our classes
44
//ozoneRoot = Logger.getLogger(OZONE_BASE_PACKAGE);
45

46         // this is needed by the Server shutdownHook
47
createLogger(OzoneLogger.getLogger("java.lang"));
48     }
49     
50     public void setUpLogging(File configDir, Level level) throws IOException {
51         File loggingPropsFile = new File(configDir, LOG_CONFIG_FILE_NAME);
52         if (!loggingPropsFile.exists()) {
53             createLoggingProps(loggingPropsFile, new File(configDir, LOG_FILE), level.toString());
54         }
55         
56         System.out.println("Loading props for " + loggingPropsFile);
57         PropertyConfigurator.configure(loggingPropsFile.getAbsolutePath());
58     }
59     
60     private void createLoggingProps(File loggingPropsfile, File logFile, String JavaDoc logLevel) throws IOException {
61         FileWriter out = new FileWriter(loggingPropsfile);
62         
63         //String fileLog = databaseDir + LOG_FILE;
64
//logWriter.addLogTarget("stdout", System.out, debugLevel );
65
//logWriter.addLogTarget(fileLog, new FileOutputStream( fileLog ), debugLevel );
66

67         // see log4j documentation
68
out.write("############ Logger Factory #################\n");
69         out.write("log4j.loggerFactory=org.ozoneDB.util.OzoneLoggerFactory\n");
70
71         out.write("\n############ Console Appender ###############\n");
72         out.write("log4j.appender.stdout=org.apache.log4j.ConsoleAppender\n");
73         out.write("log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\n");
74         out.write("# Pattern to output the caller's file name and line number.\n");
75         out.write("log4j.appender.stdout.layout.ConversionPattern=" + PATTERN_LAYOUT + "\n");
76         
77         out.write("\n############ File Appender ###############\n");
78         out.write("log4j.appender.file=org.apache.log4j.RollingFileAppender\n");
79         out.write("log4j.appender.file.layout=org.apache.log4j.PatternLayout\n");
80         out.write("log4j.appender.file.layout.ConversionPattern=" + PATTERN_LAYOUT + "\n");
81         out.write("log4j.appender.file.MaxFileSize=2MB\n");
82         out.write("log4j.appender.file.MaxBackupIndex=4\n");
83         out.write("log4j.appender.file.File=" + ensureFileFormat(logFile.getCanonicalPath()) + "\n");
84         
85         out.write("\n############ Log levels ###############\n");
86         out.write("log4j.logger." + OZONE_BASE_PACKAGE + "=" + logLevel + "#org.ozoneDB.util.OzoneDebugLevel, stdout, file\n");
87         // add an appender to test classes so that log4j can be used
88
out.write("log4j.logger.test=INFO#org.ozoneDB.util.OzoneDebugLevel, stdout, file\n");
89         out.write("# Example - turning up debugging on core\n");
90         out.write("#log4j.logger.org.ozoneDB.core=DEBUG2#org.ozoneDB.util.OzoneDebugLevel, stdout, file\n");
91         out.write("#log4j.additivity.org.ozoneDB.core=false\n");
92         out.flush();
93         out.close();
94     }
95     
96     /** ensure properties file format. Windows single \ will not work
97      * so we need to change it. Front slashes works fine. */

98     private String JavaDoc ensureFileFormat(String JavaDoc path) {
99         return path.replace('\\', '/');
100     }
101     
102     /**
103      * This method allows to quickly find out if there is any log target that
104      * would receive entries of the specified level.
105      */

106     public boolean hasTarget(int level) {
107         return level >= currentLogLevel;
108     }
109     
110     /*
111     private void addLogTarget(int level) {
112         currentLogLevel = level;
113         ozoneRoot.setLevel(OzoneDebugLevel.toLevel(level));
114     } */

115 /*
116     public void addLogTarget(String name, OutputStream out, int level) {
117         if (logTargets.add(out)) {
118             Appender appender = new WriterAppender(getLayout(), out);
119             appender.setName(name);
120             ozoneRoot.addAppender(appender);
121             addLogTarget(level);
122         }
123     }
124  
125  
126     public void addLogTarget(PrintWriter writer, int level, String name) {
127         if (logTargets.add(writer)) {
128             Appender appender = new WriterAppender(getLayout(), writer);
129             appender.setName(name);
130             ozoneRoot.addAppender(appender);
131             addLogTarget(level);
132         }
133     }
134  */

135     private void createLogger(Logger logger) {
136         Appender appender = new ConsoleAppender(new PatternLayout(PATTERN_LAYOUT));
137         appender.setName(logger.getName());
138         logger.addAppender(appender);
139         logger.setLevel(OzoneDebugLevel.INFO);
140     }
141     
142     public void newEntry(Object JavaDoc sender, String JavaDoc msg, int level) {
143         OzoneLogger logger = (OzoneLogger) OzoneLogger.getInstance(sender != null ? sender.getClass().getName() : LogWriterLog4JImpl.class.getName());
144         logger.log(OzoneDebugLevel.toLevel(level), msg);
145     }
146     
147     public void newEntry(Object JavaDoc sender, String JavaDoc msg, Throwable JavaDoc e, int level) {
148         OzoneLogger logger = (OzoneLogger) OzoneLogger.getInstance(sender != null ? sender.getClass().getName() : LogWriterLog4JImpl.class.getName());
149         logger.log(OzoneDebugLevel.toLevel(level), msg, e);
150     }
151     
152     public static void printLogInfo(Logger logger) {
153         if (logger == null) {
154             System.out.println("logger is null");
155             return;
156         }
157         java.util.Enumeration JavaDoc e = logger.getAllAppenders();
158         Appender appender;
159         System.out.println("\nLog info for " + logger.getName());
160         final String JavaDoc space = "\t\t\t";
161         while (e.hasMoreElements()) {
162             appender = (Appender) e.nextElement();
163             System.out.println(appender.getName() + space
164             + appender.getClass().getName());
165         }
166     }
167 }
168
Popular Tags