logmanager.java~4~

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

JAVA~4~
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 + -
显示快捷键?