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+語言 七牛
URL地址:http://m.kartarina.com/article30/hgsepo.html

成都網站建設公司_創新互聯,為您提供建站公司微信小程序網頁設計公司營銷型網站建設網站營銷網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化
主站蜘蛛池模板: 免费看无码特级毛片| 性色AV一区二区三区无码| 亚洲成在人线在线播放无码| 麻豆精品无码国产在线果冻| 加勒比无码一区二区三区| 免费一区二区无码视频在线播放| 熟妇人妻中文a∨无码| 亚洲国产精品成人AV无码久久综合影院 | 内射精品无码中文字幕| 无码激情做a爰片毛片AV片| 亚洲国产精品成人精品无码区| 人妻少妇看A偷人无码精品视频| 中文字幕韩国三级理论无码| 午夜福利av无码一区二区| 中文无码精品一区二区三区| 亚洲av片不卡无码久久| 国产成A人亚洲精V品无码性色 | 无码国内精品人妻少妇蜜桃视频 | 噜噜综合亚洲AV中文无码| 国产在线拍偷自揄拍无码| 超清无码无卡中文字幕| 亚洲一区二区三区无码国产| 久久午夜无码鲁丝片午夜精品| 日韩激情无码免费毛片| 日韩免费无码视频一区二区三区| 免费无码AV片在线观看软件| 久久国产亚洲精品无码| 久久精品亚洲中文字幕无码麻豆| 伊人蕉久中文字幕无码专区| 亚洲国产精品无码久久久秋霞1| 亚洲中文字幕无码中文字在线| 亚洲国产成人无码AV在线影院 | 亚洲成AV人在线播放无码| 在线A级毛片无码免费真人| 无码区日韩特区永久免费系列| 成在人线av无码免费高潮喷水| 中文字幕人妻无码专区| 中文字幕精品无码一区二区| 亚洲免费无码在线| 无码视频在线播放一二三区| 无码专区一va亚洲v专区在线|