<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_洗碗心得</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/34153/rss</id><updated>2012-05-16T02:43:52Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/34153/rss"/><entry><id>http://www.cnblogs.com/jcomet/archive/2012/05/16/2503532.html</id><title type="text">2003 IIS 发布WEB攻略</title><summary type="text">1， 程序-》运行-》输入inetmgr，打开IIS管理器；2， 展开左侧树形目录-》右击“网站”-》新建-》网站，打开网站创建向导；3， 点击“下一步”-》在描述里输入一个名字，作用仅仅是帮助管理员识别站点。4， 下一步指定网站的Ip地址和端口5， 下一步选择你的网站文件所在的根目录6，下一步，权限选中读取，运行脚本，如果有上传文件选中写入7，下一步，出现完成界面，点击完成。8，在左侧网站目录下，可以看到新建的TestWebSite9，右击，查看其属性，在主目录里选中脚本资源访问10，点击文档，添加Default.aspx,作为起始页11，点击ASP.NET，版本配置为2.0.50727，点</summary><published>2012-05-16T02:32:00Z</published><updated>2012-05-16T02:32:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/05/16/2503532.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/05/16/2503532.html"/><content type="html">&lt;p align="left"&gt;1， 程序-》运行-》输入inetmgr，打开IIS管理器；&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610380342.png" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;2， 展开左侧树形目录-》右击&amp;ldquo;网站&amp;rdquo;-》新建-》网站，打开网站创建向导；&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img style="border-style: initial; border-color: initial;" src="http://pic002.cnblogs.com/images/2012/30598/2012051610382218.png" alt="" /&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610384078.png" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;3， 点击&amp;ldquo;下一步&amp;rdquo;-》在描述里输入一个名字，作用仅仅是帮助管理员识别站点。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610395057.png" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;4， 下一步指定网站的Ip地址和端口&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610400171.png" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;5， 下一步选择你的网站文件所在的根目录&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610402573.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;6，下一步，权限选中读取，运行脚本，如果有上传文件选中写入&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610404544.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;7，下一步，出现完成界面，点击完成。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610412080.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;8，在左侧网站目录下，可以看到新建的TestWebSite&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610413148.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9，右击，查看其属性，在主目录里选中脚本资源访问&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610414139.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;10，点击文档，添加Default.aspx,作为起始页&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610415059.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;11，点击ASP.NET，版本配置为2.0.50727，点击确定&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610420371.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;12，右击刚刚建立TestWebSite，选择权限，单击&amp;ldquo;添加按钮&amp;rdquo;弹出选择用户或组窗口，单击高级按钮，弹出新选择用户或组窗口，点击立即查找按钮，在搜索结果中选择ASPNET，确定，确定。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610421922.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;13，选中新添加的用户，在允许权限中选中&amp;ldquo;写入&amp;rdquo;复选框，以允许上传文件&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610423623.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;注意：如果要客户端上传的文件放到除网页所在文件以外的目录文件，那么该目录文件中要添加NETWORK SERVICE用户，并允许该用户有写入权限&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/30598/2012051610425524.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2503532.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/05/16/2503532.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/05/11/2495419.html</id><title type="text">去掉.net页面中的&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;__VIEWSTATE...</title><summary type="text">问：.net 网站生成 页面后，会有 &lt;input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU5NzgzMjY1MQ8WBh4KUGFnZUNvdW50cwLsAh4JUGFnZUluZGV4Zh4JSnVtcFBhZ2VzAu0CFgICAw9kFhYCBw8QDxYGHg5EYXRhVmFsdWVGaWVsZAUEY19pZB4NRGF0YVRleHRGaWVsZAUHY190aXRsZR4LXyFEYXRhQm91bmR</summary><published>2012-05-11T01:35:00Z</published><updated>2012-05-11T01:35:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/05/11/2495419.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/05/11/2495419.html"/><content type="html">&lt;div id="app-share-content"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #990000;"&gt;问：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;.net 网站生成 页面后，会有 &amp;lt;input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU5NzgzMjY1MQ8WBh4KUGFnZUNvdW50cwLsAh4JUGFnZUluZGV4Zh4JSnVtcFBhZ2VzAu0CFgICAw9kFhYCBw8QDxYGHg5EYXRhVmFsdWVGaWVsZAUEY19pZB4NRGF0YVRleHRGaWVsZAUHY190aXRsZR4LXyFEYXRhQm91bmRnFgIeCG9uY2hhbmdlBShTaG93KHRoaXMub3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSk7EBUjBuaAu+ermQbljJfkuqwG5aSp5rSlBuS4iua1twbph43luoYG5rWZ5rGfBuaxn+iLjwblub/kuJwG5bGx5LicBuWuieW+vQbmuZbljZcG5Zub5bedBuemj+W7ugbmsZ/opb8G5rKz5Y2XBua5luWMlwnpu5HpvpnmsZ8G5rKz5YyXBui+veWugQblkInmnpcG6LS15beeBuWxseilvwblub/opb8G5LqR5Y2XBumZleilvwblroHlpI8J5YaF6JKZ5Y+kBueUmOiCgwbpnZLmtbcG6KW/6JePBuaWsOeWhgbmtbfljZcG6aaZ5rivBua+s+mXqAblj7Dmub4VIwExATIBMwE0ATUBNgIxOAIxOQIyMAIyMQIyMgIyMwIyNAIyNQIyNgIyNwIyOAIyOQIzMAIzMQIzMgIzMwIzNAIzNQIzNgIzNwIzOAIzOQI0MAI0MQI0MgI0MwI0NAI0NQMzNTQUKwMjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dkZAIJDxYCHglpbm5lcmh0bWwF2hwgPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwcHg7IGZsb2F0OmxlZnQ7J2NsYXNzPSdqeDAxJz48YSBocmVmPSdqeHNzLTIuaHRtbCc+5YyX5LqsPC9hPjwvZGl2PiA8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDBweDsgZmxvY &lt;br /&gt;&lt;br /&gt;这些东西怎么去掉 &lt;br /&gt;我把页面viewstate 设置了false,我在这个页面上 放了个搜索，到其他页面，这就参数没法获取到 &lt;br /&gt;&lt;br /&gt;望高人指教&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #990000;"&gt;回答：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不用去掉 &lt;br /&gt;protected override object LoadPageStateFromPersistenceMedium() &lt;br /&gt;{ &lt;br /&gt;return null; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;protected override void SavePageStateToPersistenceMedium(object viewState) { } &lt;br /&gt;重写这两个方法就可以&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #990000;"&gt;2楼：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;C# code&lt;div&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Data; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Configuration; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Web; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Web.Security; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Web.UI; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Web.UI.WebControls; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Web.UI.WebControls.WebParts; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Web.UI.HtmlControls; &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加引用&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.IO; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Threading; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; CCL { &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; BasePage 的摘要说明 &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; BasePage : System.Web.UI.Page { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt;&lt;span style="color: #000000;"&gt; 解决ViewState过于庞大的问题&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;由于这里添加了目录,所以要建立App_Data/ViewState目录.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;override&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadPageStateFromPersistenceMedium() { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)((Pair)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.LoadPageStateFromPersistenceMedium()).Second; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; stateStr &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)Cache[viewStateID]; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (stateStr &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;) { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; fn &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Path.Combine(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Request.PhysicalApplicationPath, &lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;App_Data/ViewState/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID); stateStr &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; File.ReadAllText(fn); } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ObjectStateFormatter().Deserialize(stateStr); } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;override&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; SavePageStateToPersistenceMedium(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; state) { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; value &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ObjectStateFormatter().Serialize(state); &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DateTime.Now.Ticks &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;long&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.GetHashCode()).ToString(); &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;产生离散的id号码&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; fn &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Path.Combine(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Request.PhysicalApplicationPath, &lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;App_Data/ViewState/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID); &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;ThreadPool.QueueUserWorkItem(File.WriteAllText(fn, value));&lt;/span&gt;&lt;span style="color: #000000;"&gt; File.WriteAllText(fn, value); Cache.Insert(viewStateID, value); &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.SavePageStateToPersistenceMedium(viewStateID); } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color: #000000;"&gt; } } &lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;一个朋友给我的&lt;/p&gt;&lt;p&gt;=============================================================&lt;/p&gt;&lt;p&gt;如果你有一个非常酷的页面，页面上很多东西自动地响应用户操作而展现丰富的变化，你的ViewState是很有可能达到200K的。 &lt;br /&gt;&lt;br /&gt;这里是我将ViewState持久化保持在服务器端的代码，这样ViewState不占用网络带宽，因此其存取只是服务器的磁盘读取时间。并且它很小，可以说是磁盘随便转一圈就能同时读取好多ViewState，因此可以说&amp;ldquo;不占时间&amp;rdquo;。为了再&amp;ldquo;不占磁盘时间&amp;rdquo;，我还使用了缓存。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;一下这段代码可以放在页面中，或者页面的父类中：&lt;/p&gt;&lt;dl class="code"&gt;&lt;dt&gt;C# code&lt;/dt&gt;&lt;dd&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;override&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadPageStateFromPersistenceMedium() { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)((Pair)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.LoadPageStateFromPersistenceMedium()).Second; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; stateStr &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)Cache[viewStateID]; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (stateStr &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;) { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; fn &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Path.Combine(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Request.PhysicalApplicationPath, &lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;App_Data/ViewState/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID); stateStr &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; File.ReadAllText(fn); } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ObjectStateFormatter().Deserialize(stateStr); } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;override&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; SavePageStateToPersistenceMedium(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; state) { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; value &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ObjectStateFormatter().Serialize(state); &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DateTime.Now.Ticks &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;long&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.GetHashCode()).ToString(); &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;产生离散的id号码&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; fn &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Path.Combine(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Request.PhysicalApplicationPath, &lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;App_Data/ViewState/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; viewStateID); ThreadPool.QueueUserWorkItem(obj &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; File.WriteAllText(fn, value)); Cache.Insert(viewStateID, value); &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.SavePageStateToPersistenceMedium(viewStateID); } &lt;/span&gt;&lt;/div&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;不使用Session，因为它会&amp;ldquo;丢失&amp;rdquo;。ViewState保存在磁盘上，即使服务器重新启动，也不会丢失页面状态。 &lt;br /&gt;&lt;br /&gt;下面这段可以放在Global.asax中，也可以根本不管：&lt;/p&gt;&lt;dl class="code"&gt;&lt;dt&gt;C# code&lt;/dt&gt;&lt;dd&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Application_Start(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e) { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; dir &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; DirectoryInfo(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Server.MapPath(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;~/App_Data/ViewState/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)); &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;dir.Exists) dir.Create(); &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; nt &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; DateTime.Now.AddHours(&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;); dir.GetFiles().ForEach(f &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; { &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (f.CreationTime &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; nt) f.Delete(); }); } } &lt;/span&gt;&lt;/div&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;这可以确保绝对稳定可靠地工作。以后请放心使用ViewState，把交互式页面提高水平才是最重要的，不要纠缠在&amp;ldquo;ViewState太大&amp;rdquo;上。实际上，由于页面设计不够酷，交互变化看上去不够丰富，ViewState实在是太小太小了。 &lt;br /&gt;&lt;br /&gt;如果你使用了它有效提高了复杂交互页面的效率，可以说一下提高了多少？！如果你觉得没用，也可以说一下在什么情况下没用。&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://topic.csdn.net/u/20080530/22/ef0d36a4-6bd4-4eba-9743-b56f080b2161.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://topic.csdn.net/u/20080918/15/9af44a56-f77e-49c6-bc39-0ad44ad17c5c.html&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2495419.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/05/11/2495419.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/04/24/2467928.html</id><title type="text">HTML5编程百例之三：图片文本(txt)拖拽预览</title><summary type="text">&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt; &lt;title&gt;HTML5文件拖拽预览Demo&lt;/title&gt; &lt;style type="text/css"&gt; h1{ padding:0px; margin:0px; } div#show{ border: 1px solid #ccc; width: 4...</summary><published>2012-04-24T05:46:00Z</published><updated>2012-04-24T05:46:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/04/24/2467928.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/04/24/2467928.html"/><content type="html">&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;meta &lt;/span&gt;&lt;span&gt;http-equiv&lt;/span&gt;&lt;span&gt;="Content-Type"&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;="text/html; charset=utf-8"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;HTML5文件拖拽预览Demo&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;style &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;="text/css"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;        h1&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            padding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;0px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            margin&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;0px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br/&gt;        &lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br/&gt;        div#show&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            border&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 1px solid #ccc&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;br/&gt;            width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 400px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;br/&gt;            height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 300px&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            display&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; -moz-box&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            display&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; -webkit-box&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            -moz-box-align&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; center&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            -webkit-box-align&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; center&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            -moz-box-pack&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; center&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            -webkit-box-pack&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; center&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            resize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;both&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            overflow&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br/&gt;        &lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br/&gt;        div[id^=show]:hover&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            border&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 1px solid #333&lt;/span&gt;&lt;span&gt;;&lt;/span&gt; &lt;br/&gt;        &lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br/&gt;        div#main&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;100%&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br/&gt;        &lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br/&gt;        div#successLabel&lt;br/&gt;        &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;Red&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br/&gt;        &lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br/&gt;        div#content&lt;br/&gt;        &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;br/&gt;            display&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br/&gt;        &lt;span&gt;}&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;="text/javascript"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span&gt;function&lt;/span&gt;&lt;span&gt; init() &lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; dest &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document.getElementById(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;show&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;);&lt;br/&gt;            dest.addEventListener(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;dragover&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(ev) &lt;br/&gt;            {&lt;br/&gt;                ev.stopPropagation();&lt;br/&gt;                ev.preventDefault();&lt;br/&gt;            }, &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;);&lt;br/&gt;        &lt;br/&gt;            dest.addEventListener(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;dragend&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(ev) &lt;br/&gt;            {&lt;br/&gt;                ev.stopPropagation();&lt;br/&gt;                ev.preventDefault();&lt;br/&gt;            }, &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;);&lt;br/&gt;        &lt;br/&gt;            dest.addEventListener(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;drop&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; (ev) {&lt;br/&gt;                ev.stopPropagation();&lt;br/&gt;                ev.preventDefault();&lt;br/&gt;        &lt;br/&gt;                &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; file &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ev.dataTransfer.files[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;br/&gt;                &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; reader &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt;&lt;span&gt; FileReader();&lt;br/&gt;        &lt;br/&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (file.type.substr(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;) {&lt;br/&gt;                    reader.onload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;function&lt;/span&gt;&lt;span&gt; (event) {&lt;br/&gt;                        dest.style.background &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;'&lt;/span&gt;&lt;span&gt;url(&lt;/span&gt;&lt;span&gt;'&lt;/span&gt; &lt;span&gt;+&lt;/span&gt;&lt;span&gt; event.target.result &lt;/span&gt;&lt;span&gt;+&lt;/span&gt; &lt;span&gt;'&lt;/span&gt;&lt;span&gt;) no-repeat center&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;;&lt;br/&gt;                        dest.innerHTML &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;""&lt;/span&gt;&lt;span&gt;;&lt;br/&gt;                    };&lt;br/&gt;                    reader.readAsDataURL(file);&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span&gt;else&lt;/span&gt; &lt;span&gt;if&lt;/span&gt;&lt;span&gt; (file.type.substr(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;) {&lt;br/&gt;        &lt;br/&gt;                    reader.readAsText(file);&lt;br/&gt;                    reader.onload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;function&lt;/span&gt;&lt;span&gt; (f) {&lt;br/&gt;                        dest.innerHTML &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;lt;pre&amp;gt;&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;&lt;span&gt;.result &lt;/span&gt;&lt;span&gt;+&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;;&lt;br/&gt;                        dest.style.background &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;br/&gt;                    dest.innerHTML &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;暂不支持此类文件的预览&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;;&lt;br/&gt;                    dest.style.background &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;;&lt;br/&gt;                }&lt;br/&gt;            }, &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;);&lt;br/&gt;        }&lt;br/&gt;        &lt;br/&gt;        &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;设置页面属性，不执行默认处理（拒绝被拖放）&lt;/span&gt;&lt;br/&gt;&lt;span&gt;        document.ondragover &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;function&lt;/span&gt;&lt;span&gt;(e){e.preventDefault();};&lt;br/&gt;        document.ondrop &lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;function&lt;/span&gt;&lt;span&gt;(e){e.preventDefault();}&lt;br/&gt;        &lt;br/&gt;        window.onload&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;init;&lt;br/&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;HTML5文件拖拽预览Demo&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;="show"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;    文件预览区，仅限图片和txt文件&lt;br/&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;主要代码解析&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;样式部分就不说了，很简单&lt;/p&gt;&lt;p&gt;dragover、dragend、drop是三个与拖拽相关的事件。&lt;/p&gt;&lt;p&gt;dragover表示被拖放的元素正在本元素范围内移动&lt;/p&gt;&lt;p&gt;dragend表示拖放操作结束&lt;/p&gt;&lt;p&gt;drop表示有其他元素被拖放到了本元素中&lt;/p&gt;&lt;p&gt;代码中先分别监听这几个事件，取消浏览器默认的行为，然后利用HTML5中的File及FileReader判断读取拖拽的文件。&lt;/p&gt;&lt;p&gt;如果文件是图片，就用FileReader的readAsDataURL方法将图片读取为DataURL字符串存入内存，并显示在DIV中。&lt;/p&gt;&lt;p&gt;如果文件是txt文本，就用FileReader的readAsText方法将文件读取为文本（默认为UTF-8格式），放到内存中，然后显示在DIV中。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2467928.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/04/24/2467928.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/03/07/2382977.html</id><title type="text">从此不再惧怕URI编码：JavaScript及C# URI编码详解</title><summary type="text">混乱的URI编码 JavaScript中编码有三种方法:escape、encodeURI、encodeURIComponent C#中编码主要方法：HttpUtility.UrlEncode、Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString JavaScript中的还好，只提供了三个，C#中主要用的就有这么多，还没有列出其他编码(HTML)，一多就弄不明白，弄不明白就心生恐惧，心生恐惧就变得苦逼，本文就向大家详细解释在JavaScript及C#中如何对URI进行编码的方法(注：本文不涉及到其他编码)。escape：不推荐使...</summary><published>2012-03-07T01:12:00Z</published><updated>2012-03-07T01:12:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/03/07/2382977.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/03/07/2382977.html"/><content type="html">&lt;p&gt;&lt;strong&gt;混乱的URI编码&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;JavaScript中编码有三种方法:escape、encodeURI、encodeURIComponent&lt;/p&gt;&lt;p&gt;C#中编码主要方法：HttpUtility.UrlEncode、&lt;span&gt;Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;JavaScript中的还好，只提供了三个，C#中主要用的就有这么多，还没有列出其他编码(HTML)，一多就弄不明白，弄不明白就心生恐惧，心生恐惧就变得苦逼，本文就向大家详细解释在JavaScript及C#中如何对URI进行编码的方法(注：本文不涉及到其他编码)。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;escape：不推荐使用&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;原因：eacape是BOM中的方法，只能对ASCII符号正确编码，而encodeURI、encodeURIComponent可以对所有的Unicode符号编码。&lt;span&gt;ECMAScript v3 反对使用该方法，应用使用 decodeURI() 和 decodeURIComponent() 替代它。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;escape不编码字符有69个：&lt;/span&gt;&lt;strong&gt;*，+，-，.，/，@，_，0-9，a-z，A-Z&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;encodeURI：用于对网址编码(不包含参数)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;encodeURI不编码字符有82个：&lt;/span&gt;&lt;strong&gt;!，#，$，&amp;amp;，'，(，)，*，+，,，-，.，/，:，;，=，?，@，_，~，0-9，a-z，A-Z&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;encodeURI就是为这个而设计的。encodeURI不对URI中的特殊字符进行编码，如冒号(:)、斜杠(/)。下面看个示例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;encodeURI("http://www.cnblogs.com/a file with spaces.html")&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; outputs http://www.cnblogs.com/a%20file%20with%20spaces.html&lt;/span&gt;&lt;/div&gt;&lt;p&gt;可以看到仅仅把空格替换成了20%，所以此方法可用于对网址进行编码。&lt;/p&gt;&lt;p&gt;由于encodeURI不对冒号(:)、斜杠(/)进行编码，所以如果参数(如把网址作为参数)中包含冒号(:)、斜杠(/)，就会解析出错，所以此方法不能对参数进行编码。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;encodeURIComponent:用于对网址参数进行编码&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;encodeURIComponent不编码字符有71个：&lt;/span&gt;&lt;strong&gt;!， '，(，)，*，-，.，_，~，0-9，a-z，A-Z&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;可以看到此方法对:/都进行了编码，所以不能用它来对网址进行编码。由于此方法对中文，空格，井号(#)，斜线(/)，冒号(:)都进行了编码，所以适合对URI中的参数进行编码。看下面的示例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; param="博客园";&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; url="http://www.cnblogs.com/?key="+encodeURIComponent(param)+"&amp;amp;page=1";&lt;br /&gt;console.log(url);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;outputs http://www.cnblogs.com/?key=%E5%8D%9A%E5%AE%A2%E5%9B%AD&amp;amp;page=1&lt;/span&gt;&lt;/div&gt;&lt;p&gt;可以看到，这正是我们想要的结果(这里只对需要编码的参数(page=1不需要编码)进行了编码)。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Server.UrlEncode &amp;amp;&amp;amp; HttpUtility.UrlEncode:不推荐&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;把这两个放到一起说是因为这两个方法在绝大多数情况下是一样的。它们的区别是&lt;span&gt;HttpUtility.UrlEncode默认使用&lt;/span&gt;UTF8格式编码&lt;span&gt;，而Server.UrlEncode是使用系统预设格式编码，&lt;/span&gt;&lt;span&gt;Server.UrlEncode使用系統预设编码做为参数调用HttpUtility.UrlEncode编码，所以如果系统全局都用UTF8格式编码，这两个方法就是一样的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;这两个方法是怎么编码的呢，我们来看个示例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; url1 = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://www.cnblogs.com/a file with spaces.html?a=1&amp;amp;b=博客园#abc&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;Response.Write(HttpUtility.UrlEncode(url1) );&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;output&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;http%3a%2f%2fwww.cnblogs.com%2fa+file+with+spaces.html%3fa%3d1%26b%3d%e5%8d%9a%e5%ae%a2%e5%9b%ad%23abc&lt;/div&gt;&lt;p&gt;由上面的例子我们可以看出，HttpUtility.UrlEncode对冒号(:)和斜杠(/)进行了编码，所以不能用来对网址进行编码。&lt;/p&gt;&lt;p&gt;那么能不能对参数进行编码呢，答案也是否定的。因为在参数中空格应该被编码为%20而不是被HttpUtility.UrlEncode编码为加号(+)，所以不推荐用这两个方法对URI进行编码。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Uri.EscapeUriString:用于对网址编码(不包含参数)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们还是用例子说话：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; url1 = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://www.cnblogs.com/a file with spaces.html?a=1&amp;amp;b=博客园#abc&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;Response.Write( Uri.EscapeUriString(url1));&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;outputs:&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;http:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;www.cnblogs.com/a%20file%20with%20spaces.html?a=1&amp;amp;b=%E5%8D%9A%E5%AE%A2%E5%9B%AD#abc&lt;/span&gt;&lt;/div&gt;&lt;p&gt;可以看出，Uri.EscapeUriString对空格进行了编码，也对中文进行了编码，但对冒号(:)、斜杠(/)和井号(#)未编码，所以此方法可以用于网址进行编码，但不能对参数进行编码，作用类似JavaScript中的encodeURI方法。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Uri.EscapeDataString:用于对网址参数进行编码&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;仍然用例子说话：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; url1 = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://www.cnblogs.com/a file with spaces.html?a=1&amp;amp;b=博客园#abc&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;Response.Write(Uri.EscapeDataString(url1));&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;outputs:&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;http%3A%2F%2Fwww.cnblogs.com%2Fa%20file%20with%20spaces.html%3Fa%3D1%26b%3D%E5%8D%9A%E5%AE%A2%E5%9B%AD%23abc&lt;/div&gt;&lt;p&gt;可以看出，Uri.EscapeDataString对冒号(:)、斜杠(/)、空格、中文、井号(#)都进行了编码，所以此方法不可以用于网址进行编码，但可以用于对参数进行编码，作用类似JavaScript中的encodeURIComponent方法。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;小结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在JavaScript中推荐的做法是用encodeURI对URI的网址部分编码，用encodeURIComponent对URI中传递的参数进行编码。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在C#中推荐的做法是用Uri.EscapeUriString对URI的网址部分编码，用Uri.EscapeDataString对URI中传递的参数进行编码。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;解码部分就不说了，与编码方法相对应。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2382977.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/03/07/2382977.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/02/27/2369555.html</id><title type="text">Log4Net组件的配置</title><summary type="text">第一步：添加并应用Log4net.dll。然后在Web.config文件中添加下面的配置局&lt;configSections&gt;&lt;sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/&gt;&lt;/configSections&gt;复制代码第二步：新建Log4Net.config的配置文件，并在其中添加下面的配置信息：&lt;?xmlversion="1.0"encoding="UTF-8&amp;</summary><published>2012-02-27T03:23:00Z</published><updated>2012-02-27T03:23:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369555.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369555.html"/><content type="html">&lt;p&gt;第一步：&lt;/p&gt;&lt;p&gt;添加并应用Log4net.dll。然后在Web.config文件中添加下面的配置局&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Config.Log4NetConfigurationSectionHandler,&amp;nbsp;log4net&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第二步：&lt;/p&gt;&lt;p&gt;新建Log4Net.config的配置文件，并在其中添加下面的配置信息：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;lt;?xml&amp;nbsp;version=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1.0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;encoding=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;UTF-8&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;?&amp;gt;&lt;br /&gt;&amp;lt;log4net&amp;nbsp;debug=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--按日期分割日志文件&amp;nbsp;一天一个--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderByDate&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.RollingFileAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--是否续写--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AppendToFile&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--最小锁定模型以允许多个进程可以写入同一个文件--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LockingModel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.FileAppender.MinimalLock&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--保存路径--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;File&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d:\Log\\&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DatePattern&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;yyyy-MM-dd.LOG&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RollingStyle&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Date&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ConversionPattern&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;时间:%d&amp;nbsp;%n级别:%level&amp;nbsp;%n类名:%c%n文件:%F&amp;nbsp;第%L行%n日志内容:%m%n-----------------------------------------%n%n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--按日志容量分割日志文件&amp;nbsp;10KB一个--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderBySize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.RollingFileAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--是否续写--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AppendToFile&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--最小锁定模型以允许多个进程可以写入同一个文件--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LockingModel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.FileAppender.MinimalLock&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--按照文件的大小进行变换日志文件--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RollingStyle&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Size&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;File&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log.txt&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--单个文件最大数量&amp;nbsp;好像只有在&amp;nbsp;按Size分割时有效--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MaximumFileSize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;200KB&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--保留的log文件数量&amp;nbsp;超过此数量后&amp;nbsp;自动删除之前的&amp;nbsp;&amp;nbsp;&amp;nbsp;好像只有在&amp;nbsp;按Size分割时有效--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MaxSizeRollBackups&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ConversionPattern&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;发生时间:%d&amp;nbsp;%n事件级别:%level&amp;nbsp;%n相关类名:%c%n程序文件:%F&amp;nbsp;第%L行%n日志内容:%m%n-----------------------------------------%n%n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--记录日志到数据库--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AdoNetAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.AdoNetAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bufferSize&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--缓冲大小--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;connectionType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;System.Data.SqlClient.SqlConnection,&amp;nbsp;System.Data,&amp;nbsp;Version=1.0.3300.0,&amp;nbsp;Culture=neutral,&amp;nbsp;PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;connectionString&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Data&amp;nbsp;Source=.\SQLEXPRESS;Initial&amp;nbsp;Catalog=CVDS;User&amp;nbsp;ID=sa;Password=sasa&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;commandText&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;INSERT&amp;nbsp;INTO&amp;nbsp;Log([Date],[Thread],[Level],[Logger],[Message],[Exception])&amp;nbsp;VALUES&amp;nbsp;(@log_date,&amp;nbsp;@thread,&amp;nbsp;@log_level,&amp;nbsp;@logger,&amp;nbsp;@message,&amp;nbsp;@exception)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@log_date&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DateTime&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.RawTimeStampLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@thread&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;255&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%thread&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@log_level&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%level&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@logger&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;255&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%logger&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@message&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;4000&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%message&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@exception&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2000&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.ExceptionLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;root&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;level&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;INFO&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--启用按日期分割--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;appender-&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderByDate&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--启用按容量分割--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;lt;appender-&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderBySize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--启用保存到数据库--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;lt;appender-&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AdoNetAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/root&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/log4net&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第三步：&lt;/p&gt;&lt;p&gt;在Global.asax文件中的Application_Start事件中添加如下代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Application_Start(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Code&amp;nbsp;that&amp;nbsp;runs&amp;nbsp;on&amp;nbsp;application&amp;nbsp;startup&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log4net.Config.XmlConfigurator.ConfigureAndWatch(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;FileInfo(Server.MapPath(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Log4Net.config&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第四步：调用LOG4net 写日志&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Button2_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ILog&amp;nbsp;logs&amp;nbsp;=&amp;nbsp;LogManager.GetLogger(&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;(TEST));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logs.Fatal(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Excption:这里就是要提示的LOG信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;也可以通过写一个LogHelper.cs类进行封装：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;log4net;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&amp;nbsp;SBIT.Web.Class&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;日志辅助类&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&amp;nbsp;LogHelper&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;log;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;LogHelper&amp;nbsp;logHelper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;初始化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;GetInstance()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logHelper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;LogHelper(&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;log;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;初始化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="configPath"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;GetInstance(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;nbsp;configPath)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logHelper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;LogHelper(configPath);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;log;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;构造函数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="configPath"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;LogHelper(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;nbsp;configPath)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(configPath))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log&amp;nbsp;=&amp;nbsp;log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log4net.Config.XmlConfigurator.Configure(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;System.IO.FileInfo(configPath));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log&amp;nbsp;=&amp;nbsp;log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;通过封装类写日志的方法如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;logs&amp;nbsp;=&amp;nbsp;LogHelper.GetInstance();&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;LogManager.GetLogger(typeof(TEST));&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Button2_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logs.Fatal(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Excption:这里就是要提示的LOG信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;代码下载如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/huanghai223/ReportProject_web.rar" target="_blank"&gt;/Files/huanghai223/ReportProject_web.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2369555.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369555.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/02/27/2369548.html</id><title type="text">log4net简介</title><summary type="text">1. log4net简介log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级，以不同的格式，输出到不同的媒介。Java平台下，它还有一个姐妹组件——log4j。log4net的下载地址：http://logging.apache.org/log4net/download.html2. log4net的组成log4net主要由五部分组成，分别为Appenders、Filters、Layouts、Loggers和ObjectRenders。2.1 AppendersAppenders用来定义日志的输出方式。它还可以通过配置Filt</summary><published>2012-02-27T03:22:00Z</published><updated>2012-02-27T03:22:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369548.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369548.html"/><content type="html">&lt;div class="bct fc05 fc11 nbw-blog ztag js-fs2"&gt;&lt;p&gt;&lt;strong&gt;1. log4net简介&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级，以不同的格式，输出到不同的媒介。Java平台下，它还有一个姐妹组件&amp;mdash;&amp;mdash;log4j。&lt;/p&gt;&lt;p&gt;log4net的下载地址：&lt;a href="http://logging.apache.org/log4net/download.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://logging.apache.org/log4net/download.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. log4net的组成&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;log4net主要由五部分组成，分别为Appenders、Filters、Layouts、Loggers和Object&amp;nbsp;Renders。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.1 Appenders&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Appenders用来定义日志的输出方式。它还可以通过配置Filters和Layout来实现日志的过滤和输出格式。&lt;/p&gt;&lt;p&gt;它的输出方式有：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。&lt;/li&gt;&lt;li&gt;AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。&lt;/li&gt;&lt;li&gt;AspNetTraceAppender&amp;nbsp;&amp;nbsp;能用asp.net中Trace的方式查看记录的日志。&lt;/li&gt;&lt;li&gt;BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。&lt;/li&gt;&lt;li&gt;ConsoleAppender 将日志输出到应用程序控制台。&lt;/li&gt;&lt;li&gt;EventLogAppender 将日志写到Windows&amp;nbsp;Event&amp;nbsp;Log。&lt;/li&gt;&lt;li&gt;FileAppender 将日志输出到文件。&lt;/li&gt;&lt;li&gt;ForwardingAppender 发送日志事件到子Appenders。&lt;/li&gt;&lt;li&gt;LocalSyslogAppender 将日志写到local&amp;nbsp;syslog&amp;nbsp;service&amp;nbsp;(仅用于UNIX环境下)。&lt;/li&gt;&lt;li&gt;MemoryAppender 将日志存到内存缓冲区。&lt;/li&gt;&lt;li&gt;NetSendAppender 将日志输出到Windows&amp;nbsp;Messenger&amp;nbsp;service.这些日志信息将在用户终端的对话框中显示。&lt;/li&gt;&lt;li&gt;OutputDebugStringAppender 将日志输出到Debuger，如果程序没有Debuger，就输出到系统Debuger。如果系统Debuger也不可用，将忽略消息。&lt;/li&gt;&lt;li&gt;RemoteSyslogAppender&amp;nbsp;通过UDP网络协议将日志写到Remote&amp;nbsp;syslog&amp;nbsp;service。&lt;/li&gt;&lt;li&gt;RemotingAppender 通过.NET&amp;nbsp;Remoting将日志写到远程接收端。&lt;/li&gt;&lt;li&gt;RollingFileAppender 将日志以回滚文件的形式写到文件中。&lt;/li&gt;&lt;li&gt;SmtpAppender 将日志写到邮件中。&lt;/li&gt;&lt;li&gt;SmtpPickupDirAppender 将消息以文件的方式放入一个目录中，像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。&lt;/li&gt;&lt;li&gt;TelnetAppender 客户端通过Telnet来接受日志事件。&lt;/li&gt;&lt;li&gt;TraceAppender 将日志写到.NET&amp;nbsp;trace&amp;nbsp;系统。&lt;/li&gt;&lt;li&gt;UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;2.2 Filters&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用过滤器可以过滤掉Appender输出的内容。过滤器有以下几种：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;DenyAllFilter 阻止所有的日志事件被记录&lt;/li&gt;&lt;li&gt;LevelMatchFilter 只有指定等级的日志事件才被记录&lt;/li&gt;&lt;li&gt;LevelRangeFilter 日志等级在指定范围内的事件才被记录&lt;/li&gt;&lt;li&gt;LoggerMatchFilter Logger名称匹配，才记录&lt;/li&gt;&lt;li&gt;PropertyFilter 消息匹配指定的属性值时才被记录&lt;/li&gt;&lt;li&gt;StringMathFilter 消息匹配指定的字符串才被记录&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;2.3 Layouts&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Layout用于控制Appender的输出格式，可以使线性的也可以使XML。一个Appender只能有一个Layout。&lt;/p&gt;&lt;p&gt;最常用的Layout应该是用户自定义格式的PatternLayout，其次是SimpleLayout和ExceptionLayout。然后还有4个Layout，其中有两个是输出Xml的Layout，但是中文会有问题。&lt;/p&gt;&lt;p&gt;ExceptionLayout需要给Logger的方法传入Exception对象作为参数才起作用，否则就什么也不输出。输出的时候会包含Message和Trace&lt;/p&gt;&lt;p&gt;最后说一下PatterLayout的格式化字符串：&lt;/p&gt;&lt;table style="width: 90%;" border="1" cellspacing="0" cellpadding="0" align="center"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;th width="10%"&gt;Conversion Pattern Name&lt;/th&gt;&lt;th width="50%"&gt;Effect&lt;/th&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;a&lt;/td&gt;&lt;td&gt;等价于&lt;strong&gt;appdomain&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;appdomain&lt;/td&gt;&lt;td&gt;引发日志事件的应用程序域的友好名称。（我在使用中一般是可执行文件的名字。）&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;c&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;logger&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;type&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;class&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;type&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;d&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;date&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;&lt;p&gt;发生日志事件的本地时间。 使用 DE&amp;lt;%utcdate 输出UTC时间。date后面还可以跟一个日期格式，用大括号括起来。DE&amp;lt;例如：&lt;strong&gt;%date{HH:mm:ss,fff}&lt;/strong&gt;或者&lt;strong&gt;%date{dd MMM yyyy HH:mm:ss,fff}&lt;/strong&gt;。如果date后面什么也不跟，将使用ISO8601 格式 。&lt;/p&gt;&lt;p&gt;日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。&lt;/p&gt;&lt;p&gt;另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 &lt;strong&gt;AbsoluteTimeDateFormatter&lt;/strong&gt;, &lt;strong&gt;DateTimeDateFormatter&lt;/strong&gt;和&lt;strong&gt;Iso8601DateFormatter&lt;/strong&gt;。例如： &lt;strong&gt;%date{ISO8601}&lt;/strong&gt;或&lt;strong&gt;%date{ABSOLUTE}&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;它们的性能要好于ToString。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;exception&lt;/td&gt;&lt;td&gt;&lt;p&gt;异常信息&lt;/p&gt;&lt;p&gt;日志事件中必须存了一个异常对象，如果日志事件不包含没有异常对象，将什么也不输出。异常输出完毕后会跟一个换行。一般会在输出异常前加一个换行，并将异常放在最后。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;F&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;file&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;file&lt;/td&gt;&lt;td&gt;&lt;p&gt;发生日志请求的源代码文件的名字。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;只在调试的时候有效。调用本地信息会影响性能。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;identity&lt;/td&gt;&lt;td&gt;&lt;p&gt;当前活动用户的名字(Principal.Identity.Name).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;会影响性能。（我测试的时候%identity返回都是空的。）&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;l&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;location&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;L&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;line&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;location&lt;/td&gt;&lt;td&gt;&lt;p&gt;引发日志事件的方法（包括命名空间和类名），以及所在的源文件和行号。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;会影响性能。没有pdb文件的话，只有方法名，没有源文件名和行号。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;level&lt;/td&gt;&lt;td&gt;&lt;p&gt;日志事件等级&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;line&lt;/td&gt;&lt;td&gt;&lt;p&gt;引发日志事件的行号&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;会影响性能。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;logger&lt;/td&gt;&lt;td&gt;&lt;p&gt;记录日志事件的Logger对象的名字。&lt;/p&gt;&lt;p&gt;可以使用精度说明符控制Logger的名字的输出层级，默认输出全名。&lt;/p&gt;&lt;p&gt;注意，精度符的控制是从右开始的。例如：logger 名为 "a.b.c"， 输出模型为 &lt;strong&gt;%logger{2}&lt;/strong&gt; ，将输出"b.c"。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;m&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;message&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;M&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;method&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;message&lt;/td&gt;&lt;td&gt;&lt;p&gt;由应用程序提供给日志事件的消息。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;mdc&lt;/td&gt;&lt;td&gt;&lt;p&gt;MDC (旧为：ThreadContext.Properties) 现在是事件属性的一部分。 保留它是为了兼容性，它等价于 &lt;strong&gt;property&lt;/strong&gt;。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;method&lt;/td&gt;&lt;td&gt;&lt;p&gt;发生日志请求的方法名（只有方法名而已）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;会影响性能。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;n&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;newline&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;newline&lt;/td&gt;&lt;td&gt;&lt;p&gt;换行符&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;ndc&lt;/td&gt;&lt;td&gt;&lt;p&gt;NDC (nested diagnostic context)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;p&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;level&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;P&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;property&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;properties&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;property&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;property&lt;/td&gt;&lt;td&gt;&lt;p&gt;输出事件的特殊属性。例如： &lt;strong&gt;%property{user}&lt;/strong&gt; 输出user属性。属性是由loggers或appenders添加到时间中的。 有一个默认的属性"DE&amp;lt;log4net:HostName"总是会有。DE&amp;lt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;%property&lt;/strong&gt;将输出所以的属性 。&lt;/p&gt;&lt;p&gt;（我除了知道可以用它获得主机名外，还不知道怎么用。）&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&amp;nbsp;&lt;/dt&gt;&lt;/dl&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;r&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;timestamp&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;t&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;thread&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;timestamp&lt;/td&gt;&lt;td&gt;&lt;p&gt;从程序启动到事件发生所经过的毫秒数。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;thread&lt;/td&gt;&lt;td&gt;&lt;p&gt;引发日志事件的线程，如果没有线程名就使用线程号。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;type&lt;/td&gt;&lt;td&gt;&lt;p&gt;引发日志请求的类的全名。.&lt;/p&gt;&lt;p&gt;可以使用精度控制符。例如： 类名是 "log4net.Layout.PatternLayout", 格式模型是 &lt;strong&gt;%type{1}&lt;/strong&gt; 将输出"PatternLayout"。（也是从右开始的。）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;会影响性能。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;u&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;identity&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;username&lt;/td&gt;&lt;td&gt;&lt;p&gt;当前用户的WindowsIdentity。（类似：HostName\Username）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;会影响性能。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;utcdate&lt;/td&gt;&lt;td&gt;&lt;p&gt;发生日志事件的UTC时间。DE&amp;lt;后面还可以跟一个日期格式，用大括号括起来。DE&amp;lt;例如：&lt;strong&gt;%utcdate{HH:mm:ss,fff}&lt;/strong&gt;或者&lt;strong&gt;%utcdate{dd MMM yyyy HH:mm:ss,fff}&lt;/strong&gt;。如果utcdate后面什么也不跟，将使用ISO8601 格式 。&lt;/p&gt;&lt;p&gt;日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。&lt;/p&gt;&lt;p&gt;另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 &lt;strong&gt;AbsoluteTimeDateFormatter&lt;/strong&gt;, &lt;strong&gt;DateTimeDateFormatter&lt;/strong&gt;和&lt;strong&gt;Iso8601DateFormatter&lt;/strong&gt;。例如： &lt;strong&gt;%date{ISO8601}&lt;/strong&gt;或&lt;strong&gt;%date{ABSOLUTE}&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;它们的性能要好于ToString。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;w&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;username&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;x&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;ndc&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;等价于 &lt;strong&gt;mdc&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;%&lt;/td&gt;&lt;td&gt;&lt;p&gt;%%输出一个百分号&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;关于调用本地信息（caller location information）的说明：&lt;/p&gt;&lt;p&gt;%type %file %line %method %location %class %C %F %L %l %M 都会调用本地信息。这样做会影响性能。本地信息使用System.Diagnostics.StackTrace得到。.Net 1.0 不支持System.Diagnostics.StackTrace 类。&lt;/p&gt;&lt;p&gt;本地信息在调试模式下可以正常获取，在非调试模式下可能获取不到，或只能获取一部分。（根据我的测试，其实是需要有一个程序数据库（.pdb）文件。）&lt;/p&gt;&lt;p&gt;%property 这个东西中的属性好像是要用代码来设置(除了默认属性&lt;span style="font-family: Courier New;"&gt;log4net:HostName&lt;/span&gt;)。&lt;/p&gt;&lt;p&gt;转义字符的修饰符：&lt;/p&gt;&lt;table style="width: 90%;" border="1" cellspacing="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Format modifier&lt;/th&gt;&lt;th&gt;left justify&lt;/th&gt;&lt;th&gt;minimum width&lt;/th&gt;&lt;th&gt;maximum width&lt;/th&gt;&lt;th&gt;comment&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="middle"&gt;%20logger&lt;/td&gt;&lt;td align="middle"&gt;false&lt;/td&gt;&lt;td align="middle"&gt;20&lt;/td&gt;&lt;td align="middle"&gt;none&lt;/td&gt;&lt;td&gt;&lt;p&gt;如果logger名不足20个字符，就在&lt;strong&gt;左边&lt;/strong&gt;补空格。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="middle"&gt;%-20logger&lt;/td&gt;&lt;td align="middle"&gt;true&lt;/td&gt;&lt;td align="middle"&gt;20&lt;/td&gt;&lt;td align="middle"&gt;none&lt;/td&gt;&lt;td&gt;&lt;p&gt;如果logger名不足20个字符，就在&lt;strong&gt;右边&lt;/strong&gt;补空格。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="middle"&gt;%.30logger&lt;/td&gt;&lt;td align="middle"&gt;NA&lt;/td&gt;&lt;td align="middle"&gt;none&lt;/td&gt;&lt;td align="middle"&gt;30&lt;/td&gt;&lt;td&gt;&lt;p&gt;超过30个字符将截断。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="middle"&gt;%20.30logger&lt;/td&gt;&lt;td align="middle"&gt;false&lt;/td&gt;&lt;td align="middle"&gt;20&lt;/td&gt;&lt;td align="middle"&gt;30&lt;/td&gt;&lt;td&gt;&lt;p&gt;logger名要在20到30之间，少了在&lt;strong&gt;左边&lt;/strong&gt;补空格，多了截断。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="middle"&gt;%-20.30logger&lt;/td&gt;&lt;td align="middle"&gt;true&lt;/td&gt;&lt;td align="middle"&gt;20&lt;/td&gt;&lt;td align="middle"&gt;30&lt;/td&gt;&lt;td&gt;&lt;p&gt;logger名要在20到30之间，少了在&lt;strong&gt;右边&lt;/strong&gt;补空格，多了截断。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;2.4 Loggers&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Logger是直接和应用程序交互的组件。Logger只是产生日志，然后由它引用的Appender记录到指定的媒介，并由Layout控制输出格式。&lt;/p&gt;&lt;p&gt;Logger提供了多种方式来记录一个日志消息，也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体（Named Entity）来维护。log4net使用继承体系，也就是说假如存在两个Logger，名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性。&lt;/p&gt;&lt;p&gt;下面说一下日志的等级，它们由高到底分别为：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;OFF &amp;gt; FATAL &amp;gt; ERROR &amp;gt; WARN &amp;gt; INFO &amp;gt; DEBUG&amp;nbsp; &amp;gt; ALL&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;其中OFF表示停用所以日志记录，ALL表示所有日志都可以记录。&lt;/p&gt;&lt;p&gt;Logger实现的ILog接口，ILog定义了5个方法（Debug,Inof,Warn,Error,Fatal）分别对不同的日志等级记录日志。这5个方法还有5个重载。我们以Debug为例说明一下，其它的和它差不多。&lt;/p&gt;&lt;p&gt;ILog中对Debug方法的定义如下：&lt;/p&gt;&lt;p&gt;void Debug(object message);&lt;/p&gt;&lt;p&gt;void Debug(object message, Exception ex);&lt;/p&gt;&lt;p&gt;还有一个布尔属性：&lt;/p&gt;&lt;p&gt;bool IsDebugEnabled { get; }&lt;/p&gt;&lt;p&gt;如果使用Debug(object message, Exception ex)，则无论Layout中是否定义了%exception，默认配置下日志都会输出Exception。包括Exception的Message和Trace。如果使用Debug(object message)，则无论如何日志是不会输出Exception的，因为没有啊。&lt;/p&gt;&lt;p&gt;最后还要说一个LogManager类，它用来管理所应得Logger。它的GetLogger静态方法，可以获得配置文件中相应的Logger：&lt;/p&gt;&lt;p&gt;log4net.ILog log = log4net.LogManager.GetLogger("logger-name");&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.5 Object Renders&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我对Object Renders的理解是这样的。它将告诉logger如何把一个对象转化为一个字符串记录到日志里。（你可能注意到了，ILog中定义的接口接收的参数是Object，而不是String。）&lt;/p&gt;&lt;p&gt;例如你想把Orange对象记录到日志中，但此时logger只会调用Orange默认的ToString方法而已。所以要定义一个OrangeRender类实现log4net.ObjectRender.IObjectRender接口，然后注册它。这时logger就会知道如何把Orange记录到日志中了。&lt;/p&gt;&lt;p&gt;不过我没有测试过，具体怎么做还是看文档吧。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.6 Repository&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Repository主要用于日志对象组织结构的维护。如果你不想自己扩展log4Net的话，可以用不找它。但我还是觉得应该提一下。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.&amp;nbsp; 在程序中使用log4net&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在使用log4net前要先做一些配置的工作。配置工作可以在配置文件中完成也可以再程序中用代码完成。我们主要讲在配置文件中如何配置log4net，因为这样更方便灵活，而且还不用重新编译代码。至于如何使用代码进行配置，请查看文档和后面参考中的连接。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1 定义配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;log4net的配置可以放在应用程序的默认配置文件中（app.config或web.config），也可以再你自己的配置文件中。&lt;/p&gt;&lt;p&gt;如果用Visual Studio来编辑配置文件，它对log4net的标签是不会智能提示和自动补全的。当然也不是不可能，看这里：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/didasoft/archive/2007/07/23/log4net_xsd.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://www.cnblogs.com/didasoft/archive/2007/07/23/log4net_xsd.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这里要感谢Jerry同学，为我们提供的xsd schema。&lt;/p&gt;&lt;p&gt;废话少说，先看一个完整的配置文件的例子：&lt;/p&gt;&lt;p&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;configSections&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name="log4net" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.2.10" /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/configSections&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;log4net&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;root&amp;gt; &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;level value="WARN" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender-ref ref="LogFileAppender" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/root&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;logger name="testApp.Logging"&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;level value="DEBUG"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/logger&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;appender name="LogFileAppender"&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Appender.FileAppender" &amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="File" value="log-file.txt" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="AppendToFile" value="true" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt; &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Header" value="[Header]&amp;amp;#13;&amp;amp;#10;"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Footer" value="[Footer]&amp;amp;#13;&amp;amp;#10;"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="ConversionPattern" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value="%d [%t] %-5p %c [%x]&amp;nbsp; - %m%n" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/layout&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;filter type="log4net.Filter.LevelRangeFilter"&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="LevelMin" value="DEBUG" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="LevelMax" value="WARN" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/filter&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/appender&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;appender name="ConsoleAppender" &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Appender.ConsoleAppender" &amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="ConversionPattern" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value="%d [%t] %-5p %c [%x] - %m%n" /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/layout&amp;gt; &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;/appender&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/log4net&amp;gt; &lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;p&gt;如果log4net的配置不是放在应用程序的配置文件里，而是在自己定义的文件里，&amp;lt;configSection&amp;gt;节点里的&amp;lt;section&amp;gt;节点是不需要的。&lt;/p&gt;&lt;p&gt;下面对其中的标签元素做一下说明。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.1 &amp;lt;log4net&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;所有的配置都要在&amp;lt;log4net&amp;gt;元素里定义。&lt;/p&gt;&lt;p&gt;支持的属性：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;debug&lt;/td&gt;&lt;td&gt;可选，取值是true或false，默认是false。设置为true，开启log4net的内部调试。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;update&lt;/td&gt;&lt;td&gt;可选，取值是Merge(合并)或Overwrite(覆盖)，默认值是Merge。设置为Overwrite，在提交配置的时候会重置已经配置过的库。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;threshold&lt;/td&gt;&lt;td&gt;可选，取值是repository（库）中注册的level，默认值是ALL。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;支持的子元素：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;appender&lt;/td&gt;&lt;td&gt;0或多个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;logger&lt;/td&gt;&lt;td&gt;0或多个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;renderer&lt;/td&gt;&lt;td&gt;0或多个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;root&lt;/td&gt;&lt;td&gt;最多一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;param&lt;/td&gt;&lt;td&gt;0或多个&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.2 &amp;lt;root&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;实际上就是一个根logger，所有其它logger都默认继承它。root元素没有属性。&lt;/p&gt;&lt;p&gt;支持的子元素：&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;appender-ref&lt;/td&gt;&lt;td&gt;0个或多个，要引用的appender的名字。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;level&lt;/td&gt;&lt;td&gt;最多一个。 只有在这个级别或之上的事件才会被记录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;param&lt;/td&gt;&lt;td&gt;0个或多个， 设置一些参数。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.3 &amp;lt;logger&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;支持的属性：&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;name&lt;/td&gt;&lt;td&gt;必须的，logger的名称&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;additivity&lt;/td&gt;&lt;td&gt;可选，取值是true或false，默认值是true。设置为false时将阻止父logger中的appender。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;支持的子元素：&lt;br /&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;appender-ref&lt;/td&gt;&lt;td&gt;0个或多个，要引用的appender的名字。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;level&lt;/td&gt;&lt;td&gt;最多一个。 只有在这个级别或之上的事件才会被记录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;param&lt;/td&gt;&lt;td&gt;0个或多个， 设置一些参数。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.4 &amp;lt;appender&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;定义日志的输出方式，只能作为 log4net 的子元素。name属性必须唯一，type属性必须指定。&lt;/p&gt;&lt;p&gt;支持的属性：&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;name&lt;/td&gt;&lt;td&gt;必须的，Appender对象的名称&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;type&lt;/td&gt;&lt;td&gt;必须的，Appender对象的输出类型&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;支持的子元素：&lt;br /&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;appender-ref&lt;/td&gt;&lt;td&gt;0个或多个，允许此appender引用其他appender，并不是所以appender类型都支持。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;filter&lt;/td&gt;&lt;td&gt;0个或多个，定义此app使用的过滤器。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;layout&lt;/td&gt;&lt;td&gt;最多一个。定义appender使用的输出格式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;param&lt;/td&gt;&lt;td&gt;0个或多个， 设置Appender类中对应的属性的值。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;实际上&amp;lt;appender&amp;gt;所能包含的子元素远不止上面4个。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.5 &amp;lt;layout&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;布局，只能作为&amp;lt;appender&amp;gt;的子元素。&lt;/p&gt;&lt;p&gt;支持的属性：&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;type&lt;/td&gt;&lt;td&gt;必须的，Layout的类型&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;支持的子元素：&lt;br /&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;param&lt;/td&gt;&lt;td&gt;0个或多个， 设置一些参数。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.6 &amp;lt;filter&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;过滤器，只能作为&amp;lt;appender&amp;gt;的子元素。&lt;/p&gt;&lt;p&gt;支持的属性：&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;type&lt;/td&gt;&lt;td&gt;必须的，Filter的类型&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;支持的子元素：&lt;br /&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;param&lt;/td&gt;&lt;td&gt;0个或多个， 设置一些参数。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.7 &amp;lt;param&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;param&amp;gt;元素可以是如何元素的子元素。&lt;/p&gt;&lt;p&gt;支持的属性：&lt;/p&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;name&lt;/td&gt;&lt;td&gt;必须的，取值是父对象的参数名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;value&lt;/td&gt;&lt;td&gt;可选的，value和type中，必须有一个属性被指定。value是一个能被转化为参数值的字符串。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;type&lt;/td&gt;&lt;td&gt;可选的，value和type中，必须有一个属性被指定。type是一个类型名，如果type不是在log4net程序集中定义的，就需要使用全名。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;支持的子元素：&lt;br /&gt;&lt;table style="width: 90%;" border="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;param&lt;/td&gt;&lt;td&gt;0个或多个， 设置一些参数。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2 使用配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2.1 关联配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;log4net默认关联的是应用程序的配置文件(AppName.exe.config)，可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性：log4net.Config.XmlConifguratorAttribute。&lt;/p&gt;&lt;p&gt;XmlConfiguratorAttribute有3个属性：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;ConfigFile&lt;/strong&gt;配置文件的名字，文件路径相对于应用程序目录(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起使用。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ConfigFileExtension&lt;/strong&gt;配置文件的扩展名，文件路径相对于应用程序的目录。ConfigFileExtension属性不能和ConfigFile属性一起使用。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Watch&lt;/strong&gt; 如果将Watch属性设置为true，就会监视配置文件。当配置文件发生变化的时候，就会重新加载。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;如果ConfigFile和ConfigFileExtension都没有设置，则使用应用程序的配置文件(AppName.exe.config)。&lt;/p&gt;&lt;p&gt;举例：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;[assembly:&amp;nbsp;log4net.config.XmlConfigurator(Watch=&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span style="color: #006699;"&gt;true&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;)] &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="color: #008200;"&gt;//监视默认的配置文件，AppName.exe.config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;[assembly:&amp;nbsp;log4net.config.XmlConfigurator(ConfigFileExtension=&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;"&gt;"log4net"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,Watch=&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;span style="color: #006699;"&gt;true&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;)] &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="color: #008200;"&gt;//监视配置文件，AppName.exe.log4net &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;[assembly:&amp;nbsp;log4net.config.XmlConfigurator(ConfigFile=&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;"&gt;"log4net.config"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)] &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="color: #008200;"&gt;//使用配置文件log4net.config，不监视改变。&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;[assembly: log4net.config.XmlConfigurator(Watch=true)] //监视默认的配置文件，AppName.exe.config [assembly: log4net.config.XmlConfigurator(ConfigFileExtension="log4net",Watch=true)] //监视配置文件，AppName.exe.log4net [assembly: log4net.config.XmlConfigurator(ConfigFile="log4net.config")] //使用配置文件log4net.config，不监视改变。&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2.2 获取日志对象&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;log4net.ILog logger = log4net.LogManager.GetLogger("LoggerName");&lt;/p&gt;&lt;p&gt;LogManager还有其他多个方法，比如检查指定日志是否存在，返回所以日志对象等等。&lt;/p&gt;&lt;p&gt;特别的，如果日志名在配置文件中不存在，GetLogger方法会创建一个日志对象，它会继承它的父类的属性。例如"x.y.z"会继承"x.y"的属性，如果没有"x.y"就继承"x"的属性，如果连"x"也没有，会继承root的属性。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2.3 使用日志对象&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;获取日志对象后，使用它是很简单的，只要调用对应的Debug, Info等方法就可以了。不过有一件事要说一下，我们以Debug为例。&lt;/p&gt;&lt;p&gt;if (log.isDebugEnabled)&amp;nbsp; {log.Debug(...)}&lt;/p&gt;&lt;p&gt;文档上是这么说的&amp;ldquo;如果Debug功能不被使用，就不会有参数构造上的开销。但是，另一方面，如果logger的Debug功能被起用，就会有俩倍的开销用于评估logger是否被起用：一次是判断debugEnabled，一次是判断debug是否被启用。但这不是极重的负担，因为评估logger的时间只有整个log语句执行时间的1%。&amp;rdquo;&lt;/p&gt;&lt;p&gt;也就是说Debug方法会先判断Debug是否启用，再记录日志。使用isDebugEnabled，是否会带来性能提升，是要看情况的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.3 一些配置的例子&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;配置文件的结构可以参照3.1节，这里只给出部分元素的使用实例。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.3.1 &amp;lt;filter&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1) 日志等级过滤器&lt;/p&gt;&lt;p&gt;&amp;lt;filter type="log4net.Filter.LevelRangeFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="levelMin" value="WARN" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="levelMax" value="FATAL" /&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;/p&gt;&lt;p&gt;其中，日志等级WARN,FATAL必须大写。&lt;/p&gt;&lt;p&gt;2) 字符串过滤器&lt;/p&gt;&lt;p&gt;&amp;lt;filter type="log4net.Filter.StringMatchFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="StringToMatch" value="Warn"/&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;filter type="log4net.Filter.StringMatchFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="StringToMatch" value="Error"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="AcceptOnMatch" value="true"/&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;filter type="log4net.Filter.DenyAllFilter" /&amp;gt;&lt;/p&gt;&lt;p&gt;上面的例子，只输出日志信息中包含字符串"Warn"或"Error"的才输出。最后的DenyAllFilter会阻止所有的日志信息。&lt;/p&gt;&lt;p&gt;过滤器还有一个AcceptOnMatch属性，默认为true，表示匹配的时候提交日志事件。设置成false的时候，不同类型的过滤器是不一样的。StringMatchFilter会不提交日志事件，造成匹配的日志信息不被输出。&lt;/p&gt;&lt;p&gt;StringMatchFilter还有一个RegexToMatch属性，用来设置正则表达式。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.3.2 &amp;lt;appender&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1)&amp;nbsp;&lt;strong&gt;AdoNetAppender&lt;/strong&gt; 将日志写入到Sql Server数据库&lt;/p&gt;&lt;p&gt;数据库表的Create语句：&lt;/p&gt;&lt;p&gt;CREATE TABLE [dbo].[Log] (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Id] [int] IDENTITY (1, 1) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Date] [datetime] NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Thread] [varchar] (255) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Level] [varchar] (50) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Logger] [varchar] (255) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Message] [varchar] (4000) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Exception] [varchar] (2000) NULL&lt;br /&gt;)&lt;/p&gt;&lt;p&gt;配置文件：&lt;/p&gt;&lt;p&gt;&amp;lt;appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="bufferSize" value="100" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="connectionType" value="System.Data.SqlClient.SqlConnection" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="connectionString" value="data source=DatabaseServer;initial catalog=DatabaseName;integrated security=false;persist security info=True;User ID=user;Password=password" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="commandText" value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="parameter" type="log4net.Appender.AdoNetAppenderParameter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="parameterName" value="@log_date" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="dbType" value="DateTime" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="layout" type="log4net.Layout.RawTimeStampLayout" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="parameter" type="log4net.Appender.AdoNetAppenderParameter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="parameterName" value="@thread" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="dbType" value="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="size" value="255" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="layout" type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="conversionPattern" value="%thread" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameterName value="@log_level" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dbType value="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;size value="50" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%level" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameterName value="@logger" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dbType value="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;size value="255" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%logger" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameterName value="@message" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dbType value="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;size value="4000" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%message" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameterName value="@exception" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dbType value="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;size value="2000" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.ExceptionLayout" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;lt;/appender&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我经过测试，使用&amp;lt;param&amp;gt;元素，和&amp;lt;parameter&amp;gt;元素都可以，还可以混合使用。对于&amp;lt;parameter&amp;gt;等元素，log4net的文档上并没有说，但文档的例子中却在用。我个人感觉很多类属性都可以做标签用，并不限于文档中说的那几个。&lt;/p&gt;&lt;p&gt;上面只是Sql Server的配置，其他数据库见文档：&lt;a href="http://logging.apache.org/log4net/release/config-examples.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://logging.apache.org/log4net/release/config-examples.html&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2) &lt;strong&gt;Console&lt;/strong&gt;&amp;nbsp;输出到控制台&lt;/p&gt;&lt;p&gt;&amp;lt;appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;target value="Console.Error" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;&lt;p&gt;target默认是输出到标准输出流的(Console.out)，这里输出到标准错误输出流(Console.Error)。&lt;/p&gt;&lt;p&gt;3) &lt;strong&gt;ColoredConsoleAppender&lt;/strong&gt; 高亮输出到控制台&lt;/p&gt;&lt;p&gt;&amp;lt;appender name="ColoredConsole" type="log4net.Appender.ColoredConsoleAppender"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;level value="ERROR" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;foreColor value="White" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;backColor value="Red, HighIntensity" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;&lt;p&gt;上例中，高于等于ERROR的日志都会用指定的前景色和背景色显示。也可以有多个&amp;lt;mapping&amp;gt;&lt;/p&gt;&lt;p&gt;4) &lt;strong&gt;FileAppender&lt;/strong&gt; 输出到文件&lt;/p&gt;&lt;p&gt;&amp;lt;appender name="FileAppender" type="log4net.Appender.FileAppender"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="File" value="${Tmp}\log.txt"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param name="AppendToFile" value="false"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Encoding" value="GB2312" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Header" type="log4net.Util.PatternString" value="[%date]%newline"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Footer" value="--------------------------------------------------&amp;amp;#13;&amp;amp;#10;"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="ConversionPattern" value="logger: %.30logger Message:%message %newline"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;&lt;p&gt;上面是一个复杂的FileAppender，其实除了File属性，其他的属性都是可选的。这个属性值可以使用系统的环境变量，上面就用到了系统的临时文件夹${Tmp}。也可以像layout的Header属性那样使用转义字符串，像这样：&lt;/p&gt;&lt;p&gt;&amp;lt;param name="file" type="log4net.Util.PatternString" value="%date{HHmmss} - log.txt"/&amp;gt;&lt;/p&gt;&lt;p&gt;注意文件名要符合操作系统的命名规范。&lt;/p&gt;&lt;p&gt;layout的Footer属性，因为没有将type设置为PatternString，所以不能使用转义字符串。所以要想换行就只有用xml实体了，&amp;amp;#13;&amp;amp;#10;表示换行回车\n\r。layout的Header和Footer在很多Appender中是没有用的，比如ConsoleAppender和AdoAppender。&lt;/p&gt;&lt;p&gt;FileAppender的AppendToFile表示日志写入文件的方式是追加还是覆盖，默认是true，追加。Encoding用来设置文件编码，不知道问什么我测试的时候，好像不起作用。lockingModel没搞懂，大概是多进程操做同一个日志文件的时候用的吧。&lt;/p&gt;&lt;p&gt;5) &lt;strong&gt;RollingFileAppender&lt;/strong&gt; 输出到可滚动的文件&lt;/p&gt;&lt;p&gt;RollingFileAppender继承自FileAppender，FileAppender的属性，它都可以用。一个简单的例子：&lt;/p&gt;&lt;p&gt;&amp;lt;appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;file value="log.txt" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appendToFile value="true" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;rollingStyle value="Size" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;maxSizeRollBackups value="10" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;maximumFileSize value="100KB" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;staticLogFileName value="true" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;&lt;p&gt;上例中，如果log.txt的文件大小超过100KB，就会把log.txt做备份，备份文件名为log.txt.1,log.txt.2&amp;hellip;&amp;hellip;。但是备份文件的最大数是10个。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;说明：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;a. 本文中使用的log4net版本是1.2.10。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;参考：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://logging.apache.org/log4net/" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://logging.apache.org/log4net/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://log4j.jaxmao.org/log4j/docs/manual.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://log4j.jaxmao.org/log4j/docs/manual.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dragon/archive/2005/03/24/124254.aspx" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://www.cnblogs.com/dragon/archive/2005/03/24/124254.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://heroman.cnblogs.com/archive/2006/01/09/314053.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://heroman.cnblogs.com/archive/2006/01/09/314053.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/didasoft/archive/2007/07/23/log4net_xsd.html" target="_blank"&gt;&lt;span style="color: #6fbc4c;"&gt;http://www.cnblogs.com/didasoft/archive/2007/07/23/log4net_xsd.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2369548.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369548.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/02/27/2369543.html</id><title type="text">Log4Net组件的应用详解</title><summary type="text">第一步：添加并应用Log4net.dll。然后在Web.config文件中添加下面的配置局&lt;configSections&gt;&lt;sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/&gt;&lt;/configSections&gt;复制代码第二步：新建Log4Net.config的配置文件，并在其中添加下面的配置信息：&lt;?xmlversion="1.0"encoding="UTF-8&amp;</summary><published>2012-02-27T03:19:00Z</published><updated>2012-02-27T03:19:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369543.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369543.html"/><content type="html">&lt;p&gt;第一步：&lt;/p&gt;&lt;p&gt;添加并应用Log4net.dll。然后在Web.config文件中添加下面的配置局&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Config.Log4NetConfigurationSectionHandler,&amp;nbsp;log4net&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第二步：&lt;/p&gt;&lt;p&gt;新建Log4Net.config的配置文件，并在其中添加下面的配置信息：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;lt;?xml&amp;nbsp;version=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1.0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;encoding=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;UTF-8&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;?&amp;gt;&lt;br /&gt;&amp;lt;log4net&amp;nbsp;debug=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--按日期分割日志文件&amp;nbsp;一天一个--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderByDate&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.RollingFileAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--是否续写--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AppendToFile&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--最小锁定模型以允许多个进程可以写入同一个文件--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LockingModel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.FileAppender.MinimalLock&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--保存路径--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;File&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d:\Log\\&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DatePattern&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;yyyy-MM-dd.LOG&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RollingStyle&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Date&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ConversionPattern&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;时间:%d&amp;nbsp;%n级别:%level&amp;nbsp;%n类名:%c%n文件:%F&amp;nbsp;第%L行%n日志内容:%m%n-----------------------------------------%n%n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--按日志容量分割日志文件&amp;nbsp;10KB一个--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderBySize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.RollingFileAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--是否续写--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AppendToFile&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--最小锁定模型以允许多个进程可以写入同一个文件--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LockingModel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.FileAppender.MinimalLock&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--按照文件的大小进行变换日志文件--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RollingStyle&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Size&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;File&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log.txt&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--单个文件最大数量&amp;nbsp;好像只有在&amp;nbsp;按Size分割时有效--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MaximumFileSize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;200KB&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--保留的log文件数量&amp;nbsp;超过此数量后&amp;nbsp;自动删除之前的&amp;nbsp;&amp;nbsp;&amp;nbsp;好像只有在&amp;nbsp;按Size分割时有效--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MaxSizeRollBackups&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StaticLogFileName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ConversionPattern&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;发生时间:%d&amp;nbsp;%n事件级别:%level&amp;nbsp;%n相关类名:%c%n程序文件:%F&amp;nbsp;第%L行%n日志内容:%m%n-----------------------------------------%n%n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--记录日志到数据库--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender&amp;nbsp;name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AdoNetAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Appender.AdoNetAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bufferSize&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--缓冲大小--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;connectionType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;System.Data.SqlClient.SqlConnection,&amp;nbsp;System.Data,&amp;nbsp;Version=1.0.3300.0,&amp;nbsp;Culture=neutral,&amp;nbsp;PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;connectionString&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Data&amp;nbsp;Source=.\SQLEXPRESS;Initial&amp;nbsp;Catalog=CVDS;User&amp;nbsp;ID=sa;Password=sasa&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;commandText&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;INSERT&amp;nbsp;INTO&amp;nbsp;Log([Date],[Thread],[Level],[Logger],[Message],[Exception])&amp;nbsp;VALUES&amp;nbsp;(@log_date,&amp;nbsp;@thread,&amp;nbsp;@log_level,&amp;nbsp;@logger,&amp;nbsp;@message,&amp;nbsp;@exception)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@log_date&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DateTime&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.RawTimeStampLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@thread&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;255&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%thread&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@log_level&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%level&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@logger&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;255&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%logger&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@message&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;4000&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%message&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameterName&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@exception&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dbType&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;size&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2000&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout&amp;nbsp;type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;log4net.Layout.ExceptionLayout&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;root&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;level&amp;nbsp;value=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;INFO&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--启用按日期分割--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;appender-&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderByDate&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--启用按容量分割--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;lt;appender-&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LogFileAppenderBySize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--启用保存到数据库--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;lt;appender-&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;AdoNetAppender&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;/&amp;gt;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/root&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/log4net&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第三步：&lt;/p&gt;&lt;p&gt;在Global.asax文件中的Application_Start事件中添加如下代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Application_Start(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Code&amp;nbsp;that&amp;nbsp;runs&amp;nbsp;on&amp;nbsp;application&amp;nbsp;startup&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log4net.Config.XmlConfigurator.ConfigureAndWatch(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;FileInfo(Server.MapPath(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Log4Net.config&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第四步：调用LOG4net 写日志&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Button2_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ILog&amp;nbsp;logs&amp;nbsp;=&amp;nbsp;LogManager.GetLogger(&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;(TEST));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logs.Fatal(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Excption:这里就是要提示的LOG信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;也可以通过写一个LogHelper.cs类进行封装：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&amp;nbsp;log4net;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&amp;nbsp;SBIT.Web.Class&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;日志辅助类&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&amp;nbsp;LogHelper&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;log;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;LogHelper&amp;nbsp;logHelper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;初始化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;GetInstance()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logHelper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;LogHelper(&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;log;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;初始化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="configPath"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;GetInstance(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;nbsp;configPath)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logHelper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;LogHelper(configPath);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;log;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;构造函数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="configPath"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;LogHelper(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;nbsp;configPath)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(configPath))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log&amp;nbsp;=&amp;nbsp;log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log4net.Config.XmlConfigurator.Configure(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;System.IO.FileInfo(configPath));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log&amp;nbsp;=&amp;nbsp;log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;通过封装类写日志的方法如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt;&amp;nbsp;ILog&amp;nbsp;logs&amp;nbsp;=&amp;nbsp;LogHelper.GetInstance();&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;LogManager.GetLogger(typeof(TEST));&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Button2_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logs.Fatal(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Excption:这里就是要提示的LOG信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;代码下载如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/huanghai223/ReportProject_web.rar" target="_blank"&gt;/Files/huanghai223/ReportProject_web.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2369543.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369543.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/02/27/2369538.html</id><title type="text">Log4Net 开发文档</title><summary type="text">目录1.1 log4net的简要说明，在具体项目中扮演的功能角色。1.2 Log4net 组成结构说明1.3 Log4net配置文件解析1.4 举一个实际的例子，阐述Log4net的完整的实现流程1.1 log4net的简要说明，在具体项目中扮演的功能角色。Log4net 是一个第三方开源组件，它设计的主要目的是组合，生成日志信息，同时将配置保存到各种存储介质或者展现平台中，在实际项目中，Log4net 可以保存系统运行情况，可以在系统出现异常时，根据保存的日志信息，查看当时系统的状态。1.2 Log4net 组成结构说明主要的接口和类的UML图ILog 定义日志的基本操作(添加各种告警日志)</summary><published>2012-02-27T03:15:00Z</published><updated>2012-02-27T03:15:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369538.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369538.html"/><content type="html">&lt;p&gt;目录&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.1&amp;nbsp; log4net&lt;/span&gt;的简要说明，在具体项目中扮演的功能角色。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.2&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Calibri;"&gt;&amp;nbsp;Log4net &lt;/span&gt;组成结构说明&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.3&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Calibri;"&gt;&amp;nbsp;Log4net&lt;/span&gt;配置文件解析&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.4&amp;nbsp; &lt;/span&gt;举一个实际的例子，阐述&lt;span style="font-family: Calibri;"&gt;Log4net&lt;/span&gt;的完整的实现流程&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;1.1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;log4net&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;的简要说明，在具体项目中扮演的功能角色。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;Log4net &lt;/span&gt;是一个第三方开源组件，它设计的主要目的是组合，生成日志信息，同时将配置保存到各种存储介质或者展现平台中，在实际项目中，&lt;span style="font-family: Calibri;"&gt;Log4net &lt;/span&gt;可以保存系统运行情况，可以在系统出现异常时，根据保存的日志信息，查看当时系统的状态。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;1.2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;Log4net &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;组成结构说明&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;主要的接口和类的&lt;span style="font-family: Calibri;"&gt;UML&lt;/span&gt;图&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;ILog &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;定义日志的基本操作&lt;span style="font-family: Calibri;"&gt;(&lt;/span&gt;添加各种告警日志&lt;span style="font-family: Calibri;"&gt;)&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;LogImpl&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;继承了&lt;span style="font-family: Calibri;"&gt;ILog&lt;/span&gt;接口，实现&lt;span style="font-family: Calibri;"&gt;log&lt;/span&gt;基本的功能的类&lt;/p&gt;&lt;p&gt;在&lt;span style="font-family: Calibri;"&gt;LogImpl &lt;/span&gt;类中包含了一个或者多个继承了&lt;span style="font-family: Calibri;"&gt;AppenderSkeleton&lt;/span&gt;基类的类&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;AppenderSkeleton&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;定义输出源结构，提供保存日志信息的方式（这里，输出源可以是数据库，文件，系统日志，控制台程序，等等）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;LogManager&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;负责根据&lt;span style="font-family: Calibri;"&gt;LoggerName&lt;/span&gt;或者&lt;span style="font-family: Calibri;"&gt;Type &lt;/span&gt;等参数接口来生成并返回对应的&lt;span style="font-family: Calibri;"&gt;ILog&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;IFilter&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;过滤器，负责筛选需要保存的日志。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;ILayout&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;负责日志信息生成的格式&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;上面说明了&lt;span style="font-family: Calibri;"&gt;Log4net&lt;/span&gt;组件中的主要的类之间的关系。看了后，我们对一个&lt;span style="font-family: Calibri;"&gt;Logger &lt;/span&gt;是怎么组成的还是不怎么了解。下面我们着重的说明他们的组合关系&lt;/p&gt;&lt;table style="width: 100%;" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Logger&lt;/span&gt;的结构图&lt;br /&gt;注&lt;span style="font-family: Calibri;"&gt;: &lt;/span&gt;此处参考了（&lt;a href="http://www.cnblogs.com/dragon/archive/2005/03/24/124254.aspx" target="_blank"&gt;&lt;span style="font-family: Calibri; color: #800080;"&gt;http://www.cnblogs.com/dragon/archive/2005/03/24/124254.aspx&lt;/span&gt;&lt;/a&gt;）&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;1.3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;Log4net&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;配置文件解析&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;Log4net &lt;/span&gt;的配置文件中配置项结构和&lt;span style="font-family: Calibri;"&gt;log4net &lt;/span&gt;设计类的结构相吻合的。&lt;/p&gt;&lt;p&gt;我把配置文件分成了三块&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.3.1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Calibri;"&gt;&amp;lt;Root&amp;gt;&lt;/span&gt;块设置&lt;/p&gt;&lt;p align="left"&gt;&amp;lt;root&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp; &amp;lt;level value="WARN" /&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp; &amp;lt;appender-ref ref="LogFileAppender" /&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp; &amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;lt;/root&amp;gt;&lt;/p&gt;&lt;p&gt;在&lt;span style="font-family: Calibri;"&gt;Log4net &lt;/span&gt;设计中&lt;span style="font-family: Calibri;"&gt;logger&lt;/span&gt;都继承于&lt;span style="font-family: Calibri;"&gt;root&lt;/span&gt;，定义了一个基本日志对象的配置，在&lt;span style="font-family: Calibri;"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;中设置的配置信息可以被自定义的&lt;span style="font-family: Calibri;"&gt;Logger&lt;/span&gt;继承并覆盖。当然了自定义&lt;span style="font-family: Calibri;"&gt;Logger&lt;/span&gt;本身也是可以继承的。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;在&lt;span style="font-family: Calibri;"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;中我们可以配置保存配置文件的级别&amp;lt;level&amp;gt;，级别可以分为&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;OFF&amp;nbsp; FATAL RROR WARN INFO DEBUG ALL &lt;/strong&gt;&amp;nbsp;&lt;/span&gt;这几种。&lt;/p&gt;&lt;p&gt;和对应的输出源&amp;lt;appender-ref&amp;gt; 输出源需要配置 在其后定义的输出源配置名称。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.3.2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Calibri;"&gt;&amp;lt;Logger&amp;gt;&lt;/span&gt;块设置&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;logger name="testApp.Logging"&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp; &amp;lt;level value="DEBUG"/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;/logger&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;logger&amp;gt; &lt;/span&gt;元素预定义了一个具体日志对象的设置。其定义的规则和&lt;span style="font-family: Calibri;"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;是一样的，在这里面要补充的是可以通过调用&lt;span style="font-family: Calibri;"&gt;LogManager.GetLogger(&lt;/span&gt;&amp;ldquo;&lt;span style="font-family: Calibri;"&gt;LoggerName&lt;/span&gt;&amp;rdquo;&lt;span style="font-family: Calibri;"&gt;)&lt;/span&gt;的函数来调用已经配置的日志对象。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;1.3.3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Calibri;"&gt;&amp;lt;Appender&amp;gt;&lt;/span&gt;块设置&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;appender name="RootAppender" type="log4net.Appender.RollingFileAppender"&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;file value=" E:\work\Leather Machine Business flat\Data Source\Web\Web\Log\lmbf.log" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appendToFile value="true" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;rollingStyle value="Composite" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;datePattern value="yyyyMMdd" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="MaxSizeRollBackups" value="-1" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="MaximumFileSize" value="10MB" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;lockingModel type="log4net.Appender.FileAppender+MinimalLock" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout" &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conversionPattern value="%date [%c]-[%p] %m%n" /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;对于整个配置文件来讲&lt;span style="font-family: Calibri;"&gt; &amp;lt;appender&amp;gt;&lt;/span&gt;部分是最复杂的，以为&lt;span style="font-family: Calibri;"&gt;log4net &lt;/span&gt;支持的输出源是多样的，且每一种输出源的需要配置的信息也是不同的，上面的例子是配置的一个&lt;span style="font-family: Calibri;"&gt;FileAppender&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;file value&amp;gt;&amp;nbsp; &lt;/span&gt;：文件的路径&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt;appendToFile&amp;gt;:&amp;nbsp; &lt;/span&gt;是否追加文件&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt; rollingStyle &amp;gt;: &lt;/span&gt;滚动类型？&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt; datePattern &amp;gt;:&lt;/span&gt;日期方式&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;MaximumFileSize &lt;/span&gt;：日志文件最大容量&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt; lockingModel &amp;gt;:&lt;/span&gt;日志文件锁方式&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;lt; layout &amp;gt; : &lt;/span&gt;呈现方式&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;中的转换模式&lt;span style="font-family: Calibri;"&gt;(ConversionPattern) &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%m(message):&lt;/span&gt;输出的日志消息，如&lt;span style="font-family: Calibri;"&gt;ILog.Debug(&lt;/span&gt;&amp;hellip;&lt;span style="font-family: Calibri;"&gt;)&lt;/span&gt;输出的一条消息&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%n(new line):&lt;/span&gt;换行&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%d(datetime):&lt;/span&gt;输出当前语句运行的时刻&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%r(run time):&lt;/span&gt;输出程序从运行到执行到当前语句时消耗的毫秒数&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%t(thread id):&lt;/span&gt;当前语句所在的线程&lt;span style="font-family: Calibri;"&gt;ID &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%p(priority): &lt;/span&gt;日志的当前优先级别，即&lt;span style="font-family: Calibri;"&gt;DEBUG&lt;/span&gt;、&lt;span style="font-family: Calibri;"&gt;INFO&lt;/span&gt;、&lt;span style="font-family: Calibri;"&gt;WARN&lt;/span&gt;&amp;hellip;等&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;%c(class):&lt;/span&gt;当前日志对象的名称&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;其他输出源配置请参照（&lt;a href="http://logging.apache.org/log4net/release/config-examples.html" target="_blank"&gt;&lt;span style="font-family: Calibri; color: #800080;"&gt;http://logging.apache.org/log4net/release/config-examples.html&lt;/span&gt;&lt;/a&gt;）这里面包含了全部的&lt;span style="font-family: Calibri;"&gt;appender&lt;/span&gt;类型配置说明。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;1.4&amp;nbsp; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;举一个实际的例子，阐述&lt;span style="font-family: Calibri;"&gt;Log4net&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;的完整的实现流程&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;场景：在系统中一个组件负责处理日志信息，日志信息是保存到日志文件中的，配置文件和日志文件的路径和运行系统的主目录直接挂钩。&lt;span style="font-family: Calibri;"&gt;(&lt;/span&gt;系统研发的过程中&lt;span style="font-family: Calibri;"&gt;,&lt;/span&gt;日志组件在调试，测试下运行的环境不一致，尤其是&lt;span style="font-family: Calibri;"&gt;B/s &lt;/span&gt;测试时根本不知道&lt;span style="font-family: Calibri;"&gt;Web&lt;/span&gt;配置文件的存在&lt;span style="font-family: Calibri;"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;在此类中组件分两个类Logger 类 和ConfigFileCreate 类&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;Logger &lt;/span&gt;负责提供日志的主入口，供系统的其它部分来调用日志的功能。&lt;/p&gt;&lt;p&gt;ConfigFileCreate 负责动态生成配置文件。&lt;br /&gt;下面是两个类的源代码 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Code&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**////&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;The&amp;nbsp;class&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;which&amp;nbsp;'s&amp;nbsp;Main&amp;nbsp;function&amp;nbsp;&amp;nbsp;is&amp;nbsp;Init&amp;nbsp;Log&amp;nbsp;Config&amp;nbsp;file(in&amp;nbsp;the&amp;nbsp;&amp;nbsp;Catalogue&amp;nbsp;of&amp;nbsp;Assembly)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;internal&amp;nbsp;&amp;nbsp;class&amp;nbsp;ConfigFileCreate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;const&amp;nbsp;string&amp;nbsp;Log4Config&amp;nbsp;=&amp;nbsp;"UtilityConfig.xml";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**////&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;internal&amp;nbsp;string&amp;nbsp;GetConfigFile()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;_AssemblyCatalogue&amp;nbsp;=GetAssemblyCatalogue();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileInfo&amp;nbsp;_fileinfo&amp;nbsp;=&amp;nbsp;new&amp;nbsp;FileInfo(_AssemblyCatalogue&amp;nbsp;+&amp;nbsp;@"/"&amp;nbsp;+&amp;nbsp;Log4Config);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//find&amp;nbsp;&amp;nbsp;where&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;contained&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!_fileinfo.Exists)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CreateXMLConfig(_fileinfo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;_fileinfo.FullName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**////&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;string&amp;nbsp;GetAssemblyCatalogue()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;AppDomain.CurrentDomain.BaseDirectory;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;void&amp;nbsp;CreateXMLConfig(FileInfo&amp;nbsp;fileInfo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using&amp;nbsp;(StreamWriter&amp;nbsp;sw&amp;nbsp;=&amp;nbsp;File.CreateText(fileInfo.FullName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;?xml&amp;nbsp;version=\"1.0\"&amp;nbsp;encoding=\"utf-8\"&amp;nbsp;?&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;configuration&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;nbsp;&amp;lt;log4net&amp;gt;&amp;lt;!--&amp;nbsp;contain&amp;nbsp;the&amp;nbsp;Log2net&amp;nbsp;component&amp;nbsp;'s&amp;nbsp;configuration&amp;nbsp;information&amp;nbsp;--&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;root&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;!--&amp;nbsp;base&amp;nbsp;configuration--&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;level&amp;nbsp;value=\"Debug\"&amp;gt;&amp;lt;/level&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;appender-ref&amp;nbsp;ref=\"RootAppender\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;/root&amp;gt;");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;appender&amp;nbsp;name=\"RootAppender\"&amp;nbsp;type=\"log4net.Appender.RollingFileAppender\"&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;file&amp;nbsp;value=\"&amp;nbsp;"&amp;nbsp;+&amp;nbsp;fileInfo.DirectoryName+&amp;nbsp;"\\Log\\lmbf.log\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;appendToFile&amp;nbsp;value=\"true\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;nbsp;&amp;lt;rollingStyle&amp;nbsp;value=\"Composite\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;datePattern&amp;nbsp;value=\"yyyyMMdd\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;param&amp;nbsp;name=\"MaxSizeRollBackups\"&amp;nbsp;value=\"-1\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;param&amp;nbsp;name=\"MaximumFileSize\"&amp;nbsp;value=\"10MB\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;lockingModel&amp;nbsp;type=\"log4net.Appender.FileAppender+MinimalLock\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;layout&amp;nbsp;type=\"log4net.Layout.PatternLayout\"&amp;nbsp;&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;conversionPattern&amp;nbsp;value=\"%date&amp;nbsp;[%c]-[%p]&amp;nbsp;%m%n\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;/layout&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;/appender&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;logger&amp;nbsp;name=\"Test\"&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;level&amp;nbsp;value=\"Debug\"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;appender-ref&amp;nbsp;ref=\"RootAppender\"&amp;nbsp;/&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;/logger&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;/log4net&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.WriteLine("&amp;lt;/configuration&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Code&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**////&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;日志类&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;功能&amp;nbsp;：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;负责生成系统日志&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;&amp;nbsp;&amp;nbsp;class&amp;nbsp;Logger&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;ILog&amp;nbsp;_log&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;&amp;nbsp;static&amp;nbsp;Logger&amp;nbsp;_logger=null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**////&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;the&amp;nbsp;contruct&amp;nbsp;of&amp;nbsp;Logger&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;Logger()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//load&amp;nbsp;the&amp;nbsp;configeration&amp;nbsp;file&amp;nbsp;,and&amp;nbsp;init&amp;nbsp;the&amp;nbsp;Component&amp;nbsp;of&amp;nbsp;log4net&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileInfo&amp;nbsp;_configFile&amp;nbsp;=&amp;nbsp;new&amp;nbsp;FileInfo(new&amp;nbsp;ConfigFileCreate().GetConfigFile());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlConfigurator.ConfigureAndWatch(_configFile);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log&amp;nbsp;=&amp;nbsp;LogManager.GetLogger("Test");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**////&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Logger&amp;nbsp;'s&amp;nbsp;&amp;nbsp;Only&amp;nbsp;&amp;nbsp;Instance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;Logger&amp;nbsp;Instance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(_logger&amp;nbsp;==&amp;nbsp;null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_logger&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Logger();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;_logger;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//actives&amp;nbsp;about&amp;nbsp;the&amp;nbsp;Logger&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Fatal(string&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Fatal(message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Fatal(String&amp;nbsp;message,&amp;nbsp;System.Exception&amp;nbsp;exception)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Fatal(message,&amp;nbsp;exception);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Warn(String&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Warn(message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Warn(String&amp;nbsp;message,&amp;nbsp;System.Exception&amp;nbsp;exception)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Warn(message,&amp;nbsp;exception);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Error(String&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Error(message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Error(String&amp;nbsp;message,&amp;nbsp;System.Exception&amp;nbsp;exception)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Error(message,&amp;nbsp;exception);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Debug(String&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Debug(message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;Info(String&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_log.Info(message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2369538.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369538.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/02/27/2369521.html</id><title type="text">Log4Net使用指南</title><summary type="text">声明：本文内容主要译自Nauman Leghari的Using log4net，亦加入了个人的一点心得(节3.1.4)。请在这里下载示例代码 1 简介1.1 Log4net的优点：几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后，就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。经验表明，日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点：它可以提供应用程序运行时的精确环境，可供开发人员尽快找到应用程序中的Bug；一旦在程序中加入了Log 输出代码，程序运行过程中就能生成并输出日志信息而无需人工干预。另外</summary><published>2012-02-27T03:04:00Z</published><updated>2012-02-27T03:04:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369521.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369521.html"/><content type="html">&lt;div&gt;声明：本文内容主要译自Nauman Leghari的Using log4net，亦加入了个人的一点心得(节3.1.4)。&lt;br /&gt;请在这里下载&lt;a href="http://files.cnblogs.com/dragon/Log4NetTester.rar" target="_blank"&gt;示例代码&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;p&gt;&lt;strong&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;简介&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Log4net&lt;/strong&gt;&lt;strong&gt;的优点：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后，就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。&lt;/p&gt;&lt;p&gt;经验表明，日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点：它可以提供应用程序运行时的精确环境，可供开发人员尽快找到应用程序中的Bug；一旦在程序中加入了Log 输出代码，程序运行过程中就能生成并输出日志信息而无需人工干预。另外，日志信息可以输出到不同的地方（控制台，文件等）以备以后研究之用。&lt;/p&gt;&lt;p&gt;Log4net就是为这样一个目的设计的，用于.NET开发环境的日志记录包。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Log4net&lt;/strong&gt;&lt;strong&gt;的安装：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;用户可以从&lt;a href="http://logging.apache.org/log4net/" target="_blank"&gt;http://logging.apache.org/log4net/&lt;/a&gt;下载log4net的源代码。解压软件包后，在解压的src目录下将log4net.sln载入Visual Studio .NET，编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能，只需将log4net.dll引入工程即可。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Log4net&lt;/strong&gt;&lt;strong&gt;的结构&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;log4net 有四种主要的组件，分别是Logger（记录器）, Repository（库）, Appender（附着器）以及 Layout（布局）.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Logger&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Logger&lt;/strong&gt;&lt;strong&gt;接口&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Logger是应用程序需要交互的主要组件，它用来产生日志消息。产生的日志消息并不直接显示，还要预先经过Layout的格式化处理后才会输出。&lt;/p&gt;&lt;p&gt;Logger提供了多种方式来记录一个日志消息，你可以在你的应用程序里创建多个Logger，每个实例化的Logger对象都被log4net框架作为命名实体(named entity)来维护。这意味着为了重用Logger对象，你不必将它在不同的类或对象间传递，只需要用它的名字为参数调用就可以了。log4net框架使用继承体系，继承体系类似于.NET中的名字空间。也就是说，如果有两个logger,分别被定义为a.b.c和a.b，那么我们说a.b是a.b.c的祖先。每一个logger都继承了祖先的属性&lt;/p&gt;&lt;p&gt;Log4net框架定义了一个ILog接口，所有的logger类都必须实现这个接口。如果你想实现一个自定义的logger，你必须首先实现这个接口。你可以参考在/extension目录下的几个例子。&lt;/p&gt;&lt;p&gt;ILog接口的定义如下：&lt;/p&gt;&lt;p&gt;public interface ILog&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp; void Debug(object message);&lt;/p&gt;&lt;p&gt;&amp;nbsp; void Info(object message);&lt;/p&gt;&lt;p&gt;&amp;nbsp; void Warn(object message);&lt;/p&gt;&lt;p&gt;&amp;nbsp; void Error(object message);&lt;/p&gt;&lt;p&gt;&amp;nbsp; void Fatal(object message);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//以上的每一个方法都有一个重载的方法，用来支持异常处理。&lt;/p&gt;&lt;p&gt;//每一个重载方法都如下所示，有一个异常类型的附加参数。&lt;/p&gt;&lt;p&gt;&amp;nbsp; void Debug(object message, Exception ex);&lt;/p&gt;&lt;p&gt;&amp;nbsp; // ...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//Boolean 属性用来检查Logger的日志级别&lt;/p&gt;&lt;p&gt;//（我们马上会在后面看到日志级别）&lt;/p&gt;&lt;p&gt;&amp;nbsp; bool isDebugEnabled;&lt;/p&gt;&lt;p&gt;&amp;nbsp; bool isInfoEnabled;&lt;/p&gt;&lt;p&gt;&amp;nbsp; //&amp;hellip; 其他方法对应的Boolean属性&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;Log4net框架定义了一个叫做LogManager的类，用来管理所有的logger对象。它有一个GetLogger()静态方法，用我们提供的名字参数来检索已经存在的Logger对象。如果框架里不存在该Logger对象，它也会为我们创建一个Logger对象。代码如下所示：&lt;/p&gt;&lt;p&gt;log4net.ILog log = log4net.LogManager.GetLogger("logger-name");&lt;/p&gt;&lt;p&gt;通常来说，我们会以类（class）的类型（type）为参数来调用GetLogger()，以便跟踪我们正在进行日志记录的类。传递的类(class)的类型(type)可以用typeof(Classname)方法来获得，或者可以用如下的反射方法来获得：&lt;/p&gt;&lt;p&gt;System.Reflection.MethodBase.GetCurrentMethod().DeclaringType&lt;/p&gt;&lt;p&gt;尽管符号长了一些，但是后者可以用于一些场合，比如获取调用方法的类(class)的类型(type)。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.1.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;日志的级别&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;正如你在ILog的接口中看到的一样，有五种不同的方法可以跟踪一个应用程序。事实上，这五种方法是运作在Logger对象设置的不同日志优先级别上。这几种不同的级别是作为常量定义在log4net.spi.Level类中。你可以在程序中使用任何一种方法。但是在最后的发布中你也许不想让所有的代码来浪费你的CPU周期，因此，框架提供了7种级别和相应的Boolean属性来控制日志记录的类型。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Level有以下几种取值&lt;/p&gt;&lt;table border="1" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;级别&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;允许的方法&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;Boolean&lt;/strong&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;优先级别&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;OFF&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;Highest&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;FATAL&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;void Fatal(...);&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;bool IsFatalEnabled;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;RROR&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;void Error(...);&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;bool IsErrorEnabled;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;WARN&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;void Warn(...);&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;bool IsWarnEnabled;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;INFO&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;void Info(...);&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;bool IsInfoEnabled;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;DEBUG&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;void Debug(...);&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;bool IsDebugEnabled;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="69"&gt;&lt;p&gt;&lt;strong&gt;ALL&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="118"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="154"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="81"&gt;&lt;p&gt;&lt;strong&gt;Lowest&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align="center"&gt;表1&amp;nbsp; Logger的日志级别&lt;/p&gt;&lt;p&gt;在log4net框架里，通过设置配置文件，每个日志对象都被分配了一个日志优先级别。如果没有给一个日志对象显式地分配一个级别，那么该对象会试图从他的祖先继承一个级别值。&lt;/p&gt;&lt;p&gt;ILog接口的每个方法都有一个预先定义好了的级别值。正如你在表1看到的，ILog的Inof()方法具有INFO级别。同样的，以此类推，Error()方法具有ERROR级别。当我们使用以上的任何一种方法时，log4net框架会检查日志对象logger的级别和方法的级别。只有当方法的级别高于日志级别时，日志请求才会被接受并执行。&lt;/p&gt;&lt;p&gt;举例说明，当你创建了一个日志对象，并且把他的级别设置为INFO。于是框架会设置日志的每个Boolean属性。当你调用相应的日志方法时，框架会检查相应的Boolean属性，以决定该方法能不能执行。如下的代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Logger.Info("message");&lt;/p&gt;&lt;p&gt;Logger.Debug("message");&lt;/p&gt;&lt;p&gt;Logger.Warn("message");&lt;/p&gt;&lt;p&gt;对于第一种方法，Info()的级别等与日志的级别（INFO），因此日志请求会被传递，我们可以得到输出结果&amp;rdquo;message&amp;rdquo;。&lt;/p&gt;&lt;p&gt;对于第二种方法，Debug()的级别低于日志对象logger的日志级别(INFO)，因此，日志请求被拒绝了，我们得不到任何输出。同样的，针对第三行语句，我们可以很容易得出结论。&lt;/p&gt;&lt;p&gt;在表1中有两个特殊的级别：ALL和OFF。ALL表示允许所有的日志请求。OFF是拒绝所有的请求。&lt;/p&gt;&lt;p&gt;你也可以显式地检查Logger对象的Boolean属性，如下所示：&lt;/p&gt;&lt;p&gt;if (logger.IsDebugEnabled)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp; Logger.Debug("message");&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Repository主要用于负责日志对象组织结构的维护。在log4net的以前版本中，框架仅支持分等级的组织结构(hierarchical organization)。这种等级结构本质上是库的一个实现，并且定义在log4net.Repository.Hierarchy 名字空间中。要实现一个Repository，需要实现log4net.Repository.ILoggerRepository 接口。但是通常并不是直接实现该接口，而是以log4net.Repository.LoggerRepositorySkeleton为基类继承。体系库 (hierarchical repository )则由log4net.Repository.Hierarchy.Hierarchy类实现。&lt;/p&gt;&lt;p&gt;如果你是个log4net框架的使用者，而非扩展者，那么你几乎不会在你的代码里用到Repository的类。相反的，你需要用到LogManager类来自动管理库和日志对象。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Appender&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一个好的日志框架应该能够产生多目的地的输出。比如说输出到控制台或保存到一个日志文件。log4net 能够很好的满足这些要求。它使用一个叫做Appender的组件来定义输出介质。正如名字所示，这些组件把它们附加到Logger日志组件上并将输出传递到输出流中。你可以把多个Appender组件附加到一个日志对象上。 Log4net框架提供了几个Appender组件。关于log4net提供的Appender组件的完整列表可以在log4net框架的帮助手册中找到。有了这些现成的Appender组件，一般来说你没有必要再自己编写了。但是如果你愿意，可以从log4net.Appender.AppenderSkeleton类继承。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Appender Filters&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一个Appender 对象缺省地将所有的日志事件传递到输出流。Appender的过滤器(Appender Filters) 可以按照不同的标准过滤日志事件。在log4net.Filter的名字空间下已经有几个预定义的过滤器。使用这些过滤器，你可以按照日志级别范围过滤日志事件，或者按照某个特殊的字符串进行过滤。你可以在API的帮助文件中发现更多关于过滤器的信息。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Layout&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Layout 组件用于向用户显示最后经过格式化的输出信息。输出信息可以以多种格式显示，主要依赖于我们采用的Layout组件类型。可以是线性的或一个XML文件。Layout组件和一个Appender组件一起工作。API帮助手册中有关于不同Layout组件的列表。一个Appender对象，只能对应一个Layout对象。要实现你自己的Layout类，你需要从log4net.Layout.LayoutSkeleton类继承，它实现了ILayout接口。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;在程序中使用log4net&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在开始对你的程序进行日志记录前，需要先启动log4net引擎。这意味着你需要先配置前面提到的三种组件。你可以用两种方法来设定配置：在单独的文件中设定配置或在代码中定义配置。&lt;/p&gt;&lt;p&gt;因为下面几种原因，推荐在一个单独的文件中定义配置：&lt;/p&gt;&lt;p&gt;l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你不需要重新编译源代码就能改变配置；&lt;/p&gt;&lt;p&gt;l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你可以在程序正运行的时候就改变配置。这一点在一些WEB程序和远程过程调用的程序中有时很重要；&lt;/p&gt;&lt;p&gt;考虑到第一种方法的重要性，我们先看看怎样在文件中设定配置信息。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;定义配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;配置信息可以放在如下几种形式文件的一种中。&lt;/p&gt;&lt;p&gt;在程序的配置文件里，如AssemblyName.config 或web.config.&lt;/p&gt;&lt;p&gt;在你自己的文件里。文件名可以是任何你想要的名字，如AppName.exe.xyz等.&lt;/p&gt;&lt;p&gt;log4net框架会在相对于AppDomain.CurrentDomain.BaseDirectory 属性定义的目录路径下查找配置文件。框架在配置文件里要查找的唯一标识是&amp;lt;log4net&amp;gt;标签。一个完整的配置文件的例子如下：&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;configSections&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name="log4net"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Config.Log4NetConfigurationSectionHandler,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log4net-net-1.0"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/configSections&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;log4net&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;root&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;level value="WARN" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender-ref ref="LogFileAppender" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/root&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;logger name="testApp.Logging"&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;level value="DEBUG"/&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/logger&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender name="LogFileAppender" &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Appender.FileAppender" &amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="File" value="log-file.txt" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="AppendToFile" value="true" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Header" value="[Header]\r\n"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Footer" value="[Footer]\r\n"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="ConversionPattern"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value="%d [%t] %-5p %c [%x]&amp;nbsp; - %m%n"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter type="log4net.Filter.LevelRangeFilter"&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="LevelMin" value="DEBUG" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="LevelMax" value="WARN" /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/appender&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender name="ConsoleAppender" &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Appender.ConsoleAppender" &amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="ConversionPattern"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value="%d [%t] %-5p %c [%x] - %m%n"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/log4net&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;p&gt;你可以直接将上面的文本拷贝到任何程序中使用，但是最好还是能够理解配置文件是怎样构成的。 只有当你需要在应用程序配置文件中使用log4net配置时，才需要在&amp;lt;configSection&amp;gt;标签中加入&amp;lt;section&amp;gt;配置节点入口。对于其他的单独文件，只有&amp;lt;log4net&amp;gt;标签内的文本才是必需的，这些标签的顺序并不是固定的。下面我们依次讲解各个标签内文本的含义：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&amp;lt;root&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;root&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;level value="WARN" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;appender-ref ref="LogFileAppender" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/root&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在框架的体系里，所有的日志对象都是根日志(root logger)的后代。 因此如果一个日志对象没有在配置文件里显式定义，则框架使用根日志中定义的属性。在&amp;lt;root&amp;gt;标签里，可以定义level级别值和Appender的列表。如果没有定义LEVEL的值，则缺省为DEBUG。可以通过&amp;lt;appender-ref&amp;gt;标签定义日志对象使用的Appender对象。&amp;lt;appender-ref&amp;gt;声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说，子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定&amp;lt;logger&amp;gt;标签的additivity属性为false而改变。&lt;/p&gt;&lt;p&gt;&amp;lt;logger name="testApp.Logging" additivity="false"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/logger&amp;gt;&lt;/p&gt;&lt;p&gt;Additivity的值缺省是true.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&amp;lt;Logger&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;logger name="testApp.Logging"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;level value="DEBUG"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/logger&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;lt;logger&amp;gt; 元素预定义了一个具体日志对象的设置。然后通过调用LogManager.GetLogger(&amp;ldquo;testAPP.Logging&amp;rdquo;)函数，你可以检索具有该名字的日志。如果LogManager.GetLogger(&amp;hellip;)打开的不是预定义的日志对象，则该日志对象会继承根日志对象的属性。知道了这一点，我们可以说，其实&amp;lt;logger&amp;gt;标签并不是必须的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&amp;lt;appender&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;lt;appender name="LogFileAppender"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="log4net.Appender.FileAppender" &amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;param name="File" value="log-file.txt" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;param name="AppendToFile" value="true" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Header" value="[Header]\r\n" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Footer" value="[Footer]\r\n"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="ConversionPattern"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value="%d [%t] %-5p %c - %m%n"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/layout&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;filter type="log4net.Filter.LevelRangeFilter"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="LevelMin" value="DEBUG" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="LevelMax" value="WARN" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/filter&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在&amp;lt;root&amp;gt;标签或单个的&amp;lt;logger&amp;gt;标签里的Appender对象可以用&amp;lt;appender&amp;gt;标签定义。&amp;lt;appender&amp;gt;标签的基本形式如上面所示。它定义了appender的名字和类型。 另外比较重要的是&amp;lt;appender&amp;gt;标签内部的其他标签。不同的appender有不同的&amp;lt;param&amp;gt;标签。在这里，为了使用FileAppender,你需要一个文件名作为参数。另外还需要一个在&amp;lt;appender&amp;gt;标签内部定义一个Layout对象。Layout对象定义在它自己的&amp;lt;layout&amp;gt;标签内。&amp;lt;layout&amp;gt;标签的type属性定义了Layout的类型(在本例里是PatternLayout)，同时也确定了需要提供的参数值。Header和Footer标签提供了一个日志会话(logging session)开始和结束时输出的文字。有关每种appender的具体配置的例子，可以在log4net\doc\manual\example-config-appender.html中得到。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;log4net.Layout.PatternLayout&lt;/strong&gt;&lt;strong&gt;中的转换模式(ConversionPattern)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;%m(message):输出的日志消息，如ILog.Debug(&amp;hellip;)输出的一条消息&lt;/p&gt;&lt;p&gt;%n(new line):换行&lt;/p&gt;&lt;p&gt;%d(datetime):输出当前语句运行的时刻&lt;/p&gt;&lt;p&gt;%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数&lt;/p&gt;&lt;p&gt;%t(thread id):当前语句所在的线程ID&lt;/p&gt;&lt;p&gt;%p(priority): 日志的当前优先级别，即DEBUG、INFO、WARN&amp;hellip;等&lt;/p&gt;&lt;p&gt;%c(class):当前日志对象的名称，例如：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 模式字符串为：%-10c-%m%n&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 代码为：&lt;/p&gt;&lt;p&gt;ILog log=LogManager.GetLogger(&amp;ldquo;Exam.Log&amp;rdquo;);&lt;/p&gt;&lt;p&gt;log.Debug(&amp;ldquo;Hello&amp;rdquo;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 则输出为下面的形式：&lt;/p&gt;&lt;p&gt;Exam.Log&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Hello&lt;/p&gt;&lt;p&gt;%L：输出语句所在的行号&lt;/p&gt;&lt;p&gt;%F：输出语句所在的文件名&lt;/p&gt;&lt;p&gt;%-数字：表示该项的最小长度，如果不够，则用空格填充&lt;/p&gt;&lt;p&gt;例如，转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出：&lt;/p&gt;&lt;p&gt;176 [main] INFO&amp;nbsp; org.foo.Bar - Located nearest gas station.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&amp;lt;filter&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;最后，让我们看看在Appender元素里的&amp;lt;filter&amp;gt;标签。它定义了应用到Appender对象的过滤器。本例中，我们使用了LevelRangeFilter过滤器,它可以只记录LevelMin和LevelMax参数指定的日志级别之间的日志事件。可以在一个Appender上定义多个过滤器（Filter）,这些过滤器将会按照它们定义的顺序对日志事件进行过滤。其他过滤器的有关信息可以在log4net的SDK文档中找到。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;使用配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;关联配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;当我们创建了上面的配置文件后，我们接下来需要把它和我们的应用联系起来。缺省的，每个独立的可执行程序集都会定义它自己的配置。log4net框架使用 log4net.Config.DOMConfiguratorAttribute在程序集的级别上定义配置文件。&lt;/p&gt;&lt;p&gt;例如：可以在项目的AssemblyInfo.cs文件里添加以下的语句&lt;/p&gt;&lt;p&gt;[assembly:log4net.Config.DOMConfigurator(ConfigFile="filename",&lt;/p&gt;&lt;p&gt;&amp;nbsp; ConfigFileExtension="ext",Watch=true/false)]&lt;/p&gt;&lt;p&gt;l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;ConfigFile:&lt;/strong&gt;指出了我们的配置文件的路径及文件名，包括扩展名。&lt;/p&gt;&lt;p&gt;l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;ConfigFileExtension:&lt;/strong&gt;如果我们对被编译程序的程序集使用了不同的文件扩展名，那么我们需要定义这个属性，缺省的，程序集的配置文件扩展名为&amp;rdquo;config&amp;rdquo;。&lt;/p&gt;&lt;p&gt;l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Watch (Boolean&lt;/strong&gt;&lt;strong&gt;属性):&lt;/strong&gt; log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变，重命名，删除等事件。&lt;/p&gt;&lt;p&gt;其中：ConfigFile和ConfigFileExtension属性不能同时使用，ConfigFile指出了配置文件的名字，例如，ConfigFile=&amp;rdquo;Config.txt&amp;rdquo;&lt;/p&gt;&lt;p&gt;ConfigFileExtension则是指明了和可执行程序集同名的配置文件的扩展名，例如，应用程序的名称是&amp;rdquo;test.exe&amp;rdquo;,ConfigFileExtension=&amp;rdquo;txt&amp;rdquo;,则配置文件就应该是&amp;rdquo;test.exe.txt&amp;rdquo; ；&lt;/p&gt;&lt;p&gt;也可以不带参数应用DOMConfiguratio():&lt;/p&gt;&lt;p&gt;&amp;nbsp;[assembly: log4net.Config.DOMConfigurator()]&lt;/p&gt;&lt;p&gt;也可以在程序代码中用DOMConfigurator类打开配置文件。类的构造函数需要一个FileInfo对象作参数，以指出要打开的配置文件名。 这个方法和前面在程序集里设置属性打开一个配置文件的效果是一样的。&lt;/p&gt;&lt;p&gt;log4net.Config.DOMConfigurator.Configure(&lt;/p&gt;&lt;p&gt;&amp;nbsp; new FileInfo("TestLogger.Exe.Config"));&lt;/p&gt;&lt;p&gt;DOMConfigurator 类还有一个方法ConfigureAndWatch(..), 用来配置框架并检测文件的变化。&lt;/p&gt;&lt;p&gt;以上的步骤总结了和配置相关的各个方面，下面我们将分两步来使用logger对象。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;创建或获取日志对象&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;日志对象会使用在配置文件里定义的属性。如果某个日志对象没有事先在配置文件里定义，那么框架会根据继承结构获取祖先节点的属性，最终的，会从根日志获取属性。如下所示：&lt;/p&gt;&lt;p&gt;Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;输出日志信息&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;可以使用ILog的几种方法输出日志信息。你也可以在调用某方法前先检查IsXXXEnabled布尔变量，再决定是否调用输出日志信息的函数，这样可以提高程序的性能。因为框架在调用如ILog.Debug(&amp;hellip;)这样的函数时，也会先判断是否满足Level日志级别条件。&lt;/p&gt;&lt;p&gt;if (log.IsDebugEnabled) log.Debug("message");&lt;/p&gt;&lt;p&gt;if (log.IsInfoEnabled) log.Info("message);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;在程序中配置log4net&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;除了前面讲的用一个配置文件来配置log4net以外，还可以在程序中用代码来配置log4net框架。如下面的例子:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// 和PatternLayout一起使用FileAppender&lt;/p&gt;&lt;p&gt;log4net.Config.BasicConfigurator.Configure(&lt;/p&gt;&lt;p&gt;&amp;nbsp; new log4net.Appender.FileAppender(&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new log4net.Layout.PatternLayout("%d&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [%t]%-5p %c [%x] - %m%n"),"testfile.log"));&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// using a FileAppender with an XMLLayout&lt;/p&gt;&lt;p&gt;log4net.Config.BasicConfigurator.Configure(&lt;/p&gt;&lt;p&gt;&amp;nbsp; new log4net.Appender.FileAppender(&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new log4net.Layout.XMLLayout(),"testfile.xml"));&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// using a ConsoleAppender with a PatternLayout&lt;/p&gt;&lt;p&gt;log4net.Config.BasicConfigurator.Configure(&lt;/p&gt;&lt;p&gt;&amp;nbsp; new log4net.Appender.ConsoleAppender(&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new log4net.Layout.PatternLayout("%d&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [%t] %-5p %c - %m%n")));&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// using a ConsoleAppender with a SimpleLayout&lt;/p&gt;&lt;p&gt;log4net.Config.BasicConfigurator.Configure(&lt;/p&gt;&lt;p&gt;&amp;nbsp; new log4net.Appender.ConsoleAppender(new&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; log4net.Layout.SimpleLayout()));&lt;/p&gt;&lt;p&gt;尽管这里用代码配置log4net也很方便，但是你却不能分别配置每个日志对象。所有的这些配置都是被应用到根日志上的。&lt;/p&gt;&lt;p&gt;log4net.Config.BasicConfigurator 类使用静态方法Configure 设置一个Appender 对象。而Appender的构造函数又会相应的要求Layout对象。你也可以不带参数直接调用BasicConfigurator.Configure()，它会使用一个缺省的PatternLayout对象，在一个ConsoleAppender中输出信息。如下所示：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;log4net.Config.BasicConfigurator.Configure();&lt;/p&gt;&lt;p&gt;在输出时会显示如下格式的信息：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;0 [1688] DEBUG log1 AB C - Test&lt;/p&gt;&lt;p&gt;20 [1688] INFO log1 AB C - Test&lt;/p&gt;&lt;p&gt;当log4net框架被配置好以后，就可以如前所述使用日志功能了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用log4net可以很方便地为应用添加日志功能。应用Log4net，使用者可以很精确地控制日志信息的输出，减少了多余信息，提高了日志记录性能。同时，通过外部配置文件，用户可以不用重新编译程序就能改变应用的日志行为，使得用户可以根据情况灵活地选择要记录的信息。&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2369521.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/02/27/2369521.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jcomet/archive/2012/02/22/2363909.html</id><title type="text">用css3写遨游的logo</title><summary type="text">实现方法：先画一个外框 width: 240px; height: 240px;border-radius: 120px;填充背景色background:#b1e4ff;描边border:2px solid #789cb6;加阴影box-shadow: 5px 5px 7px #999;给该死的firefox3私有属性-moz-border-radius: 120px;再画一个小圈，width: 230px; height: 230px;border-radius: 115px;定位，position: relative;top:5px;left:5px;填充背景色background:#3b</summary><published>2012-02-22T13:51:00Z</published><updated>2012-02-22T13:51:00Z</updated><author><name>洗碗心得</name><uri>http://www.cnblogs.com/jcomet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jcomet/archive/2012/02/22/2363909.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jcomet/archive/2012/02/22/2363909.html"/><content type="html">&lt;p&gt;实现方法：&lt;/p&gt;&lt;ol class="css3-logo" style="margin: 0px; padding: 0px;"&gt;&lt;li style="list-style-type: none; margin: 0px; padding: 0px;"&gt;先画一个外框 width: 240px; height: 240px;border-radius: 120px;&lt;br /&gt;填充背景色background:#b1e4ff;&lt;br /&gt;描边border:2px solid #789cb6;&lt;br /&gt;加阴影box-shadow: 5px 5px 7px #999;&lt;br /&gt;给该死的firefox3私有属性-moz-border-radius: 120px;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #b1e4ff; width: 240px; height: 240px; box-shadow: #999999 5px 5px 7px; background-origin: initial; background-clip: initial; border-top-left-radius: 120px; border-top-right-radius: 120px; border-bottom-right-radius: 120px; border-bottom-left-radius: 120px; border: #789cb6 2px solid;"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li style="list-style-type: none; margin: 0px; padding: 0px;"&gt;再画一个小圈，width: 230px; height: 230px;border-radius: 115px;&lt;br /&gt;定位，position: relative;top:5px;left:5px;&lt;br /&gt;填充背景色background:#3b99e3;&lt;br /&gt;给该死的firefox3私有属性-moz-border-radius: 115px;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #b1e4ff; width: 240px; height: 240px; box-shadow: #999999 5px 5px 7px; background-origin: initial; background-clip: initial; border-top-left-radius: 120px; border-top-right-radius: 120px; border-bottom-right-radius: 120px; border-bottom-left-radius: 120px; border: #789cb6 2px solid;"&gt;&lt;div style="position: relative; background-color: #3b99e3; width: 230px; height: 230px; top: 5px; left: 5px; background-origin: initial; background-clip: initial; border-top-left-radius: 115px; border-top-right-radius: 115px; border-bottom-right-radius: 115px; border-bottom-left-radius: 115px;"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li style="list-style-type: none; margin: 0px; padding: 0px;"&gt;扔一个大白方块进去width: 150px; height: 100px;background:#ffffff;&lt;br /&gt;定位position: relative;top:70px;left:42px;&lt;br /&gt;右上大圆角20像素，其他小圆角border-radius: 3px 20px 3px 3px;&lt;br /&gt;给该死的firefox3私有属性-moz-border-radius: 3px 20px 3px 3px;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #b1e4ff; width: 240px; height: 240px; box-shadow: #999999 5px 5px 7px; background-origin: initial; background-clip: initial; border-top-left-radius: 120px; border-top-right-radius: 120px; border-bottom-right-radius: 120px; border-bottom-left-radius: 120px; border: #789cb6 2px solid;"&gt;&lt;div style="position: relative; background-color: #3b99e3; width: 230px; height: 230px; top: 5px; left: 5px; background-origin: initial; background-clip: initial; border-top-left-radius: 115px; border-top-right-radius: 115px; border-bottom-right-radius: 115px; border-bottom-left-radius: 115px;"&gt;&lt;div style="position: relative; background-color: #ffffff; width: 150px; height: 100px; top: 70px; left: 42px; background-origin: initial; background-clip: initial; border-top-left-radius: 3px; border-top-right-radius: 20px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="list-style-type: none; margin: 0px; padding: 0px;"&gt;再扔一个白方块进去width: 35px; height: 45px;background:#ffffff;&lt;br /&gt;定位position: relative;top:30px;left:33px;&lt;br /&gt;粗一点的蓝色描边border:25px solid #3b99e3;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #b1e4ff; width: 240px; height: 240px; box-shadow: #999999 5px 5px 7px; background-origin: initial; background-clip: initial; border-top-left-radius: 120px; border-top-right-radius: 120px; border-bottom-right-radius: 120px; border-bottom-left-radius: 120px; border: #789cb6 2px solid;"&gt;&lt;div style="position: relative; background-color: #3b99e3; width: 230px; height: 230px; top: 5px; left: 5px; background-origin: initial; background-clip: initial; border-top-left-radius: 115px; border-top-right-radius: 115px; border-bottom-right-radius: 115px; border-bottom-left-radius: 115px;"&gt;&lt;div style="position: relative; background-color: #ffffff; width: 150px; height: 100px; top: 70px; left: 42px; background-origin: initial; background-clip: initial; border-top-left-radius: 3px; border-top-right-radius: 20px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;"&gt;&lt;div style="position: relative; background-color: #ffffff; width: 35px; height: 45px; top: 30px; left: 33px; background-origin: initial; background-clip: initial; border: #3b99e3 25px solid;"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;最终效果图如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;img style="cursor: pointer; border-width: 0px;" onclick="window.open('/uploads/allimg/110314/1_110314083752_1.jpg')" src="http://www.cnblogs.com/uploads/allimg/110408/0Z94C437-0.jpg" alt="\&amp;quot; width=" height="577" border="0" /&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/jcomet/aggbug/2363909.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jcomet/archive/2012/02/22/2363909.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
