go+语言+log4go go+语言 七牛

chkds/p命令无法识别是什么原因

要先进到ngrok.cfg的路径下,在执行命令才行。

创新互联是专业的大足网站建设公司,大足接单;提供成都做网站、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大足网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

ngrok配置方法

1、下载ngrok源码

(GOPATH=~/goproj)

$ mkdir ~/goproj/src/github.com/inconshreveable

$ git clone

$ export GOPATH=~/goproj/src/github.com/inconshreveable/ngrok

2、生成自签名证书

使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,我们需要生成自己的证书,并提供携带该证书的ngrok客户端。

证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址693c358d.ngrok.com为例,其NGROK_BASE_DOMAIN就是"ngrok.com",如果你要 提供服务的地址为"example.tunnel.tonybai.com",那NGROK_BASE_DOMAIN就应该 是"tunnel.tonybai.com"。

我们这里以NGROK_BASE_DOMAIN="tunnel.tonybai.com"为例,生成证书的命令如下:

$ cd ~/goproj/src/github.com/inconshreveable/ngrok

$ openssl genrsa -out rootCA.key 2048

$ openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=tunnel.tonybai.com" -days 5000 -out rootCA.pem

$ openssl genrsa -out device.key 2048

$ openssl req -new -key device.key -subj "/CN=tunnel.tonybai.com" -out device.csr

$ openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

执行完以上命令,在ngrok目录下就会新生成6个文件:

-rw-rw-r– 1 ubuntu ubuntu 1001 Mar 14 02:22 device.crt

-rw-rw-r– 1 ubuntu ubuntu 903 Mar 14 02:22 device.csr

-rw-rw-r– 1 ubuntu ubuntu 1679 Mar 14 02:22 device.key

-rw-rw-r– 1 ubuntu ubuntu 1679 Mar 14 02:21 rootCA.key

-rw-rw-r– 1 ubuntu ubuntu 1119 Mar 14 02:21 rootCA.pem

-rw-rw-r– 1 ubuntu ubuntu 17 Mar 14 02:22 rootCA.srl

ngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrokd和ngrok)中 去,assets/client/tls和assets/server/tls下分别存放着用于ngrok和ngrokd的默认证书文件,我们需要将它们替换成我们自己生成的:(因此这一步务必放在编译可执行文件之前)

cp rootCA.pem assets/client/tls/ngrokroot.crt

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key

3、编译ngrokd和ngrok

在ngrok目录下执行如下命令,编译ngrokd:

$ make release-server

不过在我的AWS上,出现如下错误:

GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/client/assets/assets_release.go \

assets/client/…

make: bin/go-bindata: Command not found

make: *** [client-assets] Error 127

go-bindata被安装到了$GOBIN下了,go编译器找不到了。修正方法是将$GOBIN/go-bindata拷贝到当前ngrok/bin下。

$ cp /home/ubuntu/.bin/go14/bin/go-bindata ./bin

再次执行make release-server。

~/goproj/src/github.com/inconshreveable/ngrok$ make release-server

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/client/assets/assets_release.go \

assets/client/…

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/server/assets/assets_release.go \

assets/server/…

go get -tags 'release' -d -v ngrok/…

code.google.com/p/log4go (download)

go: missing Mercurial command. See

package code.google.com/p/log4go: exec: "hg": executable file not found in $PATH

github.com/gorilla/websocket (download)

github.com/inconshreveable/go-update (download)

github.com/kardianos/osext (download)

github.com/kr/binarydist (download)

github.com/inconshreveable/go-vhost (download)

github.com/inconshreveable/mousetrap (download)

github.com/nsf/termbox-go (download)

github.com/mattn/go-runewidth (download)

github.com/rcrowley/go-metrics (download)

Fetching

Parsing meta tags from (status code 200)

get "gopkg.in/yaml.v1": found meta tag main.metaImport{Prefix:"gopkg.in/yaml.v1", VCS:"git", RepoRoot:""} at

gopkg.in/yaml.v1 (download)

make: *** [deps] Error 1

又出错!提示找不到hg,原来是aws上没有安装hg。install hg后(sudo apt-get install mercurial),再编译。

$ make release-server

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/client/assets/assets_release.go \

assets/client/…

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/server/assets/assets_release.go \

assets/server/…

go get -tags 'release' -d -v ngrok/…

code.google.com/p/log4go (download)

go install -tags 'release' ngrok/main/ngrokd

同样编译ngrok:

$ make release-client

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/client/assets/assets_release.go \

assets/client/…

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

-debug=false \

-o=src/ngrok/server/assets/assets_release.go \

assets/server/…

go get -tags 'release' -d -v ngrok/…

go install -tags 'release' ngrok/main/ngrok

AWS上ngrokd和ngrok被安装到了$GOBIN下。

三、调试

1、启动ngrokd

$ ngrokd -domain="tunnel.tonybai.com" -httpAddr=":8080" -httpsAddr=":8081"

[03/14/15 04:47:24] [INFO] [registry] [tun] No affinity cache specified

[03/14/15 04:47:24] [INFO] [metrics] Reporting every 30 seconds

[03/14/15 04:47:24] [INFO] Listening for public http connections on [::]:8080

[03/14/15 04:47:24] [INFO] Listening for public https connections on [::]:8081

[03/14/15 04:47:24] [INFO] Listening for control and proxy connections on [::]:4443

求助,如何在 Win7 下搭建源码阅读环境

1、安装google go

2、安装git

3、安装Mingw

4、把go的bin目录添加到PATH环境变量,可以直接在CMD中执行

SET PATH=%PATH%;C:\go\bin

5、把mingw的bin目录添加到PATH路径

SET PATH=%PATH%;C:\go\bin

6、下载ngrok源码,

7、将下载的zip解压出来,修改Makefile

将 export GOPATH:=$(shell pwd)

改为 export GOPATH:=C:\Users\Administrator\Desktop\ngork\ngrok-src

将 bin/go-bindata:

GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata

这段改为 bin/go-bindata:

GOOS=windows GOARCH=amd64 go get github.com/jteeuwen/go-bindata/go-bindata

8、修改log4go的路径

修改src\ngrok\log\logger.go中log4o那段代码为

log "github.com/keepeye/log4go"

9、cmd执行

make release-all

Python中的logger和handler到底是个什么鬼

典型的日志记录的步骤是这样的:

创建logger

创建handler

定义formatter

给handler添加formatter

给logger添加handler

写成代码差不多就是酱婶的(这个是照别的网页抄的,参考附注):

1 import logging

2  3 # 1、创建一个logger  4 logger = logging.getLogger('mylogger')

5 logger.setLevel(logging.DEBUG)

6  7 # 2、创建一个handler,用于写入日志文件  8 fh = logging.FileHandler('test.log')

9 fh.setLevel(logging.DEBUG)

10 11 # 再创建一个handler,用于输出到控制台 12 ch = logging.StreamHandler()

13 ch.setLevel(logging.DEBUG)

14 15 # 3、定义handler的输出格式(formatter)16 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

17 18 # 4、给handler添加formatter19 fh.setFormatter(formatter)

20 ch.setFormatter(formatter)

21 22 # 5、给logger添加handler 23 logger.addHandler(fh)

24 logger.addHandler(ch)

之后才可以正式的开始记录日志。Java里面的java.util.Logging类差不多也是这样,代码还要更复杂一点。Golang的日志相对写法简单一些,不过没有什么格式,系统记录一条时间,内容格式完全自己手画。第三方的日志库倒是没有接触过,像Java的Log4j,Golang的log4go和seelog等等,不知道用起来会不会简单一点。我一直都记不住这些,因为不太理解logger和handler为什么要这样写。一直到这次任务中出现的在我看来相当“诡异”的bug,才深入理解了一下。

我的任务是这样的,要做一个日志切割的工具,按天将日志分割开,即每天0点产生一个新日志,将旧日志改名。并且,将超过3个月的日志删除掉,以保证磁盘空间不会被log占满。程序要求可以切割多个目录中的不同日志,具体路径由json中配置。

这里用到了logging.handlers类中的TimedRotatingFileHandler方法,用以获得一个handler。大概的写法为:

1 logger = logging.getLogger() #获得logger2 handler = logging.handlers.TimedRotatingFileHandler(logfile, 'S', 1, 0) #切割日志3 handler.suffix = '%Y%m%d' #切割后的日志设置后缀4 logger.addHandler(handler) #把logger添加上handler5 logger.fatal(datetime.datetime.now().strftime('%Y-%m-%d')) #在新日志中写上当天的日期

这里我没有设置level和formatter。因为只是分割,对新日志没有什么影响。TimedRotatingFileHandler函数的方法见附注,或查看python的源码,这个函数是python写的,可以找到定义。这里我使用的是每秒生成一个新的日志文件,之后用Crontab在每天0点调度,然后用for循环处理json中的每一个日志文件。

golang安装第三包报错 exec: "hg": executable file not found in %PATH%

【解决过程】

1.很明显,是在windows的cmd中,找不到hg。

而对于hg,如果是cygwin等环境,那肯定没问题,但是此处是cmd,所以没法用hg。

2.参考:

``

[package code.google.com/p/go.example/hello: exec: “hg”: executable file not found in %PATH%. How to get remote golang packages?]`

go get code.google.com/p/log4go

vb中的DoEvents是干什么用的?

vb中的DoEvents是干什么用的?

把控制权交给操作系统,以响应窗口重画、最大化、最小化等要求,避免出现应用程序不响应操作系统请求而 *** 作系统误以为死机了。

举个例子:在窗口中放一个textbox,然后写程序,循环从1到10万,然后循环体里面就是把这个数写到textbox里面,如果没有DoEvents,程序运行的时候就是死机一样,然后直到最后窗口显示10万,中间数字什么也看不见;如果在每次写了textbox以后,都来一下DoEvents,窗口就会重画,运行的时候就能看见textbox里面的数一个一个的长上去。

vb中的InitCommonControls是干什么用

vb中InitCommonControls是注册并初始化通用控件窗口类。

另外还有一个加强版的InitCommonControlsEx函数,可以注册指定控件的窗口类。

在使用SDK编写windows界面的时候,如果使用了月历控件,IP地址控件等高级控件,则需要调用此函数。

例:

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int iCmdShow)

{InitCommonControls();

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);

return 0;}

函数InitCommonControls是个空函数,不做任何事情。

但如果你调用了该函数,则链接器会将你的程序链接到ctl32.lib,然后在程序启动时,会加载ctl32.dll。

真正初始化的工作是在该库的入口点处做的,在这里会注册通用控件窗口类。

然后应用程序就可以创建控件窗口,就象创建其它的子窗口控件一样。

VB是干什么用的?

很广,包括病毒

vb是干什么用的?

VB

VB 是Visual Basic编程语言

1991年,美国微软公司推出了Visual Basic(可间称VB),目前的最新版本是VB 2005(VB8)中文版。

Visual 意即可视的、可见的,指的是开发像windows操作系统的图形用户界面(Graphic User Interface,GUI)的方法,它不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。

Basic指的是Beginners all_purpose symbolic instruction code 初始者通用符号指令代码语言。

Visual Basic有学习版、专业版和企业版三种版本,以满足不同的开发需要。学习版适用于普通学习者及大多数使用Visual Basic开发一般Windows应用程序的人员,但是;专业版适用于计算机专业开发人员,包括了学习版的全部内容功能以及Inter控件开发工具之类的高级特性;企业版除包含专业版全部的内容外,还有自动化构件管理器等工具,使得专业编程人员能够开发功能强大的组骨子里分布式应用程序。

VB是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows环境下的各类应用程序。它简单易学、效率高,且功能强大可以与Windowsr专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,以用动态链接库(DLL)、对象的链接与世隔嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。随着版本的提高,Visual Basic的功能也越来越强。5.0版以后,Visual Basic推出了中文版,与前个版本相比,其功能有了很大提升。

在二十一世纪初,microsoft公司推出Visual Studio 2003与Visual Basic之间有了重大变化,Visual Studio为各种编程工具做了一个平台,Visual Basic.NET可在这种平台上运行。相对于传统VB,有很大的不同。VB.Net,首次使用.Net构架进行可视化编程,并且能很好地与COM构架兼容。2005年Visual Studio 2005则运用了NET 2.0的技术,更加的方便了程序员的工作。可是新的程序对系统配置要求也较高,需要微软.Net Framework 2.0以上的.Net构架支持。

另外VB(V代表Vitamin)还有一个意思

维生素B包括维生素B1、维生素B2、维生素B6、维生素B12、烟酸、泛酸、叶酸。这些B族维生素是推动体内代谢,把糖、脂肪、蛋白质等转化成热量时不可缺少的物质。如果缺少维生素B,则细胞功能马上降低,引起代谢障碍,这时人体会出现怠滞和食欲不振。相反喝酒过多等导致肝脏损害,在许多场合下是和维生素B缺乏症并行的。

以下是含有丰富维生素B的食品:

①含有丰富维生素B1的食品:小麦胚芽、猪腿肉、大豆、花生、里肌肉、火腿、黑米、鸡肝、胚芽米等。

②含有丰富维生素B2的食品:七腮鳗、牛肝、鸡肝、香菇、小麦胚芽、鸡蛋、奶酪等。

③含有维生素B6、维生素B12、烟酸、泛酸和叶酸等食品: 肝、肉类、牛奶、酵母、鱼、豆类、蛋黄、坚果类、菠菜、奶酪等。其中的维生素B1在人体内无法贮存,所以应每天补充。

B族维生素若想全部摄取比较困难,但是认真选择食物就可以简单且方便的摄取。上述含有维生素B的食物可以分为①和②③两组。看看上述分类就可以明白,②和⑧全都含在大体相同的食物中。因此①作为一组食物,②和③合在一起形成一组食物,组合选择两组食物,基本上可以把B族维生素摄取到手。

VB的还有第三种意思

价键理论

valence-bond theory

一种获得分子薛定谔方程近似解的处理方法。又称电子配对法。历史上最早发展起来的化学键理论。主要描述分子中的共价键和共价结合,其核心思想是电子配对形成定域化学键。

1927年W.H.海特勒和F.W.伦敦首次完成了氢分子中电子对键的量子力学近似处理,这是近代价键理论的基础。L.C.鲍林等加以发展,引入杂化轨道概念,综合成价键理论,成功地应用于双原子分子和多原子分子的结构。

价键理论是海特勒伦敦处理氢分子方法的推广,要点如下:①若两原子轨道互相重叠,两个轨道上各有一个电子,且电子自旋方向相反,则电子配对给出单重态,形成一个电子对键。②两个电子相互配对后,不能再与第三个电子配对,这就是共价键的饱和性。③遵循最大重叠原则,共价键沿着原子轨道重叠最大的方向成键。共价键具有方向性。原子轨道通常在某个特定方向上有最大值,只有在此方向上轨道间才有最大重叠而形成共价键。不同原子轨道有不同成键能力。原子轨道的最大值作为原子轨道成键能力的度量,鲍林给出s、p、d、f等原子轨道成键能力依次为1、3、5、7。在主量子数相同时,成键能力大的轨道形成的共价键较牢固。

价键理论与化学家所熟悉的经典电子对键概念相吻合,一出现就得到迅速发展。但价键理论计算比较复杂,使得后来发展缓慢。随着计算技术日益提高,该理论还会有新发展。

在以太网技术中,VB称做:虚拟网桥(Virtual Bridge)

VB其实是为了管理方便对管理域的一个划分,相当于一个虚拟的L2 Lanswitch。在城域网的应用中,VB是基于用户划分的。即:每个用户都有自己独立的VB,其中包含多个vlan标签和mac地址。由于各个VB之间相互隔离,不同的VB可分配相同的vlan而互不影响,而基于vlan划分VB的L2芯片不能区分不同用户的相同vlan

vb里 Const是干什么用的

const是定义常数,例如:const pi =3.14159,那么你在代码中输入pi就相当于输入3.14159。就是用一个类似变量的东西代替数值提高可读性,但要注意,它不是变量。

VB 中 模块是干什么用的啊?

我的理解就是已经具备某种功能的一段代码包。直接调用它可以完成某种功能。

vb6.0是干什么用的

软件设计工具,本人认为是个很好,也很简单的设计工具,很多日本人都用这个设计的,为什么了?因为这个简单吗,我们就是要用简单的工具和方法做出复杂实用的产品

VB中的msg$是干什么用的啊????谢谢了~~~~

就是MSGBOX

提示信息

可以作为调试时的工具使用,对于用户来说可以给用户一些信息,如操作方法和步骤等!

NHibernate中的schema是干什么用的

关于NHibernate和NHibernate中的schema的问题,你可以参考一下以下文章:

什么是NHibernate

NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。

NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。

为什么写这个指南

任何熟悉Hibernate的人会发现这篇指南和Glen Smith 的 A Hitchhiker’s Guide to Hibernate 非常相近。这里的内容正是基于他的指南,因此所有的感谢都应该给与他。

NHibernate的文档并非每处都和Hibernate的文档一致。然而,项目的相似应该能使读者通过读Hibernate的文档来很好的理解NHibernate如何工作。

这篇文档意在让你尽可能快的开始使用NHibernate。它将介绍如何持久化一个简单的对象到一张表里。想得到更多的复杂的例子,可以参考NUnit测试及附带代码。

开发的过程

Nhibernate未来将会提供一些工具帮助你自动产生schema文件(现在还是基于代码)或是通过映射文件产生类(在筹措阶段)或是更新schema(来自于一个新开发者的建议)。然而,这里我们的例子是假定一切来自于完全手写,包括设置表和.Net类的编写。我们将进行以下步骤。

1.新建一个将要持久化.Net对象的表

2.构建一个需要被持久化的.Net类

3.构建一个可以让NHibernate知道如何持久化对象属性的映射文件

4.构建一个让NHibernate知道如何连接数据库的配置文件]

5.使用NHibernate的API

第一步:写构建表的SQL

这里我们将使用的是一个非常简单的例子。假设你正在为你的网站开发一个基本的用户管理子系统。我们将使用如下的一张User表(假定你已经设置好一个数据库—在的例子里我称它为NHibernate)。

use NHibernate

go

CREATE TABLE users (

LogonID nvarchar(20) NOT NULL default ’0’,

Name nvarchar(40) default NULL,

Password nvarchar(20) default NULL,

EmailAddress nvarchar(40) default NULL,

LastLogon datetime default NULL,

PRIMARY KEY (LogonID)

)

go

我使用的是MS Sql Server 2000, 但也可以使用任何数据库,只要你有关于它们的基于.Net数据提供驱动程序。我们将得到一个含有LogonID,Name, Password, Email 和LastLogon的表. 经过以上标准步骤,我们下一步是写一个.Net类处理一个给定的User对象。

第二步:产生一个.Net 类文件

当内存中有一堆User对象的时候,我们需要某种对象去保存它们。NHibernate通过对象属性的反射来工作,因此我们需要添加我们希望持久化的对象属性。一个可以被NHibernate持久化的类应该看起来象下面的样子:

using System;

namespace NHibernate.Demo.QuickStart

{

public class User

{

private string id;

private string userName;

private string password;

private string emailAddress;

private DateTime lastLogon;

public User()

{

}

public string Id

{

get { return id; }

set { id = value; }

}

public string UserName

{

get { return userName; }

set { userName = value; }

}

public string Password

{

get { return password; }

set { password = value; }

}

public string EmailAddress

{

get { return emailAddress; }

set { emailAddress = value; }

}

public DateTime LastLogon

{

get { return lastLogon; }

set { lastLogon = value; }

}

}

}

在上面的例子里,我们的属性和构建函数 是public,但这个对NHibernate不是必要的.它可以使用public, protected, internal或者甚至是用private来持久化数据。

第三步:写映射文件

现在我们有数据表和需要去映射它的.Net类。我们需要一种方式去让NHibernate知道如何从一个映射到另一个。这个任务依赖于映射文件来完成。最易于管理的办法是为每一个类写一个映射文件,如果你命名它是YourObject.hbm.xml 并且把它放在和类的同一个目录里,NHiberante将会使得事情简单起来。下面是一个User.hbm.xml的例子:

?xml version="1.0" encoding="utf-8" ?

hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"

class name=NHibernate.Examples.QuickStart.User, NHibernate.Examples table="users"

id name=Id column="LogonId" type=String length="20"

generator class="assigned" /

/id

property name=UserName column= "Name" type=String length="40"/

property name=Password type=String length="20"/

property name=EmailAddress type=String length="40"/

property name=LastLogon type=DateTime/

/class

/hibernate-mapping

让我们来看看这个文件中让我们感兴趣的某些行。第一个有趣的标签是class。这里我们将映射类型名称(类名和装配件)到我们数据库中的User表,这里和Hibernate有一点点的不同。你将不得不告诉NHibernate从何处提取对象。在这个例子里我们从装配件NHibernate.Examples装载类NHibernate.Examples.QuickStart.User 。NHibernate 遵循和.Net Framework同样的规则来加载类型。因此如果你在如何指定类型的方面有些混淆,请参看.Net Framework SDK。

让我们先跳过id标签,来讨论property标签。简要看一下,你将发现NHibernate所要做的工作。name属性的值正是我们.Net 类的属性,column属性值将是我们数据库里的字段。type属性是可选的(如果你不标明,NHibernate将利用反射进行最佳的推测)。

好了,让我们回到标签id, 你可以猜测到这个标签将是映射数据库表的主键,的确如此,id标签的组成和我们刚才看的property标签是相似的。我们映射属性到目标数据库的字段。

内嵌的generator 标签告诉NHibernate 如何生成主键(它将恰当的为你生成主键,不管你指定何种类型,但你必须告诉它)。在我们的例子里,我们设定为assigned,意味着我们对象将自己生成主键(毕竟User对象常常需要一个UserID)。如果你执意要NHiberante为你生成主键,你感兴趣于设定uuid.hex和uuid.string(从文档中获取更多信息)

提示:如果你使用Visual Studio.Net 去编译的话,请将user.hbm.xml的Build Action属性设置为Embedded Resource。映射文件将成为装配件的一部分。更详细的细节重点将在后面展示。

提示:如果你仅仅是改变映射文件,你不能使用build 而应该Rebuild项目。Visual Studio.Net 不会重新编译有改变的映射文件。

第四步:为你的数据库产生一个配置文件

我们至今还没有告诉NHibernate 去哪里连接数据库。最直接的办法是在你的应用程序的配置文件里设置一个NHibernate配置节。这和在Hibernate里使用属性文件是等价的。如下配置:

?xml version="1.0" encoding="utf-8" ?

configuration

configSections

section name=nhibernate type=System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089 /

/configSections

nhibernate

add

key="hibernate.connection.provider"

value="NHibernate.Connection.DriverConnectionProvider"

/

add

key="hibernate.dialect"

value="NHibernate.Dialect.MsSql2000Dialect"

/

add

key="hibernate.connection.driver_class"

value="NHibernate.Driver.SqlClientDriver"

/

add

key="hibernate.connection.connection_string"

value="Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI"

/

/nhibernate

/configuration

上面的例子里用了SqlClient 驱动,在本地连接名称为NHibernate 的数据库,提供用户名和密码。那里有一堆属性你需要调整来确定如何让NHibernate来访问数据库。再次说明,你可以在文档里获取更多信息。

请注意以上的配置里并没有涉及到log4的配置信息。NHibernate使用log4来记录内部发生的一切。在一个应用程序产品里,在你特定环境里,我推荐配置log4,并为NHibernate设置一定的日志级别。

第五步:开始展现NHibernate的魔力

所有艰苦的工作已经完成。你将有以下内容

User.cs ----你需要持久化的C#类

User.hbm.xml ----你的NHibernate映射文件

App.config ---对ADO.NET连接的配置信息(如果你愿意,你可以在代码中实现)。

你的数据库里有一张User表。

现在可以在你的代码中恰当简洁的使用NHibernate。简化的版本如下

创建一个Configuration对象

让Configuration知道你将存储何种类型的对象

为你选择的数据库创建一个Session对象

Load,Save和Query你的对象

通过Session的Flush()方法将对象提交给数据库。

为了让你更清晰,我们来看一些代码。

首先,创建一个Configuration对象

Configuration对象能够解析所有.Net对象和后台数据库中的映射关系。

Configuration cfg = new Configuration();

cfg.AddAssembly("NHibernate.Examples");

Configuration对象会搜索装配件里的任何以hbm.xml 结尾的文件。还有其他方法加载映射文件,但这种方式是最简单的。

下一步,创建一个Session对象

ISession对象提供一个到后台数据库的连接,ITransaction对象提供一个可以被NHibernate管理的事务。

ISessionFactory factory = cfg.BuildSessionFactory();

ISession session = factory.OpenSession();

ITransaction transaction = session.BeginTransaction();

接着来Load, Save和Query你的对象

现在你可以用使用传统的.Net方法来操纵对象。你想保存一个新对象到数据库吗?尝试下面的方法:

User newUser = new User();

newUser.Id = "joe_cool";

newUser.UserName = "Joseph Cool";

newUser.Password = "abc123";

newUser.EmailAddress = "joe@cool.";

newUser.LastLogon = DateTime.Now;

Tell NHibernate that this object should be saved

session.Save(newUser);

mit all of the changes to the DB and close the ISession

transaction.Commit();

session.Close();

正如你所看到的,关于NHiberante重要的事情是如此简单。继续并且查询你的数据库,验证一下User表里的新记录。现在重要的事情就是你去操心业务对象并在进行处理的时候告诉NHibernate就可以了。

让我们来告诉你,当你有一个UserID的时候如何获取对象(举例说,登陆你的网站的时候)。仅仅一句话就可以打开Session,传入key就可以了

open another session to retrieve the just inserted user

session = factory.OpenSession();

User joeCool = (User)session.Load(typeof(User), "joe_cool");

你所获取的User对象还在生存周期内!改变它的属性,并通过Flush()持久化到数据库。

set Joe Cool’s Last Login property

joeCool.LastLogon = DateTime.Now;

flush the changes from the Session to the Database

session.Flush();

你所要做的就是通过NHibernate来进行你需要的改变,并调用Session的Flush()方法提交。验证一下数据库,查查用户ID为”joe_cool”的记录中”LastLogon”的更改。

还有更好的,你可以以System.Collections.IList的方式来获取从表中的对象。如下

IList userList = session.CreateCriteria(typeof(User)).List();

foreach(User user in userList)

{

System.Diagnostics.Debug.WriteLine(user.Id + " last logged in at " + user.LastLogon);

}

这个查询将会返回所有表记录。往往你需要做更多的控制,比如说获取从March 14, 2004 10:00 PM 以后登陆的用户,如下:

IList recentUsers = session.CreateCriteria(typeof(User))

.Add(Expression.Expression.Gt("LastLogon", new DateTime(2004, 03, 14, 20, 0, 0)))

.List();

foreach(User user in recentUsers)

{

System.Diagnostics.Debug.WriteLine(user.Id + " last logged in at " + user.LastLogon);

}

文档里还有一堆健壮的查询方式让你调用,这里仅仅让你对NHibernate所提供的强有力的工具有一定的了解。

最后调用Session对象的Close()方法,释放NHibernate所使用的ADO.Net连接资源

tell NHibernate to close this Session

session.Close();

更确切地说…

你已经完成创建对象,持久化并通过条件查询或键值查询来返回它。相信你已经从中获得快乐。

现在你对NHibernate有了大致的了解,如果你能仔细阅读大量来自Hibernate 2.0.3文档,你将获得帮助(NHibernate文档还在早期阶段,现在还仅仅是对Hibernate的拷贝)。

Enjoy! And Happy NHibernating!

Mike Doerfler

WOW中的宏是干什么用的?

宏可以帮助你更好的使用技能,意思就是能让你在比较准确的时间放出你认为该使用的技能 一般和我PK的DZ都是用宏的,毕竟DZ要求操作还是高的,所以有时不一定能反应过来,就需要宏的帮助了 你要宏的话可以去BAIDU下或者去FWQ上问比较强力的DZ,我不想做个CTRL+C和CTRL+v的人 谢谢合作,给个分。

log4配置文件怎样写入日志名到数据库中

1.创建日志数据表:

view plainprint?CREATE02TABLE02log02(02020202[Id]02[int]02IDENTITY02(1,021)02primary02key02NOT02NULL02,02020202[Lg_Date]02[datetime]02NOT02NULL02,02020202[Lg_Thread]02[varchar]02(50)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Level]02[varchar]02(20)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Class]02[varchar]02(200)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Message]02[varchar]02(2000)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL0202)0202GO02022.写log4j.properties文件,这里我的数据库举动是用的JTDS:

引用# level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

# Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

log4j.rootLogger=ERROR,DATABASE

log4j.addivity.org.apache=true

# 用于数据库

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:jtds:sqlserver://localhost:1433;DatabaseName=databasename

log4j.appender.DATABASE.driver=net.sourceforge.jtds.jdbc.Driver

log4j.appender.DATABASE.user=username

log4j.appender.DATABASE.password=password

# 本处设置为"WARN"以上级别在数据库存储(默认情况使用rootLogger中的设置)

log4j.appender.DATABASE.Threshold=DEBUG

log4j.appender.DATABASE.sql=INSERT INTO log(optime,thread,infolevel,class,message) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')

# 写入数据库中的表LOG4J的Message字段中,

# 内容%d(日期)%c: 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n3.在程序中需要将日志信息写入数据库的地方写入如下代码:

view plainprint?


分享标题:go+语言+log4go go+语言 七牛
链接地址:http://scyanting.com/article/hgsepo.html