整理了下以前项目中使用的Log4Net的Appender。

1:只记录在一个文件下的

  <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:按大小以及日期的混合方式

  <!--按最大的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"/>
<!--按日期递进的文件名 其中 &quot;(") 是用来转义的,通知系统 .log是文本信息。 备注:这里不可以使用文件名中不允许使用的字符 比如:等-->
<datePattern value="yyyy-MM-dd hh_mm_ss&quot;.log&quot;" />
<!--最大变换数量-->
<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"/>
<!--按日期递进的文件名 其中 &quot;(") 是用来转义的,通知系统 .log是文本信息。 备注:这里不可以使用文件名中不允许使用的字符 比如:等 这里最小的单位为分钟-->
<datePattern value="yyyy-MM-dd hh_mm_ss&quot;.log&quot;" />
<!--最大变换数量-->
<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语句:

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:

    <!--输出到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语句: 

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

  <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

<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>

未完待续~~

Log4Net Config Appender的更多相关文章

  1. Apache log4net™ Config Examples

    Overview This document presents example configurations for the built-in appenders. These configurati ...

  2. 使用独立的log4net.config文件配置log4net,将日志记录到Mysql数据库【原创】

    开发环境: VS2013, Asp.Net MVC 4.0, .Net Framework 4.0, Log4net 1.2.13.0, Mysql.Data.dll,6.8.3.0 设置步骤: 1. ...

  3. log4net 自定义Appender

    最近有个需求,使用log4net来记录日志,然后将数据保存到服务器端.一开始打算写一个windows service,定期上传日志. 后来又因为一些场景下不适应,因此直接改为保存内存中,到一定阀值之后 ...

  4. Log4Net.Config配置信息《转》

    看了log4net的简单使用之一_log4net介绍 大家对log4net组件应该有了大概的了解,下面再近一步介绍其在项目中如何应用. 1.Logger 所有的记录器都必须实现 ILog 接口,该接口 ...

  5. log4net.config 单独文件

    使用的命名空间下添加 [assembly: log4net.Config.DOMConfigurator(ConfigFile = "log4net.config", Watch ...

  6. log4net.config

    <?xml version="1.0" encoding="UTF-8"?> <log4net> <root> <le ...

  7. Log4Net 添加自定义字段并保存到数据库

    Log4Net是常用的功能强大的日志插件,该插件提供了几个默认字段 大家可能都用过Log4Net插件来记录日志,该插件默认提供了这几个字段@log_date, @thread, @log_level, ...

  8. log4net的各种Appender配置示例

    Apache log4net™ Config Examples Overview This document presents example configurations for the built ...

  9. 附带详细注释的log4net的app.config文件配置例子

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...

随机推荐

  1. PHP 生成UUID的方法

                                                    .                 .                 .                ...

  2. vs2010安装svn插件

    vs2010安装svn插件及简单使用 1.下载安装程序,安装 2.配置vs2010 3.check out工程 1.下载安装程序,安装 2.配置vs2010 3.check out工程 Open th ...

  3. 自写Date工具类

    以前写项目的时候总是在使用到了时间的转换的时候才在工具类中添加一个方法,这样很容易导致代码冗余以及转换的方法注释不清晰导致每次使用都要重新看一遍工具类.因此整理出经常使用的一些转换,用作记录,以便以后 ...

  4. socket 通信之select

    对于socket 通信,大家很多都用的单线程通信.同时只能监听一个端口,只能响应一个服务,select的方式可以解决多个socket 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...

  5. mysql优化方案总结

    u       Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引u ...

  6. OSX: 10.9的SMB网络共享连接可能破坏其权限设置

    参见以前的Blog,“OSX: 10.9 Mavericks的重要更新技术细节(1)”,自从10.9之后,它的内核默认地使用全新的SMB2协议,这本来是令人期待的变化,不过根据这多年来和OS X系统的 ...

  7. Twitter License for Android

    1.Apache Software Foundation Apache 软件基金会 2.Apache Thrift 跨平台传输数据,Thrift与其他传输方式的比较:    xml与JSON相比体积太 ...

  8. Python中关于try...finally的一些疑问

    最近看Vamei的Python文章,其中一篇讲异常处理的,原本看完没啥疑惑,或许是自己想的简单了. 看到评论,一个园友的问题引起我的兴趣. 他的问题是 def func(x): try: return ...

  9. Thinkphp3.2使用scws中文分词 提取关键词

    SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统).1.下载scws官方提供的类(这里使用的是pscws第四版的)http://www ...

  10. Android手机自带内部存储路径的获取 (转)

    转自:http://my.oschina.net/liucundong/blog/288183 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro ...