梦想号黄包车wei.lee net-home

Have my best life at SZ....................

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  6 随笔 :: 3 文章 :: 6 评论 :: 0 Trackbacks

2006年3月24日 #

这段时间有机会接触DOT NET方面的项目,开始DOT NET的新生涯.学习DOT NET首先当然要从microsoft的官方例子学起哦,我首先选择了petshop和vs2003自带的Duwamish 7.0(可以在vs安装的路径上找到的\Microsoft Visual Studio .NET 2003\Enterprise Samples).当然我会选择喜欢的C#版本来学习.万事起头难,我一装petshop,事情就来了,但是小小的问题是难不着我的.

安装配置:
 OS :  WIN2003
DEV:  VS2003
IIS6.0
SQLSERVER2000 Enterprise version

Duwamish 7.0的安装完运行没问题,但是petshop安装后出现SQLException,我完全安装ReadMe.rtf的步骤来安装的,安装过程中输入的sql帐号密码都是没错的,因为数据库MSPetShop,MSPetShopOrders能够在sqlserver2000看到.具体错误如下:
petshop_sqlexception.png

我查看过安装路径下的:\ConfigTool里的App.config文件发现配置文件的user和password都没有在sqlserver配置到,所以我在sqlserver2000里的安全性-->登陆里添加两个用户:MSPetShop 和 MSPetShopOrders; 密码都是:password;同时分配该用户访问上面的两个数据库,这样重新运行petshop,一切都很正常地跑起来了...........:)
petshop_sqlsetting.png


petshop_sqlsetting2.png 

输入http://localhost/MSPetShop/ 
petshop_0.png


petshop_1.png 
输入http://localhost/Duwamish7/
Duwamish7.png
开始学习DOT NET 拉,真是激动!就算献身给microsoft一辈子都是值得的:)
posted @ 2006-05-12 15:16 Wei.Lee 阅读(889) | 评论 (0)编辑 收藏

     摘要: Item1#: Repository 组件在不同版本的不同之处? Answer : Repository ...  阅读全文
posted @ 2006-05-08 19:16 Wei.Lee 阅读(847) | 评论 (0)编辑 收藏

一般我们都会使用数据库和文件作为log的输出介质,下面是我在项目实践中总结到的经验:
1 .ADONetAppender
( 1 )、 MS SQL Server
define the table such as:
CREATE TABLE [dbo].[Log] ( 
 [Id] [int] IDENTITY (1, 1) NOT NULL,
 [Date] [datetime] NOT NULL,
       [Thread] [varchar] (255) NOT NULL,
       [Level] [varchar] (50) NOT NULL,
       [Logger] [varchar] (255) NOT NULL,
       [Message] [varchar] (4000) NOT NULL,
       [Exception] [varchar] (2000) NULL
)

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
       <bufferSize value="100" />
       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
       <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />
       <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
       <parameter>
              <parameterName value="@log_date" />
              <dbType value="DateTime" />
              <layout type="log4net.Layout.RawTimeStampLayout" />
       </parameter>
       <parameter>
              <parameterName value="@thread" />
              <dbType value="String" />
              <size value="255" />
              <layout type="log4net.Layout.PatternLayout">
                     <conversionPattern value="%thread" />
              </layout>
       </parameter>
       <parameter>
              <parameterName value="@log_level" />
              <dbType value="String" />
              <size value="50" />
              <layout type="log4net.Layout.PatternLayout">
                     <conversionPattern value="%level" />
              </layout>
       </parameter>
       <parameter>
              <parameterName value="@logger" />
              <dbType value="String" />
              <size value="255" />
              <layout type="log4net.Layout.PatternLayout">
                     <conversionPattern value="%logger" />
              </layout>
       </parameter>
       <parameter>
              <parameterName value="@message" />
              <dbType value="String" />
              <size value="4000" />
              <layout type="log4net.Layout.PatternLayout">
                     <conversionPattern value="%message" />
              </layout>
       </parameter>
       <parameter>
              <parameterName value="@exception" />
              <dbType value="String" />
              <size value="2000" />
              <layout type="log4net.Layout.ExceptionLayout" />
       </parameter>
</appender>
( 2 )、 MS Access  please reference the SDK of Log4net document   
( 3 )、 Oracle9i                                     log4net/release/config-examples.html
( 4 )、 Oracle8i
( 5 )、 DB2

2 、 FileAppender
<appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="log-file.txt" />
     <appendToFile value="true" />
     <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>

4.  RemotingAppender
传送日志事件到达一个特定的接受器,sink定义了这个接受器的地址,lossy定义了没有丢弃事件,bufferSize 定义了一个black的由95个事件打包发送的,而onlyFixPartialEventData可以忽律一些特定的事件。
<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" >
       <sink value="tcp://localhost:8085/LoggingSink" />
       <lossy value="false" />
       <bufferSize value="95" />
      <onlyFixPartialEventData value="true" />
</appender>

5.  RollingFileAppender
由于定义了staticLogFileName 为true,以我的理解就是定位保存的log文件个数为10个(maxSizeRollBackups),同时设定了每个文件的大小为100KB,所以一直都保持有10个文件。RollingStyle设定rolling的触发器。
Eg1:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
     <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
   <maxSizeRollBackups value="10" />
   <maximumFileSize value="100KB" />
   <staticLogFileName value="true" />
   <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout>
</appender>

  eg2: 
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
       <file value="logfile" />
       <appendToFile value="true" />
       <rollingStyle value="Date" />
       <datePattern value="yyyyMMdd-HHmm" />
       <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
       </layout>
</appender>

eg3:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
       <file value="logfile" />
       <appendToFile value="true" />
       <rollingStyle value="Composite" />
       <datePattern value="yyyyMMdd" />
       <maxSizeRollBackups value="10" />
       <maximumFileSize value="1MB" />
       <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
</appender>

6.  UdpAppender
可以发送到远程地址的特定端口
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
       <localPort value="8080" />
       <remoteAddress value="224.0.0.1" />
       <remotePort value="8080" />
       <layout type="log4net.Layout.PatternLayout, log4net">
              <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
       </layout>
</appender> 
log4net 的学习暂时告一段落了,希望能够进一步对log4j学习,现在我越来越喜欢.net的东西了,再也不会感觉到很别扭!希望自己可以很快地强大起来!!! 

posted @ 2006-03-29 18:22 Wei.Lee 阅读(1287) | 评论 (0)编辑 收藏

     日志部分在程序中占了4%,有利于帮助我们很快地得到我们需要的调试信息,找到问题的根源尽快解决问题,从而降低我们的维护成本。这几天一直断断续续地学习Log4net部分,由于知道自己在一个比较长的时间必须去使用.net的部分(HA Project and LIS Project),没办法,只有硬着头皮死肯:),不过也让我见识不少呢!log4net是appache开源的一个杰作,和log4J很相象,如同孪生的兄弟一样,基本的概念原理都是一样的,她主要应用在.net上的。下面是我一些收集的资料,同时也是我在开发过程中的一些经验总结。稍后也会把一些实际项目的经验记录下来,和使用Log4J的相关内容。

Log4net
主要有四个组件。分别是Logger(记录器)Repository()Appender(附着器)Layout(布局)  

Logger 定义与用途:

Logger 是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过 Layout 的格式化处理后才会输出。

Root 是一个默认的 Logger ,当一个 root Logger 内容配置一致的时候就会记录两条相同的记录,当在配置文件中找不到 logger 的名字时候,就会使用root的配置。 
 

Repository 定义与用途:

Repository 主要用于负责日志对象组织结构的维护。现在 已经使用LogManager类来维护日志对象组织。

 

Appender 定义及用途:

   定义输出介质,可以把多个 Aappender 附加到一个日志对象中, 一个Appender对象缺省地把所有的日志事件传递到输出流中,我们可以通过Aappender Filters来过滤剩下我们需要的部分。分别有级别过滤(定义级别区间),字符串过滤,可以定义多个filter。such as :LevelMatchFilter、LevelRangeFilter、MDCFilter、NDCFilter、 StringMatchFilter.

 

Layout 定义与用途

Layout 组件用于向用户显示最后经过格式化的输出信息。可以是线性的或一个 XML 文件。 Layout 组件和一个 Appender 组件一起工作。也就是说一个 appender 对象 只能对应一个 layout 对象。

 

 

Log4net DEBUG 信息分级:

一共有七级

级别
允许方法

Boolean 属性

优先级别

 

OFF (拒绝所有的日志请求)                      FATAL                                     ERROR  

  null                                                                    void Fatal(...);                            void Error(...);

  null                                                                    bool IsFatalEnabled;                  bool IsErrorEnabled; 

 Highest                                                              second                                       three

 

 WARN                                                             INFO                                        DEBUG

void Warn(...);                                                    void Info(...);                             void Debug(...);

bool IsWarnEnabled;                                          bool IsInfoEnabled;                   bool IsDebugEnabled;

four                                                                    five                                           six

 

ALL (允许所有的日志请求)

 Null

 Null

 Lowest

 

Log4net 配置方式:

1. 在单独文件里配置(推荐):改变配置不需要重新编译代码,同时也可以在程序运行的过程中修改代码。

2. 在程序代码中配置

 

关联配置文件:

log4net 框架使用 log4net.Config.DOMConfiguratorAttribute log4net.Config.XmlConfigurator 在程序集的级别上定义配置文件。方法有多种的:
1
.可以在项目的 AssemblyInfo.cs 文件里添加以下的语句

  [assembly:log4net.Config.XmlConfigurator(ConfigFile="filename",   ConfigFileExtension="ext",Watch=true/false)]

其中 configFile 设定了配置文件的文件名,路径,扩展名

configFileExtension 设定了被编译的文件使用扩展名字,默认为 config

但是configFileExtension与configFile不能同时使用。在这里我们可以关联我们手动配置的文件,而不使用.net给我们的应用程序配置文件。
eg:
[assembly:log4net.Config.DOMConfigurator(ConfigFile="/Projects/Regular/bin/config/App.log.conf.xml",Watch=true)] 

2 .可以不带参数应用 DOMConfiguratio():

 

 [assembly: log4net.Config.DOMConfigurator()]

3. 也可以在程序代码中用 DOMConfigurator 类打开配置文件。类的构造函数需要一个 FileInfo 对象作参数,以指出要打开的配置文件名。

log4net.Config.DOMConfigurator.Configure(

 

  new FileInfo("TestLogger.Exe.Config"));

 

创建日志对象:

当日志对象没有在配置文件中定义的话,就会使用 root 的祖父节点。

Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");

 

输出日志信息:

可以使用输出日志的几种方式:fatal();error();warn();info();debug();

if (log.IsDebugEnabled) log.Debug("message");

 

 

DEBUG 输出格式的意义:

Eg

<param name="ConversionPattern"

   value="%d [%t] %-5p %c [%x] - %m%n"

        />

%m(message): 输出的日志消息,如 ILog.Debug( ) 输出的一条消息

%n(new line): 换行

%d(datetime): 输出当前语句运行的时刻

%r(run time): 输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id): 当前语句所在的线程 ID

%p(priority): 日志的当前优先级别,即 DEBUG INFO WARN …等

%c(class): 当前日志对象的名称,例如:

       模式字符串为: %-10c -%m%n

       代码为:

ILog log=LogManager.GetLogger(“Exam.Log”);

log.Debug(“Hello”);

    则输出为下面的形式:

Exam.Log       - Hello

%L :输出语句所在的行号 。包括类目名、发生的线程,以及在代码中的行数。

%F :输出语句所在的文件名

%- 数字:表示该项的最小长度,如果不够,则用空格填充

例如,转换模式为 %r [%t]%-5p %c - %m%n PatternLayout 将生成类似于以下内容的输出:

176 [main] INFO  org.foo.Bar - Located nearest gas station. 
 (未完待续)

posted @ 2006-03-28 22:17 Wei.Lee 阅读(1461) | 评论 (0)编辑 收藏

       很多次在梦里梦见到自己身处广州,醒来的时候发觉眼泪已经流淌到面夹。不是我的懦弱,不是我的痴情,是一种感觉,广州已经给我一个家的感觉拉。毕竟在那里生活了5年,在那里经历了我的大学生涯,开始了我IT的生活,在那里有高中最好的朋友,有很多大专的同学,本科的同学,有啊辉等这样的兄弟。太多了,让我难以忘怀!
     还记得环市动路我们的校园,还记得曾经住过的208、203,一起同居过的同学都已经已经离得很远很远拉。自己何尝不是呢,为了更好发展自己为了自己的梦,只身来到深圳这个陌生的地方。每次的转折都是从痛开始的,从睡地板到睡床,从一无所有,到建造自己的小窝。这些苦都算不了什么,我坚信好的生活已经离我不远。
     几乎忘记**这个朋友,上个星期收到巨的邮件,说一生碰到我一次已经很幸运拉,确实自己还是个很单纯的小孩子,为了朋友,我可以尽自己的能力去帮,这些算不了什么。谢谢巨对我如此的好评,但是我还是横下心来不回邮件了,毕竟我们只是普通的朋友,剩下的日子只能够巨自己去面对,我也自己面对自己的生活。当我离开广州的时候,也意味我新的生活开始了。我不想带着太多的负累走自己的一生,所以我越来越讨厌依赖我的人,除了我家人。我知道巨是鼓着很大的勇气发这个邮件给我的,但是很遗憾,很多谢你记得我的生日,这个确实令我很感动!
     还记得英语四级考试给我的痛吗?对于它好象在给我一个很大的启示。是不是自己个性有太不好的地方,有一种说法:“有心栽花,花不开,无心插柳,柳成阴”。反思自己给自己太多的压力了,很多结果都是不如意的。还记得初中一个老师很奇怪地问我:“啊伟,我不明白你怎么每次见你都是笑的,是不是有什么很高兴啊?”,我还是以笑容回答了他。但是我现在却把自己乐观的情绪磨灭晒拉,更多的是放不开,是压力!是时候自己该反省反省了!不过我还是坚信一个优秀的人肯定有很多优秀的习惯,所以我会努力去养成这些习惯,细节和大局都要做好,我很快会是一个优秀的人,我很快会实现自己的梦想!
posted @ 2006-03-26 10:47 Wei.Lee 阅读(327) | 评论 (3)编辑 收藏

         还记得吗?我第一天入职ePRO是6月20号。很清晰记得当时的心情是复杂是激动是不安多种交叉在一起。带着中信给我的痛,带着“方欣科技“给我的遐想。我提前乘载着我很喜欢的133路车从校园赶到公司,开门的是TOAD这个小子,TOAD应该是我在广州工作认识朋友中最大的收获吧,可能是我们都是刚刚毕业的吧,很清晰记得TOAD安慰我的话,他微笑着边端着水给我边对我说”别紧张,我也是刚刚来的“。就这样我的ePRO生活不经不觉地走过了9过月,有值得开心的,有值得总结的,有值得遗憾的......。在这里我认识了我的广州老大Dave,香港老大Kenneth,认识了vincent等。
        让我一个个地回忆把,首先应该不能忘记TOAD,我们的思想太接近拉。不过我还是一直坚持不说出我的工资给他,导致他老是对我很大成见。其实我很多次跟他说了,我这样做其实是为了你好的。我相信TOAD最后也应该明白我的出发点。还记得吗?还记得金田花园金色翠居501吗?还记得我们楼下的百佳超市吗?每个周末我们都很勤奋地到公司学东西,:)其实是我们的生活都这么单调,我们都是单身一族,不回公司怎么打发这么漫长的周末呢?就这样我跟TOAD成为了比较好的同事了。当TOAD执意要留在广州的时候,我是多么的感到惋惜,TOAD 我不会忘记你的,更何况我天天都在用oracle的toad...
     其次还有我的广州和深圳老大Dave,Dave应该是一个最幸福的男人拉,有一个很漂亮的女朋友,我们同事都很羡慕他,我香港老大Kenneth更加搞笑,当我透露告诉他说在QQ上认识,他很兴奋很大声地说:”我也要上QQ,我要找一个比Dave女朋友更加漂亮的!“。Dave可以说是我在工作上的第一个老师把,在他身上我学到了工作上生活上的很多东西。Dave和我都带着梦想跟随公司来到了深圳。
      最后当然要说我的香港老大Kenneth拉,他是一个很幽默的男人,今年刚刚做了父亲,那时候看到他开心的样子,我的心也很甜很甜!他还死性不该地开玩笑说:”啊Wei,以后记得啊,第一要注意安全!“,我当时笑倒了!每当我工作出现什么问题的时候,他都会把很多责任抱上,让我不要负太多的重担,在工作不断鼓励我,引导我走上了programmer的生涯,正是他的帮助,我很快得到公司的认同了,所以很多时候跟vincent很正经地说:”我的老大Kenneth..............“,前几天,我终于在深圳现实中见到了快认识了一年的Kenneth,正如我想象的一样,他就是一个很优秀的男人。他把三个多月前的承诺都记得很清晰,快要结束会议的时候,他走到我身边,然后把一个大的红包给我,还低声说:”Wei,这个是你的,拿着,嘘,别张声“,这时候我感到很自豪,不是钱,绝对不是,是我们的感情!今天早上,我去了”Wing Long Bank“客户那边,他居然很正经地跟Dave说”啊Wei是不是病了,你知道他的联系方式吗?你们怎么可以这样呢?今天你怎么都要找到他,要确保他的安全!“。很眷恋在他领导下的生活,是他给我充分的机会,全力去承担一个项目”e-Servers“.我怎么会忘记呢??我已经把他当作自己的亲人拉!!我真的不知道怎么去形容这么好的一个老大,可能是我十辈子修来的福分!
      怀念过去美好的生活,当然忘不了创造未来更好的生活!新的生活来拉,深圳是个好的地方。我对一句话现在很大的体会:”态度,态度是决定一切的“,对!有正确的生活态度,生活不论现在怎么的不好,都会好起来的。

posted @ 2006-03-24 21:31 Wei.Lee 阅读(342) | 评论 (3)编辑 收藏