C# Log4net用法
2017-01-07 21:16
3000 人阅读
介绍
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。
本文主要是介绍如何在Visual Studio2013中使用log4net快速创建系统日志。
下载log4net log4net.dll
创建Asp.net Mvc项目
添加 log4net.config文件(用以配置log4net) 将下载好的log4net.dll添加引用到项目内
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\Info\" /> <encoding value="utf-8" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="10MB" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value="yyyyMM\\yyyyMMdd\\yyyyMMdd_HH'\.\t\x\t'"/> <param name="StaticLogFileName" value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="=================Start===================== %n时间:%d%n类型:%c%n线程:[%t] %n级别:%p %n输出:%m%n%n" /> </layout> </appender> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\Error\" /> <encoding value="utf-8" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="10MB" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value="yyyyMM\\yyyyMMdd\\yyyyMMdd_HH'\.\t\x\t'"/> <param name="StaticLogFileName" value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="=================Start===================== %n时间:%d%n类型:%c%n线程:[%t] %n级别:%p %n输出:%m%n%n" /> </layout> </appender> <logger name="loginfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <logger name="logerror"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> </log4net> </configuration>
添加LogHelper.cs类文件(和log4net.config放在同一个文件夹内容)
public static class LogHelper
{
const string LOG4NET_CONFIG_FILE_NAME = "log4net.config";
private static ILog log_info;
/// <summary>
/// 调试信息日志
/// </summary>
private static ILog LOG_INFO
{
get
{
if (log_info == null)
{
Init();
}
return log_info;
}
}
private static ILog log_error;
/// <summary>
/// 异常信息日志
/// </summary>
private static ILog LOG_ERROR
{
get
{
if (log_error == null)
{
Init();
}
return log_error;
}
}
/// <summary>
///
/// </summary>
private static void Init()
{
string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LOG4NET_CONFIG_FILE_NAME);
if (!File.Exists(fileName))
WriteLog4NetConfig(fileName);
FileInfo fi = new FileInfo(fileName);
log4net.Config.XmlConfigurator.Configure(fi);
log_error = LogManager.GetLogger("logerror");
log_info = LogManager.GetLogger("loginfo");
}
/// <summary>
/// 写出log4net配置信息文件
/// </summary>
/// <param name="fileName">输出文件名称</param>
private static void WriteLog4NetConfig(string fileName)
{
FileStream fs = null;
Stream xmlStream = null;
byte[] bytsXml;
int lenByts;
try
{
Assembly asmCurrent = Assembly.GetExecutingAssembly();
xmlStream = asmCurrent.GetManifestResourceStream(typeof(LogHelper).Namespace
+ "." + LOG4NET_CONFIG_FILE_NAME);
bytsXml = new byte[xmlStream.Length];
using (fs = File.Create(fileName))
{
while ((lenByts = xmlStream.Read(bytsXml, 0, bytsXml.Length)) > 0)
{
//向文件中写信息
fs.Write(bytsXml, 0, lenByts);
fs.Flush();
}
}
}
finally
{
if (fs != null)
fs.Close();
if (xmlStream != null)
xmlStream.Close();
}
}
public static void Error(string message)
{
LOG_ERROR.Error(message);
}
public static void Error(string message, Exception ex)
{
LOG_ERROR.Error(message, ex);
}
public static void Info(string message)
{
LOG_INFO.Info(message);
}
public static void Info(string message, Exception ex)
{
LOG_INFO.Info(message, ex);
}
}在控制器里写入Log测试
LogHelper.Error("系统出错了");LogHelper.Info("记录一些事情");这时候就有日志文件生成了
注意: 如果文件log4net.config和启动项目不再一个启动程序中,该文件需要设置属性 生成操作 - "嵌入的资源"
如果想要邮件提醒功能,log4net也是可以配置的,这时候只需要修改log4net.config文件即可,添加如下配置
<!--邮箱设置-->
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<!-- SMTP 验证方式 -->
<authentication value="Basic" />
<to value="接收方地址@gmail.com" />
<from value="发送方地址@163.com" />
<username value="发送方地址@163.com" />
<password value="发送方地址密码" />
<subject value="站点访问异常" />
<!--邮件服务端-->
<smtpHost value="smtp.163.com"/>
<bufferSize value="512" />
<lossy value="true" />
<!--这里我设置的是Error ,会接收(FATAL和ERROR日志)你可以根据自己的需要设置
Log4net支持多种级别的日志。优先级从高到低依次排列如下:
FATAL > ERROR > WARN > INFO > DEBUG
-->
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="Error"/>
</evaluator>
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %n %-5level %logger [%property{NDC}] %n %message%n" />
</layout>
</appender>添加到上面log4net.config <appender-ref ref="ErrorAppender" /> 下面
<appender-ref ref="SmtpAppender" />
这时候只要系统调用了写错误日志,系统也会同时发送一封邮件
源码下载地址: log4net写日志源码
和博主交个朋友吧