具体步骤如下:

  1. 从网上下载log4net对应.net版本的dll
  2. 在C#项目中引用该dll
  3. 创建log4net对应的配置文件
  4. 在程序中使用

log4net的配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="Log4Name" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="F:\Log2015\StorageSystem\Log4Name\log.log" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留个数-->
<param name="MaxSizeRollBackups" value="200" />
<!--单个日志文件大小-->
<param name="MaximumFileSize" value="5MB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<DatePattern value="yyyy-MM-dd HH'时.log'"></DatePattern>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Size" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="记录时间:%date%n线程ID:[%thread] %n日志级别:%-5level%n记录位置:%location%n异常:%exception%n消息:%message%newline%n------------------------------------------%n" />
</layout>
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="LoggerToMatch" value="Log4Name" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<level value="DEBUG" />
<appender-ref ref="Log4Name" />
</root>
</log4net>

创建LogHelper如下:

public class LogHelper
{
private static ILog log=null;
public static ILog Log
{
get
{
if (log == null)
{
//log4.config表示log4的配置文件
string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "log4.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(fileName));//修改日志配置无需重启程序,自动加载
//Log4Name表示配置文件中的日志名称
log = LogManager.GetLogger("Log4Name");
}
return log;
}
}
}

使用方式如下:

LogHelper.Log.Error("出错了哇");

创建的日志如图:

配置文件里面内容比较多,可以查阅相关文档进行详细配置!


另外,有时候我们需要把不同级别的文件放到不同的目录,首先配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="AccesssService_Err" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Errors\log.log" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留个数-->
<param name="MaxSizeRollBackups" value="200" />
<!--单个日志文件大小-->
<param name="MaximumFileSize" value="5MB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<DatePattern value="yyyy-MM-dd HH'时.log'"></DatePattern>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Size" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="记录时间:%date%n线程ID:[%thread] %n日志级别:%-5level%n记录位置:%location%n消息描述:%property{Message}%n异常:%exception%n消息:%message%newline%n------------------------------------------%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="AccesssService_info" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="MyLogs\log.log" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留个数-->
<param name="MaxSizeRollBackups" value="200" />
<!--单个日志文件大小-->
<param name="MaximumFileSize" value="5MB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<DatePattern value="yyyy-MM-dd HH'时.log'"></DatePattern>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Size" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="记录时间:%date%n线程ID:[%thread] %n日志级别:%-5level%n记录位置:%location%n消息描述:%property{Message}%n异常:%exception%n消息:%message%newline%n------------------------------------------%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<logger name="gdLog4net" additivity="false">
<level value="DEBUG" />
<appender-ref ref="AccesssService_Err" />
<appender-ref ref="AccesssService_info" />
</logger>
</log4net>

LogHelper代码如下:

public class LogHelper
{
private static ILog log = null;
public static ILog Log
{
get
{
if (log == null)
{
//log4.config表示log4的配置文件
string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config", "log4.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(fileName));
log = LogManager.GetLogger("gdLog4net");
}
return log;
}
}
}

1.主要是log实例化有变化。通过GetLogger方法获取xml配种中gdLog4net的Logger

2.xml中定义了logger,关于logger和root,可以参考文章:https://www.cnblogs.com/zhangchenliang/p/4546352.html 的后面部分内容,大概意思就是说root其实就是一个顶级的logger,所有其他logger都默认继承这个root。如果需要让logger阻断和root的联系,可以将logger的additivity设置为false。

C#中使用Log4记录日志的更多相关文章

  1. Java项目中使用log记录日志的一些总结

    本文介绍了一下自己在Java项目中使用log的一些总结,从日志的作用.日志的选用.日志级别介绍.日志记录的一些最佳实践几个方面阐述. 日志的作用 主要作用包括: 1.出问题后定位当时问题 2.显示程序 ...

  2. 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。

    一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...

  3. spring boot 学习(六)spring boot 各版本中使用 log4j2 记录日志

    spring boot 各版本中使用 log4j2 记录日志 前言 Spring Boot中默认日志工具是 logback,只不过我不太喜欢 logback.为了更好支持 spring boot 框架 ...

  4. .NET中使用NLog记录日志

    以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂.下面小编就和大伙分享一下NLog的使用方式. 引用NLog.Config 在使用NLog之前,我们要首先添加对NLog.Co ...

  5. JAVA中使用LOG4J记录日志(转)

    在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...

  6. JAVA中使用LOG4J记录日志

    在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...

  7. Java使用Log4记录日志

    我们在系统使用中,为了方便查找问题,因此需要记录操作的日志,而目前比较成熟稳定的程序日志记录方式就是Log4,本人也是菜鸟,然后再学习研究中就记录一下使用方式,以方便今后查阅,同时本文章参考了博客园: ...

  8. C#中使用Log4Net记录日志

    https://www.cnblogs.com/W--Jing/p/8125652.html 实例参考 https://www.cnblogs.com/soundcode/p/4866078.html ...

  9. Asp.Net Core中使用NLog记录日志

    2019/10/28, Asp.Net Core 3.0, NLog 4.6.7, NLog.Web.AspNetCore 4.9.0 摘要:NLog在asp.net网站中的使用,NLog日志写入数据 ...

随机推荐

  1. csv到mysql数据库如何分割

          这两天修改一个取XML文件存入到CSV,然后再存入到mysql的bug,bug是XML文件里面有个name字段,存入CSV文件里面的时候我们用“|”,来分割字段.但是name里面有时候也有 ...

  2. cocoapods 配置

    二.CocoaPods 安装 CocoaPods可以方便地通过Mac自带的RubyGems安装. 打开Terminal(Mac电脑自带的终端): (1).设置ruby的软件源 这是因为ruby的软件源 ...

  3. Zookeeper使用实例——分布式共享锁

    前一讲中我们知道,Zookeeper通过维护一个分布式目录数据结构,实现分布式协调服务.本文主要介绍利用Zookeeper有序目录的创建和删除,实现分布式共享锁. 举个例子,性能管理系统中,告警规则只 ...

  4. MyEclipse 相关设置

    1. MyElipse复制项目后,修改项目的发布名称的方式.右击你的项目,选择 properties -- > MyElipse -- > web,然后修改名称即可. 2. IDE查看源代 ...

  5. 开启你的kali linux DIY之旅

    更新源 首先 是kali2016.2更新源的问题,网上找了好久,都不是很满意.后来把kali 2016.2安装到实体机中才发现,里面自带了更新源.下面我把这个官方自带更新源分享出来(速度蛮快的) de ...

  6. 从JavaWeb的角度认识Nginx

    作为一名JavaWeb方向程序员,更多的是写服务器后台代码,但是俗话说,不想当架构师的程序员不是好程序员,我们要对并发.负载等词汇进行深入探索. 一.重新认识Tomcat Tomcat属于轻量级的We ...

  7. bzoj1704 / P2882 [USACO07MAR]面对正确的方式Face The Right Way

    P2882 [USACO07MAR]面对正确的方式Face The Right Way $n<=5000$?枚举翻转长度,顺序模拟就ok了 对于每次翻转,我们可以利用差分的思想,再搞搞前缀和. ...

  8. c++ 11和java 8都支持lambda表达式

    c++ 11居然都支持lambda表达式了,看了这确实是有必要了. 具体可见http://www.cprogramming.com/c++11/c++11-lambda-closures.html

  9. 《网络攻防》实验八:Web基础

    适逢多事之际,下周二的课设答辩.全国信安竞赛初赛作品筹备.协会密码沙龙比肩接踵,这些"案牍"不仅劳形还影响了我的复习计划."甘蔗没有两头甜的"还是要有所舍得了, ...

  10. 如何高效判断java数组是否包含某个值

    在java中,我们如何判断一个未排序数组中是否包含一个特定的值?这在java中是一个频繁非常实用的操作.那么什么样的方法才是最高效的方式?当然 ,这个问题在Stack Overflow也是得票率非常高 ...