log4net使用手记

logs4net是一个非常好的日志记录工具,可以作为日志记录,也可以作为开发过程中的跟踪与调试的重要手段,在应用程序中使用时需要注意几点:

1)当然是添加log4net.dll的引用,这个可以下载源码自己编译,这样可以自己做些定制功能,但需要一定的相关知识,否则一不小心留下bug会带来无穷后患。所以最简单的方法是直接下载个,但也不能保证是完全安全的,这就看个人需要了  下载

2)配置文件<configuration>节点下添加
内容如下:

复制代码
  <log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<threshold value="DEBUG"/>
<file value="log/logsfile.txt"/>
<staticLogFileName value="false"/>
<MaxSizeRollBackups value="10"/>
<MaximumFileSize value="10240KB"/>
<appendToFile value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<rollingStyle value="Composite"/>
<datePattern value="_yyyyMMdd&quot;.log&quot;"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p - %m%n"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="LogFileAppender"/>
</root>
</log4net>
复制代码

  节点说明:
   <threshold value="DEBUG"/> 此节点是声明日志级别:有以下几种(大写)
   OFF(Highest)、FaTAL(bool IsFatalEnable)、ERROR(bool IsErrorEnable)、WARN(bool IsWarnEnable)、INFO( bool IsInfoEnable)、 DEBUG(IsDebugEnable)、 ALL(Lowest)
 
   <file value="log/logsfile.txt"/>此节点为日志文件路径,必须确保存在此文件,开始时也应建个空文件,同时保证有读写权限,其它可以不加修改直接引用
 
3)添加程序集声明:在每个(注意是每个引用)项目的程序集文件AssemblyInfo.cs中添加声明

[assembly: log4net.Config.DOMConfigurator(ConfigFile = "web.config", Watch = true)]

 

4)这是最重要的一个:实现log4net的接口方法,为可重用,单独编写为logsPorject项目,在解决方案中添加项目LogsProject(同样需要操作第三步),添加类LogHelper.cs,并编写代码: 

复制代码
public class LogHelper
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

private static LogHelper _instance;


/// <summary>
/// Singleton to get LogHelper.
/// </summary>
public static LogHelper Instance
{
get
{
if (_instance == null)
_instance = new LogHelper();

return _instance;
}
}

private LogHelper()
{
}

/// <summary>
/// Logs down info message.
/// </summary>
/// <param name="message">Message.</param>
public void Info(object message)
{
if (log.IsInfoEnabled)
log.Info(message);
}

/// <summary>
/// Logs down warn message
/// </summary>
/// <param name="message">Message.</param>
public void Warn(object message)
{
if (log.IsWarnEnabled)
log.Warn(message);
}

/// <summary>
/// Logs down debug message
/// </summary>
/// <param name="message">Message.</param>
public void Debug(object message)
{
if (log.IsDebugEnabled)
log.Debug(message);
}

/// <summary>
/// Logs down Error message.
/// </summary>
/// <param name="message">Message.</param>
/// <param name="ex">Exception.</param>
public void Error(object message, System.Exception ex)
{
if (log.IsErrorEnabled)
log.Error(message, ex);
}
}
}
复制代码

 编译成功后就己做好写日志的准备工作,接下来就可以在需要的地方进行万能的日志记录与跟踪程序

5)在源码中添加日志输出:

    LogHelper.Instance.Info(string.Format("时间:{0},取读数据完成!\n", DateTime.Now));

LogHelper.Instance.Info(string.Format("时间:{0},取读数据出错!\n-----------\n原因:{1}\n-----------\n", DateTime.Now, ex.Message));

或是LogHelper.Instance.Error(string.Format("时间:{0},取读数据出错!\n", DateTime.Now),ex);

 等各种级别日志

posted @   二水四夕  阅读(515)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示