log4Net简介

使用log4Net可以将系统听日志保存到DB、日志文件、邮箱中等,本文介绍这三种三方式。
生产关系log4Net的配置文件结构中下;

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="HR.Class.Log" type="HR.Class.Log.Config.HR.Class.LogConfigurationSectionHandler,HR.Class.Log" />
</configSections>
<HR.Class.Log>


<!--HRAdoNet:将日志写入数据库表-->
<appender name="HRAdoNet" type="HR.Class.Log.Appender.ADONetAppender">
<param name="BufferSize" value="50" /><!-- 当日志达到50条时进行一次写库操作-->
<!--写入数据库的分段大小-->
<param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<param name="ConnectionString" value="Server=localhost;Database=AuditSystem;User ID=sa;Password=system;Trusted_Connection=False" />
<param name="CommandType" value="StoredProcedure" />
<param name="CommandText" value="sp_HR_Log" />
<!--spLog_Create:存储过程名称-->
<param name="Parameter">
<param name="ParameterName" value="@log_date" />
<param name="DbType" value="DateTime" />
<param name="Layout" type="HR.Class.Log.Layout.RawTimeStampLayout" />
</param>
<param name="Parameter">
<param name="ParameterName" value="@thread" />
<param name="DbType" value="String" />
<param name="Size" value="255" />
<param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
<param name="ConversionPattern" value="%t" />
</param>
</param>
<param name="Parameter">
<param name="ParameterName" value="@log_level" />
<param name="DbType" value="String" />
<param name="Size" value="50" />
<param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
<param name="ConversionPattern" value="%p" />
</param>
</param>
<param name="Parameter">
<param name="ParameterName" value="@logger" />
<param name="DbType" value="String" />
<param name="Size" value="255" />
<param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
<param name="ConversionPattern" value="%c" />
</param>
</param>
<param name="Parameter">
<param name="ParameterName" value="@message" />
<param name="DbType" value="String" />
<param name="Size" value="4000" />
<param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
<param name="ConversionPattern" value="%m" />
</param>
</param>
<param name="Parameter">
<param name="ParameterName" value="@exception" />
<param name="DbType" value="String" />
<param name="Size" value="2000" />
<param name="Layout" type="HR.Class.Log.Layout.ExceptionLayout" />
</param>
</appender>


<!--HRSMTPAppender:将日志发送邮件-->
<appender name="HRSMTPAppender" type="HR.Class.Log.Appender.SMTPAppender">
<authentication value="Basic" />
<To value="xzbwww@126.com"/>
<From value="it_fighter@163.com" />
<Subject value="财务数据审计分析系统:日志" />
<SmtpHost value="smtp.163.com" />
<Username value="it_fighter@163.com" />
<Password value="sgj13002945392" />
<param name="BufferSize" value="10" />
<param name="Lossy" value="true" />
<evaluator type="HR.Class.Log.Core.LevelEvaluator">
<param name="Threshold" value="Fatal" />
</evaluator>

<layout type="HR.Class.Log.Layout.PatternLayout">
<param name="ConversionPattern" value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>

<!--LocalFileAppender:将日志写入本地文件-->
<appender name="LocalFileAppender" type="HR.Class.Log.Appender.RollingFileAppender">
<param name="File" value="System\SystemLog.Log" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="5MB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="HR.Class.Log.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>


<root>
<level value="ALL" />
<appender-ref ref="HRAdoNet" />
<appender-ref ref="HRSMTPAppender" />
<appender-ref ref="LocalFileAppender" />
</root>

</HR.Class.Log>
</configuration>



Log4Net把日志保存到数据库和发Email的例子

通过Log4Net把日志保存到数据库和发送Email通知的例子,本例子运行在SQL SERVER上
1. 建立数据库的表和存储过程

CREATE TABLE [dbo].[LogTest] (

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

[LogDate] [datetime] NOT NULL ,

[LogThread] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,

[LogLevel] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

[Logger] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,

[LogMessage] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NULL ,

[LogException] [varchar] (2000) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

CREATE PROCEDURE dbo.spLog_Create



@log_date datetime,

@thread varchar(255),

@log_level varchar(50),

@logger varchar(255),

@message varchar(4000),

@exception varchar(2000)



as



INSERT INTO LogTest

(

LogDate,

LogThread,

LogLevel,

Logger,

LogMessage,

LogException

)

VALUES

(

@log_date,

@thread,

@log_level,

@logger,

@message,

@exception

)

GO

2. Log4Net的配置
在Web.Config或App.Config文件的内容

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

<section name="Xipu.Com.Log" type="Xipu.Com.Log.Config.Xipu.Com.LogConfigurationSectionHandler,Xipu.Com.Log" />

</configSections>

<Xipu.Com.Log>

<appender name="MyADO" type="Xipu.Com.Log.Appender.ADONetAppender">

<param name="BufferSize" value="100" />

<param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

<param name="ConnectionString" value="Server=localhost;Database=Test;User ID=sa;Password=sa;Trusted_Connection=False" />

<param name="CommandType" value="StoredProcedure" />

<param name="CommandText" value="spLog_Create" />

<param name="Parameter">

<param name="ParameterName" value="@log_date" />

<param name="DbType" value="DateTime" />

<param name="Layout" type="Xipu.Com.Log.Layout.RawTimeStampLayout" />

</param>

<param name="Parameter">

<param name="ParameterName" value="@thread" />

<param name="DbType" value="String" />

<param name="Size" value="255" />

<param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

<param name="ConversionPattern" value="%t" />

</param>

</param>

<param name="Parameter">

<param name="ParameterName" value="@log_level" />

<param name="DbType" value="String" />

<param name="Size" value="50" />

<param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

<param name="ConversionPattern" value="%p" />

</param>

</param>

<param name="Parameter">

<param name="ParameterName" value="@logger" />

<param name="DbType" value="String" />

<param name="Size" value="255" />

<param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

<param name="ConversionPattern" value="%c" />

</param>

</param>

<param name="Parameter">

<param name="ParameterName" value="@message" />

<param name="DbType" value="String" />

<param name="Size" value="4000" />

<param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

<param name="ConversionPattern" value="%m" />

</param>

</param>

<param name="Parameter">

<param name="ParameterName" value="@exception" />

<param name="DbType" value="String" />

<param name="Size" value="2000" />

<param name="Layout" type="Xipu.Com.Log.Layout.ExceptionLayout" />

</param>

</appender>

<appender name="SMTPAppender" type="Xipu.Com.Log.Appender.SMTPAppender">

<BufferSize value="1" />

<param name="To" value="dengzebo@163.com"/>

<param name="From" value="dengzebo@cdce.cn" />

<Subject value="Xipu.Com.Log Error Message" />

<SMTPHost value="mail.cdce.cn" />

<Username value="dengzebo" />

<Password value="ILOVEYOU" />

<param name="LocationInfo" value="false" />

<param name="BufferSize" value="5" />

<!--说明: "BufferSize"设置日志缓存,存储到512后一起一个Email发送,如不设此项,每记一个日志,发一条Email-->



<!-- <param name="Lossy" value="true" />

<evaluator type="Xipu.Com.Log.spi.LevelEvaluator">

<param name="Threshold" value="WARN" />

</evaluator>

-->



<layout type="Xipu.Com.Log.Layout.PatternLayout">

<param name="ConversionPattern" value="%n%d [%t] %-5p %c [%x] - %m%n%n%n" />

</layout>

</appender>

<root>

<level value="ALL" />

<appender-ref ref="MyADO" />

<appender-ref ref="SMTPAppender" />

</root>





</Xipu.Com.Log>

</configuration>

3. 在AssemblyInfo.cs文件中加入以下行:

[assembly: Xipu.Com.Log.Config.XmlConfigurator(ConfigFile = "App.config", ConfigFileExtension = "config", Watch = true)]

4. 编写测试代码:

Xipu.Com.Log.ILog log = Xipu.Com.Log.LogManager.GetLogger("MyLoggerTest");

try

{

log.Info("这是hansong的LOG INFO测试!");

log.Debug("这是hansong的LOG DEBUG测试!");

throw new Exception("这是hansong的LOG ERROR测试!");

}

catch (Exception er)

{

log.Error("错误日志", er);

}
5.其它文档资料


上述配置好后,即可封闭成组件。首先要在将要封闭成的组件中引用log4Net.dll文件
组件代码如下:

[color=red]注意:要在这个封闭的项目下的AssemblyInfo.cs文件中加下:[/color]
 
[assembly:HR.Class.Log.Config.XmlConfigurator(ConfigFile="App.config",ConfigFileExtension="config",Watch=true)]





namespace HR.Class.Log.WriteLog
{
/// <summary>
/// 当出现错误时,必须指定日志的类型,一般应用于系统出现错误后,
/// 如在Catch中用它,无论错误是普通的还是致命的
/// </summary>
public enum ErrorLogType
{
/// <summary>
/// 致命的错误
/// </summary>
FatalLog,

/// <summary>
/// 错误的错误
/// </summary>
ErrorLog
}


/// <summary>
/// 当需要提示时,必须指定日志的类型,一般应用于当系统提示用户怎样操作,
/// 哪怕是警告类操作,都应该用此类型
/// </summary>
public enum NoramlLogType
{
/// <summary>
/// 普通操作日志
/// </summary>
InfoLog,

/// <summary>
/// 警告日志
/// </summary>
WarnLog,

/// <summary>
/// 调试日志
/// </summary>
DebugLog
}

public static class WriteLog
{

public static void Write(string ModuleClassName, string FunctionName, string ErrorString, Exception Ex, HR.Class.Log.WriteLog.ErrorLogType LogType)
{
try
{
HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[" + ModuleClassName + "].[" + FunctionName + "]");
if (LogType == HR.Class.Log.WriteLog.ErrorLogType.ErrorLog)
{
log.Error(ErrorString, Ex);
}
else if (LogType == HR.Class.Log.WriteLog.ErrorLogType.FatalLog)
{
log.Fatal(ErrorString, Ex);
}
}
catch(Exception ET)
{
HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[HR.Class.Log.WriteLog].[Write]:ErrorLogType");
log.Error("写入日志时出错" + "[" + ModuleClassName + "].[" + FunctionName + "]", ET);
}
}

public static void Write(string ModuleClassName, string FunctionName, string Infostring, HR.Class.Log.WriteLog.NoramlLogType LogType)
{
try
{
HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[" + ModuleClassName + "].[" + FunctionName + "]");
if (LogType == HR.Class.Log.WriteLog.NoramlLogType.InfoLog)
{
log.Info(Infostring);
}
else if (LogType == HR.Class.Log.WriteLog.NoramlLogType.WarnLog)
{
log.Warn(Infostring);
}
else if (LogType == HR.Class.Log.WriteLog.NoramlLogType.DebugLog)
{
log.Debug(Infostring);
}
}
catch (Exception ex)
{
HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[HR.Class.Log.WriteLog].[Write]:ErrorLogType");
log.Error("写入日志时出错" + "[" + ModuleClassName + "].[" + FunctionName + "]", ex);
}

}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值