logmanager.java~2~

来自「一个自己做的公司网站和办公职员管理系统。」· JAVA~2~ 代码 · 共 136 行

JAVA~2~
136
字号
package ws.woa.logger;

import java.io.FileInputStream;
import java.util.HashMap;

import ws.woa.core.ControllerServlet;
import org.apache.xerces.parsers.SAXParser;
import org.xml.sax.Attributes;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

/**
 * system-conf.xml偐傜儘僌偵娭偡傞愝掕傪夝愅偟丄
 * 揔愗偵愝掕偝傟偨LogWriter傪庢摼偡傞偨傔偺僼傽僋僩儕偲偟偰摦嶌偟傑偡丅
 *
 * @author Wang
 */
public class LogManager {

	private static LogManager instance = null;
	private HashMap map = new HashMap();

	/**
     * 僾儔僀儀乕僩僐儞僗僩儔僋僞
     */
	private LogManager() {
        try {
            String file = ControllerServlet.context.getRealPath("/WEB-INF/system.xml");
            LogSAXHandler handler = new LogSAXHandler();
        	XMLReader parser = new SAXParser();
        	parser.setContentHandler(handler);
        	parser.setErrorHandler(handler);
        	parser.parse(new InputSource(new FileInputStream(file)));
        } catch(Exception ex){
            // 儘僌偼傾僾儕働乕僔儑儞偺堦晹偱偼側偄偺偱
            // 愝掕偑偍偐偟偔偰傕儘僌弌椡晄壜偵偡傞偩偗丅
        }
	}

	/**
     * LogWriter傪庢摼偟傑偡丅
     * @param name system.xml偱掕媊偟偨logger偺柤慜
     * @return LogWriter
     */
	public LogWriter getLogWriter(String name){
        if(map.get(name)==null){
            return new LogWriter();
        }
		return (LogWriter)map.get(name);
	}

	/**
     * LogManager偺僀儞僗僞儞僗傪庢摼偟傑偡丅
     * @return LogManager
     */
	public static synchronized LogManager getInstance() {
		if(instance==null){
			instance = new LogManager();
		}
		return instance;
	}

	/*---------------------------------------------------------------*/
	/**
	 * system.xml傪夝愅偟丄儘僌娭學偺忣曬傪庢摼偡傞僴儞僪儔丅
	 */
	class LogSAXHandler extends DefaultHandler {

		/**
		 * 僞僌奐巒僀儀儞僩偺張棟丅
		 * 傾僋僔儑儞掕媊僼傽僀儖偵晄惓偑偁偭偨応崌偼幚峴帪椺奜傪throw偟傑偡丅
		 */
		public void startElement(String uri,String local,String raw,Attributes attrs){
			if(raw.equals("log")){
				parseLog(attrs);
			}
		}

		/**
		 * log僞僌偺夝愅
		 */
		private void parseLog(Attributes attrs){
			String name   = attrs.getValue("name");
			String serial = attrs.getValue("serializer");
			String level  = attrs.getValue("level");
			String file   = attrs.getValue("path");
            String a_file = attrs.getValue("absolute-path");
			String encode = attrs.getValue("encode");

			LogWriter logger         = new LogWriter();
			LogSerializer serializer = null;

			// 僔儕傾儔僀僓偺僀儞僗僞儞僗傪惗惉
			if(serial.equals("systemout")){
				serializer = new SystemOutSerializer();
			} else if(serial.equals("file")){
                if(a_file!=null){
                    // 愨懳僷僗傪巊梡
                    serializer = new FileSerializer(a_file);
                } else if(file!=null){
                    // 傾僾儕働乕僔儑儞儖乕僩偐傜偺憡懳僷僗傪巊梡
    				serializer = new FileSerializer(ControllerServlet.context.getRealPath(file));
                } else {
                    // 僄儔乕
                    serializer = new NullSerializer();
                }
			}
            // 僄儞僐乕僪傪巜掕
            if(encode!=null && !encode.equals("")){
                serializer.setEncode(encode);
            }
			logger.setSerializer(serializer);

			// 儘僌儗儀儖傪僙僢僩
			if(level.equals("DEBUG")){
				logger.setLevel(LogConstants.DEBUG);
			} else if(level.equals("ERROR")){
				logger.setLevel(LogConstants.ERROR);
			} else if(level.equals("ALART")){
				logger.setLevel(LogConstants.ALART);
			} else if(level.equals("REPORT")){
				logger.setLevel(LogConstants.REPORT);
			} else if(level.equals("NOTHING")){
				logger.setLevel(LogConstants.NOTHING);
			}

			map.put(name,logger);
		}

	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?