📄 logwriterlog4jimpl.java
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Library License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 2000 by DigitalSesame. All rights reserved.//// $Id: LogWriterLog4JImpl.java,v 1.9 2004/03/29 20:49:45 wieslawf Exp $package org.ozoneDB.util;import java.io.*;import org.apache.log4j.*;/** * @author <a href="mailto:david@d11e.com">David Li</a> * @author Per Nyfelt */public class LogWriterLog4JImpl implements LogWriter { private static final String OZONE_BASE_PACKAGE = "org.ozoneDB"; public static final String PATTERN_LAYOUT = "%-6p [%t] %c{1} - %m%n"; /* The ozone root category */ //private Logger ozoneRoot; /** * Current log level */ private int currentLogLevel; /** * A set of log target. This is to avoid the duplicated addition * of log target */ //private Set logTargets = new HashSet(); public LogWriterLog4JImpl(File configDir, Level level) throws IOException { setUpLogging(configDir, level); currentLogLevel = level.toInt(); // the base logging category for all our classes //ozoneRoot = Logger.getLogger(OZONE_BASE_PACKAGE); // this is needed by the Server shutdownHook createLogger(OzoneLogger.getLogger("java.lang")); } public void setUpLogging(File configDir, Level level) throws IOException { File loggingPropsFile = new File(configDir, LOG_CONFIG_FILE_NAME); if (!loggingPropsFile.exists()) { createLoggingProps(loggingPropsFile, new File(configDir, LOG_FILE), level.toString()); } System.out.println("Loading props for " + loggingPropsFile); PropertyConfigurator.configure(loggingPropsFile.getAbsolutePath()); } private void createLoggingProps(File loggingPropsfile, File logFile, String logLevel) throws IOException { FileWriter out = new FileWriter(loggingPropsfile); //String fileLog = databaseDir + LOG_FILE; //logWriter.addLogTarget("stdout", System.out, debugLevel ); //logWriter.addLogTarget(fileLog, new FileOutputStream( fileLog ), debugLevel ); // see log4j documentation out.write("############ Logger Factory #################\n"); out.write("log4j.loggerFactory=org.ozoneDB.util.OzoneLoggerFactory\n"); out.write("\n############ Console Appender ###############\n"); out.write("log4j.appender.stdout=org.apache.log4j.ConsoleAppender\n"); out.write("log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\n"); out.write("# Pattern to output the caller's file name and line number.\n"); out.write("log4j.appender.stdout.layout.ConversionPattern=" + PATTERN_LAYOUT + "\n"); out.write("\n############ File Appender ###############\n"); out.write("log4j.appender.file=org.apache.log4j.RollingFileAppender\n"); out.write("log4j.appender.file.layout=org.apache.log4j.PatternLayout\n"); out.write("log4j.appender.file.layout.ConversionPattern=" + PATTERN_LAYOUT + "\n"); out.write("log4j.appender.file.MaxFileSize=2MB\n"); out.write("log4j.appender.file.MaxBackupIndex=4\n"); out.write("log4j.appender.file.File=" + ensureFileFormat(logFile.getCanonicalPath()) + "\n"); out.write("\n############ Log levels ###############\n"); out.write("log4j.logger." + OZONE_BASE_PACKAGE + "=" + logLevel + "#org.ozoneDB.util.OzoneDebugLevel, stdout, file\n"); // add an appender to test classes so that log4j can be used out.write("log4j.logger.test=INFO#org.ozoneDB.util.OzoneDebugLevel, stdout, file\n"); out.write("# Example - turning up debugging on core\n"); out.write("#log4j.logger.org.ozoneDB.core=DEBUG2#org.ozoneDB.util.OzoneDebugLevel, stdout, file\n"); out.write("#log4j.additivity.org.ozoneDB.core=false\n"); out.flush(); out.close(); } /** ensure properties file format. Windows single \ will not work * so we need to change it. Front slashes works fine. */ private String ensureFileFormat(String path) { return path.replace('\\', '/'); } /** * This method allows to quickly find out if there is any log target that * would receive entries of the specified level. */ public boolean hasTarget(int level) { return level >= currentLogLevel; } /* private void addLogTarget(int level) { currentLogLevel = level; ozoneRoot.setLevel(OzoneDebugLevel.toLevel(level)); } *//* public void addLogTarget(String name, OutputStream out, int level) { if (logTargets.add(out)) { Appender appender = new WriterAppender(getLayout(), out); appender.setName(name); ozoneRoot.addAppender(appender); addLogTarget(level); } } public void addLogTarget(PrintWriter writer, int level, String name) { if (logTargets.add(writer)) { Appender appender = new WriterAppender(getLayout(), writer); appender.setName(name); ozoneRoot.addAppender(appender); addLogTarget(level); } } */ private void createLogger(Logger logger) { Appender appender = new ConsoleAppender(new PatternLayout(PATTERN_LAYOUT)); appender.setName(logger.getName()); logger.addAppender(appender); logger.setLevel(OzoneDebugLevel.INFO); } public void newEntry(Object sender, String msg, int level) { OzoneLogger logger = (OzoneLogger) OzoneLogger.getInstance(sender != null ? sender.getClass().getName() : LogWriterLog4JImpl.class.getName()); logger.log(OzoneDebugLevel.toLevel(level), msg); } public void newEntry(Object sender, String msg, Throwable e, int level) { OzoneLogger logger = (OzoneLogger) OzoneLogger.getInstance(sender != null ? sender.getClass().getName() : LogWriterLog4JImpl.class.getName()); logger.log(OzoneDebugLevel.toLevel(level), msg, e); } public static void printLogInfo(Logger logger) { if (logger == null) { System.out.println("logger is null"); return; } java.util.Enumeration e = logger.getAllAppenders(); Appender appender; System.out.println("\nLog info for " + logger.getName()); final String space = "\t\t\t"; while (e.hasMoreElements()) { appender = (Appender) e.nextElement(); System.out.println(appender.getName() + space + appender.getClass().getName()); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -