1 9 package org.ozoneDB.util; 10 11 import java.io.*; 12 import org.apache.log4j.*; 13 14 18 public class LogWriterLog4JImpl implements LogWriter { 19 20 private static final String OZONE_BASE_PACKAGE = "org.ozoneDB"; 21 public static final String PATTERN_LAYOUT = "%-6p [%t] %c{1} - %m%n"; 22 23 24 26 29 private int currentLogLevel; 30 31 35 37 38 public LogWriterLog4JImpl(File configDir, Level level) throws IOException { 39 40 setUpLogging(configDir, level); 41 currentLogLevel = level.toInt(); 42 43 46 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 logLevel) throws IOException { 61 FileWriter out = new FileWriter(loggingPropsfile); 62 63 67 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 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 98 private String ensureFileFormat(String path) { 99 return path.replace('\\', '/'); 100 } 101 102 106 public boolean hasTarget(int level) { 107 return level >= currentLogLevel; 108 } 109 110 115 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 sender, String 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 sender, String msg, Throwable 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 e = logger.getAllAppenders(); 158 Appender appender; 159 System.out.println("\nLog info for " + logger.getName()); 160 final String 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 |