javaslf4j
A. slf4j怎麼列印java錯誤堆棧信息throwable對象
SLF4J 1.6.0以前的版本,如果列印異常堆棧信息,必須用
log.error(Stringmsg,Throwablet)
log.info等對應方法.
如果msg含有變數,一般用String.format方法格式化msg.
如果用
error(Stringformat,Object...arguments)
等其它方法,異常堆棧信息會丟失.
幸好,SLF4J 1.6.0以後的版本對這個不友好的異常信息log改進了.
error(Stringformat,Object…arguments)這個方法也會列印異常堆棧信息,只不過規定throwable對象必須為
最後一個參數.如果不遵守這個規定,異常堆棧信息不會log出來.
B. 如何使用SLF4J只有在JUnit測試方法無法登錄的Java語句
一般不用抄寫,直接襲測試方法,在測試的方法上加上註解@Test import org.junit.Test;public class TestJunit { @Test public void TestSaveMethod(){ Food food=new Food("紅燒肉", new BigDecimal(45.5).setScale(2, BigDecimal.ROUND_HALF_UP),
C. idea JAVA非web項目如何配置slf4j-Log4j
PropertyConfigurator.configure("E:/study/log4j/log4j.properties");
//DOMConfigurator.configure("E:/study/log4j/log4j.xml");//載入.xml文件
//從項目目錄開內始讀容
PropertyConfigurator.configure("log4j/log4j.properties");
//DOMConfigurator.configure("log4j/log4j.xml");//載入.xml文件
D. java中log4j和slf4j什麼關系我要列印日誌用哪個好呢
基本上是log4j
slf4j是不是可以滿足特殊需求, 沒有用過..
E. java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder;我按照視頻上說的將對應的jar包
中文改成英文
F. 為什麼使用 SLF4J 而不是 Log4J 來做 Java 日誌
如果使用SLF4J,可以使用更簡潔的格式達到同樣的效果,如下:
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
在SLF4J中,我們不需要進行字元串拼接,不會導致使用臨時字元串帶來的消耗。相反,我們使用帶佔位符的模板消息來記錄日誌信息,並提供實際值作為參數。在為日誌信息產生最終的字元串之前,該方法會檢查是否開啟了特定的日誌級別,這不僅降低了內存佔用,而且預先減少了執行字元串拼接所消耗的CPU時間。下面的SLF4J日誌方法的代碼,來自於slf4j-log4j12-1.6.1.jar包里的Log4j的適配器類
Log4jLoggerAdapter.
public void debug(String format, Object arg1, Object arg2) { if (logger.isDebugEnabled()) { FormattingTuple ft = MessageFormatter.format(format, arg1, arg2); logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable()); }}
日誌也會對應用程序的性能產生壓力,大家通常宣揚的是只在生產環境中才強制記錄日誌。
G. Java打包成EXE出現錯誤,java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory,求各位大神支招。
文件後綴必須是 ico的,並且不能太大,圖片路徑一定要存在。
拓展:
1、Java是一種可以內撰寫跨平台容應用軟體的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網,同時擁有全球最大的開發者專業社群。從此,Java被廣泛接受並推動了Web的迅速發展,常用的瀏覽器均支持Javaapplet。
2、Java是由Sun Microsystems公司推出的Java面向對象程序設計語言(以下簡稱Java語言)和Java平台的總稱。由James Gosling和同事們共同研發,並在1995年正式推出。Java最初被稱為Oak,是1991年為消費類電子產品的嵌入式晶元而設計的。1995年更名為Java,並重新設計用於開發Internet應用程序。
H. 為什麼要使用SLF4J而不是Log4J
每一個Java程序員都知道日誌對於任何一個Java應用程序,尤其是服務端程序是至關重要的,而很多程序員也已經熟悉各種不同的日誌庫如java.util.logging、Apache log4j、logback。但如果你還不知道SLF4J(Simple logging facade for Java)的話,那麼是時候去在你項目中學習使用SLF4J了。
在這篇文章中,我們將學習為什麼使用SLF4J比log4j或者java.util.logging要優秀。自從上次我寫Java程序員的10個日誌技巧已經有一段時間了,我已經不記得我寫的關於日誌的一切了。
不管怎樣,讓我們回到這個話題,SLF4J不同於其他日誌類庫,與其它有很大的不同。SLF4J(Simple logging Facade for Java)不是一個真正的日誌實現,而是一個抽象層(abstraction layer),它允許你在後台使用任意一個日誌類庫。如果是在編寫供內外部都可以使用的API或者通用類庫,那麼你真不會希望使用你類庫的客戶端必須使用你選擇的日誌類庫。
如果一個項目已經使用了log4j,而你載入了一個類庫,比方說 Apache Active MQ——它依賴於於另外一個日誌類庫logback,那麼你就需要把它也載入進去。但如果Apache Active MQ使用了SLF4J,你可以繼續使用你的日誌類庫而無語忍受載入和維護一個新的日誌框架的痛苦。
總的來說,SLF4J使你的代碼獨立於任意一個特定的日誌API,這是一個對於開發API的開發者很好的思想。雖然抽象日誌類庫的思想已經不是新鮮的事物而且Apache commons logging也已經在使用這種思想了,但現在SLF4J正迅速成為Java世界的日誌標准。讓我們再看看幾個使用SLF4J而不是log4j、logback或者java.util.logging的理由。
SLF4J對比Log4J,logback和java.util.Logging的優勢
正如我之前說的,在你的代碼中使用SLF4J寫日誌語句的主要出發點是使得你的程序獨立於任意特定的日誌類庫,依賴於特定類可能需要不同與你已有的配置,並且導致更多維護的麻煩。但除此之外,還要一個SLF4J API的特性使得我堅持使用SLF4J而拋棄我長期間鍾愛的Lof4j的理由,是被稱為佔位符(place holder),在代碼中表示為「{}」的特性。佔位符是一個非常類似於在String的format()方法中的%s,因為它會在運行時被某個提供的實際字元串所替換。這不僅降低了你代碼中字元串連接次數,而且還節省了新建的String對象。即使你可能沒需要那些對象,但這個依舊成立,取決於你的生產環境的日誌級別,例如在DEBUG或者INFO級別的字元串連接。因為String對象是不可修改的並且它們建立在一個String池中,它們消耗堆內存( heap memory)而且大多數時間他們是不被需要的,例如當你的應用程序在生產環境以ERROR級別運行時候,一個String使用在DEBUG語句就是不被需要的。通過使用SLF4J,你可以在運行時延遲字元串的建立,這意味著只有需要的String對象才被建立。而如果你已經使用log4j,那麼你已經對於在if條件中使用debug語句這種變通方案十分熟悉了,但SLF4J的佔位符就比這個好用得多。
這是你在Log4j中使用的方案,但肯定這一點都不有趣並且降低了代碼可讀性因為增加了不必要的繁瑣重復代碼(boiler-plate code):
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}
另一方面,如果你使用SLF4J的話,你可以得到在極簡潔的格式的結果,就像以下展示的一樣:
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
在SLF4J,我們不需要字元串連接而且不會導致暫時不需要的字元串消耗。取而代之的,我們在一個以佔位符和以參數傳遞實際值的模板格式下寫日誌信息。你可能會在想萬一我有很個參數怎麼辦?嗯,那麼你可以選擇使用變數參數版本的日誌方法或者用以Object數組傳遞。這是一個相當的方便和高效方法的打日誌方法。記住,在生產最終日誌信息的字元串之前,這個方法會檢查一個特定的日誌級別是不是打開了,這不僅降低了內存消耗而且預先降低了CPU去處理字元串連接命令的時間。這里是使用SLF4J日誌方法的代碼,來自於slf4j-log4j12-1.6.1.jar中的Log4j的適配器類Log4jLoggerAdapter。
public void debug(String format, Object arg1, Object arg2) {
if (logger.isDebugEnabled()) {
FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
}
}
同時,我們也很值得知道打日誌是對應用程序的性能有著很大影響的,在生產環節上只進行必要的日誌記錄是我們所建議的。
I. java 日誌輸出slf4j
安全性高的話就需要做詳細日誌記錄,在每步操作後記錄,級別正常操作一般info級別,異常信息為error級別。這樣可以看出那些是正常操作和操作失敗了,
J. java中hibernate運行報錯SLF4J: The requested version 1.6 by your slf4j binding is not compatible wi
錯誤顯示你的slf4j的包版本有點老,它需要1.6版本的,你的介面貌似是1.5.8版本的