在有了Position類和接口類之后,我們是不是立刻就要着手開始寫實現類了呢?按照一般的順序是這樣。但是,我們這里先停一下。原因有二:
1)既然是寫一個框架,我們希望總體的功能上是全面的。實現類中,我們需要設計和實現各種具體的操作方法。那么,如果中間出了問題,我們希望能夠有所記錄(log),所以需要有一個Log類。
2)既然是需要記錄,我們希望能夠在每次測試的測試報告中,體現該次測試操作的記錄。那么,就需要對所做的測試進行監聽,所以我們也需要一個監聽(Listener)的類。
在寫log類之前,我們需要在項目中導入log4j的jar包,具體的下載地址:https://mvnrepository.com/artifact/log4j/log4j
在導入log4j-1.2.17.jar的包后,我們開始着手寫Log類。
package webui.xUtils; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class logUtil { private final Class<?> clazz; private Logger logger; //這里是定義logUtil的構造函數,因為不明確需要記錄log的類是什么樣子的,所以使用泛型Class<?> clazz public logUtil(Class<?> clazz) { this.clazz = clazz; this.logger = Logger.getLogger(this.clazz); logUtil.initlog4j(); } //定義記錄log的方法 private static void initlog4j() { //創建Propderties對象 Properties prop = new Properties(); /*Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG 這里定義能顯示到的最低級別,若定義到INFO級別,則看不到DEBUG級別的信息了~!級別后面是輸出端*/ prop.setProperty("log4j.rootLogger", "INFO,CONSOLE,E,F"); prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender"); prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout"); prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n"); //設置日志輸出的路徑 String src = "test-output/log"; //設置日期格式 SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd"); //獲取當前日期,並根據當前的日期建立文件夾,將生成的.log文件放入當前日期的文件夾。 String date=dateFormat.format(new Date()).toString(); File dir = new File(src+"/"+date); if (!dir.exists()){ dir.mkdirs(); } String filepath=dir.getAbsolutePath()+"/"+"log_"+date+".log"; prop.setProperty("log4j.appender.E","org.apache.log4j.FileAppender"); prop.setProperty("log4j.appender.E.file",filepath); prop.setProperty("log4j.appender.E.layout","org.apache.log4j.PatternLayout"); prop.setProperty("log4j.appender.E.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n"); prop.setProperty("log4j.appender.F","org.apache.log4j.FileAppender"); prop.setProperty("log4j.appender.file.encoding","UTF-8"); //生成Html格式的日志,並將生成的.html的日志文件放入當前日期的文件夾。 String filepathHtml=dir.getAbsolutePath()+"/"+"log_"+date+".html"; prop.setProperty("log4j.appender.F.file",filepathHtml); prop.setProperty("log4j.appender.F.layout","org.apache.log4j.HTMLLayout"); //prop.setProperty("log4j.appender.F.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n"); PropertyConfigurator.configure(prop); } public void info(String message) { logger.info(message); } public void debug(String message) { logger.debug(message); } public void error(String message) { logger.error(message); } public void trace(String message) { logger.trace(message); } }
到此,log類就算完成了。在使用的時候,直接定義一個實例來調用相應的方法即可。例如: logUtil logs = new logUtil(X.class);
另外,除了logUtil中定義的樣式,在需要記錄的地方,可以調用該類中相應的方法,比如logs.info("測試開始"),那么在執行相應程序的時候,這段話就會被記錄在log文件中。這樣,就方便我們自己定義log的內容了。