学习微软企业库--日志模块

企业库日志应用程序模块工作原理图:

 

     从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中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文件中写入程序操作日记:

 

一.  向日志文件写入日记

  1. 运行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



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

DROP DATABASE [ Logging ]

GO



CREATE DATABASE [ 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

IF NOT EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID (N ' [dbo].[Category] ' ) AND OBJECTPROPERTY (id, N ' IsUserTable ' ) = 1 )

BEGIN

CREATE TABLE [ dbo ] . [ Category ] (

[ CategoryID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,

[ CategoryName ] [ nvarchar ] ( 64 ) NOT NULL ,

CONSTRAINT [ PK_Categories ] PRIMARY KEY CLUSTERED

(

[ 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

IF NOT EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID (N ' [dbo].[CategoryLog] ' ) AND OBJECTPROPERTY (id, N ' IsUserTable ' ) = 1 )

BEGIN

CREATE TABLE [ dbo ] . [ CategoryLog ] (

[ CategoryLogID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,

[ CategoryID ] [ int ] NOT NULL ,

[ LogID ] [ int ] NOT NULL ,

CONSTRAINT [ PK_CategoryLog ] PRIMARY KEY CLUSTERED

(

[ 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

IF NOT EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID (N ' [dbo].[Log] ' ) AND OBJECTPROPERTY (id, N ' IsUserTable ' ) = 1 )

BEGIN

CREATE TABLE [ dbo ] . [ Log ] (

[ LogID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,

[ EventID ] [ int ] NULL ,

[ Priority ] [ int ] NOT NULL ,

[ Severity ] [ nvarchar ] ( 32 ) NOT NULL ,

[ Title ] [ nvarchar ] ( 256 ) NOT NULL ,

[ Timestamp ] [ datetime ] NOT NULL ,

[ MachineName ] [ nvarchar ] ( 32 ) NOT NULL ,

[ AppDomainName ] [ nvarchar ] ( 512 ) NOT NULL ,

[ ProcessID ] [ nvarchar ] ( 256 ) NOT NULL ,

[ ProcessName ] [ nvarchar ] ( 512 ) NOT NULL ,

[ ThreadName ] [ nvarchar ] ( 512 ) NULL ,

[ Win32ThreadId ] [ nvarchar ] ( 128 ) NULL ,

[ Message ] [ nvarchar ] ( 1500 ) NULL ,

[ FormattedMessage ] [ ntext ] NULL ,

CONSTRAINT [ PK_Log ] PRIMARY KEY CLUSTERED

(

[ 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

IF NOT EXISTS ( 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

IF NOT EXISTS ( 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

IF NOT EXISTS ( 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

IF NOT EXISTS ( 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,

[Timestamp],

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

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

ALTER TABLE [ dbo ] . [ CategoryLog ] WITH CHECK ADD CONSTRAINT [ FK_CategoryLog_Category ] FOREIGN KEY ( [ CategoryID ] )

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

GO

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

ALTER TABLE [ dbo ] . [ CategoryLog ] WITH CHECK ADD CONSTRAINT [ FK_CategoryLog_Log ] FOREIGN KEY ( [ 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 @bErrors as bit



BEGIN TRANSACTION

SET @bErrors = 0



CREATE NONCLUSTERED INDEX [ ixCategoryLog ] ON [ dbo ] . [ CategoryLog ] ( [ LogID ] ASC , [ CategoryID ] ASC )

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



IF ( @bErrors = 0 )

COMMIT TRANSACTION

ELSE

ROLLBACK TRANSACTION
 
 

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文件,内容如图所示:

 

作者:黄聪
出处:http://www.cnblogs.com/huangcong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

请输

 

转载于:https://www.cnblogs.com/xiaofengfeng/p/3148542.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值