log4net使用方法(Console)

大部分程序人员在开发过程中都会遇到记录日志的问题,之前可能是自己写日志组件或帮助类,但无论是功能或是性能都可能或多或少有瑕疵。
Log4net是一款非常好用、强大的开源日志记录组件,它来自于著名的Apache。起初是log4j专用于Java,后来又提供了log4net用于支持.NET。帮助.NET程序员也能够轻松的处理日志信息。
利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。现在的最新版本是1.2.15。
下面的控制台应用程序实例展示如何用log4net记录日志,首先要引用log4net.dll文件,之后要配置相关的极其重要的配置文件(WinForm对应的是*.exe.config,WebForm对应的是*.config)。

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <!--添加log4net自定义节点-->  
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <appSettings>
  </appSettings>
  <log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--定义文件存放位置-->
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <!--【1】指定存储到某个具体文件中-->
      <!--<file value="D:/log4netfile.txt" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />-->
      <!--【2】指定存储到某个文件夹中,根据时间生成日志文件-->
      <file value="log\\"/>
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd\\yyyyMMdd-HH'.txt'"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <footer value="by 蝈蝈" />
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <!--%n是换行-->
        <conversionPattern value="%n记录时间:%date %n线程ID:[%thread] %n日志级别:%-5level %n出错类:%logger property:[%property{NDC}] - %n错误描述:%message%newline" />
      </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      <!--定义各个参数-->
      <parameter>
        <parameterName value="@logDate" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>
    <!--SqlServer形式-->
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <!--记录n条日志到缓冲区,够n条写入SqlServer-->
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="data source=Guo-pc;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=sasa" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
      <!--控制要记载的日志级别-->
      <level value="ERROR"/>
      <level value="DEBUG"/>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />
      <!--控制台控制显示日志-->
      <appender-ref ref="ConsoleAppender" />
      <!--Windows事件日志-->
      <appender-ref ref="EventLogAppender" />
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
      <appender-ref ref="AdoNetAppender_Access" />
      -->
      <!--SqlServer记录日志-->
      <appender-ref ref="AdoNetAppender"/>
    </root>

  </log4net>
</configuration>

注意:

  • <appender name=”LogFileAppender” type=”log4net.Appender.FileAppender”></appender>只能输出日志到某个具体文件中
  • <appender name=”LogFileAppender” type=”log4net.Appender.RollingFileAppender”></appender>能输出日志到某个具体文件、输出日志到某个文件夹然后根据时间生成日志文件
  • <bufferSize value=”6” />会先把日志爱缓存起来,够数后一起写入数据库

SqlServer数据库Log表生成脚本

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)

Log4netHelper.cs文件

新建Log4netHelper.cs文件

//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息
//如果是WinForm(假定程序为LogDemo.exe,则需要一个LogDemo.exe.config文件)
//如果是WebForm,则从web.config中读取相关信息
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4netConsole
{
    class Log4netHelper
    {
        public static void WriteLogger(Type type,LogLevel logLevel,string msg)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(type);
            switch (logLevel)
            {
                case LogLevel.Debug: log.Debug(msg); break;
                case LogLevel.Error: log.Error(msg); break;
                case LogLevel.Fatal: log.Fatal(msg); break;
                case LogLevel.Info: log.Info(msg); break;
                case LogLevel.Warn: log.Warn(msg); break;
                default: break;
            }
        }
    }
    /// <summary>
    /// 日志记录级别
    /// </summary>
    public enum LogLevel
    {
        Debug,
        Info,
        Warn,
        Error,
        Fatal
    }
}

Main()方法写日志

namespace Log4netConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            //返回:命名空间+类名,此处为Log4netConsole.Program,
            //表示在哪个类中记录的日志,如果记录的错误日志表示在那个类中出错
            Type type = MethodBase.GetCurrentMethod().DeclaringType;
            Log4netHelper.WriteLogger(type, LogLevel.Error, "测试记录Error日志");
            Log4netHelper.WriteLogger(type, LogLevel.Debug, "测试记录Debug日志");
            Console.ReadKey();
        }
    }
}

上面我演示了将日志记录输出到文件、Sql Server数据库、控制台、Windows事件、Access数据库等五种情况。如果有更多的其它数据源的输出,可以参考官方网站:http://logging.apache.org/log4net/release/config-examples.html

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值