Log4Net的应用教程之保存日志到数据库中
2024-10-19 06:25:17
关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也很有必要的,当然设置系统的时候完全可以自己来开发一个日志功能,不外乎就是写日志到文件或者数据库中等等,如果写日志到数据库中,那么就需要使用ADO了,如果是三层架构的,那么这个日志添加就不能再任何地方都可以随便添加了,但是Log4net可以做到独立的链接数据库,并且在系统的任何地方都能够使用。
01 我们先添加一个简单的asp.net web项目
我们再添加一个common的类库,这个类库是一些公共的工具类
在添加一个Business的类库,这个类库主要是业务逻辑层的,我这里主要是为了测试在系统任何地方都能调用数据库,所以才创建这些类库
创建后的项目如下:
02 引入log4net.dll的引用,可以在下方的源码中找到,我们在common中引入这个dll
03 我们创建一个数据库,这里面你可以使用你已经创建好的数据库,我这里创建一个名Log4NetDB的数据库
添加,一张数据表Log,sql代码如下
if exists (select 1
from sysobjects
where id = object_id('Log')
and type = 'U')
drop table Log
go /*==============================================================*/
/* Table: Log */
/*==============================================================*/
create table Log (
Id bigint identity,
AddTime datetime not null,
Thread nvarchar(100) not null,
Level nvarchar(200) not null,
Logger nvarchar(500) not null,
Message nvarchar(3000) not null,
Exception nvarchar(4000) null,
constraint PK_LOG primary key (Id)
)
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'Log4net日志表',
'user', @CurrentUser, 'table', 'Log'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'日志主键',
'user', @CurrentUser, 'table', 'Log', 'column', 'Id'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'添加时间',
'user', @CurrentUser, 'table', 'Log', 'column', 'AddTime'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'所在线程',
'user', @CurrentUser, 'table', 'Log', 'column', 'Thread'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'级别',
'user', @CurrentUser, 'table', 'Log', 'column', 'Level'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'拥有者',
'user', @CurrentUser, 'table', 'Log', 'column', 'Logger'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'日志信息',
'user', @CurrentUser, 'table', 'Log', 'column', 'Message'
go declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'异常信息',
'user', @CurrentUser, 'table', 'Log', 'column', 'Exception'
go
04 在log4netdemo主项目根目录添加一个Log4net.config的配置文件
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<!--数据库连接字符串-->
<connectionString value="DATABASE=Log4NetDB;SERVER=.;UID=sa;PWD=pwdpwd;Connect Timeout=15;" />
<commandText value="INSERT INTO Log ([AddTime],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="500" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="3000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<level value="FINE"/>
<appender-ref ref="ADONetAppender" />
</root>
<logger name="iNotes">
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<level value="FINE"/>
<appender-ref ref="ADONetAppender"/>
</logger>
<logger name="StellaLogger">
<level value="ALL"/>
<appender-ref ref="AdoNetAppender" />
</logger>
</log4net>
</configuration>
05 在主项目中的AssemblyInfo.cs 添加
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
06 使用的时候,需要先实例化日志对象
比如在page里面
private static log4net.ILog logHelper = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected void Page_Load(object sender, EventArgs e)
{
//项目中调用使用日志
logHelper.Info("hehe");
}
在common里面
private static log4net.ILog logHelper = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static void ComHelperDo()
{
int i = ;
try
{
int b = / i;
}
catch (Exception ex)
{
logHelper.Error("发现异常", ex);
}
}
在business里
private static log4net.ILog logHelper = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void BusHelperDo()
{
logHelper.Error("错误信息");
}
最后数据库里就添加成功了
需要用到日志的项目就需要引入log4net的dll
用起来也挺方便的
感谢你的阅读,希望对你有帮助,欢迎关注作者的个人主页 www.bamn.cn 希望博客园允许打一点点广告....
最新文章
- Servlet3.0的动态
- Java笔记:有啥记啥
- PHP的学习--解析URL
- Error: Cannot find a valid baseurl for repo: base
- 通过imeMode禁用键盘只能输入数字
- apache 2.4 针对某个文件限速
- The 7th Zhejiang Provincial Collegiate Programming Contest->;Problem B:B - Somali Pirates
- Topcoder SRM 637 (Div.2)
- nginx之如何获取真实客户端ip
- Oracle 字符集问题
- FORM表单不刷新提交POST数据
- DelphiXE8怎么使用调试模式(朱建强)
- 修改linux默认ssh 端口
- Training little cats poj3735
- flask基础三
- 在socket的server端处理client端发来的数据
- springmvc 项目完整示例09 maven项目创建
- 通过Tesseract实现简单的OCR
- SAP 供应商/客户的冻结及其删除操作
- devexpress WinForms MVVM