Log4net数据表
?
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">
<!--BufferSize為緩沖區大小,只有日志記錄超設定值才會一塊寫入到數據庫-->
<bufferSize value="10" /><!—或寫為<param name="BufferSize" value="10" />-->
?
<!--引用-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
?
<!--連接數據庫字符串-->
<connectionString value="data source=.;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=;" />
?
<!--插入到表Log-->
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Operator],[Message],[ActionType],[Operand],[IP],[MachineName],[Browser],[Location],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@operator, @message,@action_type,@operand,@ip,@machineName,@browser,@location,@exception)" />
?
<!—日志記錄時間,RawTimeStampLayout為默認的時間輸出格式 -->
????? <parameter>
??????? <parameterName value="@log_date" />
??????? <dbType value="DateTime" />
??????? <layout type="log4net.Layout.RawTimeStampLayout" />
????? </parameter>
?
????? <!--線程號-->
????? <parameter>
??????? <parameterName value="@thread" />
??????? <dbType value="String" />
<!—長度不可以省略,否則不會輸出-->
??????? <size value="100" />
??????? <layout type="log4net.Layout.PatternLayout">
????????? <conversionPattern value="%thread" />
??????? </layout>
????? </parameter>
?
????? <!--日志等級-->
????? <parameter>
??????? <parameterName value="@log_level" />
??????? <dbType value="String" />
??????? <size value="100" />
??????? <layout type="log4net.Layout.PatternLayout">
????????? <conversionPattern value="%level" />
??????? </layout>
????? </parameter>
?
????? <!--日志記錄類名稱-->
????? <parameter>
??????? <parameterName value="@logger" />
??????? <dbType value="String" />
??????? <size value="200" />
??????? <layout type="log4net.Layout.PatternLayout">
????????? <conversionPattern value="%logger" />
??????? </layout>
????? </parameter>
?????
????? <!--操作者。這個是自定義的輸出字段,使用重新實現的布局器ReflectionLayout -->
????? <parameter>
??????? <parameterName value="@operator" />
<!—設置為Int32時只有bufferSize的 value<="1"才正確輸出,沒有找出原因。-->
??????? <dbType value="Int16" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{Operator}" />
??????? </layout>
????? </parameter>
?
????? <!--操作對象-->
????? <parameter>
??????? <parameterName value="@operand" />
??????? <dbType value="String" />
??????? <size value="300" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{Operand}" />
??????? </layout>
????? </parameter>
?
????? <!—IP地址-->
????? <parameter>
??????? <parameterName value="@ip" />
??????? <dbType value="String" />
??????? <size value="20" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{IP}" />
??????? </layout>
????? </parameter>
?
????? <!--機器名-->
????? <parameter>
??????? <parameterName value="@machineName" />
??????? <dbType value="String" />
??????? <size value="100" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{MachineName}" />
??????? </layout>
????? </parameter>
?
????? <!--瀏覽器-->
????? <parameter>
??????? <parameterName value="@browser" />
??????? <dbType value="String" />
??????? <size value="50" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{Browser}" />
??????? </layout>
????? </parameter>
?????
????? <!—日志消息-->
????? <parameter>
??????? <parameterName value="@message" />
??????? <dbType value="String" />
??????? <size value="3000" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{Message}" />
??????? </layout>
????? </parameter>
?
????? <!--動作類型-->
????? <parameter>
??????? <parameterName value="@action_type" />
??????? <dbType value="Int16" />
??????? <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
????????? <conversionPattern value="%property{ActionType}" />
??????? </layout>
????? </parameter>
?
????? <!—記錄日志的位置-->
????? <parameter>
??????? <parameterName value="@location" />
??????? <dbType value="String" />
??????? <size value="2000" />
??????? <layout type="log4net.Layout.PatternLayout">
????????? <conversionPattern value="%location" />
??????? </layout>
????? </parameter>
?????
????? <!—異常信息。ExceptionLayout 為異常輸出的默認格式-->
????? <parameter>
??????? <parameterName value="@exception" />
??????? <dbType value="String" />
??????? <size value="4000" />
??????? <layout type="log4net.Layout.ExceptionLayout" />
????? </parameter>
</appender>
注意:
向表中輸出的字段不能多于數據表本身字段,而反之則可以,但這些多余字段一定使其可以為空,否則便寫不到數據庫;
輸出字段的類型一定是對應數據表字段數據類型可以隱式轉換的,而且長度也不能超過,否則也不能寫入;
數據表字段設置盡量可以為空,這樣可以避免一條日志記錄存在空數據導致后面的日志都記錄不了。
4.3<logger>的配置
在配置文件<appender>中的配置好了輸出的介質,格式,過濾方式,還要定義日志對象<logger>。
在框架的體系里,所有的日志對象都是根日志(root logger)的后代。 因此如果一個日志對象沒有在配置文件里顯式定義,則框架使用根日志中定義的屬性。在<root>標簽里,可以定義level級別值和Appender的列表。如果沒有定義LEVEL的值,則缺省為DEBUG。可以通過<appender-ref>標簽定義日志對象使用的Appender對象。<appender-ref>聲明了在其他地方定義的Appender對象的一個引用。在一個logger對象中的設置會覆蓋根日志的設置。而對Appender屬性來說,子日志對象則會繼承父日志對象的Appender列表。這種缺省的行為方式也可以通過顯式地設定<logger>標簽的additivity屬性為false而改變。
<root>不顯式申明時使用默認的配置。我覺得在使用時不定義<root>,自定義多個<logger>,在程序中記錄日志時直接使用<logger>的name來查找相應的<logger>,這樣更靈活一些。例如:
<!--同時寫兩個文件和數據庫-->
<logger name="ReflectionLayout">
????? <level value="DEBUG"/>
????? <appender-ref ref="HashtableLayout"/>
????? <appender-ref ref="ReflectionLayout"/>
????? <appender-ref ref="ADONetAppender"/>
</logger>
4.4關聯配置文件
log4net默認關聯的是應用程序的配置文件App.config(BS程序是Web.config),可以使用程序集自定義屬性來進行設置。下面來介紹一下這個自定義屬性:
log4net.Config.XmlConifguratorAttribute。
?
XmlConfiguratorAttribute有3個屬性:
ConfigFile: 配置文件的名字,文件路徑相對于應用程序目錄
(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile屬性不能和ConfigFileExtension屬性一起使用。
ConfigFileExtension: 配置文件的擴展名,文件路徑相對于應用程序的目錄。ConfigFileExtension屬性不能和ConfigFile屬性一起使用。
Watch: 如果將Watch屬性設置為true,就會監視配置文件。當配置文件發生變化的時候,就會重新加載。
如果ConfigFile和ConfigFileExtension都沒有設置,則使用應用程序的配置文件App.config(Web.config)。
?
可以在項目的AssemblyInfo.cs文件里添加以下的語句:
?//監視默認的配置文件,App.exe.config???
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
?
//監視配置文件,App.exe.log4net。
[assembly: log4net. Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]
?
//使用配置文件log4net.config,不監視改變。注意log4net.config文件的目錄,BS程序在站點目錄//下,CS則在應用程序啟動目錄下,如調試時在\bin\Debug下,一般將文件屬性的文件輸出目錄調為//始終復制即可
[assembly: log4net. Config.XmlConfigurator(ConfigFile = "log4net.config")]
?
//使用配置文件log4net.config,不監視改變
[assembly: log4net. Config.XmlConfigurator()]
?
也可以在Global.asax的Application_Start里或者是Program.cs中的Main方法中添加,注意這里一定是絕對路徑,如下所示:
//這是在BS程序下,使用自定義的配置文件log4net.xml,使用Server.MapPath("~") +?//@"\log4net.xml”來取得路徑。 \log4net.xml為相對于站點的路徑
// ConfigureAndWatch()相當于Configure(Watch = true)
log4net.Config.XmlConfigurator.ConfigureAndWatch(
new System.IO.FileInfo(Server.MapPath("~") + @"\log4net.xml"));
//這是在CS程序下,可以用以下方法獲得:
string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
string configFilePath = assemblyDirPath + "?\\log4net.xml";
log4net.Config.XmlConfigurator.ConfigureAndWatch(
new FileInfo(configFilePath));
?
或直接使用絕對路徑:
//使用自定義的配置文件,直接絕對路徑為:c:/log4net.config
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(@"c:/log4net.config"));
?
?
轉自:http://www.cnblogs.com/neekerss/archive/2011/01/04/1925171.html
轉載于:https://www.cnblogs.com/shiningrise/archive/2011/12/21/2296411.html
總結
以上是生活随笔為你收集整理的Log4net数据表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VIM之Project 项目管理工具
- 下一篇: JQuery函数在IE浏览器中测试的注意