log4net的使用

程序中只需要引用log4net.dll文件即可

配置的引用

log4net.Config.XmlConfigurator.Configure();

  首先添加以上代码。

CS程序:在Main方法中添加;

BS程序:Application_Start方法中添加;

或是两者都可以在AssemblyInfo.cs(Properties中)文件里添加以下的语句:

//设置独立配置文件,log4net.config
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config" , Watch = true )]
//或是默认的配置文件
[assembly: log4net.Config.XmlConfigurator(Watch = true )] (配置在web.config文件中)

详细配置

log4net,可以把日志输出到控制台程序,文件,数据库、邮件,下面贴出四个输出的配置代码,其余如window日志等输出不做阐述。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--首先加入configSections配置节点-->
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <!--限制日志记录级别-->
      <level value="all" />
      <!--将日志输出到文件-->
      <appender-ref ref="FileAppender"/>
      <!--将日志输出到应用程序控制台-->
      <appender-ref ref="ConsoleAppender"/>
      <!--将日志写到邮件中-->
      <!--<appender-ref ref="LogSmtpAppender"/>-->
      <!--将日志记录到数据库中。可以采用SQL和存储过程两种方式-->
      <appender-ref ref="AdoNetAppender"/>
      <!--可以同时设置多个输出对象,没用到可以注释-->
      <!--将日志写到local syslog service (仅用于UNIX环境下)。-->
      <!--<appender-ref ref="LocalSyslogAppender"/>-->
    </root>
    <!--发邮件-->
    <appender name="LogSmtpAppender" type="log4net.Appender.SmtpAppender">
      <authentication value="Basic" />
      <!--接受邮件的邮箱-->
      <to value="[email protected]" />
      <!--发送邮件的邮箱-->
      <from value="[email protected]" />
      <!--发送邮件的邮箱-->
      <username value="[email protected]" />
      <!--发送邮件的邮箱密码-->
      <password value="123456" />
      <!--标题-->
      <subject value="XXX应用错误日志消息" />
      <!--smtp.qq.com-->
      <smtpHost value="smtp.126.com" />
      <bufferSize value="2048" />
      <!--超长部分是否丢弃-->
      <lossy value="true" />
      <!--日志级别 大于 WARN 的才发邮件-->
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="ERROR"/>
      </evaluator>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value=" %level :: %message %newlineLogger: %logger%newline  Date: %date%newline" />
      </layout>
    </appender>
    <!-- 控制台日志 -->
    <appender  name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n%d{yyyy-MM-dd HH:mm:ss}  %m%n" />
      </layout>
      <!--指定范围内的等级才可以被记录-->
      <!--<filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>-->
    </appender >

    <!--指定日记记录方式,以滚动文件的方式(文件记录)-->
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name= "File" value= "log/"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--log保留天数-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--每个文件最大1M-->
      <param name="maximumFileSize" value="1MB" />
      <!--日志文件名是否是固定不变的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名格式为:2008-08-31.log-->
      <param name= "DatePattern" value= "yyyy-MM-dd".log""/>
      <!--日志根据日期滚动-->
      <param name= "RollingStyle" value= "Date"/>
      <!--布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n记录时间:%d{yyyy-MM-dd HH:mm:ss} 线程名:[%t] 级别:%p 类名:%c 信息:%m%n" />
        <param name="Header" value="----------------------------------------------------------- "/>
      </layout>
    </appender>
    <!--数据库日记-->
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <!--设置为1方便查看结果,处于性能考虑这里的值应该略大一点,官方默认值是100,BufferSize为缓冲区大小,只有日志记录超设定值才会一块写入到数据库-->
      <bufferSize value="1" />
      <!--sqlserver 引用-->
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <!--连接数据库字符串-->
      <connectionString value="data source=.;initial catalog=test;integrated security=false;persist security info=True;User ID=sa;Password=sqlserver;" />
      <!--插入到表Log-->
      <commandText value="INSERT INTO LogTest ([Date],[Level],[Logger],[Message],[Exception],[Description],[ObjType]) VALUES (@log_date,@log_level, @logger, @message, @exception,@Description,@ObjType)" />
      <!--所有参数-->
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </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>
      <!--自定义输入字段-->
      <parameter>
        <parameterName value = "@Description"/>
        <dbType value = "String"/>
        <size value = "50"/>
        <layout type = "log4_Test.Log4netExpand.ExpandLayout">
        <conversionPattern value = "%property{Description}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value = "@ObjType"/>
        <dbType value = "String"/>
        <size value = "50"/>
        <layout type = "log4_Test.Log4netExpand.ExpandLayout">
          <conversionPattern value = "%property{ObjType}"/>
        </layout>
      </parameter>
    </appender>

  </log4net>
</configuration>

<layout type = "log4_Test.Log4netExpand.ExpandLayout"> 中的log4_Test.Log4netExpand 为命名空间

布局、格式字符说明:

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

自定义数据库插入字段(源自网络收集、整理)

1.先定义一个LogData类:

namespace log4_Test.Log4netExpand
{
    public class LogData
    {
        /// <summary>
        /// 日志描述信息
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 日志描述信息
        /// </summary>
        public string ObjType { get; set; }
    }
}

2.Layout扩展类

namespace log4_Test.Log4netExpand
{
    public class ExpandLayout : PatternLayout
    {
        public ExpandLayout()
       {
             this.AddConverter("property", typeof(MyMessagePatternConverter));
        }
    }
}

3.MyMessagePatternConverter 类

namespace log4_Test.Log4netExpand
{
    public class MyMessagePatternConverter: PatternLayoutConverter
    {
        protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
        {

            if (Option != null)
            {

                // Write the value for the specified key

                WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));

            }
            else
            {

                // Write all the key value pairs

                WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());

            }
        }
        /// <summary>
        /// 通过反射获取传入的日志对象的某个属性的值
        /// </summary>
        /// <param name="property"></param>
        /// <returns></returns>
        private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent)
        {
            object propertyValue = string.Empty;
            PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);
            if (propertyInfo != null)
            {
                propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
            }
            return propertyValue;

        }
    }
}

4.使用代码如下:

public  class Program
    {
        static void Main(string[] args)
        {

            //能看到是那个类输出
            ILog logger = log4net.LogManager.GetLogger(typeof(Program));
            logger.Info(new LogData { Description="123", ObjType="123"})

            logger.Info("消息11111111111111111111111111111");
            logger.Warn("警告");
            logger.Error("异常");
            logger.Fatal("错误");

        }
    }
时间: 2024-10-12 21:05:20

log4net的使用的相关文章

log4net 使用总结- (2)在ASP.NET MVC 中使用

log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二.在站点根目录下增加log4net.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="

(转)非常完善的Log4net详细说明

转自:http://www.cnblogs.com/zhangchenliang/p/4546352.htmlhttp://www.cnblogs.com/zhangchenliang/p/4546352.html (转)非常完善的Log4net详细说明 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual Studio2008中使用log4net快速创

Log4Net 之初体验

今天试了一下关于日志的一个插件--Log4Net 关于这个插件就不过多描述了,有很多人用,也挺好用比较方便,所以在此记录下使用过程. 一.建一个mvc 空网站 名字叫 Log4NetTest 二.下载log4net.dll 并添加引用,也可以用NuGet在线安装 三.在Models  文件夹下建立MyErrorAttribute 大概就是把所有的错误丢进队列里面去,并且继承 HandleErrorAttribute 代码就如下: using System; using System.Collec

log4net 既要按日期分割日志文件,又要按文件大小分割。

<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> <file value="log\debug\"/> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePatte

Log4Net 帮助类

//[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)] namespace LogNet { /// <summary> /// Author :TonyKit /// Date :2016-09-25 /// Description:日志辅助类 /// </summary> public class Logger { #region [ 单例模式

log4net使用简介

说明:本程序演示如何利用log4net记录程序日志信息.log4net是一个功能著名的开源日志记录组件.利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中.并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误).ERROR(一般错误).WARN(警告).INFO(一般信息).DEBUG(调试信息).要想获取最新版本的

Log4Net使用详解

说明自从上次在2008年在博客上发表过有关log4net的用法介绍文章之后(网址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx),有不少朋友在博文下留言询问一些细节,现在就一些比较普遍的问题做一些稍微深入的解答,希望大家满意.首先说明一点的是,log4net解决的问题是提供一个记录日志的框架,它提供了向多种目标写入的实现,比如利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包

Log4Net 在多层项目中的使用小记

原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项目是分多层的,假如每一层都需要加入日志记录,那该怎么办呢,下面是我的一些操作步骤,记录出来和大家分享一下,不足之处希望大家多拍板砖多多指教. 这个截图是我的当前项目的层次结构,首先在Common层先

将Log4Net 日志保存到mongodb数据库实践

log4net的大名早有耳闻,一直没真正用过,这次开发APP项目准备在服务端使用log4net. 日志的数据量较大,频繁的写数据库容易影响系统整体性能,所以独立将日志写到mongodb数据库是不错的选择.---经过2天的摸索,总结出本文档. github有个开源项目log4mongo-net,另一位斯克迪亚作者根据开源项目又做了修改http://skyd.sinaapp.com/archives/1282. 所以直接拿斯克迪亚的代码来使用. 1.将log4net和mongodb驱动升级为最新版本

log4net RemotingAppender 的配置

Before you even start trying any of the alternatives provided, ask yourself whether you really need to have multiple processes log to the same file, then don't do it ;-). FileAppender offers pluggable locking models for this usecase but all existing