生活随笔
收集整理的這篇文章主要介紹了
log4j/slf4j
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
log4j的使用 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
log4j.rootLogger=INFO,Console,OneFile,errFile
#輸出到控制臺
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.encoding=utf-8
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n#輸出到文件級別為info
log4j.appender.OneFile=org.apache.log4j.RollingFileAppender
log4j.appender.OneFile.encoding=utf-8
log4j.appender.OneFile.File=../logs/test-map/info.log
log4j.appender.OneFile.MaxFileSize=10MB
log4j.appender.OneFile.MaxBackupIndex=50
log4j.appender.OneFile.Threshold=INFO ## 只輸出INFO級別以上的日志!!!
log4j.appender.OneFile.layout=org.apache.log4j.PatternLayout
log4j.appender.OneFile.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n#輸出到文件級別為error
log4j.appender.errFile=org.apache.log4j.RollingFileAppender
log4j.appender.errFile.encoding=utf-8
log4j.appender.errFile.File=../logs/test-map/error.log
log4j.appender.errFile.MaxFileSize=10MB
log4j.appender.errFile.MaxBackupIndex=50
log4j.appender.errFile.Threshold=ERROR ## 只輸出ERROR級別以上的日志!!!
log4j.appender.errFile.layout=org.apache.log4j.PatternLayout
log4j.appender.errFile.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
private static final Logger LOGGER = Logger.getLogger(Test.class);
LOGGER.info("message");
slf4j的使用 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version>
</dependency>
slf4j整合log4j 為什么要整合,我不知道
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version>
</dependency>
note:如果不用maven依賴,需要導入log4j.jar、slf4j.jar、slf4j-log4j.jar三個jar包
配置log4j.properties(同上)
可以使用log4j,也可以使用slf4j
log4j.properties日志內容解析 輸入日志的級別level log4j.rootLogger=INFO,Console,OneFile,errFile中的info為總的輸出日志的級別;后面幾個參數為輸出位置的標識 日志級別有五級,越向下級別越低: FATAL 0
ERROR 3 為嚴重錯誤 主要是程序的錯誤
WARN 4 為一般警告,比如session丟失
INFO 6 為一般要顯示的信息,比如登錄登出
DEBUG 7 為程序的調試信息
輸出日志的位置appender log4j.appender.Console=org.apache.log4j.ConsoleAppender 日志輸出的目的地有以下幾種: org.apache.log4j.ConsoleAppender(控制臺),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
設置日志輸出級別Threshold log4j.appender.OneFile.Threshold=INFO ## 只輸出INFO級別以上的日志!!!
日志信息格式ConversionPattern log4j.appender.OneFile.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n 符號含義為: -X號: X信息輸出時左對齊; %p: 輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,FATAL, %d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %r: 輸出自應用啟動到輸出該log信息耗費的毫秒數 %c: 輸出日志信息所屬的類目,通常就是所在類的全名 %t: 輸出產生該日志事件的線程名 %l: 輸出日志事件的發(fā)生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10) %x: 輸出和當前線程相關聯的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應用中。 %%: 輸出一個"%"字符 %F: 輸出日志消息產生時所在的文件名稱 %L: 輸出代碼中的行號 %m: 輸出代碼中指定的消息,產生的日志具體信息 %n: 輸出一個回車換行符,Windows平臺為"/r/n",Unix平臺為"/n"輸出日志信息換行 Threshold=DEBUG:指定日志消息的輸出最低層次。 ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。 Target=System.err:默認情況下是:System.out,指定輸出控制臺 FileAppender 選項 Threshold=DEBUF:指定日志消息的輸出最低層次。 ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。 File=mylog.txt:指定消息輸出到mylog.txt文件。 Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。 RollingFileAppender 選項 Threshold=DEBUG:指定日志消息的輸出最低層次。 ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。 File=mylog.txt:指定消息輸出到mylog.txt文件。 Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。 MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。 MaxBackupIndex=2:指定可以產生的滾動文件的最大數。 log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
spring中l(wèi)og4j.properties位置問題 <context-param><param-name>log4jConfigLocation</param-name><param-value>classpath*:log4j.properties</param-value></context-param>
web容器啟動加載順序問題: 引用博客家國之戀https://www.cnblogs.com/jiaguozhilian/p/5819032.html
啟動一個WEB項目的時候,容器(如:Tomcat)會去讀它的配置文件web.xml.讀兩個節(jié)點: 和
緊接著,容器創(chuàng)建一個ServletContext(上下文),這個WEB項目所有部分都將共享這個上下文.
容器將轉化為鍵值對,并交給ServletContext.
容器創(chuàng)建中的類實例,即創(chuàng)建監(jiān)聽
在監(jiān)聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中獲得ServletContext = ServletContextEvent.getServletContext(); context-param的值 = ServletContext.getInitParameter("context-param的鍵");
得到這個context-param的值之后,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啟動完成.這個動作會比所有的Servlet都要早.換句話說,這個時候,你對中的鍵值做的操作,將在你的WEB項目完全啟動之前被執(zhí)行.
舉例.你可能想在項目啟動之前就打開數據庫. 那么這里就可以在中設置數據庫的連接方式,在監(jiān)聽類中初始化數據庫的連接.
這個監(jiān)聽是自己寫的一個類,除了初始化方法,它還有銷毀方法.用于關閉應用前釋放資源.比如說數據庫連接的關閉.
<!-- 加載spring的配置文件 -->
<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-
INF/jason-servlet.xml</param-value>
</context-param>
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> 例2:自定義context-param,且自定義listener來獲取這些信息 <context-param><param-name>urlrewrite</param-name><param-value>false</param-value>
</context-param>
<context-param><param-name>cluster</param-name><param-value>false</param-value>
</context-param>
<context-param><param-name>servletmapping</param-name><param-value>*.bbscs</param-value>
</context-param>
<context-param><param-name>poststoragemode</param-name><param-value>1</param-value>
</context-param>
<listener><listener-class>com.laoer.bbscs.web.servlet.SysListener</listener-class>
</listener>
public class SysListener extends HttpServlet implements ServletContextListener {
private static final Log logger = LogFactory.getLog(SysListener.class);
public void contextDestroyed(ServletContextEvent sce) {//用于在容器關閉時,操作
}
//用于在容器開啟時,操作
public void contextInitialized(ServletContextEvent sce) {String rootpath = sce.getServletContext().getRealPath("/");System.out.println("-------------rootPath:"+rootpath);if (rootpath != null) {rootpath = rootpath.replaceAll("\\\\", "/");} else {rootpath = "/";}if (!rootpath.endsWith("/")) {rootpath = rootpath + "/";}Constant.ROOTPATH = rootpath;logger.info("Application Run Path:" + rootpath);String urlrewrtie = sce.getServletContext().getInitParameter("urlrewrite");boolean burlrewrtie = false;if (urlrewrtie != null) {burlrewrtie = Boolean.parseBoolean(urlrewrtie);}Constant.USE_URL_REWRITE = burlrewrtie;logger.info("Use Urlrewrite:" + burlrewrtie);其它略之....}
}/*最終輸出-------------rootPath:D:\tomcat_bbs\webapps\BBSCS_8_0_3\2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Application Run Path:D:/tomcat_bbs/webapps/BBSCS_8_0_3/2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Use Urlrewrite:true2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Use Cluster:false2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
SERVLET MAPPING:*.bbscs2009-06-09 21:51:46,573 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Post Storage Mode:1*/context-param和init-param區(qū)別 web.xml里面可以定義兩種參數:
application范圍內的參數,存放在servletcontext中,在web.xml中配置如下: <context-param><param-name>context/param</param-name><param-value>avalible during application</param-value>
</context-param>
servlet范圍內的參數,只能在servlet的init()方法中取得,在web.xml中配置如下: <servlet><servlet-name>MainServlet</servlet-name><servlet-class>com.wes.controller.MainServlet</servlet-class><init-param><param-name>param1</param-name><param-value>avalible in servlet init()</param-value></init-param><load-on-startup>0</load-on-startup>
</servlet>
在servlet中可以通過代碼分別取用:
package com.wes.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class MainServlet extends HttpServlet ...{public MainServlet() ...{super();}public void init() throws ServletException ...{System.out.println("下面的兩個參數param1是在servlet中存放的");System.out.println(this.getInitParameter("param1"));System.out.println("下面的參數是存放在servletcontext中的");System.out.println(getServletContext().getInitParameter("context/param"));}
}
第一種參數在servlet里面可以通過getServletContext().getInitParameter("context/param")得到 第二種參數只能在servlet的init()方法中通過this.getInitParameter("param1")取得.
轉載于:https://www.cnblogs.com/nwu-edu/p/9416577.html
總結
以上是生活随笔 為你收集整理的log4j/slf4j 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。