Log4Net Config Appender
整理了下以前项目中使用的Log4Net的Appender。
1:只记录在一个文件下的
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="RollingFileAppenderFileSize" type="log4net.Appender.FileAppender"> <!--日志文件名--> <file value="log\log.txt"/> <!--编码方式--> <encoding value ="unicodeFFFE"/> <!--是否在文件中追加--> <appendToFile value="true"/> <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/> </layout> </appender>
2:滚动文件,其中分为3类,1:按大小来滚动文件名,2:按日期来滚动文件名,3:按大小以及日期的混合方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!--按最大的Size来判断的是否产生新的Log--> <appender name="RollingFileAppenderFileSize" type="log4net.Appender.RollingFileAppender"> <!--日志文件名--> <file value="log\log.txt"/> <!--编码方式--> <encoding value ="unicodeFFFE"/> <!--是否在文件中追加--> <appendToFile value="true"/> <!--按照文件的大小进行变换日志文件--> <rollingStyle value="Size"/> <!--最大变换数量--> <maxSizeRollBackups value="-1"/> <!--是否维持file原来的后缀--> <PreserveLogFileNameExtension value ="true"/> <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小--> <maximumFileSize value="100KB"/> <!--日志文件名是否为静态--> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/> </layout> </appender> <!--按最大的Size,以及Date来判断的是否产生新的Log--> <appender name="RollingFileAppenderFileDateSize" type="log4net.Appender.RollingFileAppender"> <!--日志文件名--> <file value="log\"/> <!--编码方式--> <encoding value ="unicodeFFFE"/> <!--是否在文件中追加--> <appendToFile value="true"/> <!--按照文件的大小进行变换日志文件Once,Size,Date,Composite --> <rollingStyle value="Composite"/> <!--按日期递进的文件名 其中 "(") 是用来转义的,通知系统 .log是文本信息。 备注:这里不可以使用文件名中不允许使用的字符 比如:等--> <datePattern value="yyyy-MM-dd hh_mm_ss".log"" /> <!--最大变换数量--> <maxSizeRollBackups value="-1"/> <!--是否维持原来的后缀--> <PreserveLogFileNameExtension value ="true"/> <!--是否静态的文件,就是最新的日志是否永远是File内定义的文件--> <StaticLogFileName value="false"/> <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小 支持KB M GB 但不支持小数--> <maximumFileSize value="100KB"/> <!--日志文件名是否为静态--> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/> </layout> </appender> <!--按Date来判断的是否产生新的Log--> <appender name="RollingFileAppenderFileDate" type="log4net.Appender.RollingFileAppender"> <!--日志文件名--> <file value="log\"/> <!--编码方式--> <encoding value ="unicodeFFFE"/> <!--是否在文件中追加--> <appendToFile value="true"/> <!--按照文件的大小进行变换日志文件Once,Size,Date,Composite --> <rollingStyle value="Date"/> <!--按日期递进的文件名 其中 "(") 是用来转义的,通知系统 .log是文本信息。 备注:这里不可以使用文件名中不允许使用的字符 比如:等 这里最小的单位为分钟--> <datePattern value="yyyy-MM-dd hh_mm_ss".log"" /> <!--最大变换数量--> <maxSizeRollBackups value="-1"/> <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--是否维持原来的后缀--> <PreserveLogFileNameExtension value ="true"/> <!--是否静态的文件--> <StaticLogFileName value="false"/> <!--日志文件名是否为静态--> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/> </layout> </appender>
3:记录在SqlServer数据库中,备注这里特别注意ConnectionType,在源码中是使用了Type.GetType(ConnectionType)来获取类的,所以必须带有key 和 version
创建SQL表的SQL语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CREATE TABLE [dbo].[TestSysLog](
[Date] [date] NOT NULL,
[Thread] [int] NOT NULL,
[Level] [nvarchar](255) NOT NULL,
[Logger] [nvarchar](255) NOT NULL,
[Message] [nvarchar](max) NULL,
[Method] [nvarchar](255) NULL,
[Location] [nvarchar](1023) NULL,
[Exception] [nvarchar](max) NULL
)
Appender:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!--输出到SQLServer数据库 注意这里的connectionType 一定要带上publickeyToken 因为源码中使用的是Type.GetType()--> <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender"> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <connectionString value="data source=192.168.21.111;Initial Catalog=SEM;Persist Security Info=True;User ID=sa;Password=123456" /> <commandText value="INSERT INTO [TestSysLog] ([Date], [Thread], [Level], [Logger], [Method], [Location],[Message], [Exception]) VALUES (@Date, @Thread, @Level, @Logger, @Method,@Location,@Message, @Exception)" /> <bufferSize value="1" /> <parameter> <parameterName value="@Date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value="@Thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@Level" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@Logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@Method" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%method" /> </layout> </parameter> <parameter> <parameterName value="@Location" /> <dbType value="String" /> <size value="1023" /> <layout type="log4net.Layout.PatternLayout" > <conversionPattern value="%location" /> </layout> </parameter> <parameter> <parameterName value="@Message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value="@Exception" /> <dbType value="AnsiString" /> <size value="8000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender>
4:记录到Oracle数据库中。备注这里特别注意ConnectionType,在源码中是使用了Type.GetType(ConnectionType)来获取类的,所以必须带有key 和 version。所以Oracle版本不同connectionType 也不同
创建SysLog表的SQL语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CREATE TABLE SysLog ( Log_Date DATE NOT NULL, Log_Thread INTEGER NOT NULL, Log_Level NVARCHAR2(255) NOT NULL, Log_Logger NVARCHAR2(255) NOT NULL, Log_Message nclob, Log_Method NVARCHAR2(255), Log_Location NVARCHAR2(1023), Log_Exception nclob )
Appender Oracle8i
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> <connectionType value ="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="data source=[_serviceName_];User ID=[_userid_];Password=[_password_]" /> <commandText value="INSERT INTO SysLog (Log_Date, Log_Thread, Log_Level, Log_Logger, Log_Message, Log_Method,Log_Location, Log_Exception) VALUES (:Date, :Thread, :Level, :Logger,:Message,:Method,:Location,:Exception)" /> <bufferSize value="250" /> <parameter> <parameterName value=":Date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value=":Thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value=":Level" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value=":Logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value=":Method" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%method" /> </layout> </parameter> <parameter> <parameterName value=":Location" /> <dbType value="String" /> <size value="1023" /> <layout type="log4net.Layout.PatternLayout" > <conversionPattern value="%location" /> </layout> </parameter> <parameter> <parameterName value=":Message" /> <dbType value="AnsiString" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value=":Exception" /> <dbType value="AnsiString" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender>
Appender Oracle9i
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" /> <commandText value="INSERT INTO SysLog (Log_Date, Log_Thread, Log_Level, Log_Logger, Log_Message, Log_Method,Log_Location, Log_Exception) VALUES (:Date, :Thread, :Level, :Logger,:Message,:Method,:Location,:Exception)" /> <bufferSize value="128" /> <parameter> <parameterName value=":Date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value=":Thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value=":Level" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value=":Logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value=":Method" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%method" /> </layout> </parameter> <parameter> <parameterName value=":Location" /> <dbType value="String" /> <size value="1023" /> <layout type="log4net.Layout.PatternLayout" > <conversionPattern value="%location" /> </layout> </parameter> <parameter> <parameterName value=":Message" /> <dbType value="AnsiString" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value=":Exception" /> <dbType value="AnsiString" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender>
未完待续~~