也用 Log4Net 之将日志记录到数据库的后台实现 (二)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了也用 Log4Net 之将日志记录到数据库的后台实现 (二),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3907字,纯文字阅读大概需要6分钟。
内容图文
![也用 Log4Net 之将日志记录到数据库的后台实现 (二)](/upload/InfoBanner/zyjiaocheng/463/1e5f8fcd22f1490880d16f05458d1346.jpg)
public class CustomLayout : log4net.Layout.PatternLayout { public CustomLayout() { this.AddConverter("UserID", typeof(UserIDPatternConverter)); } }
typeof(UserIDPatternConverter)语句中的UserIDPatternConverter实现了格式化的输出信息。
internal sealed class UserIDPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { LogMessage logMessage = loggingEvent.MessageObject as LogMessage; if (logMessage != null) writer.Write(logMessage.UserID); } }
(3)、对Log4Net的简单封装
public class LogHelper { public LogHelper() { } public static string LoggerName = string.Empty; private static LogMessage message = null; private static ILog _log; public static ILog log { get { string path = @"C:\Log4Net.config"; log4net.Config.XmlConfigurator.Configure(new FileInfo(path)); if (_log == null) { //从配置文件中读取Logger对象 //WebLogger 里面的配置信息是用来将日志录入到数据库的 //做为扩展 做判断来确定日志的记录形式,数据库也好,txt文档也好,控制台程序也好。 _log = log4net.LogManager.GetLogger(LoggerName); //log4net.LogManager.GetLogger("WebLogger"); } else { if (_log.Logger.Name != LoggerName) { _log = log4net.LogManager.GetLogger(LoggerName); } } return _log; } } /// <summary> /// 调试 /// </summary> public static void debug() { if (log.IsDebugEnabled) { log.Debug(message); } } /// <summary> /// 错误 /// </summary> public static void error() { if (log.IsErrorEnabled) { log.Error(message); } } /// <summary> /// 严重错误 /// </summary> public static void fatal() { if (log.IsFatalEnabled) { log.Fatal(message); } } /// <summary> /// 记录一般日志 /// </summary> public static void info( ) { if (log.IsInfoEnabled) { //log.Info("Jerry"); log.Info(message); } } /// <summary> /// 记录警告 /// </summary> public static void warn() { if (log.IsWarnEnabled) { log.Warn(message); } } /// <summary> /// 需要写日志的地方调用此方法 /// </summary> /// <param name="level">自定义级别</param> public static void SaveMessage(LogMessage logMessage,int level) { message = logMessage; switch (level) { case 1: info(); break; case 2: warn(); break; case 3: error(); break; case 4: fatal(); break; default: break; } } }
Log4Net根据不同的日志级别提供了不同的记录方法,对了,这里所说的日志级别就是对应的 Level 字段,我们来看一下 Log4Net的日志级别:
这是我从别的网站上找到的图,用来说明一下级别。好了,到此为此,我们就已经把 Log4Net 底层这好了,注意,你可以把上页的这些类都统一写到一个类库中。这样做的好处是,当其它项目要用到日志记录功能的时候,直接引用你类库的 dll 就可以了,是不是很方便。同时这样做也实现了对Log4Net的简单封装,让其它项目组的人更易使用。
重点强调一下,记得在这个类库中引用Log4Net.dll。毕竟我们是要用Log4Net来实现日志记录的,别写了半天都没引用,那就要出问题了。
(4)、好了,让我们在Web展示层中调用他吧! Default.aspx
protected void Page_Load(object sender, EventArgs e) { LogHelper.LoggerName = "WebLogger"; LogMessage logMessage = new LogMessage(); logMessage.UserID = 123456; LogHelper.SaveMessage(logMessage,1); }
因为我们在配置文件中设定了缓存数,<bufferSize value="10"/> 所以你刷新十下,这时候数据就进入到数据库了。不过聪明的做法是,将bufferSize 的value值改为1
(5)、数据库中的信息
(6)、对不起,刚才自己看的时候发现没有建表的Sql语句,现在补上。
USE [LogSys] GO /****** Object: Table [dbo].[Log] Script Date: 08/29/2012 14:56:11 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Log]( [Id] [int] IDENTITY(1,1) NOT NULL, [LevelName] [varchar](50) NULL, [UserID] [int] NULL, [Message] [varchar](4000) NULL, [Exception] [varchar](2000) NULL, [RecordTime] [varchar](50) NULL, CONSTRAINT [PK_Log_1] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
好了,就写到这里,我是百灵,祝大家天天好心情,身体健康。
也用 Log4Net 之将日志记录到数据库的后台实现 (二)
标签:
本文系统来源:http://www.cnblogs.com/Alex80/p/5420628.html
内容总结
以上是互联网集市为您收集整理的也用 Log4Net 之将日志记录到数据库的后台实现 (二)全部内容,希望文章能够帮你解决也用 Log4Net 之将日志记录到数据库的后台实现 (二)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。