日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

企業庫日志應用程序模塊工作原理圖:

?

???? 從上圖我們可以看清楚企業庫日志應用程序模塊的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter的信息都可以在Category配置文件中反映出來,通過配置文件,調用LogWriter類的Writer方法,就可以將包含日志信息的LogEntry實體寫入Category配置文件中指定的設備了.

企業庫日記應用程序模塊提供了下列幾種記錄方法:

  • The event log
  • An e-mail message
  • A database
  • A message queue
  • A text file
  • A Windows?Management Instrumentation (WMI) event
  • Custom locationsusing application block extension points

本文介紹一下如何使用企業庫日記應用程序模塊向日志文件,數據庫,XML文件中寫入程序操作日記:

?

一.? 向日志文件寫入日記

  • 運行EntLibConfig.exe,選擇Blocks菜單 ,單擊 Add LoggingSettings .
  • ?

    ?

      2.?????? 對每個模塊進行配置:?

    ?

      3.?????? 點擊 File菜單,單擊 Save,保存為一個App.config文件,可以先保存到桌面,之后要用到它.

    ?

      4.?????? 創建一個新的控制臺應用程序,App.config添加到程序內,并加入需要的Dll文件,在此我們要導入的是 Microsoft.Practices.EnterpriseLibrary. Logging.dll, Microsoft.Practices.EnterpriseLibrary. Logging.Database.dll并添加需要的引用:

    ?

      添加引用:

    using Microsoft.Practices.EnterpriseLibrary. Logging;

    ?

    ?

    ?

      5.?????? 測試:

    ? using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using Microsoft.Practices.EnterpriseLibrary.Logging;

    namespace ConsoleApplication1
    {
    class Program
    {
    staticvoid Main(string[] args)
    {
    LogEntry logEntry
    =new LogEntry();

    logEntry.EventId
    =1;
    logEntry.Priority
    =1;
    logEntry.Title
    ="標題黨";
    logEntry.Message
    ="http://www.cnblogs.com/huangcong/";
    logEntry.Categories.Add(
    "C#學習");
    logEntry.Categories.Add(
    "Microsoft Enterprise Library學習");

    Logger.Writer.Write(logEntry,
    "General");
    Console.WriteLine(
    "日志寫入完成!");
    }
    }
    }

    ?

    ?

    運行結果:


    ?

    ?

    6.?????? 開始控制面板系統和安全查看事件日志—Windows日志應用程序:


    ?

    ?

    7.?????? 第一個日志就是我們剛剛寫入的日志啦,雙擊可以查看內容:

    ?

    ?

    ?

    二.? ?向數據庫寫入日記?

    1.?????? 要將日志寫入數據庫,就得先新建一個日志數據庫,我們可以在EntLib50Src文件夾下的Source\Blocks\Logging\Src\DatabaseTraceListener\Scripts目錄中找到LoggingDatabase.sql文件,只要在數據庫中運行即可自動生成一個日志數據庫:?

    ?

    為了方便大家,我直接將該文件發布在下面,大家直接復制到SQL中運行也可以:

    ?

    Logging數據庫創建SQL /****** Object: Database Logging Script Date: 8/22/2005 ******/

    USE[master]

    GO



    IFEXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'Logging')

    DROPDATABASE[Logging]

    GO



    CREATEDATABASE[Logging]

    COLLATE SQL_Latin1_General_CP1_CI_AS

    GO



    exec sp_dboption N'Logging', N'autoclose', N'false'

    GO



    exec sp_dboption N'Logging', N'bulkcopy', N'false'

    GO



    exec sp_dboption N'Logging', N'trunc. log', N'false'

    GO



    exec sp_dboption N'Logging', N'torn page detection', N'true'

    GO



    exec sp_dboption N'Logging', N'read only', N'false'

    GO



    exec sp_dboption N'Logging', N'dbo use', N'false'

    GO



    exec sp_dboption N'Logging', N'single', N'false'

    GO



    exec sp_dboption N'Logging', N'autoshrink', N'false'

    GO



    exec sp_dboption N'Logging', N'ANSI null default', N'false'

    GO



    exec sp_dboption N'Logging', N'recursive triggers', N'false'

    GO



    exec sp_dboption N'Logging', N'ANSI nulls', N'false'

    GO



    exec sp_dboption N'Logging', N'concat null yields null', N'false'

    GO



    exec sp_dboption N'Logging', N'cursor close on commit', N'false'

    GO



    exec sp_dboption N'Logging', N'default to local cursor', N'false'

    GO



    exec sp_dboption N'Logging', N'quoted identifier', N'false'

    GO



    exec sp_dboption N'Logging', N'ANSI warnings', N'false'

    GO



    exec sp_dboption N'Logging', N'auto create statistics', N'true'

    GO



    exec sp_dboption N'Logging', N'auto update statistics', N'true'

    GO



    use[Logging]

    GO



    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM dbo.sysobjects WHERE id =OBJECT_ID(N'[dbo].[Category]') ANDOBJECTPROPERTY(id, N'IsUserTable') =1)

    BEGIN

    CREATETABLE[dbo].[Category](

    [CategoryID][int]IDENTITY(1,1) NOTNULL,

    [CategoryName][nvarchar](64) NOTNULL,

    CONSTRAINT[PK_Categories]PRIMARYKEYCLUSTERED

    (

    [CategoryID]ASC

    )
    ON[PRIMARY]

    )
    ON[PRIMARY]

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM dbo.sysobjects WHERE id =OBJECT_ID(N'[dbo].[CategoryLog]') ANDOBJECTPROPERTY(id, N'IsUserTable') =1)

    BEGIN

    CREATETABLE[dbo].[CategoryLog](

    [CategoryLogID][int]IDENTITY(1,1) NOTNULL,

    [CategoryID][int]NOTNULL,

    [LogID][int]NOTNULL,

    CONSTRAINT[PK_CategoryLog]PRIMARYKEYCLUSTERED

    (

    [CategoryLogID]ASC

    )
    ON[PRIMARY]

    )
    ON[PRIMARY]

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM dbo.sysobjects WHERE id =OBJECT_ID(N'[dbo].[Log]') ANDOBJECTPROPERTY(id, N'IsUserTable') =1)

    BEGIN

    CREATETABLE[dbo].[Log](

    [LogID][int]IDENTITY(1,1) NOTNULL,

    [EventID][int]NULL,

    [Priority][int]NOTNULL,

    [Severity][nvarchar](32) NOTNULL,

    [Title][nvarchar](256) NOTNULL,

    [Timestamp][datetime]NOTNULL,

    [MachineName][nvarchar](32) NOTNULL,

    [AppDomainName][nvarchar](512) NOTNULL,

    [ProcessID][nvarchar](256) NOTNULL,

    [ProcessName][nvarchar](512) NOTNULL,

    [ThreadName][nvarchar](512) NULL,

    [Win32ThreadId][nvarchar](128) NULL,

    [Message][nvarchar](1500) NULL,

    [FormattedMessage][ntext]NULL,

    CONSTRAINT[PK_Log]PRIMARYKEYCLUSTERED

    (

    [LogID]ASC

    )
    ON[PRIMARY]

    )
    ON[PRIMARY] TEXTIMAGE_ON [PRIMARY]

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM sysobjects WHERE id =OBJECT_ID(N'[dbo].[InsertCategoryLog]') AND type in (N'P', N'PC'))

    BEGIN

    EXEC dbo.sp_executesql @statement= N'CREATE PROCEDURE InsertCategoryLog

    @CategoryID INT,

    @LogID INT

    AS

    BEGIN

    SET NOCOUNT ON;



    DECLARE @CatLogID INT

    SELECT @CatLogID FROM CategoryLog WHERE CategoryID=@CategoryID and LogID = @LogID

    IF @CatLogID IS NULL

    BEGIN

    INSERT INTO CategoryLog (CategoryID, LogID) VALUES(@CategoryID, @LogID)

    RETURN @@IDENTITY

    END

    ELSE RETURN @CatLogID

    END

    '

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM sysobjects WHERE id =OBJECT_ID(N'[dbo].[AddCategory]') AND type in (N'P', N'PC'))

    BEGIN

    EXEC dbo.sp_executesql @statement= N'



    CREATE PROCEDURE [dbo].[AddCategory]

    -- Add the parameters for the function here

    @CategoryName nvarchar(64),

    @LogID int

    AS

    BEGIN

    SET NOCOUNT ON;

    DECLARE @CatID INT

    SELECT @CatID = CategoryID FROM Category WHERE CategoryName = @CategoryName

    IF @CatID IS NULL

    BEGIN

    INSERT INTO Category (CategoryName) VALUES(@CategoryName)

    SELECT @CatID = @@IDENTITY

    END



    EXEC InsertCategoryLog @CatID, @LogID



    RETURN @CatID

    END



    '

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM sysobjects WHERE id =OBJECT_ID(N'[dbo].[ClearLogs]') AND type in (N'P', N'PC'))

    BEGIN

    EXEC dbo.sp_executesql @statement= N'CREATE PROCEDURE ClearLogs

    AS

    BEGIN

    SET NOCOUNT ON;



    DELETE FROM CategoryLog

    DELETE FROM [Log]

    DELETE FROM Category

    END

    '

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    IFNOTEXISTS (SELECT*FROM sysobjects WHERE id =OBJECT_ID(N'[dbo].[WriteLog]') AND type in (N'P', N'PC'))

    BEGIN

    EXEC dbo.sp_executesql @statement= N'







    /****** Object: Stored Procedure dbo.WriteLog Script Date: 10/1/2004 3:16:36 PM ******/



    CREATE PROCEDURE [dbo].[WriteLog]

    (

    @EventID int,

    @Priority int,

    @Severity nvarchar(32),

    @Title nvarchar(256),

    @Timestamp datetime,

    @MachineName nvarchar(32),

    @AppDomainName nvarchar(512),

    @ProcessID nvarchar(256),

    @ProcessName nvarchar(512),

    @ThreadName nvarchar(512),

    @Win32ThreadId nvarchar(128),

    @Message nvarchar(1500),

    @FormattedMessage ntext,

    @LogId int OUTPUT

    )

    AS



    INSERT INTO [Log] (

    EventID,

    Priority,

    Severity,

    Title,

    1701699287,

    MachineName,

    AppDomainName,

    ProcessID,

    ProcessName,

    ThreadName,

    Win32ThreadId,

    Message,

    FormattedMessage

    )

    VALUES (

    @EventID,

    @Priority,

    @Severity,

    @Title,

    @Timestamp,

    @MachineName,

    @AppDomainName,

    @ProcessID,

    @ProcessName,

    @ThreadName,

    @Win32ThreadId,

    @Message,

    @FormattedMessage)



    SET @LogID = @@IDENTITY

    RETURN @LogID







    '

    END

    GO

    SET ANSI_NULLS OFF

    GO

    SET QUOTED_IDENTIFIER OFF

    GO

    IFNOTEXISTS (SELECT*FROM sysobjects WHERE id =OBJECT_ID(N'FK_CategoryLog_Category') AND parent_obj =OBJECT_ID(N'[dbo].[CategoryLog]'))

    ALTERTABLE[dbo].[CategoryLog]WITHCHECKADDCONSTRAINT[FK_CategoryLog_Category]FOREIGNKEY( [CategoryID])

    REFERENCES[dbo].[Category] ( [CategoryID])

    GO

    IFNOTEXISTS (SELECT*FROM sysobjects WHERE id =OBJECT_ID(N'FK_CategoryLog_Log') AND parent_obj =OBJECT_ID(N'[dbo].[CategoryLog]'))

    ALTERTABLE[dbo].[CategoryLog]WITHCHECKADDCONSTRAINT[FK_CategoryLog_Log]FOREIGNKEY( [LogID])

    REFERENCES[dbo].[Log] ( [LogID])

    GO



    SET QUOTED_IDENTIFIER ON

    SET ARITHABORT ON

    SET CONCAT_NULL_YIELDS_NULL ON

    SET ANSI_NULLS ON

    SET ANSI_PADDING ON

    SET ANSI_WARNINGS ON

    SET NUMERIC_ROUNDABORT OFF

    go



    DECLARE@bErrorsasbit



    BEGINTRANSACTION

    SET@bErrors=0



    CREATENONCLUSTEREDINDEX[ixCategoryLog]ON[dbo].[CategoryLog] ([LogID]ASC, [CategoryID]ASC )

    IF( @@error<>0 ) SET@bErrors=1



    IF( @bErrors=0 )

    COMMITTRANSACTION

    ELSE

    ROLLBACKTRANSACTION ?
    ?

    2.?????? 點擊Logging Target Listeners ?區塊右上角的加號按鈕, Add Logging Target Listeners然后點擊 Add Database Listeners ,屬性設置如下:

    ?

    ?

    3.?????? File—Save,保存App.config,無需改動VS中的程序直接再次運行,運行結果如下:

    ?

    ?

    4.?????? 查看Logging數據庫,可以看到剛剛寫入的日志:

    SELECT*FROM[Logging].[dbo].[Category]
    GO
    SELECT*FROM[Logging].[dbo].[Log]
    GO

    ?

    ???? ?

    ??

    ?

    三.? XML文件寫入日記?

    1.??? 創建一個XML文件,我建在上面創建好的工程目錄下,命名為test.xml,點擊Logging Target Listeners ?區塊右上角的加號按鈕, Add Logging Target Listeners然后點擊 Add XML Listeners ,屬性設置如下:


    ?

    ?

    2.?????? File—Save,保存App.config,無需改動VS中的程序直接再次運行,運行結果如下:

    3.?????? 打開test.xml文件,內容如圖所示:

    ?

    哈哈.好了,今天的教程就做到這里,吃午餐~睡覺~下午上課去(最討厭學校的實驗課了)~

    請輸

    ?

    總結

    以上是生活随笔為你收集整理的黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。