log4net 的配置问题和使用扩展的TGLOG.DLL


<root>

<level value="WARN" />

<appender-ref ref="LogFileAppender" />

<appender-ref ref="ConsoleAppender" />

</root>

<logger name="testApp.Logging">

<level value="info"/>

<appender-ref ref="LogFileAppender" />

</logger>

在程序中调用的时候

我是写成这样:

log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");

log.Info("info");

在输出日志的时候,名称为testApp.Logging 的LOGGER,就会以它为判断条件,忽律<ROOT>中level value 的等级;

输出结果是日志和控制台;

如果配置中没有LOGGER,就会以<ROOT>中level value 等级判定,程序中调用级别比level value 高的,才触发ROOT下的写日志!!

 <logger>

支持的属性:

name

必须的,logger的名称

additivity

可选,取值是truefalse,默认值是true。设置为false时将阻止父logger中的appender

支持的子元素:

appender-ref

0个或多个,要引用的appender的名字。

level

最多一个。 只有在这个级别或之上的事件才会被记录。

param

0个或多个, 设置一些参数。

 
        在<LOGGER>节下配置上 
<!--为FALSE阻止ROOT中的日志事件发生,默认为TRUE-->
      <additivity value ="false"/>
以后:
 
会阻止发生在<ROOT>中日志事件,从而只根据<LOGGER>下的文件日志输出!
 
根据下面哥们扩展写的生成TGLOG.DLL. 

http://www.cnblogs.com/longshizhong/archive/2009/11/25/1610452.html?switchskin=1#skinlist 

代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<!--log4net节配置-->
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  
</configSections>

  
<!--log4net配置-->
  
<log4net>

    
<!--配置到数据库-->
    

    
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">
      
<!--BufferSize为缓冲区大小-->
      
<bufferSize value="10" />

      
<!--<param name="BufferSize" value="2" />-->
      
<!--引用-->
      
<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=;" />
      
<!--插入语句-->
      
<commandText value="INSERT INTO WorkLog ([Date],[Thread],[Level],[Logger],[Operator],[Message],[ActionType],[Operand],[IP],[MachineName],[Browser],[Location],[Exception],[State]) VALUES (@log_date, @thread, @log_level, @logger,@operator, @message,@action_type,@operand,@ip,@machineName,@browser,@location,@exception,@state)" />
      
<!--记录时间-->
      
<parameter>
        
<parameterName value="@log_date" />
        
<dbType value="DateTime" />
        
<layout type="log4net.Layout.RawTimeStampLayout" />
      
</parameter>
      
<!--线程号-->
      
<parameter>
        
<parameterName value="@thread" />
        
<dbType value="String" />
        
<size value="100" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%thread" />
        
</layout>
      
</parameter>
      
<!--日志等级-->
      
<parameter>
        
<parameterName value="@log_level" />
        
<dbType value="String" />
        
<size value="100" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%level" />
        
</layout>
      
</parameter>
      
<!--日志名称-->
      
<parameter>
        
<parameterName value="@logger" />
        
<dbType value="String" />
        
<size value="200" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%logger" />
        
</layout>
      
</parameter>
      
      
<!--操作者-->
      
<parameter>
        
<parameterName value="@operator" />
        
<dbType value="Int16" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{Operator}" />
        
</layout>
      
</parameter>

      
<!--操作对象-->
      
<parameter>
        
<parameterName value="@operand" />
        
<dbType value="String" />
        
<size value="300" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{Operand}" />
        
</layout>
      
</parameter>

      
<!--IP-->
      
<parameter>
        
<parameterName value="@ip" />
        
<dbType value="String" />
        
<size value="20" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{IP}" />
        
</layout>
      
</parameter>
      
<!--机器名-->
      
<parameter>
        
<parameterName value="@machineName" />
        
<dbType value="String" />
        
<size value="100" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{MachineName}" />
        
</layout>
      
</parameter>
      
<!--浏览器-->
      
<parameter>
        
<parameterName value="@browser" />
        
<dbType value="String" />
        
<size value="50" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{Browser}" />
        
</layout>
      
</parameter>
      
      
<!--消息-->
      
<parameter>
        
<parameterName value="@message" />
        
<dbType value="String" />
        
<size value="3000" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{Message}" />
        
</layout>
      
</parameter>

      
<!--动作-->
      
<parameter>
        
<parameterName value="@action_type" />
        
<dbType value="Int16" />
    
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%property{ActionType}" />
        
</layout>
      
</parameter>
      
<!--地址-->
      
<parameter>
        
<parameterName value="@location" />
        
<dbType value="String" />
        
<size value="2000" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%location" />
        
</layout>
      
</parameter>
      
      
<!--错误-->
      
<parameter>
        
<parameterName value="@exception" />
        
<dbType value="String" />
        
<size value="4000" />
        
<layout type="log4net.Layout.ExceptionLayout" />
      
</parameter>

      
<!--消息-->
      
<parameter>
        
<parameterName value="@state" />
        
<dbType value="String" />
        
<size value="3000" />
        
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          
<conversionPattern value="%message" />
        
</layout>
      
</parameter>
    
</appender>


    
<appender name="ReflectionLayout" type="log4net.Appender.RollingFileAppender,log4net">

      
<!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件-->
      
<param name="File" value="D:/Log/" />

      
<!--是否追加到文件-->
      
<param name="AppendToFile" value="true" />

      
<!--记录日志写入文件时,不锁定文本文件-->
      
<!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->

      
<!--Unicode编码-->
      
<!--<Encoding value="UTF-8" />-->

      
<!--最多产生的日志文件数,value="-1"为不限文件数-->
      
<param name="MaxSizeRollBackups" value="10" />

      
<!--是否只写到一个文件中-->
      
<param name="StaticLogFileName" value="false" />

      
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      
<param name="RollingStyle" value="Composite" />

      
<!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]-->
      
<param name="DatePattern" value="yyyy-MM-dd/&quot;ReflectionLayout.log&quot;"  />
      
<!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd&quot;-TimerServer.log&quot;"  />-->
      
<!--<param name="DatePattern" value="yyyyMMdd/&quot;TimerServer/TimerServer.log&quot;"  />-->

      
<!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名-->
      
<param name="maximumFileSize" value="500KB" />

      
<!--记录的格式。-->
      
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
        
<param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n" />
      
</layout>
    
</appender>

    
<appender name="MyLayout" type="log4net.Appender.RollingFileAppender,log4net">

      
<!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件-->
      
<param name="File" value="D:/Log/" />

      
<!--是否追加到文件-->
      
<param name="AppendToFile" value="true" />

      
<!--记录日志写入文件时,不锁定文本文件-->
      
<!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->

      
<!--Unicode编码-->
      
<!--<Encoding value="UTF-8" />-->

      
<!--最多产生的日志文件数,value="-1"为不限文件数-->
      
<param name="MaxSizeRollBackups" value="-1" />

      
<!--是否只写到一个文件中-->
      
<param name="StaticLogFileName" value="false" />

      
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      
<param name="RollingStyle" value="Composite" />

      
<!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]-->
     
      
<!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd&quot;-TimerServer.log&quot;"  />-->
      
<param name="DatePattern" value="yyyy-MM-dd/&quot;MyLayout/MyLayout.log&quot;"  />

      
<!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名-->
      
<param name="maximumFileSize" value="100KB" />

      
<!--记录的格式。-->
      
<layout type="TGLog.ExpandLayout1.MyLayout,TGLog">
        
<param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%Operator 操作类型:%ActionType%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%Message%n 消息:%message%newline%n%n" />
      
</layout>
    
</appender>

    
<appender name="HashtableLayout" type="log4net.Appender.RollingFileAppender,log4net">

      
<!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件-->
      
<param name="File" value="D:/Log/" />

      
<!--是否追加到文件-->
      
<param name="AppendToFile" value="true" />

      
<!--记录日志写入文件时,不锁定文本文件-->
      
<!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->

      
<!--Unicode编码-->
      
<Encoding value="UTF-8" />

      
<!--最多产生的日志文件数,value="-1"为不限文件数-->
      
<param name="MaxSizeRollBackups" value="10" />

      
<!--是否只写到一个文件中-->
      
<param name="StaticLogFileName" value="false" />

      
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      
<param name="RollingStyle" value="Date" />

      
<!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]-->
      
<param name="DatePattern" value="yyyy-MM-dd/yyyyMMdd&quot;-HashtableLayout.log&quot;"  />
      

      
<!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名--><!--
      
<param name="maximumFileSize" value="1KB" />-->

      
<!--记录的格式。-->
      
<layout type="TGLog.ExpandLayout2.HashtableLayout,TGLog">
        
<param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n" />
      
</layout>
    
</appender>

    
<appender name="ExpandILog" type="log4net.Appender.RollingFileAppender,log4net">

      
<!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件-->
      
<param name="File" value="D:/Log/" />

      
<!--是否追加到文件-->
      
<param name="AppendToFile" value="true" />

      
<!--记录日志写入文件时,不锁定文本文件-->
      
<!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->

      
<!--Unicode编码-->
      
<Encoding value="UTF-8" />

      
<!--最多产生的日志文件数,value="-1"为不限文件数-->
      
<param name="MaxSizeRollBackups" value="10" />

      
<!--是否只写到一个文件中-->
      
<param name="StaticLogFileName" value="false" />

      
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      
<param name="RollingStyle" value="Date" />

      
<!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]-->
      
<param name="DatePattern" value="yyyy-MM-dd/yyyyMMdd&quot;-ExpandILog.log&quot;"  />


      
<!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名-->
      
<!--
      
<param name="maximumFileSize" value="1KB" />-->

      
<!--记录的格式。-->
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{ActionType}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n" />
      
</layout>
    
</appender>

    
<!--使用反射方法同时写两文件和数据库-->
    
<logger name="ReflectionLayout">
      
<level value="DEBUG"/>
      
<appender-ref ref="HashtableLayout"/>
      
<appender-ref ref="ReflectionLayout"/>
      
<appender-ref ref="ADONetAppender"/>
    
</logger>

    
<!--使用哈希表方法-->
    
<logger name="HashtableLayout">
      
<level value="DEBUG"/>
      
<appender-ref ref="HashtableLayout"/>
      
<!--<appender-ref ref="ReflectionLayout"/>-->
      
<!--<appender-ref ref="ADONetAppender"/>-->
    
</logger>


    
<!--使用扩展Layout方法1输出-->
    
<logger name="MyLayout">
      
<level value="DEBUG"/>
      
<appender-ref ref="MyLayout"/>
    
</logger>

    
<!--使用扩展ILog方法输出-->
    
<logger name="ExpandILog">
      
<level value="DEBUG"/>
      
<appender-ref ref="ExpandILog"/>
    
</logger>
  
</log4net>
</configuration>

:

原文地址:https://www.cnblogs.com/qipilang/p/1624638.html