log4j日誌文件 log4j.xml log4j.properties配置

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---------");

 

 

到此爲止,主要爲本身作備忘,同時方便有須要的人。呵呵!

相關文章
相關標籤/搜索