存档

2008年2月 的存档

log4j快速入门实践功略(1)

2008年2月13日 没有评论

#log4j.rootLogger = [ level ] , appenderName, appenderName,
#优先级level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先级
#Log4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG

#stdout为控制台 ,Errorlog为错误记录日志 ,
log4j.rootCategory=INFO,stdout,Runlog,Errorlog

#输出的appender的格式为
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#log4j.appender.appenderName.option1 = value1
#log4j.appender.appenderName.option = valueN
#Log4j中appender支持的输出
#org.apache.log4j.ConsoleAppender 控制台
#org.apache.log4j.FileAppender 文件
#org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
#org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
#org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
#org.apache.log4j.net.SMTPAppender 邮件
#org.apache.log4j.jdbc.JDBCAppender 数据库

#定义输出的形式
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Runlog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Errorlog=org.apache.log4j.DailyRollingFileAppender

#可以指定输出文件的优先级
log4j.appender.Errorlog.Threshold=ERROR

#指定输出的文件
log4j.appender.Runlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\runlog\\runlog.log
log4j.appender.Errorlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\errorlog\\errorlog.log

#Log4j的layout布局
#org.apache.log4j.HTMLLayout 以HTML表格形式布局
#org.apache.log4j.PatternLayout 可以灵活地指定布局模式
#org.apache.log4j.SimpleLayout 包含日志信息的级别和信息字符串
#org.apache.log4j.TTCCLayout 包含日志产生的时间、线程、类别等等信息

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Runlog.layout=org.apache.log4j.PatternLayout
log4j.appender.Errorlog.layout=org.apache.log4j.PatternLayout

#输出格式,log4j javadoc org.apache.log4j.PatternLayout
#-X号:X信息输出时左对齐;
#%p:日志信息级别
# %d{}:日志信息产生时间
# %c:日志信息所在地(类名)
# %m:产生的日志具体信息
# %n:%n:输出日志信息换行
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n

#指定某个包的优先级
#
log4j.category.com.neusoft.mbip.dm.util=ERROR

#示例
###################
# 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????? RollingFileAppender??????????????????
########################
#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

########################
# 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@hollycrm.com
#log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
#log4j.appender.MAIL.Subject=Log4J Message
#log4j.appender.MAIL.To=chenyl@hollycrm.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

########################
# Log Factor 5 Appender
########################
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

###################
#???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@cybercorlin.net
#log4j.appender.im.layout=org.apache.log4j.PatternLayout
#log4j.appender.im.layout.ConversionPattern =[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n

分类: java 标签:

CSV文件操作的两个类

2008年2月13日 没有评论

贴这儿留着回去看一下

package jp.ac.wakhok.tomoharu.csv;

import java.util.Vector;
import java.util.Enumeration;

/**
* CSV形式の1行分のデータ内容を保持するクラス。
* CSV形式への書き出し、書き出しの際のエンクォートの指定、
* 項目の追加などが可能である。
*
* @version 1.0.1 (1999.4.13)
*/

public class CSVLine {
public static final String copyright =
"Copyright 1997 TAMURA Kent" + "\n" +
"Copyright 1999 ANDOH Tomoharu";
private Vector items;

/**
* 空のCSVLine のインスタンスを作成する。
*/
public CSVLine() {
items = new Vector();
}

/**
* 引数で指定された文字列を、末尾に追加する。
*
* @param item 追加する文字列
*/
public void addItem(String item) {
addItem(item, false);
}

/**
* 引数で指定された文字列を、末尾に追加する。
* CSV形式のデータとして出力されるとき、その項目を強制的に
* エンクォートするかどうかを引数によって指定する。
*
* @param item 追加する文字列
* @param enquote trueだと、強制的にエンクォートされる。
*/
public void addItem(String item, boolean enquote) {
items.addElement(new Element(item, enquote));
}

/**
* 引数で指定されたCSVTokenizerに含まれるすべての項目を、
* 末尾に追加する。
*
* @param ct CSVTokenizerのインスタンス。ここに含まれている項目
* は、末尾に追加される。
* @see jp.ac.wakhok.tomoharu.csv.CSVTokenizer
*/
public void addItem(CSVTokenizer ct) {
while (ct.hasMoreTokens()) {
String item = ct.nextToken();
items.addElement(new Element(item));
}
}

/**
* 1行のCSV形式のデータを返す。
*
* @return 1行のCSV形式のデータ
*/
public String getLine() {
StringBuffer list = new StringBuffer();
for (int n = 0; n < items.size(); n ++) {
Element element = (Element)items.elementAt(n);
String item = element.getItem();
list.append(item);
if (items.size() - 1 != n) {
list.append(',');
}
}
return new String(list);
}

/**
* 1行の項目数を返す。
*
* @return CSVLineに含んでいる項目の数
*/
public int size() {
return items.size();
}

/**
* n番目の項目を String で返す。
*
* @param n 項目の番号 [0 ~ size()-1]
* @return n番目の文字列。エンクォートはしない。
*/
public String getItem(int n) {
Element element = (Element)items.elementAt(n);
return element.getRawItem();
}

/**
* n番目の項目を削除する。
*
* @param n 項目の番号 [0 ~ size()-1]
*/
public void removeItem(int n) {
items.removeElementAt(n);
}

/**
* CSVLineの項目のリストを返す。
*
* @return このCSVLineに含まれている文字列のリスト
* @see java.util.Enumeration
*/
public Enumeration elements() {
return new CSVLineEnumerator(items);
}

/**
* CSVLineに含まれるそれぞれの項目を保持するインナークラス。
*/
class Element {
private String item;
private boolean enquote;

Element(String item) {
this(item, false);
}

Element(String item, boolean enquote) {
this.item = item;
this.enquote = enquote;
}

/**
* 指定されていれば、エンクォートを行う。
*/
public String getItem() {
return enquote(item, enquote);
}

/**
* エンクォートは一切しない。
*/
public String getRawItem() {
return item;
}
}

/**
* elements()メソッドで返される Enumerationクラス
*/
class CSVLineEnumerator implements Enumeration {
private Vector items;
private int n;

CSVLineEnumerator(Vector items) {
this.items = items;
n = 0;
}

public Object nextElement() {
n ++;
Element element = (Element)items.elementAt(n-1);
return element.getRawItem();
}

public boolean hasMoreElements() {
return n < items.size();
}
}

/**
* 引数の文字列 item を CSV で出力できるように加工した文字列を
* 返す。
* item が " か , を含んでいるときには item 全体を " で囲み
* (エンクォートし)、" を "" に置き換える。また" と , のどち
* らも含んでいないときは、item をそのまま返す。
*
* @param item 処理したい文字列
* @return item を処理した文字列
*/
public static String enquote(String item) {
return enquote(item, false);
}

/**
* 引数の文字列 item を CSV で出力できるように加工した文字列を
* 返す。
* enquote が true のときは、強制的にエンクォートする。つまり、
* item を " で囲った文字列を返す。
* false のときは、エンクォートするかどうかは、item による。
* item が " か , を含んでいるときには item 全体を " で囲み
* (エンクォートし)、" を "" に置き換える。また" と , のどち
* らも含んでいないときは、item をそのまま返す。
* item が空、つまり長さがゼロの文字列だった場合、何もせずに
* 空の文字列をそのまま返す。
*
* @param item 処理したい文字列
* @param enquote trueなら強制的にエンクォートする
* @return item を処理した文字列
*/
public static String enquote(String item, boolean enquote) {
if (item.length() == 0) {
return item;
}
if (item.indexOf('"') < 0 &amp;amp;&amp;amp; item.indexOf(',') < 0 &amp;amp;&amp;amp; enquote == false) {
return item;
}

// StringBufferのサイズは、最も異常な場合を想定した。
// 文字列 """"" をエンクォートして出力するようなときのこと。

StringBuffer sb = new StringBuffer(item.length() * 2 + 2);
sb.append('"');
for (int ind = 0; ind < item.length(); ind ++) {
char ch = item.charAt(ind);
if ('"' == ch) {
sb.append("\"\"");
} else {
sb.append(ch);
}
}
sb.append('"');

return new String(sb);
}
}


package jp.ac.wakhok.tomoharu.csv;

import java.util.Enumeration;
import java.util.NoSuchElementException;

/**
* 1行のCSV形式のデータを解析し、それぞれの項目に分解するクラス。
* CSV形式に対応した java.util.StringTokenizer のようなもの。
*
* @version 1.0.1 (1999.4.6)
* @author TAMURA Kent <kent@muraoka.info.waseda.ac.jp></kent@muraoka.info.waseda.ac.jp>
* @author ANDOH Tomoharu <tomoharu@wakhok.ac.jp></tomoharu@wakhok.ac.jp>
*/

public class CSVTokenizer implements Enumeration {
public static final String copyright =
"Copyright 1997 TAMURA Kent" + "\n" +
"Copyright 1999 ANDOH Tomoharu";
private String source; // 対象となる文字列
private int currentPosition; // 次の読み出し位置
private int maxPosition;

/**
* CSV 形式の line を解析する CSVTokenizer のインスタンスを
* 作成する。
*
* @param line CSV形式の文字列 改行コードを含まない。
*/
public CSVTokenizer(String line) {
source = line;
currentPosition = 0;
maxPosition = line.length();
}

/**
* 次のカンマがある位置を返す。
* カンマが残っていない場合は nextComma() == maxPosition となる。
* また最後の項目が空の場合も nextComma() == maxPosition となる。
*
* @param ind 検索を開始する位置
* @return 次のカンマがある位置。カンマがない場合は、文字列の
* 長さの値となる。
*/
private int nextComma(int ind) {
boolean inquote = false;
while (ind < maxPosition) {
char ch = source.charAt(ind);
if (!inquote &amp;amp;amp;amp;&amp;amp;amp;amp; ch == ',') {
break;
} else if ('"' == ch) {
inquote = !inquote; // ""の処理もこれでOK
}
ind ++;
}
return ind;
}

/**
* 含まれている項目の数を返す。
*
* @return 含まれている項目の数
*/
public int countTokens() {
int i = 0;
int ret = 1;
while ((i = nextComma(i)) < maxPosition) {
i ++;
ret ++;
}
return ret;
}

/**
* 次の項目の文字列を返す。
*
* @return 次の項目
* @exception NoSuchElementException 項目が残っていないとき
*/
public String nextToken() {
// ">=" では末尾の項目を正しく処理できない。
// 末尾の項目が空(カンマで1行が終わる)場合、例外が発生して
// しまうので。
if (currentPosition > maxPosition)
throw new NoSuchElementException(toString()+"#nextToken");

int st = currentPosition;
currentPosition = nextComma(currentPosition);

StringBuffer strb = new StringBuffer();
while (st < currentPosition) {
char ch = source.charAt(st++);
if (ch == '"') {
// "が単独で現れたときは何もしない
// 項目が""だった時も何もしない added by sandaas, 2006/11/22
if ((st < currentPosition) &amp;amp;amp;amp;&amp;amp;amp;amp; (source.charAt(st) == '"')
&amp;amp;amp;amp;&amp;amp;amp;amp; (strb.length() > 0)) {
strb.append(ch);
st ++;
}
} else {
strb.append(ch);
}
}
currentPosition ++;
return new String(strb);
}

/**
* <code>nextToken</code>メソッドと同じで、
* 次の項目の文字列を返す。
* ただし返値は、String型ではなく、Object型である。
* java.util.Enumerationを実装しているため、このメソッドが
* ある。
*
* @return 次の項目
* @exception NoSuchElementException 項目が残っていないとき
* @see java.util.Enumeration
* @see jp.ac.wakhok.tomoharu.csv.CSVTokenizer#nextElement()
*/
public Object nextElement() {
return nextToken();
}

/**
* まだ項目が残っているかどうか調べる。
*
* @return まだ項目がのこっているならtrue
*/
public boolean hasMoreTokens() {
// "<=" でなく、"<" だと末尾の項目を正しく処理できない。
return (nextComma(currentPosition) <= maxPosition);
}

/**
* <code>hasMoreTokens</code>メソッドと同じで、
* まだ項目が残っているかどうか調べる。
* java.util.Enumerationを実装しているため、このメソッドが
* ある。
*
* @return まだ項目がのこっているならtrue
* @see java.util.Enumeration
* @see jp.ac.wakhok.tomoharu.csv.CSVTokenizer#hasMoreTokens()
*/
public boolean hasMoreElements() {
return hasMoreTokens();
}

/**
* インスタンスの文字列表現を返す。
*
* @return インスタンスの文字列表現。
*/
public String toString() {
return "CSVTokenizer(\""+source+"\")";
}
}

分类: java 标签:

做人做事情

2008年2月11日 2 条评论

做事请呢,首先要学会做人,人要做好人,事情要做好事情。

严谨,有序,不夸张,但也不要老套。
要变成熟,要有自己的思维

要有责任感,小学生说过呀,要诚实,错了要改,自己的事情自己做。

到时候会后悔自己“很傻很天真”的时候就有点……

 PS:感觉今年这个“很傻很天真”会火,理由是连我对娱乐八卦一窍不通的都知道了。

分类: Default 标签:

你要不要试一下ROR,看看最简单的todo List

2008年2月9日 没有评论

rails todo
cd todo
rake db:create:all
ruby script/generate scaffold Todo title:string body:text done:boolean due:datetime
rake db:migrate

OK了,最简单的todo List就做好了。

分类: Default 标签:

手动更改centos为静态IP

2008年2月6日 2 条评论

因为安装的时候选择了DHCP获得IP地址,虽然家里路由常年不动,多少有点不放心,怕万一停电之类的IP地址变了,那端口映射,域名解析可就全完了,就尝试着手动改一下吧。

1,先搜索了一下,得到以下解释
IP                       IP地址
Netmark           子网掩码
Gateway            默认网关
HostName         主机名称
DomainName   域名
DNS                   DNS的IP

2,需要修改的文件常有

/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/resolv.conf
/etc/hosts

以下是我的设置
/etc/sysconfig/network
这里主要是指定了网关

NETWORKING=yes
NETWORKING_IPV6=no
GATEWAY=192.168.1.1
HOSTNAME=localhost.localdomain

/etc/sysconfig/network-scripts/ifcfg-eth0
这里主要指定IP获得方式(static),ip地址,子网掩码,网络类型

# Broadcom Corporation NetXtreme BCM5721 Gigabit Ethernet PCI Express
DEVICE=eth0
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.1.21
NETMASK=255.255.255.0
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes

/etc/resolv.conf
指定DNS(我在这里就吃了亏,没设置前网络地址怎么也无法解析)

search localdomain
nameserver 192.168.1.1

/etc/hosts
我没设置,是用来定义主机名的。

分类: linux 标签:

Installing Ruby on Rails on CentOS/Redhat 4.x

2008年2月6日 没有评论

This doesn’t seem to be terribly well documented, so I thought I’d post it here for those googling for a solution.

Problem

Installing Ruby on Rails on CentOS (or Redhat), the RubyGems part of the official installation instructions (or the instructions listed in this excellent SitePoint book which I’m working through at the moment) may yield this result:

# cd /usr/local/src/rubygems-0.9.2
# ruby setup.rb

< --- lib
/usr/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:4:in `require': no such file to load — zlib (LoadError)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:4
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:8:in `require’
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:8
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:501:in `require’
from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:501
from /usr/local/src/rubygems-0.9.2/./post-install.rb:81:in `require’
from /usr/local/src/rubygems-0.9.2/./post-install.rb:81:in `install_sources’
from /usr/local/src/rubygems-0.9.2/./post-install.rb:116:in `try_run_hook’
from setup.rb:584:in `run_hook’
from setup.rb:1322:in `exec_task_traverse’
from setup.rb:1175:in `exec_install’
from setup.rb:894:in `exec_install’
from setup.rb:712:in `invoke’
from setup.rb:681:in `invoke’
from setup.rb:1359

Solution

A zlib error? Hrm. Double check zlib and zlib-devel are installed (I’m not sure if zlib-devel is needed but I installed it for good measure).

# yum install zlib zlib-devel

Then:

# cd /usr/local/src/ruby-1.8.5-p2/ext/zlib/
# ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
# make
# make install

Next, install RubyGems. Note that running “ruby setup.rb” on it’s own doesn’t seem to work, try this:

# cd /usr/local/src/rubygems-0.9.2/
# ruby setup.rb config
# ruby setup.rb setup
# ruby setup.rb install

All’s good in the hood. Now continue with the rest of the installation.

# gem install rails --include-dependencies

Enjoy.

 link from :http://lucaschan.com/weblog/2007/03/22/installing-ruby-on-rails-on-centosredhat-4x/

分类: linux 标签:

加了个主页

2008年2月2日 1 条评论

都说我那裸露的主页不太雅,又比较懒一直拖着

今逛着发现FreeMind这个开源工具,试了一下,顺便用它的导出HTML做了个页面试了一下,还挺好玩,呵呵

就将就着放上去挡挡“脸面”。

分类: Default 标签: