log4net 使用记录

    1、下载地址

http://logging.apache.org/log4net/download.html

 

2、log4net的配置文件。

  CS程序,在根目录的Program.cs中的Main方法中添加: 

log4net.Config.XmlConfigurator.Configure();

 

       BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:

 

1 protected void Application_Start(object sender, EventArgs e)
2         {
3             log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~") + @"\log4net.xml"));
4         }

 

 

 

  3、修改配置文件修 

    如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 
 3 <configuration>
 4 
 5   <configSections>
 6 
 7 <section name="log4net"   type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
 8 
 9   </configSections>
10 <log4net>
11     <root>
12         <level value="ALL"/>
13     </root>
14     <!-- 系统日志,或者基本日志 -->
15     <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender">
16         <param name="File" value="LogEvent//System//Log_"/>
17         <param name="AppendToFile" value="true"/>
18         <datePattern value="yyyy-MM-dd".txt""/>
19         <param name="RollingStyle" value="Date"/>
20         <param name="StaticLogFileName" value="false"/>
21         <layout type="log4net.Layout.PatternLayout">
22             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
23         </layout>
24     </appender>
25     
26    
27     <logger name="cmcTools.Web">
28         <level value="ALL"/>
29         <appender-ref ref="SysLogFileAppender"/>
30     </logger>
31 
32 </log4net>
33 </configuration>

 

    当然,也可以直接写到单个XML文件中,然后如第二步一样,加载该文件,XML文件格式如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <log4net>
 3     <root>
 4         <level value="ALL"/>
 5     </root>
 6     <!-- 系统日志,或者基本日志 -->
 7     <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender">
 8         <param name="File" value="LogEvent//System//Log_"/>
 9         <param name="AppendToFile" value="true"/>
10         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
11         <param name="RollingStyle" value="Date"/>
12         <param name="StaticLogFileName" value="false"/>
13         <layout type="log4net.Layout.PatternLayout">
14             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
15         </layout>
16     </appender>
17       
18     
19     <logger name="cmcTools.Web">
20         <level value="ALL"/>
21         <appender-ref ref="SysLogFileAppender"/>
22     </logger>
23 
24 </log4net>

 4、代码中使用

    var sysLog4net = LogManager.GetLogger("cmcTools.Web"); //创建日志

    sysLog4net.Info(message);

 

 

在实际项目中,日志可能是按模块来划分记录的,同时每个模块下可能又分信息日志和错误日志,配置文件如下:

View Code
  1 <?xml version="1.0" encoding="utf-8" ?>
  2 <log4net>
  3     <root>
  4         <level value="ALL"/>
  5     </root>
  6     <!-- 系统日志,或者基本日志 -->
  7     <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender">
  8         <param name="File" value="LogEvent//System//Log_"/>
  9         <param name="AppendToFile" value="true"/>
 10         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
 11         <param name="RollingStyle" value="Date"/>
 12         <param name="StaticLogFileName" value="false"/>
 13         <layout type="log4net.Layout.PatternLayout">
 14             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
 15         </layout>
 16     </appender>
 17     
 18     <!-- C7操作日志 -->
 19     <appender name="C7LogFileAppenderInfo" type="log4net.Appender.RollingFileAppender">
 20         <param name="File" value="LogEvent//C7//Info//Log_"/>
 21         <param name="AppendToFile" value="true"/>
 22         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
 23         <param name="RollingStyle" value="Date"/>
 24         <param name="StaticLogFileName" value="false"/>
 25         <layout type="log4net.Layout.PatternLayout">
 26             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
 27         </layout>
 28         <filter type="log4net.Filter.LevelRangeFilter">
 29             <param name="LevelMin" value="DEBUG" />
 30             <param name="LevelMax" value="INFO" />
 31         </filter>
 32     </appender>
 33     <!-- C7错误日志 -->
 34     <appender name="C7LogFileAppenderError" type="log4net.Appender.RollingFileAppender">
 35         <param name="File" value="LogEvent//C7//Error//Log_"/>
 36         <param name="AppendToFile" value="true"/>
 37         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
 38         <param name="RollingStyle" value="Date"/>
 39         <param name="StaticLogFileName" value="false"/>
 40         <layout type="log4net.Layout.PatternLayout">
 41             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
 42         </layout>
 43         <filter type="log4net.Filter.LevelRangeFilter">
 44             <param name="LevelMin" value="WARN" />
 45             <param name="LevelMax" value="FATAL" />
 46         </filter>
 47     </appender>
 48 
 49 
 50     <!-- CheckCIIS操作日志 -->
 51     <appender name="CheckCIISLogFileAppenderInfo" type="log4net.Appender.RollingFileAppender">
 52         <param name="File" value="LogEvent//CheckCIIS//Info//Log_"/>
 53         <param name="AppendToFile" value="true"/>
 54         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
 55         <param name="RollingStyle" value="Date"/>
 56         <param name="StaticLogFileName" value="false"/>
 57         <layout type="log4net.Layout.PatternLayout">
 58             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
 59         </layout>
 60         <filter type="log4net.Filter.LevelRangeFilter">
 61             <param name="LevelMin" value="DEBUG" />
 62             <param name="LevelMax" value="INFO" />
 63         </filter>
 64     </appender>
 65     
 66     <!-- CheckCIIS错误日志 -->
 67     <appender name="CheckCIISLogFileAppenderError" type="log4net.Appender.RollingFileAppender">
 68         <param name="File" value="LogEvent//CheckCIIS//Error//Log_"/>
 69         <param name="AppendToFile" value="true"/>
 70         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
 71         <param name="RollingStyle" value="Date"/>
 72         <param name="StaticLogFileName" value="false"/>
 73         <layout type="log4net.Layout.PatternLayout">
 74             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
 75         </layout>
 76         <filter type="log4net.Filter.LevelRangeFilter">
 77             <param name="LevelMin" value="WARN" />
 78             <param name="LevelMax" value="FATAL" />
 79         </filter>
 80     </appender>
 81 
 82 
 83     <!-- SL操作日志 -->
 84     <appender name="SLLogFileAppenderInfo" type="log4net.Appender.RollingFileAppender">
 85         <param name="File" value="LogEvent//SL//Info//Log_"/>
 86         <param name="AppendToFile" value="true"/>
 87         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
 88         <param name="RollingStyle" value="Date"/>
 89         <param name="StaticLogFileName" value="false"/>
 90         <layout type="log4net.Layout.PatternLayout">
 91             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
 92         </layout>
 93         <filter type="log4net.Filter.LevelRangeFilter">
 94             <param name="LevelMin" value="DEBUG" />
 95             <param name="LevelMax" value="INFO" />
 96         </filter>
 97     </appender>
 98 
 99     <!-- SL错误日志 -->
100     <appender name="SLLogFileAppenderError" type="log4net.Appender.RollingFileAppender">
101         <param name="File" value="LogEvent//SL//Error//Log_"/>
102         <param name="AppendToFile" value="true"/>
103         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
104         <param name="RollingStyle" value="Date"/>
105         <param name="StaticLogFileName" value="false"/>
106         <layout type="log4net.Layout.PatternLayout">
107             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
108         </layout>
109         <filter type="log4net.Filter.LevelRangeFilter">
110             <param name="LevelMin" value="WARN" />
111             <param name="LevelMax" value="FATAL" />
112         </filter>
113     </appender>
114 
115     <!-- C6操作日志 -->
116     <appender name="C6LogFileAppenderInfo" type="log4net.Appender.RollingFileAppender">
117         <param name="File" value="LogEvent//C6//Info//Log_"/>
118         <param name="AppendToFile" value="true"/>
119         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
120         <param name="RollingStyle" value="Date"/>
121         <param name="StaticLogFileName" value="false"/>
122         <layout type="log4net.Layout.PatternLayout">
123             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
124         </layout>
125         <filter type="log4net.Filter.LevelRangeFilter">
126             <param name="LevelMin" value="DEBUG" />
127             <param name="LevelMax" value="INFO" />
128         </filter>
129     </appender>
130 
131     <!-- C6错误日志 -->
132     <appender name="C6LogFileAppenderError" type="log4net.Appender.RollingFileAppender">
133         <param name="File" value="LogEvent//C6//Error//Log_"/>
134         <param name="AppendToFile" value="true"/>
135         <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
136         <param name="RollingStyle" value="Date"/>
137         <param name="StaticLogFileName" value="false"/>
138         <layout type="log4net.Layout.PatternLayout">
139             <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level   %message %newline %newline"/>
140         </layout>
141         <filter type="log4net.Filter.LevelRangeFilter">
142             <param name="LevelMin" value="WARN" />
143             <param name="LevelMax" value="FATAL" />
144         </filter>
145     </appender>
146     
147     <logger name="cmcTools.Web">
148         <level value="ALL"/>
149         <appender-ref ref="SysLogFileAppender"/>
150     </logger>
151 
152     <logger name="cmcTools.Web.C7">
153         <level value="ALL"/>
154         <appender-ref ref="C7LogFileAppenderInfo"/>
155         <appender-ref ref="C7LogFileAppenderError"/>
156     </logger>
157     
158     <logger name="cmcTools.Web.SL">
159         <level value="ALL"/>
160         <appender-ref ref="SLLogFileAppenderInfo"/>
161         <appender-ref ref="SLLogFileAppenderError"/>
162     </logger>
163 
164 
165     <logger name="cmcTools.Web.CheckCIIS">
166         <level value="ALL"/>
167         <appender-ref ref="CheckCIISLogFileAppenderInfo"/>
168         <appender-ref ref="CheckCIISLogFileAppenderError"/>
169     </logger>
170 
171 
172     <logger name="cmcTools.Web.C6">
173         <level value="ALL"/>
174         <appender-ref ref="C6LogFileAppenderInfo"/>
175         <appender-ref ref="C6LogFileAppenderError"/>
176     </logger>
177 </log4net>

注意第三行:  <root><level value="ALL"/> </root>,不能在加其它类型,否则会输出所有模块的日志

在代码中:

View Code
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using log4net;
  6 using cmcTools.CommonLibrary.Logn4et;
  7 
  8 namespace cmcTools.CommonLibrary
  9 {
 10 
 11     /// <summary>
 12     /// 用于记录员工的变更信息状态
 13     /// </summary>
 14     public class Log4netHelper
 15     {
 16         private static log4net.ILog sysLog4net;//用于记录相关操作的日志
 17         private static log4net.ILog c7Log4net;
 18         private static log4net.ILog slLog4net;
 19         private static log4net.ILog iisLog4net;
 20         private static log4net.ILog c6Log4net;
 21 
 22         static Log4netHelper()
 23         {
 24             sysLog4net = LogManager.GetLogger("cmcTools.Web"); //创建日志
 25             c7Log4net = LogManager.GetLogger("cmcTools.Web.C7");
 26             slLog4net = LogManager.GetLogger("cmcTools.Web.SL");
 27             iisLog4net = LogManager.GetLogger("cmcTools.Web.CheckCIIS");
 28             c6Log4net = LogManager.GetLogger("cmcTools.Web.C6");
 29 
 30         }
 31 
 32         public static void Info(string _info)
 33         {
 34             log4netInfo(LogerTypeEnum.Base, _info);
 35         }
 36 
 37 
 38         public static void Info(LogerTypeEnum logerType, string _info)
 39         {
 40             log4netInfo(logerType, _info);
 41         }
 42 
 43         /// <summary>
 44         /// 记录关联或解除员工的操作日志的信息
 45         /// </summary>
 46         public static void Error(Exception ex)
 47         {
 48             Error(LogerTypeEnum.Base, ex);
 49         }
 50 
 51         /// <summary>
 52         /// 记录关联或解除员工的操作日志的信息
 53         /// </summary>
 54         public static void Error(LogerTypeEnum logerType, Exception ex)
 55         {
 56             Error(logerType, ex, "发生异常");
 57         }
 58 
 59         /// <summary>
 60         /// 记录关联或解除员工的操作日志的信息
 61         /// </summary>
 62         public static void Error(LogerTypeEnum logerType, string message)
 63         {
 64             Error(logerType, message, "发生异常");
 65         }
 66 
 67         /// <summary>
 68         /// 记录关联或解除员工的操作日志的信息
 69         /// </summary>
 70         public static void Error(LogerTypeEnum logerType, Exception ex, string errorName)
 71         {
 72             string message = string.Format("出错类型:{0}\t {1}: {2}    {3}", logerType.ToString(), errorName, ex.StackTrace, ex.Message);
 73             log4netError(logerType, message);
 74         }
 75 
 76         /// <summary>
 77         /// 记录关联或解除员工的操作日志的信息
 78         /// </summary>
 79         public static void Error(LogerTypeEnum logerType, string messageInfo, string errorName)
 80         {
 81             string message = string.Format("出错类型:{0}\t {1}: {2}  ", logerType.ToString(), errorName, messageInfo);
 82             log4netInfo(logerType, message);
 83         }
 84 
 85     
 86 
 87 
 88         static void log4netInfo(LogerTypeEnum logerType, string message)
 89         {
 90             switch (logerType)
 91             {
 92                 case LogerTypeEnum.Base:
 93                     sysLog4net.Info(message);
 94                     break;
 95                 case LogerTypeEnum.C7:
 96                     c7Log4net.Info(message);
 97                     break;
 98                 case LogerTypeEnum.C6_L:
 99                     c6Log4net.Info(message);
100                     break;
101                 case LogerTypeEnum.ForCIIS:
102                     iisLog4net.Info(message);
103                     break;
104                 case LogerTypeEnum.SL:
105                     slLog4net.Info(message);
106                     break;
107 
108             }
109         }
110         static void log4netError(LogerTypeEnum logerType, string message)
111         {
112             switch (logerType)
113             {
114                 case LogerTypeEnum.Base:
115                     sysLog4net.Error(message);
116                     break;
117                 case LogerTypeEnum.C7:
118                     c7Log4net.Error(message);
119                     break;
120                 case LogerTypeEnum.C6_L:
121                     c6Log4net.Error(message);
122                     break;
123                 case LogerTypeEnum.ForCIIS:
124                     iisLog4net.Error(message);
125                     break;
126                 case LogerTypeEnum.SL:
127                     slLog4net.Error(message);
128                     break;
129 
130             }
131         }
132     }
133 }

这样日志就实际调用时:

        /// <summary>
        /// 文本文件下载 
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="logerEnum"></param>
        /// <param name="callProcess"></param>
        public static void DownFile(string filepath, LogerTypeEnum logerEnum, Action<string> actProcessComplete, Func<bool> actProcessBefore)
        {
            if (actProcessBefore != null)
            {
              var result =   actProcessBefore();
              if (!result)
              {
                  //HttpContext.Current.Response.End();
                  return;
              }
            }
            string extName = IoHelper.GetExtension(filepath).Remove(0, 1);//去除.
            string errorInfo = string.Empty;
            try
            {
                if (File.Exists(filepath))
                {
                    string fileName = System.IO.Path.GetFileName(filepath);
                    System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite);
                    if (fs.Length > 0)
                    {
                        byte[] bytes = new byte[(int)fs.Length];
                        fs.Read(bytes, 0, bytes.Length);
                        fs.Close();
                        HttpContext.Current.Response.ContentType = "application/octet-stream";
                        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                        HttpContext.Current.Response.BinaryWrite(bytes);
                        HttpContext.Current.Response.Flush();
                        //HttpContext.Current.ApplicationInstance.CompleteRequest();
                    }
                    else
                    {
                        errorInfo = "文件没有数据,请重试";
                    }
                }
                else
                {
                    errorInfo = "数据文件(" + extName + ")不存在,不能下载";
                }


            }
            catch (Exception ex)
            {
                Log4netHelper.Error(logerEnum, ex, "导出" + extName + "文件异常 ");
            }
            finally
            {
                if (!string.IsNullOrEmpty(errorInfo) && actProcessComplete != null)
                {
                    actProcessComplete(errorInfo);
                }
                else
                {
                    HttpContext.Current.Response.End();
                }
            }
        }

 

 

 

 

 

 

 

posted @ 2013-01-16 17:20  myfly  阅读(264)  评论(0)    收藏  举报