java日誌記錄
① java為什麼記錄日誌用log而不用system.out 知乎
java將異常信息放在日誌文件中,可以使用log4開源的日誌類來記錄,實例如下:
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D://info.log//這里設置日誌文件輸出路徑
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%m%n
log4j.rootLogger=DEBUG,file
//定義一個類
publicclassLogInfo{
Loggerlogger=Logger.getLogger(LogInfo.class.getName());
/**
*<ahref="https://www..com/s?wd=%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">系統管理</a>
*/
/**
*@paramaddmin(String
*name,Stringaddname)添加管理員
*@paramname
*String
*@paramaddname
*String
*/
publicvoidaddadmin(Stringname,Stringaddname){
try{
logger.debug("管理員:"+name+"添加"+addname+"為管理員");
}catch(Exceptionex){
logger.info(ex.getMessage());
}
}
//……各種各樣的方法自己定義
}
② 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 = valueNLog4j 提供的 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
③ java列印日誌的幾種方式
在Java 中實現記錄日誌的方式有很多種, 下面給你簡單介紹四種:
最簡單的方式,就是system.println.out(error) ,這樣直接在控制台列印消息了。
Java.util.logging ; 在JDK 1.4 版本之後,提供了日誌的API ,可以往文件中寫日誌了。
log4j , 最強大的記錄日誌的方式。 可以通過配置 .properties 或是 .xml 的文件, 配置日誌的目的地,格式等等。
commons-logging, 最綜合和常見的日誌記錄方式, 經常是和log4j 結合起來使用。
④ 在java中如何使用記錄日誌API
import java.util.logging.*;
public class BasicLoggingExample {
public static void main(String args[])
{
Logger logger = Logger.getLogger("BasicLoggingExample");
logger.log(Level.INFO, "Test of logging system");
}
}
getLogger
public static Logger getLogger(String name)為指定子系統查找或創建一個 logger。如果已經創建了具有給定名稱的 logger,則返回該 logger。否則創建一個新的 logger。
如果創建了新的 logger,則根據 LogManager 的配置來其配置日誌級別,並將日誌輸出發送到其父處理程序。日誌配置注冊在 LogManager 全局命名空間內。
參數:
name - logger 的名稱。這應該是一個圓點分隔的名稱,並且通常應該基於子系統的包名或類名(如 java.net 或 javax.swing)。
log
public void log(Level level,String msg)記錄一條不帶參數的消息。
如果當前對於給定的消息級別而言 logger 是啟用的,那麼將給定的消息轉發到所有已注冊的輸出 Handler 對象。
參數:
level - 某個消息級別標識符,例如 SEVERE。
msg - 字元串消息(或消息類別中的鍵)。
⑤ java開發怎麼做日誌功能 就是記錄用戶每一步的操作具體做什麼了
細說起來,還算是比較麻煩的。大概給你個思路:
要記錄操作日誌,還能查看,那肯定得需要把操作記錄保存起來——直接保存到資料庫即可。
日誌管理模塊的話,因為有上邊的日誌記錄了,做個刪查的功能應該好做。這塊就不細說了。
最主要的地方:怎樣記錄日誌。思路如下:
先分析好需要記錄哪些日誌,這個一般都記錄新增、修改、刪除數據的操作。另外有些特殊的查詢操作也要記錄。
其實是如何記錄。一開始提到了日誌入庫。現在有個問題是什麼時候來做個邏輯。這個時機一般也是訪問者發起操作時就開始做。比如說在action或者servlet或者controller的對應的方法體里開始記錄。當然這需要寫好日誌入庫的邏輯。
其實這個日誌管理也是個比較完整的功能塊,甚至可以是個小系統。也有許多小細節和解決方案。思路有了,如何實現就根據情況而定吧。
⑥ java中使用日誌主要分為哪幾個步驟
首先,在項目中的classes 中新建立一個log4j.properties文件即可;
在實際編程時,要使Log4j真正在系統中運行事先還要對配置文件進行定義。定義步驟就是對Logger、Appender及Layout的分別使用。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是java properties(key=value)【Java特性文件(鍵=值)】。(這里只說明properties文件)
1、配置根Logger
其語法為:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 是日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關。比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被列印出來。appenderName:就是指定日誌信息輸出到哪個地方。您可以同時指定多個輸出目的地。
例如:log4j.rootLogger=info,A1,B2,C3
2、配置日誌信息輸出目的地
其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class //
"fully.qualified.name.of.appender.class" 可以指定下面五個目的地中的一個:
1.org.apache.log4j.ConsoleAppender(控制台)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
5.org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
1.ConsoleAppender選項
Threshold=WARN:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
Target=System.err:默認情況下是:System.out,指定輸出控制台
2.FileAppender 選項
Threshold=WARN:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
3.DailyRollingFileAppender 選項
Threshold=WARN:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
DatePattern=''.''yyyy-ww:每周滾動一次文件,即每周產生一個新的文件。當然也可以指定按月、周、天、時和分。即對應的格式如下:
1)''.''yyyy-MM: 每月
2)''.''yyyy-ww: 每周
3)''.''yyyy-MM-dd: 每天
4)''.''yyyy-MM-dd-a: 每天兩次
5)''.''yyyy-MM-dd-HH: 每小時
6)''.''yyyy-MM-dd-HH-mm: 每分鍾
4.RollingFileAppender 選項
Threshold=WARN:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
MaxFileSize=100KB: 後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
3、配置日誌信息的格式
其語法為:
1). log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
"fully.qualified.name.of.layout.class" 可以指定下面4個格式中的一個:
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字元串),
4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
1.HTMLLayout 選項
LocationInfo=true:默認值是false,輸出java文件名稱和行號
Title=my app file: 默認值是 Log4J Log Messages.
2.PatternLayout 選項
ConversionPattern=%m%n :指定怎樣格式化指定的消息。
3.XMLLayout 選項
LocationInfo=true:默認值是false,輸出java文件和行號
2). log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
這里需要說明的就是日誌信息格式中幾個符號所代表的含義:
-X號: X信息輸出時左對齊;
%p: 輸出日誌信息優先順序,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c: 輸出日誌信息所屬的類目,通常就是所在類的全名
%t: 輸出產生該日誌事件的線程名
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個"%"字元
%F: 輸出日誌消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日誌具體信息
%n: 輸出一個回車換行符,Windows平台為"
",Unix平台為"
"輸出日誌信息換行
可以在%與模式字元之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字元截掉,但小於30的話也不會有空格。
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字元,就從左邊交遠銷出的字元截掉
比較詳細的例子
log4j.rootLogger=INFO,consoleAppender,logfile,MAIL
log4j.addivity.org.apache=true
#ConsoleAppender,控制台輸出
#FileAppender,文件日誌輸出
#SMTPAppender,發郵件輸出日誌
#SocketAppender,Socket日誌
#NTEventLogAppender,Window NT日誌
#SyslogAppender,
#JMSAppender,
#AsyncAppender,
#NullAppender
#文件輸出:RollingFileAppender
#log4j.rootLogger = INFO,logfile
log4j.appender.logfile = org.apache.log4j.RollingFileAppender
log4j.appender.logfile.Threshold = INFO
# 輸出以上的INFO信息
log4j.appender.logfile.File = INFO_log.html
#保存log文件路徑
log4j.appender.logfile.Append = true
# 默認為true,添加到末尾,false在每次啟動時進行覆蓋
log4j.appender.logfile.MaxFileSize = 1MB
# 一個log文件的大小,超過這個大小就又會生成1個日誌 # KB ,MB,GB
log4j.appender.logfile.MaxBackupIndex = 3
# 最多保存3個文件備份
log4j.appender.logfile.layout = org.apache.log4j.HTMLLayout
# 輸出文件的格式
log4j.appender.logfile.layout.LocationInfo = true
#是否顯示類名和行數
log4j.appender.logfile.layout.Title =title:\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
#html頁面的 < title >
############################## SampleLayout ####################################
# log4j.appender.logfile.layout = org.apache.log4j.SampleLayout
############################## PatternLayout ###################################
# log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
# log4j.appender.logfile.layout.ConversionPattern =% d % p [ % c] - % m % n % d
############################## XMLLayout #######################################
# log4j.appender.logfile.layout = org.apache.log4j.XMLLayout
# log4j.appender.logfile.layout.LocationInfo = true #是否顯示類名和行數
############################## TTCCLayout ######################################
# log4j.appender.logfile.layout = org.apache.log4j.TTCCLayout
# log4j.appender.logfile.layout.DateFormat = ISO8601
#NULL, RELATIVE, ABSOLUTE, DATE or ISO8601.
# log4j.appender.logfile.layout.TimeZoneID = GMT - 8 : 00
# log4j.appender.logfile.layout.CategoryPrefixing = false ##默認為true 列印類別名
# log4j.appender.logfile.layout.ContextPrinting = false ##默認為true 列印上下文信息
# log4j.appender.logfile.layout.ThreadPrinting = false ##默認為true 列印線程名
# 列印信息如下:
#2007 - 09 - 13 14 : 45 : 39 , 765 [http - 8080 - 1 ] ERROR com.poxool.test.test - error成功關閉鏈接
###############################################################################
#每天文件的輸出:DailyRollingFileAppender
#log4j.rootLogger = INFO,errorlogfile
log4j.appender.errorlogfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlogfile.Threshold = ERROR
log4j.appender.errorlogfile.File = ../logs/ERROR_log
log4j.appender.errorlogfile.Append = true
#默認為true,添加到末尾,false在每次啟動時進行覆蓋
log4j.appender.errorlogfile.ImmediateFlush = true
#直接輸出,不進行緩存
# ' . ' yyyy - MM: 每個月更新一個log日誌
# ' . ' yyyy - ww: 每個星期更新一個log日誌
# ' . ' yyyy - MM - dd: 每天更新一個log日誌
# ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一個log日誌
# ' . ' yyyy - MM - dd - HH: 每小時更新一個log日誌
# ' . ' yyyy - MM - dd - HH - mm: 每分鍾更新一個log日誌
log4j.appender.errorlogfile.DatePattern = ' . ' yyyy - MM - dd ' .log '
#文件名稱的格式
log4j.appender.errorlogfile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlogfile.layout.ConversionPattern =%d %p [ %c] - %m %n %d
#控制台輸出:
#log4j.rootLogger = INFO,consoleAppender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold = ERROR
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern =%d %-5p %m %n
log4j.appender.consoleAppender.ImmediateFlush = true
# 直接輸出,不進行緩存
log4j.appender.consoleAppender.Target = System.err
# 默認是System.out方式輸出
#發送郵件:SMTPAppender
#log4j.rootLogger = INFO,MAIL
log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold = INFO
log4j.appender.MAIL.BufferSize = 10
log4j.appender.MAIL.From = [email protected]
log4j.appender.MAIL.SMTPHost = smtp.gmail.com
log4j.appender.MAIL.Subject = Log4J Message
log4j.appender.MAIL.To = [email protected]
log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern =%d - %c -%-4r [%t] %-5p %c %x - %m %n
#資料庫:JDBCAppender
log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL = jdbc:oracle:thin:@ 210.51 . 173.94 : 1521 :YDB
log4j.appender.DATABASE.driver = oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user = ydbuser
log4j.appender.DATABASE.password = ydbuser
log4j.appender.DATABASE.sql = INSERT INTO A1 (TITLE3) VALUES ( ' %d - %c %-5p %c %x - %m%n ' )
log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern =% d - % c -%- 4r [ % t] %- 5p % c % x - % m % n
#資料庫的鏈接會有問題,可以重寫org.apache.log4j.jdbc.JDBCAppender的getConnection() 使用資料庫鏈接池去得鏈接,可以避免insert一條就鏈接一次資料庫