1. 配置文件
Log4J配置文件的基本格式如下:
#配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
#配置日志信息輸出目的地Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
#配置日志信息的格式(布局)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
其中 [level] 是日志輸出級別,共有5級:
FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7
Appender 為日志輸出目的地,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
Layout:日志輸出格式,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
打印參數: Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,如下:
%m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日志事件的線程名
%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 )
2. 在代碼中初始化Logger:
1)在程序中調用BasicConfigurator.configure()方法:給根記錄器增加一個ConsoleAppender,輸出格式通過PatternLayout設為"%-4r [%t] %-5p %c %x - %m%n",還有根記錄器的默認級別是Level.DEBUG.
2)配置放在文件里,通過命令行參數傳遞文件名字,通過PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通過環境變量傳遞文件名等信息,利用log4j默認的初始化過程解析并配置;
4)配置放在文件里,通過應用服務器配置傳遞文件名等信息,利用一個特殊的servlet來完成配置。
3. 為不同的 Appender 設置日志輸出級別:
當調試系統時,我們往往注意的只是異常級別的日志輸出,但是通常所有級別的輸出都是放在一個文件里的,如果日志輸出的級別是BUG!?那就慢慢去找吧。
這時我們也許會想要是能把異常信息單獨輸出到一個文件里該多好啊。當然可以,Log4j已經提供了這樣的功能,我們只需要在配置中修改Appender的Threshold 就能實現,比如下面的例子:
[配置文件]
### set log levels ###
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 = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
### 輸出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 輸出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
### 保存異常信息到單獨文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## 異常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只輸出ERROR級別以上的日志!!!
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
[代碼中使用]
public class TestLog4j {
public static void main(String[] args) {
PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
Logger logger = Logger.getLogger(TestLog4j. class );
logger.debug( " debug " );
logger.error( " error " );
}
}
運行一下,看看異常信息是不是保存在了一個單獨的文件error.log中
log4j.properties 使用
一.參數意義說明
輸出級別的種類
ERROR、WARN、INFO、DEBUG
ERROR 為嚴重錯誤 主要是程序的錯誤
WARN 為一般警告,比如session丟失
INFO 為一般要顯示的信息,比如登錄登出
DEBUG 為程序的調試信息
配置日志信息輸出目的地
log4j.appender.appenderName = 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(將日志信息以流格式發送到任意指定的地方)
配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
控制臺選項
Threshold=DEBUG:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
Target=System.err:默認情況下是:System.out,指定輸出控制臺
FileAppender 選項
Threshold=DEBUF:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
RollingFileAppender 選項
Threshold=DEBUG:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
MaxBackupIndex=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平臺為"\r\n",Unix平臺為"\n"輸出日志信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
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字符,就從左邊較遠輸出的字符截掉。
二.文件配置Sample1
log4j.rootLogger=DEBUG,A1,R
#log4j.rootLogger=INFO,A1,R
# ConsoleAppender 輸出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
# File 輸出 一天一個文件,輸出路徑可以定制,一般在根路徑下
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=blog_log.txt
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
文件配置Sample2
下面給出的Log4J配置文件實現了輸出到控制臺,文件,回滾文件,發送日志郵件,輸出到數據庫日志表,自定義標簽等全套功能。
log4j.rootLogger=DEBUG,CONSOLE,A1,im
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@yeqiangwei.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@yeqiangwei.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
###################
#自定義Appender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@yeqiangwei.com
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
三.高級使用
實驗目的:
1.把FATAL級錯誤寫入2000NT日志
2. WARN,ERROR,FATAL級錯誤發送email通知管理員
3.其他級別的錯誤直接在后臺輸出
實驗步驟:
輸出到2000NT日志
1.把Log4j壓縮包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目錄下
2.寫配置文件log4j.properties
# 在2000系統日志輸出
log4j.logger.NTlog=FATAL, A8
# APPENDER A8
log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.A8.Source=JavaTest
log4j.appender.A8.layout=org.apache.log4j.PatternLayout
log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
3.調用代碼:
Logger logger2 = Logger.getLogger("NTlog"); //要和配置文件中設置的名字相同
logger2.debug("debug!!!");
logger2.info("info!!!");
logger2.warn("warn!!!");
logger2.error("error!!!");
//只有這個錯誤才會寫入2000日志
logger2.fatal("fatal!!!");
發送email通知管理員:
1. 首先下載JavaMail和JAF,
http://java.sun.com/j2ee/ja/javamail/index.html
http://java.sun.com/beans/glasgow/jaf.html
在項目中引用mail.jar和activation.jar。
2. 寫配置文件
# 將日志發送到email
log4j.logger.MailLog=WARN,A5
# APPENDER A5
log4j.appender.A5=org.apache.log4j.net.SMTPAppender
log4j.appender.A5.BufferSize=5
log4j.appender.A5.To=chunjie@yeqiangwei.com
log4j.appender.A5.From=error@yeqiangwei.com
log4j.appender.A5.Subject=ErrorLog
log4j.appender.A5.SMTPHost=smtp.263.net
log4j.appender.A5.layout=org.apache.log4j.PatternLayout
log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
3.調用代碼:
//把日志發送到mail
Logger logger3 = Logger.getLogger("MailLog");
logger3.warn("warn!!!");
logger3.error("error!!!");
logger3.fatal("fatal!!!");
在后臺輸出所有類別的錯誤:
1. 寫配置文件
# 在后臺輸出
log4j.logger.console=DEBUG, A1
# APPENDER A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
2.調用代碼
Logger logger1 = Logger.getLogger("console");
logger1.debug("debug!!!");
logger1.info("info!!!");
logger1.warn("warn!!!");
logger1.error("error!!!");
logger1.fatal("fatal!!!");
--------------------------------------------------------------------
全部配置文件:log4j.properties
# 在后臺輸出
log4j.logger.console=DEBUG, A1
# APPENDER A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
# 在2000系統日志輸出
log4j.logger.NTlog=FATAL, A8
# APPENDER A8
log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.A8.Source=JavaTest
log4j.appender.A8.layout=org.apache.log4j.PatternLayout
log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
# 將日志發送到email
log4j.logger.MailLog=WARN,A5
# APPENDER A5
log4j.appender.A5=org.apache.log4j.net.SMTPAppender
log4j.appender.A5.BufferSize=5
log4j.appender.A5.To=chunjie@yeqiangwei.com
log4j.appender.A5.From=error@yeqiangwei.com
log4j.appender.A5.Subject=ErrorLog
log4j.appender.A5.SMTPHost=smtp.263.net
log4j.appender.A5.layout=org.apache.log4j.PatternLayout
log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
全部代碼:Log4jTest.java
/*
* 創建日期 2003-11-13
*/
package edu.bcu.Bean;
import org.apache.log4j.*;
//import org.apache.log4j.nt.*;
//import org.apache.log4j.net.*;
/**
* @author yanxu
*/
public class Log4jTest
{
public static void main(String args[])
{
PropertyConfigurator.configure("log4j.properties");
//在后臺輸出
Logger logger1 = Logger.getLogger("console");
logger1.debug("debug!!!");
logger1.info("info!!!");
logger1.warn("warn!!!");
logger1.error("error!!!");
logger1.fatal("fatal!!!");
//在NT系統日志輸出
Logger logger2 = Logger.getLogger("NTlog");
//NTEventLogAppender nla = new NTEventLogAppender();
logger2.debug("debug!!!");
logger2.info("info!!!");
logger2.warn("warn!!!");
logger2.error("error!!!");
//只有這個錯誤才會寫入2000日志
logger2.fatal("fatal!!!");
//把日志發送到mail
Logger logger3 = Logger.getLogger("MailLog");
//SMTPAppender sa = new SMTPAppender();
logger3.warn("warn!!!");
logger3.error("error!!!");
logger3.fatal("fatal!!!");
}
}
本文出處:http://blog.csdn.net/azheng270/archive/2008/03/12/2173430.aspx
EXCEL模板加載出錯的問題:
可能是因為模板中某些格式存在問題,或者模板中存在EXCEL的某些高級功能,【POI】無法加載導致出錯。
解決辦法:自己一步步從最簡單的excel文件開始,繪制模板。
$CATALINA_HOME指的是Tomcat根目錄。
$CATALINA_HOME\webapps下,然后啟動服務器就可以了。這種方式比較簡單,訪問地址如下:http://localhost:8080/PetWeb/
2、這種方式可以不必將PetWeb目錄拷貝到webapps下,直接在F:\部署。方法如下,更改$CATALINA_HOME\conf\server.xml文件,在<host>標簽內添加<Context>標簽,內容如下:
<Context docBase="F:/PetWeb" reloadable="false" path="/Pet"/>
其
中reloadable="false"表示當應用程序中的內容發生更改之后服務器不會自動加載,這個屬性在開發階段通常都設為true,方便開發,在發
布階段應該設置為false,提高應用程序的訪問速度。docBase為路徑,可以使用絕對路徑,也可以使用相對路徑,相對路徑相對于webapps。
path屬性的值是訪問時的根地址。訪問地址如下:http://localhost:8080/Pet/
3、這種方式和第二種方式差不多,但是不是在Server.xml文件中添加Context標簽,而是在$CATALINA_HOME
\conf\Catalina\localhost中添加一個xml文件,如Pet.xml,內容如下:
<Context docBase="F:/PetWeb" reloadable="false" />大家可能發現和第二種方式差不多,但是缺少了path屬性,這種方式服務器會使用.xml的名字作為path屬性的值。訪問地址如下:http://localhost:8080/Pet/unpackWAR
="false"/> 讓大家久等了。今天給大家介紹怎樣在Tomcat5.5.9中部署Java Web應用程序。本文的重點是如何部署,所以暫且先不介紹怎樣開發Web應用程序和怎樣啟動Tomcat服務器。我們現在不考慮使用的什么開發工具,總之在練習本文所說的例子之前,你應該有一個Java Web應用程序。本文假定Web應用程序的根目錄為PetWeb。$CATALINA_HOME指的是Tomcat根目錄。
$CATALINA_HOME\webapps下,然后啟動服務器就可以了。這種方式比較簡單,但是web應用程序必須在webapps目錄下。訪問地址如下:
http://localhost:8080/PetWeb/
2、這種方式可以不必將PetWeb目錄拷貝到webapps下,直接在F:\部署。方法如下,更改$CATALINA_HOME\conf\server.xml文件,在<host>標簽內添加<Context>標簽,內容如下:
<Context docBase="F:/PetWeb" reloadable="false" path="/Pet"/>
其
中reloadable="false"表示當應用程序中的內容發生更改之后服務器不會自動加載,這個屬性在開發階段通常都設為true,方便開發,在發
布階段應該設置為false,提高應用程序的訪問速度。docBase為路徑,可以使用絕對路徑,也可以使用相對路徑,相對路徑相對于webapps。
path屬性的值是訪問時的根地址。訪問地址如下:http://localhost:8080/Pet/
3、這種方式和第二種方式差不多,但是不是在Server.xml文件中添加Context標簽,而是在$CATALINA_HOME
\conf\Catalina\localhost中添加一個xml文件,如Pet.xml,內容如下:
<Context docBase="F:/PetWeb" reloadable="false" />大家可能發現和第二種方式差不多,但是缺少了path屬性,這種方式服務器會使用.xml的名字作為path屬性的值。訪問地址如下:http://localhost:8080/Pet/unpackWAR
="false"/>$CATALINA_HOME\webapps\下沒有該文件,你必須去重新下載tomcat,否則不能完成以下的功能。要想使用該管理程序必須首先編輯$CATALINA_HOME\conf\tomcat-users.xml文件,內容如下:關于這個文件的更多內容,請參考Java Web應用程序的安全模型二
<tomcat-users>JProbe
Version: 8.1.0
軟件簡介:一款Java代碼、內存和覆蓋率分析工具。
主要特性:覆蓋瀏覽器和源代碼視圖-快速分離未檢測代碼和死代碼;
批處理模式-能以批處理模式運行,方便的集成建立/測試系統;
報表-以XML、純文本、CSV或者HTML格式輸出覆蓋范圍報告,用以定制分析;
快照合并-合并多個平臺運行的整個覆蓋數據;
Eclipse IDE集成,提供了Eclipse插件,可在Eclipse中直接進行內存分析和代碼覆蓋率測試。
下載:
JProbe for Linux for x86 and x64 - BIN Format
JProbe for Solaris - BIN Format
JProbe for Solaris x86 - BIN Format
JProbe for Windows - EXE Format
JProbe Plugins for Eclipse Guide
破解方法(請使用正版軟件):
安裝Jprobe后,
方法1:替換client-support.jar目錄中的\com\sitraka\licensing\ValidateSignature.class文件。
方法2:替換client-support.jar目錄中的\com\sitraka\licensing\
LicenseProperties.class文件。
破解文件:
JProbe.Suite.v8.1.0.Cracked-FALLEN
其實在 JDK 5 中已經新加入了這個功能了. 現在的 JDK 已經內置了對 VM 的監控功能. JDK 6 中這個工具變的更加好用了. 關于 JDK 5 中如何使用這個工具可以參考這里: http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
jconsole 可以很方便的監控本機的所有 Java 應用和遠程的應用.
監控本地應用
首先就是啟動您要監控的應用, 例如我用 JDK 1.6 來啟動了 Tomcat, 或者 Eclipse 也可以, 可以在任務管理器(Ctrl+Alt+Del可以調出來, 或者在任務欄點擊右鍵)里看到進程ID, 例如我這里是 6132.
接著在 JDK 安裝目錄中(<JDK_HOME>/bin/jconsole.exe)啟動 jconsole.exe (雙擊或者在 cmd 里面敲入 jconsole), 主界面會提示您建立一個新連接:
可以看到進程ID, 選擇它, 然后點擊"連接". 這些 ID 必須都是用 JDK 1.6 的 java.exe 啟動的, 否則在列表里看不到.
JConsle 能監控內存,線程,類的數目和CPU然后點擊各個 Tab 可以看到詳細的輸出, 詳細的輸出包括:
內存: 堆/非堆, 峰值, 內存的各個部分, 例如 Perm, Eden 等的大小曲線圖.
線程: 峰值, 所有線程的列表, 堆棧跟蹤(哪個對象中的線程)等. 還可以強制執行GC.
類: 峰值, 類總數曲線圖.
MBean: 一些 JVM 參數的詳細 MBean 信息.
監控遠程進程
首先需要在運行的應用上啟用遠程管理, 參數如下(簡單期間就不加用戶驗證了):
java
-Dcom.sun.management.jmxremote.port=1090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -jar
../demo/jfc/Java2D/Java2Demo.jar
然后連接的時候選擇遠程進程, 地址輸入:
localhost:1090
即可.當然在別的電腦上(一般是局域網)可以輸入那個電腦的IP.
綜 述: 使用 JConsole 可以簡單的監控 Server 狀態, 但是本身要占一定的資源, 不過 JVM 自帶的監控, 理論上講應該是占資源很小很小的, 可以用它來方便的了解 Web 服務器應用進程的狀態. 如果要調優應用, 還是使用 JProfiler 等工具更好一些, 當然它們占的資源也更大.
后記:
jdk1.6.0\demo\management\MemoryMonitor
這里帶了個很好的畫內存曲線圖的例子... 大家改改就可以實現同時監控多臺 Server 的內存曲線了....
首先,安裝的時候要勾選ftp服務,centos會幫你裝上vsftpd這個ftp服務器并把它標為系統服務。
啟動命令:/etc/rc.d/init.d/vsftpd start
這時候可以使用ftp客戶端連接。
vsftpd的權限貌似和系統權限有掛鉤。
下面是抄來的配置解釋vsftpd的配置
vsftpd.ftpusers:位于/etc目錄下。它指定了哪些用戶賬戶不能訪問FTP服務器,例如root等。
vsftpd.user_list:位于/etc目錄下。該文件里的用戶賬戶在默認情況下也不能訪問FTP服務器,僅當vsftpd .conf配置文件里啟用userlist_enable=NO選項時才允許訪問。
vsftpd.conf:位于/etc/vsftpd目錄下。來自定義用戶登錄控制、用戶權限控制、超時設置、服務器功能選項、服務器性能選項、服務器響應消息等FTP服務器的配置。
(1)用戶登錄控制
anonymous_enable=YES,允許匿名用戶登錄。
no_anon_password=YES,匿名用戶登錄時不需要輸入密碼。
local_enable=YES,允許本地用戶登錄。
deny_email_enable=YES,可以創建一個文件保存某些匿名電子郵件的黑名單,以防止這些人使用Dos攻擊。
banned_email_file=/etc/vsftpd.banned_emails,當啟用deny_email_enable功能時,所需的電子郵件黑名單保存路徑(默認為/etc/vsftpd.banned_emails)。
(2)用戶權限控制
write_enable=YES,開啟全局上傳權限。
local_umask=022,本地用戶的上傳文件的umask設為022(系統默認是077,一般都可以改為022)。
anon_upload_enable=YES,允許匿名用戶具有上傳權限,很明顯,必須啟用write_enable=YES,才可以使用此項。同時我們還必須建立一個允許ftp用戶可以讀寫的目錄(前面說過,ftp是匿名用戶的映射用戶賬號)。
anon_mkdir_write_enable=YES,允許匿名用戶有創建目錄的權利。
chown_uploads=YES,啟用此項,匿名上傳文件的屬主用戶將改為別的用戶賬戶,注意,這里建議不要指定root賬號為匿名上傳文件的屬主用戶!
chown_username=whoever,當啟用chown_uploads=YES時,所指定的屬主用戶賬號,此處的whoever自然要用合適的用戶賬號來代替。
chroot_list_enable=YES,可以用一個列表限定哪些本地用戶只能在自己目錄下活動,如果chroot_local_user=YES,那么這個列表里指定的用戶是不受限制的。
chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,則指定該列表(chroot_local_user)的保存路徑(默認是/etc/vsftpd.chroot_list)。
nopriv_user=ftpsecure,指定一個安全用戶賬號,讓FTP服務器用作完全隔離和沒有特權的獨立用戶。這是vsftpd系統推薦選項。
async_abor_enable=YES,強烈建議不要啟用該選項,否則將可能導致出錯!
ascii_upload_enable=YES;ascii_download_enable=YES,默認情況下服務器會假裝接受ASCⅡ模式請求但實際上是忽略這樣的請求,啟用上述的兩個選項可以讓服務器真正實現ASCⅡ模式的傳輸。
注意:啟用ascii_download_enable選項會讓惡意遠程用戶們在ASCⅡ模式下用“SIZE/big/file”這樣的指令大量消耗FTP服務器的I/O資源。
這些ASCⅡ模式的設置選項分成上傳和下載兩個,這樣我們就可以允許ASCⅡ模式的上傳(可以防止上傳腳本等惡意文件而導致崩潰),而不會遭受拒絕服務攻擊的危險。
(3)用戶連接和超時選項
idle_session_timeout=600,可以設定默認的空閑超時時間,用戶超過這段時間不動作將被服務器踢出。
data_connection_timeout=120,設定默認的數據連接超時時間。
(4)服務器日志和歡迎信息
dirmessage_enable=YES,允許為目錄配置顯示信息,顯示每個目錄下面的message_file文件的內容。
ftpd_banner=Welcome to blah FTP service,可以自定義FTP用戶登錄到服務器所看到的歡迎信息。
xferlog_enable=YES,啟用記錄上傳/下載活動日志功能。
xferlog_file=/var/log/vsftpd.log,可以自定義日志文件的保存路徑和文件名,默認是/var/log/vsftpd.log。
一、安裝(以root身份進行)
1、檢出最新的postgresql的yum配置從http://yum.pgsqlrpms.org/reporpms/repoview/pgdg-centos.html
然后根據版本選擇需要的rpm后執行下列命令
rpm -Uvh http://yum.pgsqlrpms.org/reporpms/8.3/pgdg-centos-8.3-6.noarch.rpm
2、安裝或者升級postgresql-libs
yum upgrade postgresql-libs
3、安裝postgresql
yum install postgresql postgresql-server
4、初始化數據庫以及啟動服務
service postgresql initdb
service postgresql start
二、配置
在配置之前需將postgresql的端口號5432在iptables下開放。
yum安裝postgresql后的安裝路徑為:/var/lib/pgsql下,主要配置文件在其data文件夾下,進入data文件夾
1、修改postgresql.conf文件
如果想讓PostgreSQL監聽整個網絡的話,將listen_addresses前的#去掉,并將listen_addresses = 'localhost'改成listen_addresses = '*'
2、修改pg_hba.conf
這個文件最后有一個列表,它決定了分派了每一個用戶的權限,以及認證方式。格式是“Type Database User Address Method”,要注意的是method最好寫md5。
在列表后追加一行:host all all 192.168.1.0/24 password
3、修改postgres用戶密碼:passwd postgres
4、暫時將pg_hba.conf中,本機的認證方式改為trust,切換當前用戶為postgres:su postgres
5、用psql登錄PostgreSQL系統,“SELECT * FROM pg_shadow;”,發現這個表里的postgres這個用戶根本還沒有存儲密碼;于是,再“ALTER USER postgres PASSWORD '它的密碼';
6、重啟服務/etc/init.d/postgresql restart,連接成功。
前 言 |
|
[root@sample ~]# yum -y install samba ← 安裝 Samba Setting up Install Process Setting up repositories update 100% |=========================| 951 B 00:00 base 100% |=========================| 1.1 kB 00:00 addons 100% |=========================| 951 B 00:00 extras 100% |=========================| 1.1 kB 00:00 Reading repository metadata in from local files primary.xml.gz 100% |=========================| 73 kB 00:00 update : ################################################## 212/212 Added 212 new packages, deleted 0 old in 4.94 seconds primary.xml.gz 100% |=========================| 569 kB 00:00 base : ################################################## 1500/1500 Added 1500 new packages, deleted 0 old in 28.97 seconds primary.xml.gz 100% |=========================| 157 B 00:00 Added 0 new packages, deleted 0 old in 0.03 seconds primary.xml.gz 100% |=========================| 32 kB 00:00 extras : ################################################## 124/124 Added 124 new packages, deleted 0 old in 1.93 seconds Parsing package install arguments Resolving Dependencies --> Populating transaction set with selected packages. Please wait. ---> Downloading header for samba to pack into transaction set. samba-3.0.10-1.4E.9.i386. 100% |=========================| 101 kB 00:00 ---> Package samba.i386 0:3.0.10-1.4E.9 set to be updated --> Running transaction check --> Processing Dependency: samba-common = 0:3.0.10 for package: samba --> Restarting Dependency Resolution with new changes. --> Populating transaction set with selected packages. Please wait. ---> Downloading header for samba-common to pack into transaction set. samba-common-3.0.10-1.4E. 100% |=========================| 37 kB 00:00 ---> Package samba-common.i386 0:3.0.10-1.4E.9 set to be updated --> Running transaction check Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: samba i386 3.0.10-1.4E.9 base 13 M Installing for dependencies: samba-common i386 3.0.10-1.4E.9 base 5.0 M Transaction Summary ============================================================================= Install 2 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 18 M Downloading Packages: (1/2): samba-common-3.0.1 100% |=========================| 5.0 MB 00:04 (2/2): samba-3.0.10-1.4E. 100% |=========================| 13 MB 00:11 warning: rpmts_HdrFromFdno: V3 DSA signature: NOKEY, key ID 443e1821 Public key for samba-common-3.0.10-1.4E.9.i386.rpm is not installed Retrieving GPG key from http://mirror.centos.org/centos/RPM-GPG-KEY-centos4 Importing GPG key 0x443E1821 "CentOS-4 key <centos-4key@centos.org>" Key imported successfully Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing: samba-common ######################### [1/2] Installing: samba ######################### [2/2] Installed: samba.i386 0:3.0.10-1.4E.9 Dependency Installed: samba-common.i386 0:3.0.10-1.4E.9 Complete! |
|
[root@sample ~]# vi /etc/samba/smb.conf ← 編輯 Samba 的配置文件 #======================= Global Settings ===================================== [global] ← 找到這一行(全局設置標簽),在此行下面添加如下行: dos charset = GB2312 ← 將 Windows 客戶端的文字編碼設置為簡體中文 GB2312 unix charset = GB2312 ← 指定 Samba 所在的 CentOS 服務端新建文件或目錄時的編碼為 GB2312 display charset = GB2312 ← 指定使用 SWAT(一種通過瀏覽器控制Samba的工具)時頁面的默認文字編碼 directory mask = 0777 ← 指定新建目錄的屬性(以下4行) force directory mode = 0777 directory security mask = 0777 force directory security mode = 0777 create mask = 0777 ← 指定新建文件的屬性(以下4行) force create mode = 0777 security mask = 0777 force security mode = 0777 workgroup = MYGROUP ← 找到此行,將工作組名稱改為 Windows 網絡所定義的工作組名 ↓ workgroup = WORKGROUP ← 變為此狀態,這里以 Windows XP 默認的“WORKGROUP”為例 ; hosts allow = 192.168.1. 192.168.2. 127. ← 找到此行,去掉行首的“;”,并制定訪問限制 ↓ hosts allow = 192.168.0. 127. ← 變為此狀態,指定內網IP地址及本地,只允許這兩種情況的訪問 然后在配置文件的末尾填如下幾行,定義公眾共享目錄: [public] comment = Public Stuff path = /home/samba ← 指定共享目錄位置 public = yes writable = yes ← 賦予共享目錄寫入權限的屬性 |
[root@sample ~]# mkdir /home/samba ← 建立共享文件專用目錄 [root@sample ~]# chown -R nobody. /home/samba ← 設置專用目錄歸屬為 nobody [root@sample ~]# chmod 777 /home/samba ← 將專用目錄屬性設置為 777 |
[root@sample ~]# smbpasswd -a centospub ← 將系統用戶 centospub(例)加入到 Samba 用戶數據庫 New SMB password: ← 輸入該用戶用于登錄 Samba 的密碼 Retype new SMB password: ← 再次確認輸入該密碼 Added user centospub. |
|
[root@sample ~]# vi /etc/sysconfig/iptables ← 編輯 iptables 配置文件 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT ← 找到此行,在下面添加如下行: -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 137 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 138 -j ACCEPT [root@sample ~]# /etc/rc.d/init.d/iptables restart ← 重新啟動 iptables ,使新的規則生效 Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] |
[root@sample ~]# chkconfig smb on ← 設置 Samba 自啟動 [root@sample ~]# chkconfig --list smb ← 確認 Samba 啟動標簽,確認 2-5 為 on 的狀態 smb 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@sample ~]# /etc/rc.d/init.d/smb start ← 啟動 Samba 服務 Starting SMB services: [ OK ] Starting NMB services: [ OK ] |
|
在本地計算機上調試 Java™ 應用程序并不是惟一的選擇。學習如何使用構成遠程調試的不同連接類型進行遠程調試。本文概述了設置遠程應用程序調試的特性和示例。
遠程調試對應用程序開發十分有用。例如,為不能托管開發平臺的低端機器開發程序,或在專用的機器上(比如服務不能中斷的 Web 服務器)調試程序。其他情況包括:運行在內存小或 CUP 性能低的設備上的 Java 應用程序(比如移動設備),或者開發人員想要將應用程序和開發環境分開,等等。
先決條件
![]() |
|
如果您還沒安裝該程序,請下載 Eclipse V3.4(Ganymede)。在 Ganymede 中,套接字(socket)監聽連接器被添加到 Remote Java Application 啟動配置類型。Eclipse 最新的套接字監聽連接器允許您打開 Java 調試器,它能夠監聽特定套接字上的連接。可以從命令行選項打開被調試的程序,并將其連接到調試器。在 Ganymede 發布之前,僅有一個連接套接字的連接器,被調試的程序所在的機器必須是一個與調試器相連的調試主機。由于受到內存和 CPU 不足的限制,要想讓移動設備充當主機是不現實的。
為了進行遠程調試,必須使用 Java Virtual Machine (JVM) V5.0 或更新版本,比如 IBM® J9 或 Sun Microsystem 的 Java SE Development Kit(JDK)。本文主要討論遠程調試,而不是每個 Eclipse 調試特性的細節。查看 參考資料 獲得更多關于使用 Eclipse 進行調試的信息,并且可以找到上面提到的軟件。
JPDA 簡介
![]() |
|
Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技術是一個多層架構,使您能夠在各種環境中輕松調試 Java 應用程序。JPDA 由兩個接口(分別是 JVM Tool Interface 和 JDI)、一個協議(Java Debug Wire Protocol)和兩個用于合并它們的軟件組件(后端和前端)組成。它的設計目的是讓調試人員在任何環境中都可以進行調試。JPDA 不僅能夠用于桌面系統,而且能夠在嵌入式系統上很好地工作。
JVM Tool Interface (JVMTI) 規定必須為調試提供 VM(編輯注:從 Java V5 開始,將用 JVMTI 代替 Java V1.4 中的 JVMDI)。Java Debug Wire Protocol (JDWP) 描述調試信息的格式,以及在被調試的進程和調試器前端之間傳輸的請求,調試器前端實現 JDI,比如 Eclipse、Borland JBuilder 等。根據 Sun 的 JPDA 規范,被調試的程序常常稱為 debuggee。JDI 是一個高級的接口,它定義用于遠程調試的信息和請求。下面給出了調試器的架構。
Components Debugger Interfaces / |--------------| / | VM | debuggee -----( |--------------| <---- JVMTI - Java VM Tool Interface \ | back-end | \ |--------------| / | comm channel --( | <------------ JDWP - Java Debug Wire Protocol \ | / |--------------| / | front-end | debugger -----( |--------------| <---- JDI - Java Debug Interface \ | UI | \ |--------------| |
因此,任何第三方工具和基于 JPDA 的 VM 應該都能協調工作。通過這個客戶機-服務器架構,您可以從運行該平臺的本地工作站調試 Java 程序,甚至還可以通過網絡進行遠程調試。
在討論調試場景之前,我們先了解 JPDA 規范中的兩個術語:連接器和傳輸。連接器是一個 JDI 抽象,用來在調試器應用程序和目標 VM 之間建立連接。傳輸定義應用程序如何進行訪問,以及數據如何在前端和后端之間傳輸。連接器 “映射” 到可用的傳輸類型和連接模式。在 Sun 的 JPDA 參考實現中,為 Microsoft® Windows® 提供了兩個傳輸機制:套接字傳輸和共享內存傳輸。可用的連接器:
在調試器應用程序和目標 VM 之間建立連接時,有一端將用作服務器并監聽連接。隨后,另一端將連接到監聽器并建立一個連接。通過連接,調試器應用程序或目標 VM 都可以充當服務器。進程之間的通信可以在同一個機器或不同的機器上運行。
要遠程調試 Java 程序,難點不是在調試器的前端,而是遠程 Java 后端。不幸的是,Eclipse 幫助系統中為這方面提供的信息并不多。事實上,JDI 和 JVMTI 是分別由 Eclipse 和 Java 運行時環境實現的。我們僅需要考慮 JDMP,因為它包含與 JVMTI 和 JDI 進行通信所需的信息。JDWP 包含許多參數,用于為遠程 Java 應用程序調用所需的程序。以下是本文用到的一些參數。
從 Java V5 開始,您可以使用 -agentlib:jdwp 選項,而不是 -Xdebug 和 -Xrunjdwp。但如果連接到 V5 以前的 VM,只能選擇 -Xdebug 和 -Xrunjdwp。下面簡單描述 -Xrunjdwp 子選項。
要獲得每個調試設置的詳細解釋,請參考 JPDA 文檔(參見 參考資料)。
清單 2 是一個示例,顯示如何在調試模式下啟動 VM 并監聽端口 8765 的套接字連接。
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765 |
清單 3 顯示如何使用位于 8000 端口的主機 127.0.0.1 上的套接字連接運行中的調試器應用程序。
-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000 |
![]() ![]() |
Eclipse 中的遠程調試特性
Eclipse 是一個圖形化 Java 調試器前端。JDI 在 org.eclipse.jdt.debug 包中實現。本文不詳細討論 JDI 實現。參見 參考資料 獲得關于 Eclipse JDT 和 Java JDI 技術的信息。
我們首先應該知道要使用哪個 Eclipse 連接器。要了解 Eclipse 提供的遠程連接類型,您可以轉到 Eclipse 菜單并選擇 Run > Debug Configurations...,在 Remote Java Application 中添加一個啟動配置,然后從下拉列表中選擇連接器。在 Ganymede 中共有兩個連接器:
對于監聽套接字的連接器,Eclipse VM 將是與遠程 Java 應用程序連接的主機。對于連接套接字的連接器,目標 VM 將作為主機。這兩種連接器對應用程序調試沒有影響,用戶可以任意選擇。但根據經驗,需要使用速度更快、更強大的計算機作為 VM 調試主機,因為需要計算的資源很多。
在調試 Java 應用程序之前,需要確保已經為遠程應用程序啟用所有調試選項。如果選項信息不可用,您將收到一個錯誤信息,比如 “Debug information is not available” 或 “Unable to install breakpoint due to missing line number”。您可以通過更改 Eclipse 菜單上的 Window > Preferences > Java > Compiler 來修改設置。
![]() ![]() |
遠程調試應用程序
現在,我們已經準備好遠程調試應用程序。我們分步執行:
package com.ibm.developerWorks.debugtest; public class test { public static void main(String[] args) { System.out.println("This is a test."); } } |
java -jar test.jar |
作為調試服務器的目標 VM
下面這個示例遠程調用 Java 應用程序作為調試服務器,并在端口 8000 監聽套接字連接。目標 VM 將暫停,直到調試器連接。
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar test.jar |
使用遠程啟動配置啟動 Eclipse,并指定遠程應用程序的目標 VM 地址。為此,單擊 Run > Debug Configurations,然后在 Eclipse 菜單中雙擊 Remote Java Application。從最新創建的啟動配置中為目標應用程序指定 IP 和端口。為了在同一臺機器上運行遠程應用程序,僅需將主機 IP 指定為 localhost 或 127.0.0.1。
選擇 Allow termination of remote VM 選項終止在應用程序調試期間連接的 VM。
作為調試客戶機的目標 VM
第二個示例使用一個簡單的 Java 應用程序作為調試客戶機,并且調試器前端作為調試服務器。Eclipse 使用套接字監聽模式連接類型進行監聽。必須先啟動調試前端來監聽特定的端口。圖 6 給出一個用于設置監聽的示例配置。
單擊 Eclipse Debug 按鈕,狀態欄將顯示消息 “waiting for vm to connect at port 8000...”。看到這個消息后,啟動遠程應用程序。清單 7 顯示了如何將 Java 應用程序作為調試客戶機并調用它,然后使用端口 8000 上的主機 127.0.0.1 的套接字將其連接到一個正在運行的調試器應用程序。
java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar test.jar |
如果一切進行順利,將會顯示一個調試透視圖幫助調試應用程序,并且遠程 Java 應用程序將正常停止。這類似于步驟 3 中的本地調試(參見圖 3)。在這里,您可以使用標準的調試特性,比如設置斷點和值、單步執行等。
![]() ![]() |
結束語
本文演示如何使用 Eclipse 內置的遠程 Java 應用程序配置類型對應用程序執行遠程調試。介紹了如何設置 Java 應用程序以調用遠程調試,并幫助您理解 Eclipse 提供的連接器。最后,您還學習了如何將這些技術應用到項目中。
ALTER PROCEDURE sp****(
@a AS VARCHAR(3),
@b AS VARCHAR(7),
@c AS CHAR(2),
@d AS VARCHAR(7)
) AS
BEGIN
DECLARE @NDTime varchar(50)
DECLARE @aOD VARCHAR(8)
DECLARE @dateDif INT
DECLARE @JRC VARCHAR(1)
/* 現在日時取得SP(sp****NowDate)を使用して、日時を取得する。 */
EXEC sp****NowDate @NDTime OUTPUT
SELECT @aOD = 字段
FROM ****
WHERE 字段 = @a
AND 字段 = @b
AND 字段 = @c
AND 字段 = d
SET @JRC= '1'
if datediff(d,Convert(datetime,@aOD),Convert(datetime,@NDT)) >= 180 begin
SET @JRC = '0'
end
SELECT @JRC ****
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
找到eclipse下的插件,叫jadclipse,安裝好之后,只要雙擊.class文件,就能直接看源文件,包括jar
包中的class文件,也可以直接反編譯。
1.下載jad1.5.8
http://www.kpdus.com/jad.html#download
下載后解壓。解壓縮后將jad.exe拷貝到JRE的bin目錄下,如\Java\jre1.5.0_06\bin
2.下載 jadclipse_3.1.0.jar
http://jaist.dl.sourceforge.net/sourceforge/jadclipse/jadclipse_3.1.0.jar
將jadclipse_3.1.0.jar復制到D:\Program Files\eclipse\myplugin\eclipse\plugins目錄下(用的是
link方式安裝插件的)。
這需要看你的Eclipse版本了
最新版3.2.2(適用于Eclipse 3.2M5以上,包括3.4.x)在 http://prdownloads.sourceforge.net/jadclipse/jadclipse_3.2.2.jar?download
3.啟動Eclipse后,在Windows-->Perference-->Java下面應該會多出一個JadClipse目錄,相關的設置可
以在此修改
配置jadclipse:設置path to decompiler為jad.exe的全路徑,如:F:\Java\jre1.5.0_06\bin\jad.exe
,在Directory for temporary files中指定臨時文件的路徑,如:G:\Java\eclipse-SDK-3.0-win32\temp
4、在Eclipse的Windows-->Perference-->General->Editors->File Associations中修改“*.class”默
認關聯的編輯器為“JadClipse Class File Viewer”
5、安裝完成,雙擊class文件,Eclipse將自動反編譯了。
自從eclipse升級到3.3以后jad插件就一直沒有成功的安裝上去,網上看了好多文章也是以前版本的安裝方法,3.3目前通過eclipse的software update的插件安裝方式已經不行了。
目前安裝方式如下:
1.從http://www.kpdus.com/jad.html#download地址下載最新的jad,我目前下載的是jadnt158.zip
2.從http://nchc.dl.sourceforge.net/sourceforge/jadclipse/net.sf.jadclipse_3.3.0.jar地址下載jadclipse_3.3.0.jar,拷貝到eclipse的plugins目錄下。
3.啟動或重起eclipse,修改window -> Preferences -> Java -> JadClipse 下的
Path to decompiler 如:D:\eric\jadnt158\jad.exe(jadnt158.zip解壓后的目錄)
4.Windows -> Perference -> General -> Editors -> File Associations中修改“*.class”默認關聯的編輯器為“JadClipse Class File Viewer”
軟件環境描述
Windows XP Professional SP4
Apache 2.0.47
WebLogic Server 9.0 SP1
安裝Apache2.x
從Apache站點下載2.0.47版本的Apache HTTP Server,參考下載地址為:
http://apache.linuxforum.net/dist/httpd/binaries/win32/apache_2.0.47-win32-x86-no_ssl.msi
下載完畢后,開始安裝apache。雙擊apache_2.0.47-win32-x86-no_ssl.msi,安裝Apache,出現歡迎畫面,點擊"Next",然后出現協議頁面,選擇同意協議選擇,點擊"Next",出現說明頁面,點擊"Next",然后出現下面所示畫面:
圖1 配置Apache
填寫完畢后,點擊"Next",選擇典型安裝,點擊"Next",然后出現選擇安裝路徑,這里取默認值,點擊"Next",然后點擊"Install"按鈕。安裝完畢后,點擊"Finish"按鈕,退出安裝程序。這時候,你會發現在桌面的右下角出現apache的運行監視圖標。
安裝WLS9.0,配置WLS Domain
安裝WLS9.0,WLS7.0安裝參數概要如下:
名稱 | 值 |
BEA Home | C:\bea |
Domain Name | base_domain |
Domain類型 | WLS Domain |
Domain Location | C:\bea\user_projects\ |
Server類型 | Single Server(Standalone Server) |
Server Name | myserver |
myserver的用戶名 | weblogic |
myserver的口令 | weblogic |
圖2 配置WebLogic
Apache2.x與WLS集成
1、 修改C:\WINDOWS\system32\drivers\etc目錄下面的hosts文件。在用記事本把文件打開,在文件的最后加上:127.0.0.1 www.synnex-china.com ,如下圖所示:
圖3 配置 DNS文件
2、登陸weblogic的控制臺,發布。然后啟動剛剛創建好的WebLogic Server,如果出現下圖所示的畫面,說明WebLogic Server啟動正常:
圖4 WebLogic啟動歡迎畫面
3、進入DOS界面,首先到C:\Program Files\Apache Group\Apache2\bin目錄下面,然后執行Apache -l命令,出現如下畫面:
圖5 Apache -l命令
mod_so.c表明當前的Apache HTTP Server是動態加載的模式,可以和WebLogic進行整合(因為Windows平臺下面的WebLogic Server7.0只支持Apache 2.x)。
然后將附件中的mod_wl_20.so拷貝到C:\Program Files\Apache Group\Apache2\modules目錄下面。然后執行 Apache -t命令,出現如下畫面:
圖6 Apache -t命令
這表明Apache 的WebLogic Server plug-in安裝成功。
4、修改C:\Program Files\Apache Group\Apache2\conf目錄下面的httpd.conf文件。
首先添加新的和WebLogic相關的應用模塊,在httpd.conf文件的174行加入如下語句:
#WebLogic Server Proxy Settings
LoadModule weblogic_module modules/mod_wl_20.so
<IfModule mod_weblogic.c>
WebLogicHost www.synnex-china.com
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.js
MatchExpression *.css
MatchExpression *.do
MatchExpression *.gif
MatchExpression *.html
</IfModule>
圖7 為Apache 添加WebLogic相關的應用模塊
然后把httpd.conf文件中的
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
改為
DocumentRoot "D:/desk/desk_project/src/jsp/desk" (web項目所在的webapp目錄)
,把
<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
改為
<Directory "D:/desk/desk_project/src/jsp/desk">(web項目所在的webapp目錄)
修改完畢后,重新啟動apache服務,如下圖所示:
原來訪問地址:http://localhost:7001/desk/Menu.html
這個時候,你就可以用http://localhost/desk/Menu.html來訪問頁面了 :-)
1. 下載log4j解壓后在目錄jakarta-log4j-
<Catalina-home>/webapps/test/WEB-INF/lib目錄下
2.?????? 創建log4j的配置文件log4j.properties,存于目錄:
<Catalina-home>/webapps/test/WEB-INF
?????? 文件內容:
?????? log4j.rootLogger=DEBUG, consoleLogger, fileLogger
log4j.appender.consoleLogger=org.apache.log4j.ConsoleAppender
log4j.appender.consoleLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleLogger.Threshold=DEBUG
log4j.appender.consoleLogger.layout.ConversionPattern=%c{2} - %m%n
log4j.appender.fileLogger=org.apache.log4j.RollingFileAppender
log4j.appender.fileLogger.File=c:/tomcat/webapps/test/WEB-INF/blog.txt
log4j.appender.fileLogger.MaxFileSize=1000KB
# 保留5個舊的日志文件
log4j.appender.fileLogger.MaxBackupIndex=5
log4j.appender.fileLogger.layout=org.apache.log4j.PatternLayout
# 日志格式:按照WebSphere通用日志格式相似的方式記錄
log4j.appender.fileLogger.layout.ConversionPattern=[%d] %t %c %-5p - %m%n
3.?????? 創建Blog4jServlet.java:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class BLog4jServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {???????
??????? try{
??????????? String path = config.getServletContext().getRealPath("/");
??????? ??? String propfile = path + config.getInitParameter("propfile");
??????????? PropertyConfigurator.configure(propfile);
??????? }catch(Exception e){
??????????? System.out.println(e.getMessage());
??????? }
??????? }
}
4.???? 修改web.xml,加入如下代碼:
<servlet>
? ?? <servlet-name>log4j</servlet-name>
<servlet-class>binclude.BLog4jServlet</servlet-class>
<init-param>
<param-name>propfile</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
5.???? 在需要調用log的時候:
import org.apache.log4j.*;
static Logger logger = Logger.getLogger(DispatchServlet.class.getName());
logger.debug("this is a log message from" + logger.getName());
logger.info("info from" + logger.getName());
logger.warn("warn " + logger.getName());
logger.error("error" + logger.getName());