Log4J

一帚称、簡(jiǎn)介

  • Apache 的開(kāi)源項(xiàng)目秽澳,可以控制日志信息輸送的目的地是控制臺(tái)担神、文件妄讯、GUI組件亥贸,甚至是套接口服務(wù)器炕置、NT的事件記錄器朴摊、UNIX Syslog守護(hù)進(jìn)程等甚纲;我們也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別鹃操,我們能夠更加細(xì)致地控制日志的生成過(guò)程组民。
    官網(wǎng)鏈接
  • 包括三部分:日志記錄器(Loggers)臭胜,輸出端(Appenders)和日志格式化器(Layout)
    Loggers:控制日志記錄語(yǔ)句以及級(jí)別(DEBUG耸三、INFO仪壮、WARN积锅、ERROR缚陷、FATAL)
    A:off 最高等級(jí)箫爷,用于關(guān)閉所有日志記錄虎锚。
    B:fatal 指出每個(gè)嚴(yán)重的錯(cuò)誤事件將會(huì)導(dǎo)致應(yīng)用程序的退出窜护。
    C:error 指出雖然發(fā)生錯(cuò)誤事件柄慰,但仍然不影響系統(tǒng)的繼續(xù)運(yùn)行。
    D:warn 表明會(huì)出現(xiàn)潛在的錯(cuò)誤情形。
    E:info 一般和在粗粒度級(jí)別上凳忙,強(qiáng)調(diào)應(yīng)用程序的運(yùn)行全程。
    F:debug 一般用于細(xì)粒度級(jí)別上勤家,對(duì)調(diào)試應(yīng)用程序非常有幫助伐脖。
    G:all 最低等級(jí)讼庇,用于打開(kāi)所有日志記錄蠕啄。
    注:一般error戈锻、warn舶沛、Info如庭、debug
    Appenders:控制日志輸出地點(diǎn)
    Layout:控制日志顯示格式

二、應(yīng)用

2.1 Library

<!--<log4j.version>1.2.17</log4j.version>-->
<!--log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

注:此版本目前是最高版本

2.2 configuration

Log4j 支持支持properties 和XML兩種配置文件

### 設(shè)置###
log4j.rootLogger = debug,stdout,D,E

#設(shè)置spring 的級(jí)別
log4j.logger.org.springframework = ERROR

之貼個(gè)properties 的,該文件建在Resources 文件夾下
### 輸出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 輸出DEBUG 級(jí)別以上的日志到=/Users/jony/Desktop/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/jony/Desktop/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [%l] - [ %p ] %n %m%n

### 輸出ERROR 級(jí)別以上的日志到=/Users/jony/Desktop/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/Users/jony/Desktop/error.log 
log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [[%l]] - [ %p ] %n %m%n
  • web.xml file
    直接使用蒙揣,是不需要配置XML的懒震,如果需要初始化或者和spring等關(guān)聯(lián)个扰,就需要配置

注:在不配置或初始化的情況下递宅,spring 框架中的logging 同樣會(huì)讀取該配置

2.3 代碼中使用

import org.junit.Test;

import org.apache.log4j.Logger;


/**
 * Created by jony on 3/19/18.
 */
public class Log4jTest {

    static Logger logger = Logger.getLogger(String.valueOf(Log4jTest.class));

    @Test
    public void outputTest(){
        logger.info("logTest .......");
        logger.debug("log4j  debug");
        logger.error("log4j error");
    }
}

注:Logger類(lèi)是org.apache.log4j.Logger中的办龄,一般都會(huì)添加Junit包,所以常會(huì)搞成java.util.logging.Logger包中的Logger類(lèi)

關(guān)于日志輸出路徑問(wèn)題

找到一篇算可以的安接,直接貼過(guò)來(lái)
原文1
原文2

問(wèn)題描述:

一個(gè)web項(xiàng)目想在一個(gè)tomcat下運(yùn)行多個(gè)實(shí)例(通過(guò)修改war包名稱(chēng)的實(shí)現(xiàn)),然后每個(gè)實(shí)例都將日志輸出到tomcat的logs目錄下實(shí)例名命名的文件夾下進(jìn)行區(qū)分查看每個(gè)實(shí)例日志矢赁,要求通過(guò)盡可能少的改動(dòng)配置文件撩银,最好修改實(shí)例名后可以不修改log4j的配置文件额获。

實(shí)現(xiàn)分析:

一般實(shí)現(xiàn)上面需求抄邀,需要在修改完war包名稱(chēng)之外要再做下面配置:

  • 1昼榛、修改每個(gè)實(shí)例名下web.xml中參數(shù)webAppRootKey為不同值胆屿。同一個(gè)tomcat下運(yùn)行多個(gè)web應(yīng)用時(shí)非迹,該值相同的話,運(yùn)行時(shí)會(huì)拋異常冷离。
<context-param>
  <param-name>webAppRootKey</param-name>
  <param-value>webApp.root</param-value>
</context-param>
  • 2西剥、log4j配置文件日志輸出路徑修改
    log4j配置文件中路徑配置一般有三種方法:
    (1)絕對(duì)路徑法:直接配置為系統(tǒng)絕對(duì)路徑蔫耽;
    (2)相對(duì)路徑法
          //將日志記錄到tomcat下的logs文件夾匙铡;
          log4j.appender.logfile.File=../logs/app.log

        //將日志記錄到tomcat的bin目錄下的logs文件夾;
        log4j.appender.logfile.File=logs/app.log

(3)使用環(huán)境變量相對(duì)路徑法:程序會(huì)優(yōu)先找jvm環(huán)境變量黑毅,然后再找系統(tǒng)環(huán)境變量矿瘦,來(lái)查找配置文件中的變量缚去。

//使用tomcat容器時(shí)${user.dir}對(duì)應(yīng)tomcat的bin目錄易结;
  log4j.appender.logfile.File=${user.dir}/logs/app.log

//${user.home}對(duì)應(yīng)操作系統(tǒng)當(dāng)前用戶(hù)目錄搞动;
   log4j.appender.logfile.File=${user.home}/logs/app.log

//${webApp.root}對(duì)應(yīng)當(dāng)前應(yīng)用根目錄鹦肿;
  log4j.appender.logfile.File=${webApp.root}/logs/app.log

暫時(shí)沒(méi)找到不修改log4j配置而實(shí)現(xiàn)上面需求的方法箩溃。在log4j配置文件中可以獲取環(huán)境變量來(lái)配置碾篡,但變量里沒(méi)有當(dāng)前應(yīng)用的名稱(chēng)(不能直接通過(guò)webApp.root开泽,因?yàn)樗诓煌膶?shí)例名稱(chēng)不一樣)穆律,嘗試在web.xml中增加listener峦耘,獲取應(yīng)用名稱(chēng)辅髓,然后調(diào)用System.setProperty("contextPath", sce.getServletContext().getContextPath());將上下文設(shè)置到系統(tǒng)變量中在log4j應(yīng)用,但多實(shí)例運(yùn)行時(shí)每個(gè)實(shí)例都會(huì)改變?cè)搶傩灾怠?br> 結(jié)論矫付,該問(wèn)題的解決方法:
1买优、手動(dòng)修改配置杀赢,修改war名稱(chēng)后手動(dòng)修改web.xml和log4j配置文件,實(shí)現(xiàn)上述需求。
2、通過(guò)其它程序來(lái)進(jìn)行批量修改,若bat或maven等在修改war包名稱(chēng)時(shí)笔喉,自動(dòng)修改掉web.xml和log4j中相關(guān)配置稽物。

其他方式代碼實(shí)現(xiàn)

${project}在web.xml里面配置

log4j.properties

    log4j.rootLogger=INFO, stdout,logfile  
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.Target=System.out  
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    log4j.appender.stdout.layout.ConversionPattern=%d %p - %m%n  
    log4j.appender.logfile=org.apache.log4j.RollingFileAppender  
    log4j.appender.logfile.File=${project}/WEB-INF/logs/tjsjbzlog.log
    log4j.appender.logfile.Append=true  
    log4j.appender.logfile.MaxFileSize=1000KB  
    log4j.appender.logfile.MaxBackupIndex=1  
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
    log4j.appender.logfile.layout.ConversionPattern=%d %p - %m%n  

web.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app version="2.5"   
        xmlns="http://java.sun.com/xml/ns/javaee"   
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
      <display-name></display-name>   
        <!-- 配置log4j -->  
    <span style="color:#ff0000;">   <context-param>  
            <param-name>webAppRootKey</param-name>  
            <param-value>project</param-value><!-- log4j的配置文件里可以用${project}來(lái)表示剛剛設(shè)進(jìn)去的系統(tǒng)變量 -->  
        </context-param>  
        <context-param>  
            <param-name>log4jConfigLocation</param-name>  
            <param-value>/WEB-INF/classes/log4j.properties</param-value><!-- 配置文件路徑 -->  
        </context-param>  
        <context-param>  
            <param-name>log4jRefreshInterval</param-name><!-- 默認(rèn)重新加載配置文件時(shí)間 -->  
            <param-value>3000</param-value>  
        </context-param></span>  
        <!-- 加載spring配置文件 -->  
        <!--ContextLoader 加載 contextConfigLocation 用以初始化WebApplicationContext -->  
        <context-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>/WEB-INF/classes/applicationContext.xml</param-value>  
        </context-param>  
        <listener>  
            <listener-class>com.hhkj.tjsjbz.listener.ManagerContentListener</listener-class>  
        </listener>  
        <!-- log4j監(jiān)聽(tīng)器 -->  
    <span style="color:#ff0000;">   <listener>      
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>      
        </listener></span>  
        <!-- 加載spring監(jiān)聽(tīng)器 -->  
        <listener>  
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
        </listener>  
        <!-- 加載spring的Filter代理,指向BeanID為securityFilter的Filter -->  
    <!--         <filter>  
            <filter-name>securityFilter</filter-name>  
            <filter-class>com.hhkj.tjsjbz.filter.SecurityFilter</filter-class>  
        </filter>  
        Filter Mapping(對(duì)Action的過(guò)濾須放在Struts的配置之前,不然不生效)  
        <filter-mapping>  
            <filter-name>securityFilter</filter-name>  
            <url-pattern>*.jsp</url-pattern>  
        </filter-mapping>  
            <filter-mapping>  
            <filter-name>securityFilter</filter-name>  
            <url-pattern>*.action</url-pattern>  
        </filter-mapping> -->  
        <!-- session超時(shí)定義,單位為分鐘 -->  
        <session-config>  
            <session-timeout>60</session-timeout>  
        </session-config>  
      
      <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>  
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
        </filter-class>  
        <init-param>  
            <param-name>actionPackages</param-name>  
            <param-value>com.hhkj.tjsjbz.action</param-value>  
        </init-param>  
      </filter>  
      <filter-mapping>  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
      </filter-mapping>  
        
      <welcome-file-list>  
        <welcome-file>login.action</welcome-file>  
      </welcome-file-list>  
    </web-app>  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闲昭,隨后出現(xiàn)的幾起案子罐寨,更是在濱河造成了極大的恐慌,老刑警劉巖汤纸,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衩茸,死亡現(xiàn)場(chǎng)離奇詭異楞慈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)簿训,“玉大人,你說(shuō)我怎么就攤上這事表伦〕恚” “怎么了苹丸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵凉倚,是天一觀的道長(zhǎng)慎王。 經(jīng)常有香客問(wèn)我,道長(zhǎng)描函,這世上最難降的妖魔是什么宋欺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮磕潮,結(jié)果婚禮上满力,老公的妹妹穿的比我還像新娘。我一直安慰自己校摩,他們只是感情好浮禾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著舶担,像睡著了一般孙咪。 火紅的嫁衣襯著肌膚如雪寇荧。 梳的紋絲不亂的頭發(fā)上装黑,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天喘漏,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犹菱,可吹牛的內(nèi)容都是我干的记靡。 我是一名探鬼主播趣些,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惶凝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤申窘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后祸泪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吗浩,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年没隘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懂扼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡右蒲,死狀恐怖微王,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情品嚣,我是刑警寧澤炕倘,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站翰撑,受9級(jí)特大地震影響罩旋,放射性物質(zhì)發(fā)生泄漏啊央。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一涨醋、第九天 我趴在偏房一處隱蔽的房頂上張望瓜饥。 院中可真熱鬧,春花似錦浴骂、人聲如沸乓土。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趣苏。三九已至,卻和暖如春梯轻,著一層夾襖步出監(jiān)牢的瞬間食磕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工喳挑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彬伦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓伊诵,卻偏偏與公主長(zhǎng)得像单绑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曹宴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來(lái)說(shuō)基于三個(gè)目的:監(jiān)視代碼中變量的變化情況询张,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,043評(píng)論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來(lái)說(shuō)基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 4,985評(píng)論 0 6
  • 一浙炼、Log4j簡(jiǎn)介 Log4j有三個(gè)主要的組件:Loggers(記錄器)份氧,Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,908評(píng)論 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan閱讀 3,290評(píng)論 0 0
  • log4j 1.1 簡(jiǎn)介 Log4j是一個(gè)由Java編寫(xiě)可靠弯屈、靈活的日志框架蜗帜,是Apache旗下的一個(gè)開(kāi)源項(xiàng)目;現(xiàn)...
    賈博巖閱讀 7,901評(píng)論 1 32