log4net详细介绍

原创 Laughing  2018-03-11 19:14  阅读 428 次 评论 0 条

log4net介绍

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

log4net安装

这里不多过多介绍了,直接通过nuget安装即可。

log4net.config配置

  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   <configSections>  
  4.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>  
  5.   </configSections>  
  6.   <log4net>  
  7.     <!--根配置-->  
  8.     <root>  
  9.       <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->  
  10.       <level value="ERROR"/>  
  11.       <level value="WARN"/>  
  12.       <level value="INFO"/>  
  13.       <level value="DEBUG"/>  
  14.       <appender-ref ref="ErrorLog" />  
  15.       <appender-ref ref="WarnLog" />  
  16.       <appender-ref ref="InfoLog" />  
  17.       <appender-ref ref="DebugLog" />  
  18.       <appender-ref ref="Sqlserver" />  
  19.     </root>  
  20.       
  21.     <!-- 错误 Error.log-->  
  22.     <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">  
  23.       <!--目录路径,可以是相对路径或绝对路径-->  
  24.       <param name="File" value="Log\Ide_Net_Cn_log"/>  
  25.       <!--文件名,按日期生成文件夹-->  
  26.       <param name="DatePattern" value="/yyyy-MM-dd/&quot;Error.log&quot;"/>  
  27.       <!--追加到文件-->  
  28.       <appendToFile value="true"/>  
  29.       <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->  
  30.       <rollingStyle value="Composite"/>  
  31.       <!--写到一个文件-->  
  32.       <staticLogFileName value="false"/>  
  33.       <!--单个文件大小。单位:KB|MB|GB-->  
  34.       <maximumFileSize value="200MB"/>  
  35.       <!--最多保留的文件数,设为"-1"则不限-->  
  36.       <maxSizeRollBackups value="-1"/>  
  37.       <!--日志格式-->  
  38.       <layout type="log4net.Layout.PatternLayout">  
  39.         <conversionPattern value="%message"/>  
  40.       </layout>  
  41.       <filter type="log4net.Filter.LevelRangeFilter">  
  42.         <param name="LevelMin" value="ERROR" />  
  43.         <param name="LevelMax" value="ERROR" />  
  44.       </filter>  
  45.     </appender>  
  46.       
  47.     <!-- 警告 Warn.log-->  
  48.     <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">  
  49.       <!--目录路径,可以是相对路径或绝对路径-->  
  50.       <param name="File" value="Log\Ide_Net_Cn_log"/>  
  51.       <!--文件名,按日期生成文件夹-->  
  52.       <param name="DatePattern" value="/yyyy-MM-dd/&quot;Warn.log&quot;"/>  
  53.       <!--追加到文件-->  
  54.       <appendToFile value="true"/>  
  55.       <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->  
  56.       <rollingStyle value="Composite"/>  
  57.       <!--写到一个文件-->  
  58.       <staticLogFileName value="false"/>  
  59.       <!--单个文件大小。单位:KB|MB|GB-->  
  60.       <maximumFileSize value="200MB"/>  
  61.       <!--最多保留的文件数,设为"-1"则不限-->  
  62.       <maxSizeRollBackups value="-1"/>  
  63.       <!--日志格式-->  
  64.       <layout type="log4net.Layout.PatternLayout">  
  65.         <conversionPattern value="%message"/>  
  66.       </layout>  
  67.       <filter type="log4net.Filter.LevelRangeFilter">  
  68.         <param name="LevelMin" value="WARN" />  
  69.         <param name="LevelMax" value="WARN" />  
  70.       </filter>  
  71.     </appender>  
  72.   
  73.     <!-- 信息 Info.log-->  
  74.     <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">  
  75.       <!--目录路径,可以是相对路径或绝对路径-->  
  76.       <param name="File" value="Log\Ide_Net_Cn_log"/>  
  77.       <!--文件名,按日期生成文件夹-->  
  78.       <param name="DatePattern" value="/yyyy-MM-dd/&quot;Info.log&quot;"/>  
  79.       <!--追加到文件-->  
  80.       <appendToFile value="true"/>  
  81.       <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->  
  82.       <rollingStyle value="Composite"/>  
  83.       <!--写到一个文件-->  
  84.       <staticLogFileName value="false"/>  
  85.       <!--单个文件大小。单位:KB|MB|GB-->  
  86.       <maximumFileSize value="200MB"/>  
  87.       <!--最多保留的文件数,设为"-1"则不限-->  
  88.       <maxSizeRollBackups value="-1"/>  
  89.       <!--日志格式-->  
  90.       <layout type="log4net.Layout.PatternLayout">  
  91.         <conversionPattern value="%message"/>  
  92.       </layout>  
  93.       <filter type="log4net.Filter.LevelRangeFilter">  
  94.         <param name="LevelMin" value="INFO" />  
  95.         <param name="LevelMax" value="INFO" />  
  96.       </filter>  
  97.     </appender>  
  98.   
  99.     <!-- 调试 Debug.log-->  
  100.     <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">  
  101.       <!--目录路径,可以是相对路径或绝对路径-->  
  102.       <param name="File" value="Log\Ide_Net_Cn_log"/>  
  103.       <!--文件名,按日期生成文件夹-->  
  104.       <param name="DatePattern" value="/yyyy-MM-dd/&quot;Debug.log&quot;"/>  
  105.       <!--追加到文件-->  
  106.       <appendToFile value="true"/>  
  107.       <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->  
  108.       <rollingStyle value="Composite"/>  
  109.       <!--写到一个文件-->  
  110.       <staticLogFileName value="false"/>  
  111.       <!--单个文件大小。单位:KB|MB|GB-->  
  112.       <maximumFileSize value="200MB"/>  
  113.       <!--最多保留的文件数,设为"-1"则不限-->  
  114.       <maxSizeRollBackups value="-1"/>  
  115.       <!--日志格式-->  
  116.       <layout type="log4net.Layout.PatternLayout">  
  117.         <conversionPattern value="%message"/>  
  118.       </layout>  
  119.       <filter type="log4net.Filter.LevelRangeFilter">  
  120.         <param name="LevelMin" value="DEBUG" />  
  121.         <param name="LevelMax" value="DEBUG" />  
  122.       </filter>  
  123.     </appender>  
  124.   
  125.     <!-- 调试 Sqlserver.log-->  
  126.     <appender name="Sqlserver" type="log4net.Appender.ADONetAppender">  
  127.       <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->  
  128.       <bufferSize value="0" />  
  129.       <!--日志数据库连接串-->  
  130.       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  131.       <connectionString value="DATABASE=Ide_Net_Cn;SERVER=lisen.org;UID=sa;PWD=123456a?;Connect Timeout=30;" />  
  132.       <!--日志数据库脚本-->  
  133.       <commandText value="INSERT INTO LogDetails ([OperationTime],[Url],[Ip],[Host],[Browser],[UserName],[User],Content,ExceptionInfo,ExceptionSource,ExceptionRemark,Level) VALUES ( @OperationTime, @Url, @Ip, @Host, @Browser,@UserName,@User,@Content,@ExceptionInfo,@ExceptionSource,@ExceptionRemark,@Level)" />  
  134.       <!--日志内码 -->  
  135.       <!--<parameter>  
  136.         <parameterName value="@ID" />  
  137.         <dbType value="String" />  
  138.         <size value="36" />  
  139.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  140.           <conversionPattern value = "NEWID()"/>  
  141.         </layout>  
  142.       </parameter>-->  
  143.   
  144.       <!--操作时间-->  
  145.       <parameter>  
  146.         <parameterName value="@OperationTime" />  
  147.         <dbType value="String" />  
  148.         <size value="100" />  
  149.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  150.           <conversionPattern value = "%property{OperationTime}"/>  
  151.         </layout>  
  152.       </parameter>  
  153.   
  154.       <!--url -->  
  155.       <parameter>  
  156.         <parameterName value="@Url" />  
  157.         <dbType value="String" />  
  158.         <size value="255" />  
  159.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  160.           <conversionPattern value = "%property{Url}"/>  
  161.         </layout>  
  162.       </parameter>  
  163.   
  164.       <!--ip地址-->  
  165.       <parameter>  
  166.         <parameterName value="@Ip" />  
  167.         <dbType value="String" />  
  168.         <size value="255" />  
  169.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  170.           <conversionPattern value = "%property{Ip}"/>  
  171.         </layout>  
  172.       </parameter>  
  173.   
  174.       <!--主机-->  
  175.       <parameter>  
  176.         <parameterName value="@Host" />  
  177.         <dbType value="String" />  
  178.         <size value="255" />  
  179.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  180.           <conversionPattern value = "%property{Host}"/>  
  181.         </layout>  
  182.       </parameter>  
  183.   
  184.       <!--浏览器-->  
  185.       <parameter>  
  186.         <parameterName value="@Browser" />  
  187.         <dbType value="String" />  
  188.         <size value="100" />  
  189.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  190.           <conversionPattern value = "%property{Browser}"/>  
  191.         </layout>  
  192.       </parameter>  
  193.   
  194.       <!--UserName -->  
  195.       <parameter>  
  196.         <parameterName value="@UserName" />  
  197.         <dbType value="String" />  
  198.         <size value="20" />  
  199.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  200.           <conversionPattern value = "%property{UserName}"/>  
  201.         </layout>  
  202.       </parameter>  
  203.   
  204.       <!--用户内码-->  
  205.       <parameter>  
  206.         <parameterName value="@User" />  
  207.         <dbType value="String" />  
  208.         <size value="40" />  
  209.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  210.           <conversionPattern value = "%property{User}"/>  
  211.         </layout>  
  212.       </parameter>  
  213.   
  214.       <!--日志内容-->  
  215.       <parameter>  
  216.         <parameterName value="@Content" />  
  217.         <dbType value="String" />  
  218.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  219.           <conversionPattern value = "%property{Content}"/>  
  220.         </layout>  
  221.       </parameter>  
  222.   
  223.       <!--异常信息-->  
  224.       <parameter>  
  225.         <parameterName value="@ExceptionInfo" />  
  226.         <dbType value="String" />  
  227.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  228.           <conversionPattern value = "%property{ExceptionInfo}"/>  
  229.         </layout>  
  230.       </parameter>  
  231.   
  232.       <!--异常来源-->  
  233.       <parameter>  
  234.         <parameterName value="@ExceptionSource" />  
  235.         <dbType value="String" />  
  236.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  237.           <conversionPattern value = "%property{ExceptionSource}"/>  
  238.         </layout>  
  239.       </parameter>  
  240.   
  241.       <!--异常信息备注-->  
  242.       <parameter>  
  243.         <parameterName value="@ExceptionRemark" />  
  244.         <dbType value="String" />  
  245.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  246.           <conversionPattern value = "%property{ExceptionRemark}"/>  
  247.         </layout>  
  248.       </parameter>  
  249.   
  250.       <!--异常等级-->  
  251.       <parameter>  
  252.         <parameterName value="@Level" />  
  253.         <dbType value="String" />  
  254.         <size value="1" />  
  255.         <layout type="Ide.Net.Cn.Util.Log.LogLayout" >  
  256.           <conversionPattern value = "%property{Level}"/>  
  257.         </layout>  
  258.       </parameter>  
  259.     </appender>  
  260.   
  261.     <!--Oracle数据库-->  
  262.     <appender name="OracleAppender" type="log4net.Appender.AdoNetAppender">  
  263.       <!-- Oracle数据源-->  
  264.       <connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />  
  265.       <!-- Oracle连接字符串-->  
  266.       <connectionString value="DATA SOURCE=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.206)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));PASSWORD=watdb;PERSIST SECURITY INFO=True;USER ID=watdb;"/>  
  267.       <commandText value="INSERT INTO SYS_LOG(Dates,Levels,Logger,Message,Exception,ClientUser,ClientIP,RequestUrl,Action)VALUES(:Dates,:Levels,:Logger,:Message,:Exception,:ClientUser,:ClientIP,:RequestUrl,:Action)"/>  
  268.       <!--    
  269.              设置缓存区大小    
  270.              1表明有一条日志就要写入    
  271.              如果10就表示日志到达10条时一起写入    
  272.              -->  
  273.       <bufferSize value="0"/>  
  274.       <parameter>  
  275.         <parameterName value=":Dates" />  
  276.         <dbType value="DateTime" />  
  277.         <layout type="log4net.Layout.RawTimeStampLayout"/>  
  278.       </parameter>  
  279.       <parameter>  
  280.         <parameterName value=":Levels" />  
  281.         <dbType value="String" />  
  282.         <size value="50" />  
  283.         <layout type="log4net.Layout.PatternLayout">  
  284.           <conversionPattern value="%level" />  
  285.         </layout>  
  286.       </parameter>  
  287.       <parameter>  
  288.         <parameterName value=":Logger" />  
  289.         <dbType value="String" />  
  290.         <size value="200" />  
  291.         <layout type="log4net.Layout.PatternLayout">  
  292.           <conversionPattern value="%logger" />  
  293.         </layout>  
  294.       </parameter>  
  295.       <parameter>  
  296.         <parameterName value=":Message" />  
  297.         <dbType value="String" />  
  298.         <size value="4000" />  
  299.         <layout type="log4net.Layout.PatternLayout">  
  300.           <conversionPattern value="%message" />  
  301.         </layout>  
  302.       </parameter>  
  303.       <parameter>  
  304.         <parameterName value=":Exception" />  
  305.         <dbType value="String" />  
  306.         <size value="4000" />  
  307.         <layout type="log4net.Layout.PatternLayout">  
  308.           <conversionPattern value="%exception" />  
  309.         </layout>  
  310.       </parameter>  
  311.       <!--DIY-->  
  312.       <parameter>  
  313.         <parameterName value=":ClientUser" />  
  314.         <dbType value="String" />  
  315.         <size value="100" />  
  316.         <layout type="log4net.Layout.PatternLayout">  
  317.           <conversionPattern value="%property{ClientUser}" />  
  318.         </layout>  
  319.       </parameter>  
  320.       <parameter>  
  321.         <parameterName value=":ClientIP" />  
  322.         <dbType value="String" />  
  323.         <size value="20" />  
  324.         <layout type="log4net.Layout.PatternLayout">  
  325.           <conversionPattern value="%property{ClientIP}" />  
  326.         </layout>  
  327.       </parameter>  
  328.       <parameter>  
  329.         <parameterName value=":RequestUrl" />  
  330.         <dbType value="String" />  
  331.         <size value="500" />  
  332.         <layout type="log4net.Layout.PatternLayout">  
  333.           <conversionPattern value="%property{RequestUrl}" />  
  334.         </layout>  
  335.       </parameter>  
  336.       <parameter>  
  337.         <parameterName value=":Action" />  
  338.         <dbType value="String" />  
  339.         <size value="20" />  
  340.         <layout type="log4net.Layout.PatternLayout">  
  341.           <conversionPattern value="%property{Action}" />  
  342.         </layout>  
  343.       </parameter>  
  344.     </appender>  
  345.       
  346.     <!--Sqlite数据库-->  
  347.     <appender name="SqliteAppender" type="log4net.Appender.AdoNetAppender">  
  348.       <bufferSize value="0" />  
  349.       <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.98.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />  
  350.       <connectionString value="Data Source=|DataDirectory|test.db;Version=3;" />  
  351.       <commandText value="INSERT INTO Log (Date, Level, Logger, ClientUser,ClientIP, RequestUrl,Action, Message, Exception) VALUES (@Date, @Level, @Logger,@ClientUser,@ClientIP, @RequestUrl,@Action, @Message, @Exception)" />  
  352.       <parameter>  
  353.         <parameterName value="@Date" />  
  354.         <dbType value="DateTime" />  
  355.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  356.       </parameter>  
  357.       <parameter>  
  358.         <parameterName value="@Level" />  
  359.         <dbType value="String" />  
  360.         <layout type="log4net.Layout.PatternLayout">  
  361.           <conversionPattern value="%level" />  
  362.         </layout>  
  363.       </parameter>  
  364.       <parameter>  
  365.         <parameterName value="@Logger" />  
  366.         <dbType value="String" />  
  367.         <layout type="log4net.Layout.PatternLayout">  
  368.           <conversionPattern value="%logger" />  
  369.         </layout>  
  370.       </parameter>  
  371.       <parameter>  
  372.         <parameterName value="@ClientUser" />  
  373.         <dbType value="String" />  
  374.         <layout type="log4net.Layout.PatternLayout">  
  375.           <conversionPattern value="%property{ClientUser}" />  
  376.         </layout>  
  377.       </parameter>  
  378.       <parameter>  
  379.         <parameterName value="@ClientIP" />  
  380.         <dbType value="String" />  
  381.         <layout type="log4net.Layout.PatternLayout">  
  382.           <conversionPattern value="%property{ClientIP}" />  
  383.         </layout>  
  384.       </parameter>  
  385.       <parameter>  
  386.         <parameterName value="@RequestUrl" />  
  387.         <dbType value="String" />  
  388.         <layout type="log4net.Layout.PatternLayout">  
  389.           <conversionPattern value="%property{RequestUrl}" />  
  390.         </layout>  
  391.       </parameter>  
  392.       <parameter>  
  393.         <parameterName value="@Action" />  
  394.         <dbType value="String" />  
  395.         <layout type="log4net.Layout.PatternLayout">  
  396.           <conversionPattern value="%property{Action}" />  
  397.         </layout>  
  398.       </parameter>  
  399.       <parameter>  
  400.         <parameterName value="@Message" />  
  401.         <dbType value="String" />  
  402.         <layout type="log4net.Layout.PatternLayout">  
  403.           <conversionPattern value="%message" />  
  404.         </layout>  
  405.       </parameter>  
  406.       <parameter>  
  407.         <parameterName value="@Exception" />  
  408.         <dbType value="String" />  
  409.         <layout type="log4net.Layout.PatternLayout">  
  410.           <conversionPattern value="%exception" />  
  411.         </layout>  
  412.       </parameter>  
  413.     </appender>  
  414.       
  415.   </log4net>  
  416.   <startup>  
  417.     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  418.   </startup>  
  419. </configuration>  
  420. <!--  
  421.    调用实例  
  422.    log4net.ILog log = log4net.LogManager.GetLogger("Filelog");  
  423.    log.Info(Message);  
  424.      
  425.     %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息  
  426.   
  427.     %n(new line):换行  
  428.   
  429.     %d(datetime):输出当前语句运行的时刻  
  430.   
  431.     %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数  
  432.   
  433.     %t(thread id):当前语句所在的线程ID  
  434.   
  435.     %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等  
  436.   
  437.     %c(class):当前日志对象的名称  
  438.       
  439.     %L:输出语句所在的行号  
  440.   
  441.     %F:输出语句所在的文件名  
  442.   
  443.     %-数字:表示该项的最小长度,如果不够,则用空格填充  
  444.   
  445.     例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:  
  446.   
  447.     176 [main] INFO  org.foo.Bar - Located nearest gas station.  
  448.     -->  

定义实体类LogEntity.cs

  1. /************************************************************************************* 
  2.  * CLR版 本: 4.0.30319.42000 
  3.  * 机器名称: LISEN0100 
  4.  * 命名空间: Ide.Net.Cn.Util.Log 
  5.  * 文件名称: LogEntity 
  6.  * 创建时间: 2018/3/11 15:51:49 
  7.  * 作    者: 木子网 
  8.  * 个人博客: http://www.lisen.me 
  9.  * 个人邮箱: lisen@lisen.me 
  10.  * 文件说明:  
  11.  * 修改时间:  
  12.  * 修 改 人: 木子网 
  13.  * 修改说明: 
  14.  *************************************************************************************/  
  15. using System;  
  16. using System.Collections.Generic;  
  17. using System.Linq;  
  18. using System.Text;  
  19. using System.Threading.Tasks;  
  20.   
  21. namespace Ide.Net.Cn.Util.Log  
  22. {  
  23.     public class LogEntity  
  24.     {  
  25.         #region 属性  
  26.   
  27.         /// <summary>  
  28.         /// 操作时间  
  29.         /// </summary>  
  30.         public DateTime OperationTime { getset; }  
  31.   
  32.         /// <summary>  
  33.         /// Url地址  
  34.         /// </summary>  
  35.         public string Url { getset; }  
  36.   
  37.         /// <summary>  
  38.         /// 类名  
  39.         /// </summary>  
  40.         public string Class { getset; }  
  41.   
  42.         /// <summary>  
  43.         /// IP  
  44.         /// </summary>  
  45.         public string Ip { getset; }  
  46.   
  47.         /// <summary>  
  48.         /// 主机  
  49.         /// </summary>  
  50.         public string Host { getset; }  
  51.   
  52.         /// <summary>  
  53.         /// 浏览器  
  54.         /// </summary>  
  55.         public string Browser { getset; }  
  56.   
  57.         /// <summary>  
  58.         /// 操作人  
  59.         /// </summary>  
  60.         public string UserName { getset; }  
  61.   
  62.         /// <summary>  
  63.         /// 操作人编号或内码  
  64.         /// </summary>  
  65.         public string User { getset; }  
  66.   
  67.         /// <summary>  
  68.         /// 内容  
  69.         /// </summary>  
  70.         public string Content { getset; }  
  71.   
  72.         /// <summary>  
  73.         /// 异常信息  
  74.         /// </summary>  
  75.         public string ExceptionInfo { getset; }  
  76.   
  77.         /// <summary>  
  78.         /// 异常来源  
  79.         /// </summary>  
  80.         public string ExceptionSource { getset; }  
  81.   
  82.         /// <summary>  
  83.         /// 异常信息备注  
  84.         /// </summary>  
  85.         public string ExceptionRemark { getset; }  
  86.  
  87.         #endregion  
  88.  
  89.         #region 构造函数  
  90.  
  91.         #endregion  
  92.  
  93.         #region 方法  
  94.  
  95.         #endregion  
  96.     }  
  97. }  

定义文本格式化类LogFormat.cs,用于控制文本输出

  1. /************************************************************************************* 
  2.  * CLR版 本: 4.0.30319.42000 
  3.  * 机器名称: LISEN0100 
  4.  * 命名空间: Ide.Net.Cn.Util.Log 
  5.  * 文件名称: LogFormat 
  6.  * 创建时间: 2018/3/11 16:37:24 
  7.  * 作    者: 木子网 
  8.  * 个人博客: http://www.lisen.me 
  9.  * 个人邮箱: lisen@lisen.me 
  10.  * 文件说明: 格式化消息实体 
  11.  * 修改时间:  
  12.  * 修 改 人: 木子网 
  13.  * 修改说明: 
  14.  *************************************************************************************/  
  15. using System;  
  16. using System.Collections.Generic;  
  17. using System.Linq;  
  18. using System.Text;  
  19. using System.Threading.Tasks;  
  20.   
  21. namespace Ide.Net.Cn.Util.Log  
  22. {  
  23.     public class LogFormat  
  24.     {  
  25.         #region 属性  
  26.  
  27.         #endregion  
  28.  
  29.         #region 构造函数  
  30.  
  31.         #endregion  
  32.  
  33.         #region 方法  
  34.         /// <summary>  
  35.         /// 生成错误  
  36.         /// </summary>  
  37.         /// <param name="logEntity">对象</param>  
  38.         /// <returns></returns>  
  39.         public static string ErrorFormat(LogEntity logEntity)  
  40.         {  
  41.             StringBuilder strInfo = new StringBuilder();  
  42.             strInfo.Append("1. 错误: >> 操作时间: " + logEntity.OperationTime + "   操作人: " + logEntity.UserName + "   操作人编号: " + logEntity.User + " \r\n");  
  43.             strInfo.Append("2. 地址: " + logEntity.Url + "    \r\n");  
  44.             strInfo.Append("3. 类名: " + logEntity.Class + " \r\n");  
  45.             strInfo.Append("4. Ip  : " + logEntity.Ip + "   主机: " + logEntity.Host + "   浏览器: " + logEntity.Browser + "    \r\n");  
  46.             strInfo.Append("5. 内容: " + logEntity.Content + "\r\n");  
  47.             strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");  
  48.             return strInfo.ToString();  
  49.         }  
  50.         /// <summary>  
  51.         /// 生成警告  
  52.         /// </summary>  
  53.         /// <param name="logEntity">对象</param>  
  54.         /// <returns></returns>  
  55.         public static string WarnFormat(LogEntity logEntity)  
  56.         {  
  57.             StringBuilder strInfo = new StringBuilder();  
  58.             strInfo.Append("1. 警告: >> 操作时间: " + logEntity.OperationTime + "   操作人: " + logEntity.UserName + "   操作人编号: " + logEntity.User + " \r\n");  
  59.             strInfo.Append("2. 地址: " + logEntity.Url + "    \r\n");  
  60.             strInfo.Append("3. 类名: " + logEntity.Class + " \r\n");  
  61.             strInfo.Append("4. Ip  : " + logEntity.Ip + "   主机: " + logEntity.Host + "   浏览器: " + logEntity.Browser + "    \r\n");  
  62.             strInfo.Append("5. 内容: " + logEntity.Content + "\r\n");  
  63.             strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");  
  64.             return strInfo.ToString();  
  65.         }  
  66.         /// <summary>  
  67.         /// 生成信息  
  68.         /// </summary>  
  69.         /// <param name="logEntity">对象</param>  
  70.         /// <returns></returns>  
  71.         public static string InfoFormat(LogEntity logEntity)  
  72.         {  
  73.             StringBuilder strInfo = new StringBuilder();  
  74.             strInfo.Append("1. 信息: >> 操作时间: " + logEntity.OperationTime + "   操作人: " + logEntity.UserName + "   操作人编号: " + logEntity.User + " \r\n");  
  75.             strInfo.Append("2. 地址: " + logEntity.Url + "    \r\n");  
  76.             strInfo.Append("3. 类名: " + logEntity.Class + " \r\n");  
  77.             strInfo.Append("4. Ip  : " + logEntity.Ip + "   主机: " + logEntity.Host + "   浏览器: " + logEntity.Browser + "    \r\n");  
  78.             strInfo.Append("5. 内容: " + logEntity.Content + "\r\n");  
  79.             strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");  
  80.             return strInfo.ToString();  
  81.         }  
  82.         /// <summary>  
  83.         /// 生成调试  
  84.         /// </summary>  
  85.         /// <param name="logEntity">对象</param>  
  86.         /// <returns></returns>  
  87.         public static string DebugFormat(LogEntity logEntity)  
  88.         {  
  89.             StringBuilder strInfo = new StringBuilder();  
  90.             strInfo.Append("1. 调试: >> 操作时间: " + logEntity.OperationTime + "   操作人: " + logEntity.UserName + "   操作人编号: " + logEntity.User + " \r\n");  
  91.             strInfo.Append("2. 地址: " + logEntity.Url + "    \r\n");  
  92.             strInfo.Append("3. 类名: " + logEntity.Class + " \r\n");  
  93.             strInfo.Append("4. Ip  : " + logEntity.Ip + "   主机: " + logEntity.Host + "   浏览器: " + logEntity.Browser + "    \r\n");  
  94.             strInfo.Append("5. 内容: " + logEntity.Content + "\r\n");  
  95.             strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");  
  96.             return strInfo.ToString();  
  97.         }  
  98.         /// <summary>  
  99.         /// 生成异常信息  
  100.         /// </summary>  
  101.         /// <param name="logEntity">对象</param>  
  102.         /// <returns></returns>  
  103.         public static string ExceptionFormat(LogEntity logEntity)  
  104.         {  
  105.             StringBuilder strInfo = new StringBuilder();  
  106.             strInfo.Append("1. 调试: >> 操作时间: " + logEntity.OperationTime + "   操作人: " + logEntity.UserName + "   操作人编号: " + logEntity.User + " \r\n");  
  107.             strInfo.Append("2. 地址: " + logEntity.Url + "    \r\n");  
  108.             strInfo.Append("3. 类名: " + logEntity.Class + " \r\n");  
  109.             strInfo.Append("4. 主机: " + logEntity.Host + "   Ip  : " + logEntity.Ip + "   浏览器: " + logEntity.Browser + "    \r\n");  
  110.             strInfo.Append("5. 异常: " + logEntity.ExceptionInfo + "\r\n");  
  111.             //strInfo.Append("6. 来源: " + logEntity.ExceptionSource + "\r\n");  
  112.             //strInfo.Append("7. 实例: " + logEntity.ExceptionRemark + "\r\n");  
  113.             strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");  
  114.             return strInfo.ToString();  
  115.         }  
  116.         #endregion  
  117.     }  
  118. }  

定义工厂类LogFactory.cs,返回log类型

  1. /************************************************************************************* 
  2.  * CLR版 本: 4.0.30319.42000 
  3.  * 机器名称: LISEN0100 
  4.  * 命名空间: Ide.Net.Cn.Util.Log 
  5.  * 文件名称: LogFactory 
  6.  * 创建时间: 2018/3/11 15:27:20 
  7.  * 作    者: 木子网 
  8.  * 个人博客: http://www.lisen.me 
  9.  * 个人邮箱: lisen@lisen.me 
  10.  * 文件说明: 日志工厂类,产生错误、警告、信息、调试类 
  11.  * 修改时间:  
  12.  * 修 改 人: 木子网 
  13.  * 修改说明: 
  14.  *************************************************************************************/  
  15. using log4net;  
  16. using System;  
  17. using System.Collections.Generic;  
  18. using System.IO;  
  19. using System.Linq;  
  20. using System.Text;  
  21. using System.Threading.Tasks;  
  22. using System.Web;  
  23.   
  24. namespace Ide.Net.Cn.Util.Log  
  25. {  
  26.     public class LogFactory  
  27.     {  
  28.         #region 属性  
  29.  
  30.         #endregion  
  31.  
  32.         #region 构造函数  
  33.   
  34.         /// <summary>  
  35.         /// 构造函数  
  36.         /// </summary>  
  37.         static LogFactory()  
  38.         {  
  39.             FileInfo fileInfo = new FileInfo(HttpContext.Current.Server.MapPath("~/XmlConfig/log4net.config"));  
  40.             log4net.Config.XmlConfigurator.ConfigureAndWatch(fileInfo);  
  41.         }  
  42.  
  43.         #endregion  
  44.  
  45.         #region 方法  
  46.         public static ILog GetLogger(LogLevel logLevel)  
  47.         {  
  48.             ILog log = null;  
  49.             switch (logLevel)  
  50.             {  
  51.                 case LogLevel.Error:  
  52.                     log = LogManager.GetLogger("ErrorLog");  
  53.                     break;  
  54.                 case LogLevel.Warning:  
  55.                     log = LogManager.GetLogger("WarnLog");  
  56.                     break;  
  57.                 case LogLevel.Info:  
  58.                     log = LogManager.GetLogger("InfoLog");  
  59.                     break;  
  60.                 case LogLevel.Debug:  
  61.                     log = LogManager.GetLogger("DebugLog");  
  62.                     break;  
  63.             }  
  64.             return log;  
  65.         }  
  66.   
  67.         public static ILog ErrorLog()  
  68.         {  
  69.             return LogManager.GetLogger("ErrorLog");  
  70.         }  
  71.   
  72.         public static ILog WarnLog()  
  73.         {  
  74.             return LogManager.GetLogger("WarnLog");  
  75.         }  
  76.   
  77.         public static ILog InfoLog()  
  78.         {  
  79.             return LogManager.GetLogger("InfoLog");  
  80.         }  
  81.   
  82.         public static ILog DebugLog()  
  83.         {  
  84.             return LogManager.GetLogger("DebugLog");  
  85.         }  
  86.   
  87.         public static ILog SqlLog()  
  88.         {  
  89.             return LogManager.GetLogger("Sqlserver");  
  90.         }  
  91.         #endregion  
  92.   
  93.     }  
  94. }  

定义公共类log.cs,用于输出日志

  1. /************************************************************************************* 
  2.  * CLR版 本: 4.0.30319.42000 
  3.  * 机器名称: LISEN0100 
  4.  * 命名空间: Ide.Net.Cn.Util.Log 
  5.  * 文件名称: Log 
  6.  * 创建时间: 2018/3/11 15:04:03 
  7.  * 作    者: 木子网 
  8.  * 个人博客: http://www.lisen.me 
  9.  * 个人邮箱: lisen@lisen.me 
  10.  * 文件说明: 日志文件类 
  11.  * 修改时间:  
  12.  * 修 改 人: 木子网 
  13.  * 修改说明: 
  14.  *************************************************************************************/  
  15. using log4net;  
  16. using System;  
  17. using System.Collections.Generic;  
  18. using System.Configuration;  
  19. using System.Linq;  
  20. using System.Text;  
  21. using System.Threading.Tasks;  
  22.   
  23. namespace Ide.Net.Cn.Util.Log  
  24. {  
  25.     public class Log  
  26.     {  
  27.         #region 字段属性  
  28.         private ILog log;  
  29.         private bool IsLog = true;  
  30.         #endregion  
  31.  
  32.         #region 构造函数  
  33.         public Log(ILog log)  
  34.         {  
  35.             this.log = log;  
  36.             IsLog = ConfigurationManager.AppSettings["IsLog"].ToLower() == "true" ? true : false;  
  37.         }  
  38.         #endregion  
  39.  
  40.         #region 方法  
  41.   
  42.         /// <summary>  
  43.         /// 写入错误日志  
  44.         /// </summary>  
  45.         /// <param name="errorMsg">错误消息</param>  
  46.         public void Error(LogEntity errorMsg)  
  47.         {  
  48.             if (IsLog)  
  49.             {  
  50.                 log.Error(LogFormat.ErrorFormat(errorMsg));  
  51.             }  
  52.         }  
  53.   
  54.         /// <summary>  
  55.         /// 写入警告日志  
  56.         /// </summary>  
  57.         /// <param name="warnMsg">警告消息</param>  
  58.         public void Warn(LogEntity warnMsg)  
  59.         {  
  60.             if (IsLog)  
  61.             {  
  62.                 log.Warn(LogFormat.WarnFormat(warnMsg));  
  63.             }  
  64.         }  
  65.   
  66.         /// <summary>  
  67.         /// 写入警告日志  
  68.         /// </summary>  
  69.         /// <param name="warnMsg">警告消息</param>  
  70.         public void Warn(LogEntity warnMsg, Exception exception)  
  71.         {  
  72.             if (IsLog)  
  73.             {  
  74.                 log.Warn(LogFormat.WarnFormat(warnMsg), exception);  
  75.             }  
  76.         }  
  77.   
  78.         /// <summary>  
  79.         /// 写入信息日志  
  80.         /// </summary>  
  81.         /// <param name="infoMsg">信息消息</param>  
  82.         public void Info(LogEntity infoMsg)  
  83.         {  
  84.             if (IsLog)  
  85.             {  
  86.                 log.Info(LogFormat.InfoFormat(infoMsg));  
  87.             }  
  88.         }  
  89.   
  90.         /// <summary>  
  91.         /// 写入调试日志  
  92.         /// </summary>  
  93.         /// <param name="debugMsg">调试消息</param>  
  94.         public void Debug(LogEntity debugMsg)  
  95.         {  
  96.             if (IsLog)  
  97.             {  
  98.                 log.Debug(LogFormat.DebugFormat(debugMsg));  
  99.             }  
  100.         }  
  101.  
  102.         #endregion  
  103.     }  
  104. }  

使用

定义一个aspx页面,窗体载入后测试日志文件

  1. using Ide.Net.Cn.Util.Log;  
  2. using log4net;  
  3. using System;  
  4. using System.Collections.Generic;  
  5. using System.Linq;  
  6. using System.Web;  
  7. using System.Web.UI;  
  8. using System.Web.UI.WebControls;  
  9.   
  10. namespace Ide.Net.Cn.Web  
  11. {  
  12.     public partial class _Default : Page  
  13.     {  
  14.         protected void Page_Load(object sender, EventArgs e)  
  15.         {  
  16.             if (!IsPostBack)  
  17.             {  
  18.                 //ILog log = LogFactory.ErrorLog();//文本日志  
  19.                 ILog log = LogFactory.SqlLog();//数据库日志  
  20.                 Log logger = new Log(log);  
  21.                 LogEntity logEntity = new LogEntity  
  22.                 {  
  23.                     OperationTime = DateTime.Now,  
  24.                     Url = "www.lisen.me"  
  25.                 };  
  26.                 try  
  27.                 {  
  28.                     logger.Warn(logEntity);  
  29.                 }  
  30.                 catch (Exception ex)  
  31.                 {  
  32.                     logger.Warn(logEntity, ex);  
  33.                 }  
  34.             }  
  35.         }  
  36.     }  
  37. }  

日志查看

数据库日志

文本日志

数据库表结构

  1. USE [Ide_Net_Cn]  
  2. GO  
  3.   
  4. /****** Object:  Table [dbo].[LogDetails]    Script Date: 03/11/2018 19:13:45 ******/  
  5. SET ANSI_NULLS ON  
  6. GO  
  7.   
  8. SET QUOTED_IDENTIFIER ON  
  9. GO  
  10.   
  11. SET ANSI_PADDING ON  
  12. GO  
  13.   
  14. CREATE TABLE [dbo].[LogDetails](  
  15.     [ID] [varchar](36) NOT NULL,  
  16.     [OperationTime] [datetime] NULL,  
  17.     [Url] [varchar](255) NULL,  
  18.     [Ip] [nvarchar](255) NULL,  
  19.     [Host] [nvarchar](255) NULL,  
  20.     [Browser] [nvarchar](100) NULL,  
  21.     [UserName] [nvarchar](20) NULL,  
  22.     [User] [nvarchar](40) NULL,  
  23.     [Content] [nvarchar](maxNULL,  
  24.     [ExceptionInfo] [nvarchar](maxNULL,  
  25.     [ExceptionSource] [nvarchar](maxNULL,  
  26.     [ExceptionRemark] [nvarchar](maxNULL,  
  27.     [Level] [char](1) NULL,  
  28. PRIMARY KEY CLUSTERED   
  29. (  
  30.     [ID] ASC  
  31. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY],  
  32.  CONSTRAINT [LogDetails_Code] UNIQUE NONCLUSTERED   
  33. (  
  34.     [ID] ASC  
  35. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  36. ON [PRIMARY]  
  37.   
  38. GO  
  39.   
  40. SET ANSI_PADDING OFF  
  41. GO  
  42.   
  43. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'浏览器型号+版本号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'LogDetails', @level2type=N'COLUMN',@level2name=N'Browser'  
  44. GO  
  45.   
  46. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1-error;  
  47. 2-warn;  
  48. 3-info;  
  49. 4-debug' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'LogDetails', @level2type=N'COLUMN',@level2name=N'Level'  
  50. GO  
  51.   
  52. ALTER TABLE [dbo].[LogDetails] ADD  DEFAULT (newid()) FOR [ID]  
  53. GO  
  54.   
  55. ALTER TABLE [dbo].[LogDetails] ADD  DEFAULT (NULLFOR [ExceptionSource]  
  56. GO  
本文地址:https://www.lisen.me/detailed-introduction-to-log4net.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

文件下载

发表评论


表情