1,導入log4j jar包;web
2,配置log4j.xml或log4j.properties文件;apache
-----------------------------------------------------------------------------------------------------------app
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> 函數
<!--輸出方式:輸出到控制檯-->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<!--
設置通道名稱和輸出方式,其中輸出方式appender有5種,分別爲
org.apache.log4j.RollingFileAppender
org.apache.log4j.ConsoleAppender (控制檯)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (天天產生一個日誌文件)
org.apache.log4j.WriterAppender (將日誌信息以流格式發送到指定地方)
-->
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<!--
Threshold是個全局的過濾器,他將把低於所設置的level的信息過濾不顯示出來
--> 測試
<!-- 設置日誌輸出的格式-->
<layout class="org.apache.log4j.PatternLayout">
<!--
參數都以%開始後面不一樣的參數表明不一樣的格式化信息:
%c 輸出所屬類的全名,可在修改成 %d{Num} ,Num類名輸出的範圍
如:"org.apache.elathen.ClassName",%C{2}將輸出elathen.ClassName
%d 輸出日誌時間其格式爲 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss} hibernate
%l 輸出日誌事件發生位置,包括類目名、發生線程,在代碼中的行數
%n 換行符
%m 輸出代碼指定信息,如info(「message」),輸出message
%p 輸出優先級,即 FATAL ,ERROR 等
%r 輸出從啓動到顯示該log信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名--> 線程
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
</appender> debug
<!--輸出方式是:天天一個日誌文件-->
<!--設置通道名稱是:file,輸出方式DailyRollingFileAppender-->
<appender name="myFile" class="org.apache.log4j.DailyRollingFileAppender"> 日誌
<!--日誌文件路徑和文件名稱 -->
<!-- 加../在logs,加/在C盤,不加在bin目錄 -->
<!--
若是在加載時設置了變量System.setProperty("WebApp", appRoot),
可在此取出來${WebApp} -->
<param name="File" value="F:/xxy/mylog.log"/>
<!-- 設置是否在從新啓動服務時,在原有日誌的基礎添加新日誌 -->
<param name="Append" value="true"/>
<!-- Rollover at midnight each day -->
<!-- e.g. mylog.log.2009-11-25.log -->
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/> xml
<!-- Rollover at the top of each hour
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<!--
The default pattern: Date Priority [Category] Message\n
-->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<!--
The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n -->
<!--
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
<appender name="ERROR_LOG" class="org.apache.log4j.DailyRollingFileAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="File" value="error.log"/>
<param name="Append" value="true"/>
<!-- 指定日誌輸出級別 -->
<param name="Threshold" value="INFO"/>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<!--
level:是日記記錄的優先級,優先級由高到低分爲
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建議只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這四個級別。
-->
<!-- 指定logger的設置,additivity指示是否疊加輸出log,若是是false,
在DsErrorLog logger中日誌不會被其它logger知足條件的logger(好比root)
輸出
-->
<!-- 將名稱爲DSErrorLog的logger,輸出到「EEROR_LOG」的appender
所謂logger的名字也就是,在定義Logger時,構造函數的參數
Logger log = Logger.getLogger("DSErrorLog");
-->
<logger name="DSErrorLog" additivity="false">
<level class="org.apache.log4j.Level" value="DEBUG"/>
<appender-ref ref="ERROR_LOG"/>
</logger>
<!--
輸出指定類包中的日誌,好比想輸出
Hibernate運行中生成的SQL語句,可做以下設置
-->
<category name="org.hibernate.SQL">
<priority value="DEBUG"/>
<!--
若是指定一個appender,這些log將被輸出到指定的appender
如:<appender-ref ref="myFile"/>
不然將做用於全部的appender
-->
</category>
<!--
根默認會自動構建一個 root,輸出INFO級別的日誌到控制檯,供logger繼承
-->
<root>
<priority value ="INFO"/>
<appender-ref ref="myConsole"/>
<appender-ref ref="myFile"/>
</root>
</log4j:configuration>
----------------------------------------------------------------------------------------------------------
3,測試代碼;
public class LoggerTest {
static Logger log4j = Logger.getLogger(LoggerTest.class.getName());
public static void main(String args[]){
PropertyConfigurator.configure("rec/log4j.xml");
log4j.info("log4j.info");
log4j.warn("log4j.warning");
log4j.error("log4j.error");
log4j.debug("log4j.fatal");
}
}
-----------------------------------------------------------------------------------------------------------
4,在web項目中使用;
利用web項目啓動的時候去加載log4j.xml配置文件
在web.xml文件中
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>log4j.xml</param-value>
</context-param>
<!-- 加載log4j配置文件 -->
<listener>
<listener-class>onlyfun.logger.Log4jConfigListener</listener-class>
</listener>
public class Log4jConfigListener implements ServletContextListener{
public static final String CONFIG_LOCATION_PARAM = "log4jConfigLocation";
public static final String XML_FILE_EXTENSION = ".xml";
public void contextDestroyed(ServletContextEvent event) {
LogManager.shutdown();
}
public void contextInitialized(ServletContextEvent event) {
String location = event.getServletContext().getInitParameter(CONFIG_LOCATION_PARAM);
if (location != null) {
if (!location.startsWith("/")) {
location = "/" + location;
}
location = event.getServletContext().getRealPath(location);
//若是是xml結尾就用DOM解析,不然就用properties解析
if (location.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
DOMConfigurator.configure(location);
}else {
PropertyConfigurator.configure(location);
}
}
}
}
加載完畢...........................................................................................................................................
最後,可寫個公共方法便於應用
public class Log4jUtil {
public static Logger getInfoLogger(){
return Logger.getLogger("INFO2222");
}
public static Logger getErrorLogger(){
return Logger.getLogger("ERROR_LOG");
}
}
在別的類中可用如下獲得:
Log4jUtil.getInfoLogger().info("--------massage---------");
到此爲止,主要爲本身作備忘,同時方便有須要的人。呵呵!