A. 怎樣添加java的log4j添加到java項目中
首先,弄到log4j的jar包,maven工程配置以下依賴就行,或者,從阿里的maven倉庫下載jar包,添加到工程的「build path」log4j log4j 1.2.17
然後,整一個log4j.properties,內容如下,然後把它放在src/main/java目錄(也就是包所在的根目錄)
1、普通java工程或spring工程
這是最常見的java工程類型,寫demo用的多,把log4j.properties放在src/main/java目錄(也就是包所在的根目錄)就行了
2、spring mvc工程
web工程里用spring mvc構建的比較多了,把log4j.properties放在src/main/resources的conf目錄(web工
程配置文件通常在resources或WEB-INF目錄),編輯web.xml,添加
log4jConfigLocation classpath:/conf/log4j.properties org.springframework.web.util.Log4jConfigListener
3、普通web工程
沒有了spring提供的listener載入log4j.properties,我們要怎麼載入這個文件呢?同樣,把log4j.properties
放在src/main/resources的conf目錄,我們整一個servlet來載入
{ = 1L; publicvoidinit(ServletConfig config)throwsServletException { String prefix =this.getClass().getClassLoader().getResource("/").getPath(); String path = config.getInitParameter("log4j-path"); PropertyConfigurator.configure(prefix + path); } publicvoiddoGet(HttpServletRequest req, HttpServletResponse res)throwsIOException, ServletException {} publicvoiddoPost(HttpServletRequest req, HttpServletResponse res)throwsIOException, ServletException {} publicvoiddestroy() {} }
然後配置servlet隨著web工程啟動而初始化,編輯web.xml,添加
log4j com.xmyself.log4j.Log4jServlet log4j-path conf/log4j.properties 1
看著是不是和spring mvc的很像,甚至你也想到了,普通java工程沒有指定log4j.properties的路徑,那說明
log4j的jar包一定有一個默認的路徑。另外,建議,log4j的配置放在第一個,因為後續載入其他組件就要開始使用日
B. log4j2 配置簡要分析
對於做後端的同學來說,log是分析bug、查找問題不可或缺的工具,好的日誌配置將使我們的開發工作如虎添翼。 把視線聚焦到java,常用的日誌工具有log4j,log4j2以及logback等,其中log4j2功能較為強大,運行效率也較高,我們就來用一個例子看一看log4j2的配置思路,下面就是這個配置文件:
我們州灶看到,Configuration有2個屬性status和monitorInterval,它們分別是log4j2自身組件的日誌級別以及重新刷新配置文件的時間,通過配置status可以看到log4j2相關的日誌,配置monitorInterval可以通過修改配置文件來改變日誌配置。
從上面的log4j2.xml配置文件中,我們可以看到log4j2的配置文件中主要分為2塊,一塊為appender,描述了如何記錄日誌,另外一部分是log config,記錄了哪種日誌對應哪種級別。 而不同的LogConfig之間其實是有繼承關系的,子LogConfig會繼承parent的屬性,而所有LogConfig都繼承自Root LogConfig。所以即使只配置了root logger,你一樣可以在任何地方通過LoggerFactory.getLogger獲取一個logger對象,記錄日誌。
那麼日誌之間的繼承關系是由什麼決定的呢?看看上面的配置文件中root以外的2個logConfig,只有3個配置:日誌級別,name以及appender,從直覺上看應當是name最可能決定了LogConfig的繼承關系,其實也正是如此:com.foo是com.foo.Bar的父級;java是java.util的父級,是java.util.vector的祖先(注意name區分大小寫)。
理解了這一點,我們就能理清log4j2配置的思路:先配置一個root,讓所有需要使用日誌的logger繼承,然後對有特別需要的logger進行特殊的配置,比如我們希望 org.springframework 包只記錄error以及warn級別的log,再比如,我們希望能顯示mybatis執行的sql的日誌,都可以進行個性化的配置。
appender是LogConfig的重要組成部分,一個LogConfig可以使用多個appender,一個appender也可以被多個LogConfig使用,appender多種多樣,不同的appender也有不同的屬性和配置,難以一一闡述,需要使用時可以直接查看文檔來進行個性化配置。不過就filters可以單獨拿出來討論一下。filter有兩個重要屬性 onMatch 和 onMismatch 。可以有DENY、ACCEPT或NEUTRAL配置,DENY說明不由當前appender處理,ACCEPT說明由當前filter處理,而NEUTRAL說明如果按順序還有其他filter則由其他filter處理,如果當前filter已經冊運扮是最後一個filter,則由當前appender處理。
log4j2的官方文檔建議記錄程序行為日誌非同步日誌,效率更高。因為非同步日誌使用的是無鎖技術,所以需要引入 Disruptor 。然後可以通過配置非同步的appender或Logger來實現非同步日誌:
或
動態修改日誌級別是一個很實用悄掘的功能,關於如果動態修改日誌級別,請參考美團的一篇文章: 日誌級別動態調整——小工具解決大問題
以上就是對log4j2的配置的一些總結,更多信息請關注官方文檔。
C. java中如何使用log4j將記錄的操作日誌信息
主要是通過配置文件
1.1 Log4j 支持兩種配置文件格式,一種是 XML 格式的文件,一種是 Java 特性文件 lg4j.properties (鍵 = 值)。
Logger 負責處理日誌記錄的大部分操作。
其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
2.1 level 是日誌記錄的優先順序,分為 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL
或者自定義的級別。
2.2Log4j 建議只使用四個級別,優先順序從高到低分別是 ERROR 、 WARN 、 INFO 、 DEBUG
。
2.3通過在這里定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關。比如在這里定義了
INFO 級別,只有等於及高於這個級別的才進行處理,則應用程序中所有 DEBUG 級別的日誌信息將不被列印出來。
2.4 ALL: 列印所有的日誌,
OFF :關閉所有的日誌輸出。 appenderName 就是指定日誌信息輸出到哪個地方。可同時指定多個輸出目的地。
配置日誌信息輸出目的地 Appender 負責控制日誌記錄操作的輸出。
3.1log4j.appender.appenderName = fully.qualified.name.of.appender.class
3.2log4j.appender.appenderName.option1 = value1
3.3log4j.appender.appenderName.optionN = valueN
Log4j 提供的 appender
4.1org.apache.log4j.ConsoleAppender (控制台),
4.2org.apache.log4j.FileAppender (文件),
4.3org.apache.log4j.DailyRollingFileAppender (每天產生一個日誌文件),
4.4org.apache.log4j.RollingFileAppender
(文件大小到達指定尺寸的時候產生一個新的文件),可通過 log4j.appender.R.MaxFileSize=100KB
設置文件大小,還可通過 4.5log4j.appender.R.MaxBackupIndex=1 設置為保存一個備份文件。
4.6org.apache.log4j.WriterAppender (將日誌信息以流格式發送到任意指定的地方)
5.Layout
5.1org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
5.2org.apache.log4j.PatternLayout (可以靈活地指定布局模式),
5.3org.apache.log4j.SimpleLayout (包含日誌信息的級別和信息字元串),
5.4org.apache.log4j.TTCCLayout (包含日誌產生的時間、線程、類別等等信息) 6.格式化日誌信息
Log4J 採用類似 C 語言中的 printf 函數的列印格式格式化日誌信息,列印參數如下:
6.1%m 輸出代碼中指定的消息
6.2%p 輸出優先順序,即 DEBUG , INFO , WARN , ERROR , FATAL
6.3%r 輸出自應用啟動到輸出該 log 信息耗費的毫秒數
6.4%c 輸出所屬的類目,通常就是所在類的全名
6.5%t 輸出產生該日誌事件的線程名
6.6%n 輸出一個回車換行符, Windows 平台為 「rn」 , Unix 平台為 「n」
6.7%d 輸出日誌時間點的日期或時間,默認格式為 ISO8601 ,也可以在其後指定格式,比如: %d{yyyy MMM dd HH:mm:ss,SSS} ,輸出類似: 2002 年 10 月 18 日 22 : 10 : 28 , 921
6.8%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。 7. log4j.propertie 示例文件:
log4j.rootCategory=INFO, stdout,file
7.1 定義名為 stdout 的輸出端的類型
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
7.2定義名為 file 的輸出端的類型為每天產生一個日誌文件。
log4j.appender.file =org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=log.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
7.3指定 com.neusoft 包下的所有類的等級為 DEBUG 。可以把 com.neusoft 改為自己項目所用的包名。
log4j.logger.com.neusoft=DEBUG
7.4如果項目中沒有配置 EHCache ,則配置以下兩句為 ERROR 。
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
8struts 配置
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
8.1 displaytag 配置
log4j.logger.org.displaytag=ERROR
8.2 spring 配置
log4j.logger.org.springframework=DEBUG
8.3 ibatis 配置
log4j.logger.com.ibatis.db=WARN
8.4 hibernate 配置
log4j.logger.org.hibernate=DEBUG log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN
D. Java log4j 配置文件怎麼寫,可以輸出log.info("")中的內容到指定目錄的.log文件
log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=/usr/logs/mylog.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%c] %m%n
E. log4j的使用,即java該如何使用日誌文件
java使用日誌文件log4j的方法:
1、 新建一個Java工程,導入Log4j包,pom文件中對應的配置代碼如下:
<!-- log4j support -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2、resources目錄下創建log4j.properties文件
### 設置###
log4j.rootLogger = debug,stdout,D,E
### 輸出信息到控制抬 ###
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 級別以上的日誌到=/home/qi/logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /home/qi/logs/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} [ %t:%r ] - [ %p ] %m%n
### 輸出ERROR 級別以上的日誌到=/home/admin/logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/home/admin/logs/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} [ %t:%r ] - [ %p ] %m%n
3、輸出日誌的例子如下
package com.java.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4JTest {
private static final Logger logger = LoggerFactory.getLogger(Log4JTest.class);
public static void main(String[] args) {
// 記錄debug級別的信息
logger.debug("This is debug message.");
// 記錄info級別的信息
logger.info("This is info message.");
// 記錄error級別的信息
logger.error("This is error message.");
}
}
4、輸出結果
首先,控制台輸入如下圖所示:
F. java指定日誌配置路徑命令
單獨的Java程序包, 需要通過命令java -jar或java -cp的方式啟動;
我們可以在啟動命令中加入系統運行時變數, 在log4j載入配置文件之前通過System.getProperties(「path」)讀取此變數, 即可實現靈活載入當前路徑.
(1) 啟動腳本設置:
假設當前項目的目錄結構為:
/Projects/KafkaConsumer
丨 bin 項目的啟動腳本
丨 conf 項目的配置文件
丨 lib 項目的其他依賴包
丨 bogs 項目的日誌輸出路徑
啟動腳本位於bin目錄下, 內容示例如下:
# 獲取當前腳本所處的目錄, 然後進入其上級目錄, 最後pwd輸出該目錄, 最終的結果是/Project/KafkaConsumerbase_dir=$(cd `dirname $0`; cd ..; pwd)# 獲取Java運行程序的位置, 並指定主類java_bin=$(which java)main_class=」org.shoufeng.elastic.ConsumerMain」# 通過-cp、擴展CLASSPATH、指定主類的方式啟動項目, # 並通過「姿冊-D」的方式向此程序的運行時並桐環境中設置當前項目的路徑,# 即可在程序中通過System.getProperty(「base.dir」)獲取此路徑 nohup ${java_bin} -Dbase.dir=${base_dir} -cp ${CLASSPATH}:${base_dir}/conf:${base_dir}/lib/* ${main_class} >> /dev/null &
(2) Java程序讀取變數:
實log4j的FileAppender本身支持動態設置文件路徑, 如:
log4j.appender.logfile.File=${base.log}/logs/app.log
其中「${base.log}」是絕冊坦一個變數, 會被System Property中的base.log的值代替, 代碼中的使用方式為:
public static void main(String[] args) { // 獲取系統運行時變數中的日誌文件的輸出路徑 // 此變數需要在啟動命令中通過-D的方式設置 String baseDir = System.getProperty(「b
G. log4j2 配置相關問題備忘
通常log42j的配置都是通過xml的語法形式,但也支持java配置文件properties的形式來配置
xxx.type代哪咐表的對應的一個節點的開始,節點類型通過type來設置對應
比如rolling.type=RollingRandomAccessFile 將rolling設置為RollingRandomAccessFile類型伏改,之後就可以通過
來設置這個節點的屬性,其中rolling名字為自定義的名稱
對應的xml配置應該為
https://logging.apache.org/log4j/2.x/manual/appenders.html#
https://logging.apache.org/log4j/2.x/manual/configuration.html
該屬性必須和filePattern配合
如filePattern = ${karaf.data}/log/karaf_%d{yyyy-MM-dd-HH-mm} %i.log 代表按分鍾劃分文件
filePattern = ${karaf.data}/log/karaf %d{yyyy-MM-dd}_%i.log 代表按天劃分文件
<DefaultRolloverStrategy max=5>表示保存的文件個數,如果和TimeBasedTriggeringPolicy策略按時間段劃分文件配合,則表示該時間段內能保存的最大文件個數
<DefaultRolloverStrategy>節點下的 custom delete action 用李廳純於自定義文件刪除的策略,如設置多少時間後刪除對應的文件
這個功能需要 log4j-2.5以後的版本,具體可參考文檔
https://logging.apache.org/log4j/2.x/manual/appenders.html#CustomDeleteOnRollover
H. 如何使用java代碼配置log4j
1、導入大塌包
I. log4j在java的web項目中怎麼用的,如何配置等等。。
在web.xml中添加配置:
<!-- 配置log4j配置文件的路徑,可以是xml或 properties(此參數必須配)-->
下面使用了classpath 參數指定log4j.properties文件的位置,這樣log4j的配置文件就不用非要放到src的下面:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:config/log4j/log4j.properties</param-value>
</context-param>
使用spring的監聽器,當應用啟動時來讀取log4j的配置文件
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
J. java log4j放在其他目錄怎麼配置
你意思是不是想把log4j的配置文件放在其他目錄,而不是默認目錄?這個需要在web.xml里配置一下
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</context-param>
如果你放在默認目錄里,就不需要這一段,加上這一段,就是認為改變了log4jConfigLocation的值,信基尺log4j會在載入的時候去讀取這滑高個變數,如果沒設鋒亮置過,就會取運行時根目錄作為默認目錄