C#中使用Log4记录日志

本文详细介绍log4net的日志记录配置与使用方法,包括如何设置日志级别、日志文件滚动策略及如何将不同级别的日志输出到不同的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体步骤如下:

  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消息描述:%property{Message}%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>
  <root>
    <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
    <level value="DEBUG" />
    <appender-ref ref="AccesssService_Err" />
    <appender-ref ref="AccesssService_info" />
  </root>
</log4net>
View Code

 

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 = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
            }
            return log;
        }
    }
}
View Code

 

主要是log实例化有变化。

转载于:https://www.cnblogs.com/duanjt/p/5850250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值