📄 logger.java
字号:
package cn.edu.nju.software.sd.cll;// <editor-fold defaultstate="collapsed" desc=" UML Marker "> import java.util.ArrayList; // #[regen=yes,id=DCE.328B2622-127B-E8D6-421A-545DF3CFBBD4] import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;/** * class Logger. * It seemes like the most important class. * * Implements the interface "LogSubject" ,as the 'WeatherData' class in * the observer pattern * @author SuSE * */public class Logger implements LogSubject { // <editor-fold defaultstate="collapsed" desc=" UML Marker "> // #[regen=yes,id=DCE.098E40EE-ADD0-3BCB-1CF7-9C697F2F665B] // </editor-fold> private String Name; // <editor-fold defaultstate="collapsed" desc=" UML Marker "> // #[regen=yes,id=DCE.1E9D2E61-EEAD-C64B-2DF8-8F814FCC3C4E] // </editor-fold> private Level level; // <editor-fold defaultstate="collapsed" desc=" UML Marker "> // #[regen=yes,id=DCE.8FF2E1FE-2F03-4320-3ECD-1901AC6EF89E] // </editor-fold> private ArrayList <Appender> Appenders; private String Destination=""; private Layout layout; // <editor-fold defaultstate="collapsed" desc=" UML Marker "> // #[regen=yes,id=DCE.8796A190-B545-7789-48E3-20CA9E2C76F1] // </editor-fold> /** * Construct. */ public Logger () { Appenders=new ArrayList <Appender> (); } /** * Construct. * @param Name */ public Logger (String Name) { Appenders=new ArrayList <Appender> (); this.Name=Name; this.setLayout(new PatternLayout("%m-%n")); this.setLevel(Level.TRACE); // System.out.println(this.getLevel().toInt()+this.getLevel().toString()); this.setDestination("Console"); } /** * Operates on setlayout, the Layout value hidden */ public void setLayout(Layout layout){ this.layout=layout; for(int i=0;i<Appenders.size();i++) { Appender aappend=(Appender)Appenders.get(i); aappend.setLayout(layout); } } /** * getlayout, the Layout value hidden * @return */ public Layout getLayout() { return layout; } // // <editor-fold defaultstate="collapsed" desc=" UML Marker "> // #[regen=yes,regenBody=yes,id=DCE.D5937A74-FD15-4424-B7F2-04AA3846CBD9] // </editor-fold> /** * getName ,the Name value hidden */ public String getName () { return Name; }/** * setName ,the Name value hidden * @param val */ public void setName (String val) { this.Name = val; } /** * getLevel ,the Level value hidden * @return */ public Level getLevel () { return level; } /** * setLevel ,the Level value hidden * @param level */ public void setLevel (Level level) { this.level= level; } /** * log function, call the method of Notify in the pattern of Observer pattern. * @param mslevel * @param message */ public void log(Level mslevel,String message){ if(mslevel.toInt()<this.level.toInt()) {// System.out.println("No Rights to write!"); return; } Notify(this,message); } /** * copy ,copy the value of Logger. * Some use of Default value * @param logger */ public void copy(Logger logger) { this.setLevel(logger.getLevel()); this.setDestination(logger.getDestination()); this.setLayout(logger.getLayout()); } /** * setDestination function * to find the real Destination from the String in the file. * Something is hidden. * @param destination */ public void setDestination(String destination) { // TODO Auto-generated method stub this.clearAppenders(); seperateDestination(destination); } private void seperateDestination(String destination){ this.Destination=destination; String temp=destination; // this.destinationChanged=true; int i=temp.lastIndexOf(','); if (i==-1) { setRealDestination(temp); // System.out.println(); // System.out.println("a"+temp+"b"); // System.out.println(); return; } else { seperateDestination(temp.substring(i+1)); seperateDestination(temp.substring(0,i)); } } private void setRealDestination(String RealDestination){ if (RealDestination.equalsIgnoreCase("Console")) { Register(new ConsoleAppender(this.getLayout())); //System.out.println(RealDestination); } else //System.out.println(RealDestination); Register(new FileAppender(this.getLayout(),RealDestination)); } private void clearAppenders() { // TODO Auto-generated method stub Appenders.clear(); }/** * getDestination,the Destination value hidden. * @return */ public String getDestination() { // TODO Auto-generated method stub return Destination; } @SuppressWarnings("unchecked") private void AddAppender(Appender a){ Appenders.add(a); } /** * ^To appender an object of Appender^ * */ public void Register (Appender a) { AddAppender(a); } /** * To remove an object of Appender */ public void Remove (Appender a) { int i=Appenders.indexOf(a); if (i>=0){ Appenders.remove(i); } } /** * Notify function ,to traversal the AppayList. */ public void Notify (Logger logger,String message) { for (int i=0;i<Appenders.size();i++){ //Weather station mode. Appender appender=(Appender) Appenders.get(i); appender.update(logger,message); } } /** * getLogger function * the entrance of the factory pattern. * @param clazz * @return */ public static Logger getLogger (Class<?> clazz) { return LoggerFactory.getLogger(clazz.getName()); } /** * getLogger function * the entrance of the factory pattern. * @param STRname * @return */ public static Logger getLogger (String STRname) { return LoggerFactory.getLogger(STRname); } /** * read the configuration file(s); * the inputfile dir can be changed here. * * @return */ protected boolean readConfig(){ String a="src/conf/parentLogger.properties"; String b="src/conf/implChildLogger.properties" ; return (read(a)||read(b)) ; } @SuppressWarnings("static-access") private boolean read(String fileLocation ){ Properties prop=new Properties(); // dir.add("src/conf/parentLogger.conf" ); // dir.add("src/conf/implChildLogger.conf" ); // dir. try{ FileInputStream in=new FileInputStream(fileLocation); prop.load(in); in.close(); // System.out.println("a"+prop.getProperty("name")); // System.out.println("b"+this.getName()); if(prop.getProperty("name").equalsIgnoreCase(this.getName() )) { this.setName(prop.getProperty("name")) ; // System.out.println(this.getName()); String Str=prop.getProperty("level"); this.setLevel(level.toLevel(Str)); // System.out.println(this.getLevel().toInt()+this.getLevel().toString()); this.setDestination(prop.getProperty("destination")); // System.out.println(this.getDestination()); this.setLayout(new PatternLayout(prop.getProperty("format"))); // System.out.println(prop.getProperty("format")); // System.out.println(this.getLayout().getSign()); prop.clear(); } else throw new IOException(); // System.out.println( Name); // System.out.println( Destination); } catch (Exception e) { //System.out.println("Read Failed!"); return false; } return true; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -