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、輸出結果
首先,控制台輸入如下圖所示:
② 如何用log4j輸出多個自定義日誌文件
輪襲log4j輸出多個自定義日和伏志文件
如果在實際應用中需要輸出獨立的日誌文件,怎樣才能把所需的內容從原有日誌中分離,形成單獨的日誌文件呢?
先看一個常見的log4j.properties文件,它是在控制台和test.log文件中記錄日誌:
復制代碼 代碼如下喚桐攜:
log4j.rootLogger=DEBUG, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
如果在同一類中需要輸出多個日誌文件呢?其實道理是一樣的,先在Test.java中定義:
復制代碼 代碼如下:
private static Log logger1 = LogFactory.getLog("mylogger1");
private static Log logger2 = LogFactory.getLog("mylogger2");
log4j.properties中配置如下:
復制代碼 代碼如下:
log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
不同日誌要使用不同的logger(如輸出到test1.log的要用logger1.info("abc"))。
還有一個問題,就是這些自定義的日誌默認是同時輸出到log4j.rootLogger所配置的日誌中的,如何能只讓它們輸出到自己指定的日誌中呢?別急,這里有個開關:
log4j.additivity. mylogger1 = false
它用來設置是否同時輸出到log4j.rootLogger所配置的日誌中,設為false就不會輸出到其它地方了。
但是這種方式有個小缺陷,那就是列印的日誌中類名只能是mylogger或者mylogger2。
2 動態配置路徑
若程序需要的.日誌路徑需要不斷的變化,而又不可能每次都去改配置文件,此時可以利用環境變數來解決。
log4j的配置如下:
復制代碼 代碼如下:
log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG
#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
此時,在使用log列印日誌之前,需要利用System定義日誌的輸出路徑和文件名的環境變數:
復制代碼 代碼如下:
System.setProperty(「log.dir」, logDir);
System.setProperty(「log.info.file」, infoLogFileName);
System.setProperty(「log.debug.file」, debugLogFileName);
附:Pattern參數的格式含義
%c 輸出日誌信息所屬的類的全名
%d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2013-8-19- 22:10:28
%f 輸出日誌信息所屬的類的類名
%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
%m 輸出代碼中指定的信息,如log(message)中的message
%n 輸出一個回車換行符,Windows平台為「/r/n」,Unix平台為「/n」
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推
%r 輸出自應用啟動到輸出該日誌信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名
③ log4j2怎麼輸出日誌到文件
、前提條件 系統必須使用LOG4J進行志管理否則效 系統必須包含mons-logging-xxx.jarlog4j-xxx.jar兩JAR包XXX版本號 二、操作步驟 1、創建志表 要志持久化必須資料庫創建張用存儲志信息表表內欄位志 主要屬性包括:操作類執行列印間志級別志內容 CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL, CLASS VARCHAR2(200), METHOD VARCHAR2(100), CREATETIME DATE, LOGLEVEL VARCHAR2(50), MSG VARCHAR2(4000)) 存儲類類全部路徑所CLASS欄位度需要比較 2、志管理配置 LOG4J主要兩種配置文件.properties.xmlproperties文件基礎講 述關於XML文件配置相信家看完面介紹能輕松完 通LOG4J.PROPERTIES文件第行: log4j.rootLogger= XXX句控制志輸想吧志輸資料庫 則需要XXX添加DBlog4j.rootLogger=INFO,stdout,Platform,db面 句志級別INFO信息輸STDOUT,PLATFORMDB (DATABASE) 配置信息LOG4J知道用戶想信息存入資料庫接我要 配置資料庫相關信息(包括緩存資料庫連接信息執行SQL)配置信息: ###JDBCAppender log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender //配置選擇使用JDBCAppender志信息存儲資料庫要做其操作自寫類繼承JDBCAppenderOK log4j.appender.db.BufferSize=1 //配置告訴LOG4J條志信息才存入資料庫我1,說條查條顯產環境影響系統性能 log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver //配置告訴LOG4J做資料庫存儲所用驅 log4j.appender.db.URL=jdbc:oracle:thin:@:: //配置資料庫連接URL用說都知道 log4j.appender.db.user=XXX log4j.appender.db.password=XXX //面兩資料庫連接用戶名密碼 log4j.appender.db.sql=insert into RESLOG (LogId,Class,Method,createTime,LogLevel,MSG) values (SQ_RESLOG_LOGID.Nextval,'%C','%M', to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd HH24:mi:ss'),'%p','%m') //配置告訴LOG4J吧志存儲資料庫用SQL語句SQ_RESLOG_LOGID.Nextval我建SEQUENCE;『%C』志CLASS;『%M』列印志執行類;『%d』列印間支持格式化;『%P』志級別包括INFO、DEBUG、ERROR等;『%m』MSG志內容注意參數區寫 log4j.appender.db.layout=org.apache.log4j.PatternLayout 通面配置現再啟服務LOG4J自原存儲.LOG文件信息同存儲資料庫
④ 如何使用log4j輸出單個級別的log到指定文件
這種情況下,就需要debug、info、warn、error分別進行配置了。之後通過priority屬性控制日誌實際輸出級別就可以。
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPElog4j:configurationPUBLIC"-//LOGGER""log4j.dtd">
<log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">
<!--Appenders-->
<appendername="console"class="org.apache.log4j.ConsoleAppender">
<paramname="Target"value="System.out"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}||||%p||||%m%n"/>
</layout>
</appender>
<!--輸出debug日誌-->
<appendername="debug.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/debug.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="debug"/>
<paramname="levelMax"value="debug"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--輸出info日誌-->
<appendername="info.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/info.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="info"/>
<paramname="levelMax"value="info"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--輸出warn日誌-->
<appendername="warn.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/warn.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="warn"/>
<paramname="levelMax"value="warn"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--輸出error日誌-->
<appendername="error.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/error.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="error"/>
<paramname="levelMax"value="error"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--RootLogger-->
<root>
<!--priority配置輸出日誌級別-->
<priorityvalue="info"/>
<appender-refref="console"></appender-ref>
<appender-refref="info.log"/>
<appender-refref="debug.log"/>
<appender-refref="warn.log"/>
<appender-refref="error.log"/>
</root>
</log4j:configuration>
⑤ 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
⑥ java工程中如何使用log4j輸出指定路徑日誌文件,是java工程,不是web工程,謝謝
此文檔放在項目編譯文件.class相同的位置
### set log levels ###log4j.rootLogger = debug , stdout , D### 輸出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n### 輸出到日誌文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 保存異常信息到單獨文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/error.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = ERRORlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
配置獲取方法:
PropertyConfigurator.configure( "D:\\Project Files\\myeclipse\\commontest\\bin\\log\\log4j\\log4j.properties" );
Logger log=Logger. getLogger(TestLog4j.class);
log.warn( "嘿嘿");
log.debug( "嗚嗚");
log.error( "錯啦");
⑦ 將console中所有輸出通過log4j輸出到文件中
log4j.rootLogger=info,stdout,info,debug,error
log4j.logger.com.mybatis=info
log4j.logger.com.opensymphony.xwork2=info
log4j.logger.java.sql=debug
log4j.logger.org.apache.struts=info
log4j.logger.org.springframework=info
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=C:/logs/項目名稱/debug.log
log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = ERROR
log4j.appender.error.append=true
log4j.appender.error.File=C\:/logs/項目名稱/error.log
⑧ Java怎樣使用log4j2向不同文件中寫入不同的日誌
解決方法 1:
看看RoutingAppender,也許你能從這入手。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="DEBUG" name="MyApp" packages="">
<appenders>
<Routing name="Routing">
<Routes pattern="$${ctx:USERNAME}">
<Route>
<RollingFile name="user.log" append="true" fileName="users/${ctx:USERNAME}.txt"
filePattern="users/archive/${ctx:USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz">
<PatternLayout>
<pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
</RollingFile>
</Route>
</Routes>
</Routing>
</appenders>
<loggers>
<root level="TRACE">
<appender-ref ref="Routing" level="DEBUG" />
</root>
</loggers>
</configuration>