关于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 希望博客园允许打一点点广告....
 

最新文章

  1. Servlet3.0的动态
  2. Java笔记:有啥记啥
  3. PHP的学习--解析URL
  4. Error: Cannot find a valid baseurl for repo: base
  5. 通过imeMode禁用键盘只能输入数字
  6. apache 2.4 针对某个文件限速
  7. The 7th Zhejiang Provincial Collegiate Programming Contest-&gt;Problem B:B - Somali Pirates
  8. Topcoder SRM 637 (Div.2)
  9. nginx之如何获取真实客户端ip
  10. Oracle 字符集问题
  11. FORM表单不刷新提交POST数据
  12. DelphiXE8怎么使用调试模式(朱建强)
  13. 修改linux默认ssh 端口
  14. Training little cats poj3735
  15. flask基础三
  16. 在socket的server端处理client端发来的数据
  17. springmvc 项目完整示例09 maven项目创建
  18. 通过Tesseract实现简单的OCR
  19. SAP 供应商/客户的冻结及其删除操作
  20. devexpress WinForms MVVM

热门文章

  1. 菜鸟学步之 爆破AspriseOCR 4.0
  2. Logistic Regression总结
  3. vRealize Automation部署虚机如果出错怎么办?
  4. 什么是L2 frame?
  5. 为 hexo NexT 添加 Gitment 评论插件
  6. Android -- TypedArray
  7. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
  8. Mahout源码目录说明
  9. Java中动态代理方式:
  10. jquery_opacity_css透明