版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、日志標(biāo)準(zhǔn)化規(guī)范背景隨著互聯(lián)網(wǎng)絡(luò)的飛速發(fā)展,各行各業(yè)已經(jīng)不限于知道信息,更是挖掘、把握住隱藏在信息后面的信息。海量的數(shù)據(jù)是一種寶貴的財(cái)富,如何按照不同維度、各種口徑和規(guī)則從海量的、隱含的、雜亂的、重復(fù)的web日志或用戶訪問信息中發(fā)現(xiàn)、提煉、分析、統(tǒng)計(jì)出有用的知識和應(yīng)用價(jià)值,進(jìn)而提高服務(wù)質(zhì)量,改進(jìn)網(wǎng)站的結(jié)構(gòu)和內(nèi)容,挖掘出有意義的用戶訪問模式、規(guī)則以及相關(guān)的潛在用戶群等是一件非常有意義的工作。為實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)的異常狀態(tài),跟蹤網(wǎng)絡(luò)應(yīng)用資源的使用情況,實(shí)現(xiàn)對眾多設(shè)備主機(jī)日志信息的集中分析和管控,實(shí)現(xiàn)各種日志格式的兼容,準(zhǔn)確定位出問題的物理服務(wù)器和時(shí)間段等,目前南航通過統(tǒng)一集中部署SpringAOP(kaf
2、a/redis)+Elasticsearch+Logstash+Kibana日志分析平臺實(shí)現(xiàn)了對日志收集、存儲(chǔ)、搜索、分析、監(jiān)控及展現(xiàn),并開放訪問接口給開發(fā)人員,開發(fā)人員以ELK日志分析平臺的源數(shù)據(jù)為基礎(chǔ),對數(shù)據(jù)進(jìn)行預(yù)處理、維度匯總,進(jìn)而形成行業(yè)上的各種指標(biāo)。ELK具有強(qiáng)大的搜索和展現(xiàn)功能,它只需安裝部署而不需要編寫代碼,即可進(jìn)行業(yè)務(wù)數(shù)據(jù)分析、錯(cuò)誤日志分析及數(shù)據(jù)預(yù)警等。而SpringAop是OOP的延續(xù),它就像刀切豆腐一樣橫切整個(gè)系統(tǒng),將“關(guān)注”封裝在切面中,實(shí)現(xiàn)了調(diào)用者與被調(diào)用者之間的解耦合,是需要人工編寫相關(guān)的代碼實(shí)現(xiàn)日志的輸出的,而在現(xiàn)實(shí)中日志記錄無統(tǒng)一規(guī)范,導(dǎo)致無法準(zhǔn)確快速的定位問題或
3、者獲取到想要的數(shù)據(jù)。所以本文將日志的規(guī)范重點(diǎn)放在SpringAop上。原則.集中的日志服務(wù)器:在WEB集群節(jié)點(diǎn)越來越多的情況下,讓開發(fā)及系統(tǒng)維護(hù)人員能很方便的查看日志信息。.日志信息輸出策略:日志信息輸出全而不亂,便于跟蹤和分析問題。.關(guān)鍵業(yè)務(wù)的日志輸出:基于數(shù)據(jù)采集、數(shù)據(jù)核查、系統(tǒng)安全等方面的考慮,關(guān)鍵業(yè)務(wù)系統(tǒng)對輸出的日志信息有特殊的要求,需要做針對性的設(shè)計(jì)。.支持備份與保密機(jī)制:防止日志丟失,敏感信息應(yīng)加密,分布式文件系統(tǒng)保證可靠性。日志分類日志文件按應(yīng)用需求功能分為訪問日志、應(yīng)用日志和系統(tǒng)日志。按等級從低到高分為TRACE級、DEBUG級、INFO級、WARN級、ERROR級、FATAL
4、級六級。1.TRACE級、DEBUG級:理論上“不屬于錯(cuò)誤”,只是打印一些狀態(tài)、提示信息,以便開發(fā)過程中觀察,開發(fā)完成、正式上線后需要屏蔽。NFO級:理論上“不屬于錯(cuò)誤”,只是一些提示性的信息,但是即使在開發(fā)完成、正式上線的系統(tǒng)中,也有保留的價(jià)值。在實(shí)際環(huán)境中,系統(tǒng)管理員或者高級用戶要能理解INFO輸出的信息并能很快的了解應(yīng)用正在做什么。比如,一個(gè)和處理機(jī)票預(yù)訂的系統(tǒng),對每一1張票要有且只有一1條INFO信息描述WhobookedticketfromWheretoWhereo.WARN級:屬于輕微的“警告”,程序中出現(xiàn)了一些異常情況,但是影響不大,還可以正常使用。.ERROR級:屬于“普通的錯(cuò)
5、誤”,在程序可以控制的范圍內(nèi),不會(huì)造成連鎖影響或巨大影響,日志發(fā)生之后其實(shí)不會(huì)導(dǎo)致系統(tǒng)運(yùn)行出現(xiàn)異常的,可能是對某些數(shù)據(jù)的初始化深入驗(yàn)證出現(xiàn)的問題。.FATAL級:屬于“致命錯(cuò)誤”,開發(fā)過程中的try.catch模塊中拋出的一些未能預(yù)料到的系統(tǒng)錯(cuò)誤,可導(dǎo)致整個(gè)系統(tǒng)或者一系列功能無法使用,甚至導(dǎo)致系統(tǒng)癱瘓、關(guān)閉,必須馬上有人進(jìn)行處理。比如:空指針異常,數(shù)據(jù)庫不可用,如硬盤空間滿等,關(guān)鍵業(yè)務(wù)流程中斷等等。四.代碼日志規(guī)范.【強(qiáng)制】系統(tǒng)應(yīng)用中不可直接使用日志系統(tǒng)(Log4j、Logback)中的API,而應(yīng)依賴使用日志框架SLF4J中的API,使用門面模式的日志框架,有利于維護(hù)和各個(gè)類的日志處理方式統(tǒng)
6、一。importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;privatestaticfinalLoggerlogger=LoggerFactory.getLogger(Abc.class)。.【強(qiáng)制】日志文件推薦至少保存15天,因?yàn)橛行┊惓>邆湟浴爸堋睘轭l次發(fā)生的特點(diǎn)。.【強(qiáng)制】應(yīng)用中的擴(kuò)展日志(如打點(diǎn)、臨時(shí)監(jiān)控、訪問日志等)命名方式:appName_logType_logName.log。logType:日志類型,推薦分類有stats/desc/monitor/visit等;logName:日志描述。這種命名的好處:通過文件名就可知道日志文
7、件屬于什么應(yīng)用,什么類型,什么目的,也有利于歸類查找。正例:mppserver應(yīng)用中單獨(dú)監(jiān)控時(shí)區(qū)轉(zhuǎn)換異常,如:mppserver_monitor_timeZoneConvert.log說明:推薦對日志進(jìn)行分類,如將錯(cuò)誤日志和業(yè)務(wù)日志分開存放,便于開發(fā)人員查看,也便于通過日志對系統(tǒng)進(jìn)行及時(shí)監(jiān)控。.【強(qiáng)制】對trace/debug/info級別的日志輸出,必須使用條件輸出形式或者使用占位符的方式。說明:logger.debug(Processingtradewithid:+id+symbol:+symbol);如果日志級別U是warn,上述日志不會(huì)打印,但是會(huì)執(zhí)行字符串拼接操作,如果symbol是
8、對象,會(huì)執(zhí)行toStringO方法,浪費(fèi)了系統(tǒng)資源,執(zhí)行了上述操作,最終日志卻沒有打印。正例:(條件)if(logger.isDebugEnabled()logger.debug(Processingtradewithid:+id+symbol:+symbol);正例:(占位符)logger.debug(Processingtradewithid:symbol:,id,symbol);解釋:debug/info級別的信息,信息本身需要計(jì)算或合并的,必須加isXxxEnabled。判斷在前,這樣可以大大提高高并發(fā)下的效率。如果不加isXxxEnabled。判斷,Processingtradewi
9、thid:+id+symbol:+symbol在info級別下也會(huì)執(zhí)行。.【強(qiáng)制】避免重復(fù)打印日志,浪費(fèi)磁盤空間,務(wù)必在log4j.xml中設(shè)置additivity=false。正例:loggername=com.taobao.dubbo.configadditivity=false.【強(qiáng)制】異常信息應(yīng)該包括兩類信息:案發(fā)現(xiàn)場信息和異常堆棧信息。如果不處理,那么通過關(guān)鍵字由。卬$往上拋出。正例:1。88紅。(各類參數(shù)或者對象toString+_+e.getMessage(),e);.【推薦】謹(jǐn)慎地記錄日志。生產(chǎn)環(huán)境禁止輸出debug日志;有選擇地輸出山也日志;如果使用warn來記錄剛上線時(shí)的業(yè)
10、務(wù)行為信息,一定要注意日志輸出量的問題,避免把服務(wù)器磁盤撐爆,并記得及時(shí)刪除這些觀察日志。說明:大量地輸出無效日志,不利于系統(tǒng)性能提升,也不利于快速定位錯(cuò)誤點(diǎn)。記錄日志時(shí)請思考:這些日志真的有人看嗎?看到這條日志你能做什么?能不能給問題排查帶來好處?.【參考】可以使用卬&日志級別來記錄用戶輸入?yún)?shù)錯(cuò)誤的情況,避免用戶投訴時(shí),無所適從。注意日志輸出的級別,error級別只記錄系統(tǒng)邏輯出錯(cuò)、異常等重要的錯(cuò)誤信息。如非必要,請不要在此場景打出error級別。以上8條來自于阿里巴巴開發(fā)手冊-日志規(guī)約。.Web日志記錄了用戶對網(wǎng)站的每一次點(diǎn)擊訪問,即每一次接口的調(diào)用。但由于各種原因,web日志中有些記錄
11、是缺失或不完整的數(shù)據(jù),推薦在每個(gè)接口調(diào)用后,在其入口輸出調(diào)用類名及輸入?yún)?shù)的日志,以及接口結(jié)束前輸出返回?cái)?shù)據(jù)的日志,并使用info級別。另外,重要方法入口,業(yè)務(wù)流程前后及處理的結(jié)果等,推薦記錄log,并使用debug級別,因?yàn)閷τ诜情_發(fā)人員掌控的環(huán)境(無法做DEBUG),記錄方法調(diào)用、入?yún)?、返回值的方式對于排查問題會(huì)有很大幫助。.日志輸出規(guī)范。應(yīng)用程序禁止直接使用Log4JAPI,并且禁止使用JDKConsole輸出(System.out,System.err,ex.printStackTrace。,etc.),應(yīng)使用logger.debug、logger.error。所有的日志實(shí)例的屬性都應(yīng)
12、從根日志(rootlogger)繼承。日志信息必須支持輸出到控制臺(console)和文本文件(TextFiles)。輸出到文本文件(TextFiles)的日志,應(yīng)提供日志文件分析腳本,以方便查詢閱讀、統(tǒng)計(jì)分析。11關(guān)注日志記錄對于系統(tǒng)性能、安全性的影響,不要多次重復(fù)記錄日志。日志記錄太過于頻繁,日志記錄到文件IO或者數(shù)據(jù)庫都是很費(fèi)CPU和內(nèi)存資源的事,會(huì)對系統(tǒng)的性能產(chǎn)生影響。關(guān)注日志是否會(huì)被惡意攻擊頻繁打印日志,使得日志文件超過100G、500G直到磁盤容量爆滿,服務(wù)器掛掉。12記錄要精簡、不濫用日志,關(guān)注日志記錄的正確性和必要性。分清楚什么時(shí)候應(yīng)該記錄日志,什么時(shí)候不需要記錄日志。什么是T
13、RACE、DEBUG信息,什么是INFO、ERROR信息。對于異常處理,不要多次重復(fù)的記錄同一個(gè)異常的堆棧信息。比如在DAO層記錄了異常堆棧信息,然后拋出異常,在web層catch了異常之后,又記錄了一次異常堆棧信息。13在日志信息上添加便于檢閱、查找的額外標(biāo)識。每條日志都應(yīng)有關(guān)鍵標(biāo)識,能夠盡快定位某條信息的位置。包括日期和時(shí)間,程序Java類的名稱、方法甚至行號,錯(cuò)誤類型或者錯(cuò)誤代碼。否則前端web頁面報(bào)錯(cuò),告訴開發(fā)人員去查找問題,開發(fā)人員很難去查找當(dāng)時(shí)的操作日志或者異常信息。.Log對象的聲明和初始化僅以下代碼是符合規(guī)范:/(推薦)privatestaticfinalLoggerlogge
14、r=LoggerFactory.getLogger(Xxx.class);privatefinalLoggerlogger=LoggerFactory.getLogger(getClass();privatestaticLoggerlogger=LoggerFactory.getLogger(Xxx.class);protectedfinalLoggerlogger=LoggerFactory.getLogger(getClass();privateLoggerlogger=LoggerFactory.getLogger(getClass();protectedLoggerlogger=Log
15、gerFactory.getLogger(getClass();privatestaticfinalLoggerlogger=LoggerFactory.getLogger(loggerName);.注意error和warn級別的區(qū)別,導(dǎo)致業(yè)務(wù)不正常服務(wù)的,用error級別;錯(cuò)誤是預(yù)期會(huì)發(fā)生的,并且已經(jīng)有了其他的處理流程,使用warn級別。.Log的內(nèi)容須確保不會(huì)因?yàn)長og語句的問題而拋出異常造成中斷,如下有可能會(huì)拋出NullPointerException:log.debug(Processingrequestwithid:,request.getId();.日志配置一般有:日志級別、輸出位
16、置,如果有日志分析工具,還需仔細(xì)設(shè)計(jì)日志格式的配置,以能夠在工具中完美展示。所有的日志配置文件放在$宣目錄下,編譯時(shí)隨同。class文件一同拷貝到(%webapp_HOME%)WEB-INFclasses目錄下,這些配置文件推薦采用properties文件的編寫方法,perties文件用來指定commons-logging的實(shí)現(xiàn)為log4j,perties文件用來配置log4j的所有參數(shù),日志配置信息不得配置在這兩個(gè)文件以外的文件中。.用戶操作日志。用戶操作日志面臨記錄頻繁、數(shù)據(jù)結(jié)構(gòu)異常多、數(shù)據(jù)流量非常大、數(shù)據(jù)價(jià)值如何提高等問題。在記錄用戶的操作日志盡量不要浪費(fèi)系統(tǒng)的額外性能開銷,但是我們記錄
17、的信息要方便下一步的數(shù)據(jù)挖掘用戶行為分析。頻繁記錄日志會(huì)導(dǎo)致系統(tǒng)IO的消耗,我們可以采用Redis或memcached這一類內(nèi)出數(shù)據(jù)庫先行記錄日志當(dāng)量達(dá)到一定規(guī)模自動(dòng)記錄到日志文件中避免平凡調(diào)用IO進(jìn)行文件數(shù)據(jù)寫入或數(shù)據(jù)庫寫入。(2)定義統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),這樣做的目的是為了能夠方便使用相應(yīng)的工具進(jìn)行用戶操作日志挖掘。(3)提高用戶數(shù)據(jù)價(jià)值,目的是為了提高分析用戶數(shù)據(jù),分析用戶數(shù)據(jù)是為了分析出一種或幾種用戶行為模式。要做到易于分析用戶模式需要建立相應(yīng)的操作日志記錄結(jié)構(gòu),規(guī)定好結(jié)構(gòu)進(jìn)行分析就降低了復(fù)雜度。用戶日志分析有以下幾點(diǎn)好處:.高價(jià)值用戶挖掘。.高價(jià)值航班挖掘。.客戶偏好收集,為了下一步進(jìn)行客
18、戶建模,然后提供貼心的服務(wù)。.產(chǎn)品捆綁式銷售,來自對客戶的建模之后。.發(fā)覺社會(huì)影響力大的任務(wù)或關(guān)鍵人物。有了這些結(jié)果,就可以體現(xiàn)用戶日志價(jià)值,并盡快制定符合自己公司的記錄結(jié)構(gòu)。.關(guān)鍵業(yè)務(wù)系統(tǒng)日志的要求(1)權(quán)限管理日志定義:記錄業(yè)務(wù)應(yīng)用系統(tǒng)的用戶權(quán)限分配管轄的每一個(gè)更改活動(dòng)。日志類型:包括用戶/用戶組的權(quán)限指派與移除。日志信息:包括操作時(shí)間,系統(tǒng)設(shè)備的主機(jī)名和IP地址;操作用戶(誰在操作);授權(quán)用戶/用戶組,權(quán)限資源名稱、操作方式(如分配、刪除、修改),操作結(jié)果(如成功、失?。?)帳號管理日志定義:記錄業(yè)務(wù)應(yīng)用系統(tǒng)上每個(gè)帳戶的管理活動(dòng)日志類型:包括用戶的創(chuàng)建、刪除、修改、禁用,帳戶密碼的管理
19、,包括創(chuàng)建、修改等。日志信息:包括操作時(shí)間,系統(tǒng)設(shè)備的主機(jī)名和IP地址;操作用戶;被管理的用戶/用戶組,操作方式(如創(chuàng)建、刪除、修改、禁用),操作結(jié)果(如成功、失敗)(3)系統(tǒng)自身日志定義:記錄應(yīng)用系統(tǒng)在啟動(dòng)或關(guān)閉服務(wù)時(shí)或者在發(fā)生影響業(yè)務(wù)應(yīng)用系統(tǒng)故障的活動(dòng)。日志類型:包括服務(wù)啟動(dòng)、服務(wù)停止,系統(tǒng)故障。日志信息:包括操作時(shí)間,系統(tǒng)設(shè)備的主機(jī)名和IP地址;操作用戶;操作方式(如服務(wù)啟動(dòng)),操作結(jié)果(如成功、失?。?)用戶登錄日志定義:記錄業(yè)務(wù)應(yīng)用系統(tǒng)的用戶登錄認(rèn)證、退出活動(dòng)日志類型:包括成功的用戶登錄認(rèn)證,失敗的用戶登錄認(rèn)證,用戶注銷,用戶超時(shí)退出日志信息:包括操作時(shí)間,系統(tǒng)設(shè)備的主機(jī)名和IP地
20、址,操作用戶,操作源IP,渠道信息,操作方式(如查詢、插入、刪除等),操作結(jié)果(成功、失敗),請求花費(fèi)時(shí)間、tokenid、sessionid。(5)服務(wù)接口調(diào)用日志定義:使用WEB服務(wù)器或所有外部接口的調(diào)用需要記錄接口訪問信息,如用戶瀏覽。日志信息:包括請求時(shí)間、用戶IP、接DURL、HTTP狀態(tài)碼、接口方法、調(diào)用結(jié)果、執(zhí)行時(shí)間(6)業(yè)務(wù)訪問日志定義:記錄用戶訪問的業(yè)務(wù)應(yīng)用系統(tǒng)的業(yè)務(wù)資源,這一類日志用于跟蹤用戶的行為分析是非常的重要的,可作為用戶數(shù)據(jù)挖掘發(fā)現(xiàn)用戶的喜好等一些信息,與5有重復(fù)。日志信息:包括操作時(shí)間,系統(tǒng)設(shè)備的主機(jī)名和IP地址,操作用戶,操作源IP,訪問的資源名稱,操作方式(如
21、查詢、插入、刪除等),操作結(jié)果(成功、失?。?記錄異常信息是“記錄所有信息”中的一個(gè)重要組成,在異常處理模塊中應(yīng)提供適量的錯(cuò)誤原因信息,但很多開發(fā)人員只是把logging當(dāng)做處理異常的一種方式。他們通常返回缺省值,然后當(dāng)做什么都沒發(fā)生。而有些開發(fā)人員先log異常信息,然后再拋出包裝過的異常。如:log.error(IOexception,e);thrownewMyCustomException(e);這種方法總是會(huì)打印兩次相同的stacktrace信息,因?yàn)橛行┑胤綍?huì)捕捉MyCustomException異常,然后輸出導(dǎo)致問題的日志信息。21.當(dāng)程序產(chǎn)生異常時(shí),必須捕捉并處理異常、將異常記錄
22、到日志中(除非打算拋出異常),捕獲異常后不處理也不輸出log是一種非常不負(fù)責(zé)任的行為,這會(huì)造成問題很難被定位,極大地提高調(diào)試的成本。須注意以下幾點(diǎn):將try/catch區(qū)段置于循環(huán)之外。(2)盡量減小try塊的體積,不要從try區(qū)段中返回。(3)不要將異常用于程序流程控制。不要處理能夠避免的異常。(5)盡量拋出異常,頂層的main。函數(shù)截獲所有的異常,并且打印(或者記錄在日志中)在屏幕上。異常捕獲盡量不要直接catch(Exceptionex),應(yīng)該把異常細(xì)分處理。一個(gè)方法不應(yīng)拋出太多類型的異常。說明:如果程序中需要分類處理,則將異常根據(jù)分類組織成繼承關(guān)系。如果確實(shí)有很多異常類型首先考慮用異常
23、描述來區(qū)別,throws/exception子句標(biāo)明的異常最好不要超過三個(gè)。(8)記錄異常不要保存exception.getMessage。,而要記錄exception.toString().e.getMessage。、e.toString。、e.printStackTrace()三者的區(qū)別:e.toString()獲取的信息包括異常類型和異常詳細(xì)消息;e.getMessageO只是獲取了異常的詳細(xì)消息字符串;e.printStackTrace();會(huì)打出詳細(xì)異常,異常名稱,出錯(cuò)位置,便于調(diào)試用,一般一個(gè)異常至少幾十行。trym=1/0;catch(Exceptione)System.out.println(e.toString();System.out.println(e.getMessage();輸出結(jié)果:java.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成都一診考試試題及答案
- 神經(jīng)外科主治試題及答案
- 零食小作坊衛(wèi)生管理制度
- 衛(wèi)生罰款制度
- 甜品店衛(wèi)生規(guī)則制度
- 肝膽術(shù)后黃疸的液體治療策略優(yōu)化
- 基督教衛(wèi)生管理制度
- 前廳衛(wèi)生管理制度
- 衛(wèi)生間門前三包制度規(guī)定
- 衛(wèi)生部安全輸血制度
- 2026年及未來5年市場數(shù)據(jù)中國集裝箱物流行業(yè)市場發(fā)展數(shù)據(jù)監(jiān)測及投資戰(zhàn)略規(guī)劃報(bào)告
- 中小學(xué)人工智能教育三年發(fā)展規(guī)劃(2026-2028)7500字完整方案目標(biāo)務(wù)實(shí)真能落地
- 七年級地理下冊(人教版)東半球其他的國家和地區(qū)-歐洲西部自然環(huán)境教學(xué)設(shè)計(jì)
- 口腔現(xiàn)場義診培訓(xùn)
- 學(xué)校中層管理崗位職責(zé)及分工明細(xì)(2026年版)
- 江蘇省南京市六校聯(lián)合體2026屆高一數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 就業(yè)部門內(nèi)控制度
- 2026屆江蘇省徐州市侯集高級中學(xué)高一上數(shù)學(xué)期末復(fù)習(xí)檢測試題含解析
- 2026中國電信四川公司校園招聘備考題庫附答案
- 住院患者安全告知
- 2025年山東省濟(jì)南市中考地理試題(含答案)
評論
0/150
提交評論