log4net mysql 博客园_log4net使用(保存日志分别 到文本文件,smtp发送邮件,mssql数据库,mysql数据库)...

我们自带的MemcachedCacheProviders自带的log4net是 1.2.10版本,所以就拿这个版本说吧

下面是一个演示的效果,以及日志分别表达的意思

ce259a18dce453fcb108f96ca58a6b6f.png

表示时间 2011-09-20 14:17:03,312  (312代表的是毫秒)

[4] 表示线程编号,暂时不需要管

DeBUG 表示我们用的是debug模式

Log4NetTest.Test1 表示我们是在哪个类里面

-我的第一条日志  表示详细信息

下面开始配置:(我们配置一个能自动生成月份+天数的日志文件,并且,如果报错,则发送邮件)

488ff7dd47e9c0725e428c2913b96427.png

3ad39fc2ba601f8a80ded36868b56b32.png

log4net的配置,跟你的程序是 B/S 还是C/S是没有区别的

要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。现在的最新版本是1.2.10.

在程序中我们只需要log4net.dll文件就行了,添加对log4net.dll的引用,就可以在程序中使用了。

1:在web.config里面的 configSections里面加入 log4net,而且必须是 configSections的第一个元素

2:

如果是CS程序,在根目录的Program.cs中的Main方法中添加:

log4net.Config.XmlConfigurator.Configure();

如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:

private static readonlyILogLogger = LogManager.GetLogger(typeof(Global));

protected voidApplication_Start(objectsender, EventArgse)

{

{

log4net.Config.XmlConfigurator.Configure();

}

}

protected voidApplication_Error(objectsender, EventArgse)

{

Logger.Error("程序发生未捕获的异常\t\t\t"+ HttpContext.Current.Error.Message, HttpContext.Current.Error);

}

无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句:

[assembly: log4net.Config .XmlConfigurator()]

3:

前台代码的调用

LogManager.GetLogger(typeof(_Default)).Error(ex.Message);

//或者是

//ILog logger = LogManager.GetLogger(typeof (_Default));

//logger.Error(ex.Message);

b7e17d4f40dbcccb8fd5569b98105214.png

建议写成一个通用类

public classLogHelper{

public static voidWriteLog(stringstrTxt, Exceptionex, Typetype)

{

ILoglog = log4net.LogManager.GetLogger(type);

log.Error(strTxt, ex);

}

}

调用如下

LogHelper.WriteLog("运行错误", ex, this.GetType());

4:继续在web.config节点里面的 configuration 里面  (一般是在 结束的下面一行)

5f1999d876bce4ee9fb48c423299bb44.png

log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

log4net定义了日志内容的不同级别,从高到低依次是FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。

可以在配置文件中设置日志级别。上面的例子中看到我们在root中定义了,表示凡是级别等于高于Error的都可以输出至日志中。

但是如果你的附加器的配置更低一些,则附加器里面的也会被保存

在上面的配置中,每个日志文件最大1024KB,最大日志文件个数是10生成的日志文件名会是当前的年份月份 加上,  2012-12-13.log   2012-12-13.log.1 ... 2012-12-13.log.10,

如果记录的日志超过10个,会从2012-12-13.log.1开始覆盖。

【写日志的原则】

Ⅰ.在catch后,把异常写入日志.

Ⅱ.在调用第三方控件的开始和结束处.

Ⅲ.在连接数据库的开始结束处.

Ⅳ.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.

Ⅴ.在自己认为很重要的逻辑处写入日志.

如果是想用Mssql数据库呢?如果我们想用mysql数据库呢?

表结构的定义稍微有一点不一样,sqlserver数据库如下(我用的是sql2005)

1:CREATE TABLE[dbo].[LOG]

2: (

3:[LogId] [INT] IDENTITY(1,1) NOT NULL,

4:[LogDate] [DATETIME] NOT NULL,

5:[Thread] [VARCHAR] (255) NOT NULL,

6:[LogLevel] [VARCHAR] (50) NOT NULL,

7:[Logger] [VARCHAR] (255) NOT NULL,

8:[Message] [VARCHAR] (4000) NOT NULL,

9:[Exception] [VARCHAR] (2000) NULL

10:)

然后需要在Append和Root里面增加代码

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

13:

14:

15:

16:

17:

18:

19:

20:

21:

22:

23:

24:

25:

26:

27:

28:

29:

30:

31:

32:

33:

34:

35:

36:

37:

38:

39:

40:

41:

42:

43:

44:

45:

46:

47:

48:

49:

50:

51:

52:

Root里面增加

1:

2:

如果是mysql数据库,

1)首先需要到mysql的官方网站(www.mysql.com)下载驱动,网站上提供了两个驱动,这里我使用的mysql-connector-net连接器,版本越新越好,我这里用的是6.5.4 。复制MySql.Data.dll到项目下;

563101ea4077e6462b7bbfa78a7e5803.png

2)在项目中添加引用,选择MySql.Data.dll,最好是直接放在bin文件夹;

3)在本机的mysql上使用test数据库,使用一下sql创建表:

创建表如下

1: CREATETABLE LOG(

2: LogId INTEGERNOT NULLPRIMARY KEYAUTO_INCREMENT,

3: LogDate DATETIME NOTNULL,

4: Thread VARCHAR(255) DEFAULTNULL,

5: LogLevel VARCHAR(50) DEFAULTNULL,

6: Logger VARCHAR(255) DEFAULTNULL,

7: Message VARCHAR(4000) DEFAULTNULL,

8: Exception VARCHAR(2000) DEFAULTNULL

9:)

10:

然后需要在Append增加代码

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

13:

14:

15:

16:

17:

18:

19:

20:

21:

22:

23:

24:

25:

26:

27:

28:

29:

30:

31:

32:

33:

34:

35:

36:

37:

38:

39:

40:

41:

42:

43:

44:

45:

46:

47:

48:

49:

50:

51:

52:

53:

54:

55:

然后是Root里面添加

1:

2:

如果append里面的配置都是有的时候,数据库插入数据是会延迟的(输入不会丢,但是可能有很多秒都没有数据,然后一下子又全部出来了)。bufferSize表示批处理的日志事件,可以避免每次日志事件都访问数据库;ConnectionType指定了要使用的IDbConnection的完全限定类型名称;connectionString表示连接字符串;CommandText是SQL语句或存储过程;最后一组parameter节点描述了SQL语句或存储过程需要的参数。如果觉得批处理会丢失数据(如果遇到突然停电之类,而且你的bufferSize又设置的特别大的话),可以将bufferSize设置为1,那么每次报错数据库都会有新的数据(缺点显而易见,频繁的访问数据库··)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值