摘至:http://www.cnblogs.com/jacktu/archive/2007/12/05/984487.html


由于log4net默认情况下会独占日志文件,该文件不能被File.Open。
可以通过增加配置:<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />来使用最小锁定模型(minimal locking model),以允许多个进程可以写入同一个文件。

各种appender说明:

在log4net的配置中,appender是最重要的部分,一般来说,每一种appender都表示一种日志的输出介质,如日志文件、EvengLog、数据库、控制台、邮件、ASP.NET页面等。

本文对各种内置的appender的配置提供了示例,但却远称不上详尽。要想了解每一种appender的参数和选项的说明,请参看该appender的SDK文档。

以下示例都是.NET 2.0下进行的, log4net的版本为1.2.10。

AdoNetAppender

详情参考 log4net.Appender. AdoNetAppender SDK文档

AdoNetAppender的相关配置内容取决于目标数据库的provider。下面仅提供SQL Server 2000的例子。

首先建立数据表:

CREATE TABLE [dbo].[Log]
 (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)

然后添加配置:

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="2" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="server=(local);database=TestBase;integrated security=false;persist security info=True;UID=sa;PWD=" />
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
    <parameter>
        <parameterName value="@log_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="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <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="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>

bufferSize表示批处理的日志事件,可以避免每次日志事件都访问数据库;ConnectionType指定了要使用的IDbConnection的完全限定类型名称;connectionString表示连接字符串;CommandText是SQL语句或存储过程;最后一组parameter节点描述了SQL语句或存储过程需要的参数。

AspNetTraceAppender

详情参考 log4net.Appender.AspNetTraceAppender SDK 文档

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

这段配置可将日志信息输出到页面的Trace上下文环境。如果日志的级别低于WARN,会以System.Web.TraceContext.Write方法输出;如果级别为WARN或WARN以上则会以System.Web.TraceContext.Warn方法输出,下图中的日志信息的不同颜色可以说明这一点。效果图如下:

这在进行页面调试的时候可是很方便的。

BufferingForwardingAppender

详情参考 log4net.Appender.BufferingForwardingAppender SDK 文档

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
    <bufferSize value="5"/>
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <appender-ref ref="LogFileAppender" />
    <appender-ref ref="AspNetTraceAppender" />
</appender>

BufferingForwardingAppender的主要作用是将输出到指定类型(这里是LogFileAppender)的Appender的日志信息进行缓存。bufferSize属性指定了缓存的数量,如果value为5,那么将在信息量达到6条的时候,把这些日志批量输出。appender-ref属性指定了缓存的Appender类型,同root节点一样,这里可以指定多个。

ColoredConsoleAppender

详情参考log4net.Appender.ColoredConsoleAppender SDK 文档

ColoredConsoleAppender将日志信息输出到控制台。默认情况下,日志信息被发送到控制台标准输出流。下面这个示例演示了如何高亮显示Error信息。

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
    </mapping>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

效果如下:

还可以为不同的级别指定不同的颜色:

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
    </mapping>
    <mapping>
        <level value="DEBUG" />
        <backColor value="Green" />
    </mapping>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

效果如下:



ConsoleAppender

详情参考 log4net.Appender.ConsoleAppender SDK 文档

ConsoleAppender将日志信息输出到控制台标准输出流。

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    </layout>
</appender>

EventLogAppender

详情参考 log4net.Appender.EventLogAppender SDK 文档

EventLogAppender将日志写入本地机器的应用程序事件日志中。默认情况下,该日志的源(Source)是AppDomain.FriendlyName,也可以手动指定其它名称。

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    </layout>
</appender>

FileAppender

详情参考 log4net.Appender.File Appender SDK 文档

FileAppender将日志信息输出到指定的日志文件。

<!--[if !vml]-->

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
    <param name="File" value="WebUtilClient.log" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    </layout>
</appender>

File指定了文件名称,可以使用相对路径,此时日志文件的位置取决于项目的类型(如控制台、Windows Forms、ASP.NET等);也可以使用绝对路径;甚至可以使用环境变量,如<file value="${TMP}\log-file.txt" />。
AppendToFile指定是追加到还是覆盖掉已有的日志文件。
还可以添加如下属性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />来使用最小锁定模型(minimal locking model),以允许多个进程可以写入同一个文件。

ForwardingAppender

详情参考 log4net.Appender.ForwardingAppender SDK 文档

ForwardingAppender可以用来为一个Appender指定一组约束。看下面这个示例:

<appender name="ForwardingAppender" type="log4net.Appender.ForwardingAppender" >
    <threshold value="WARN"/>
    <appender-ref ref="ConsoleAppender" />
</appender>

在这个示例中,为ConsoleAppender添加了约束,Threshold为WARN。这意味着对于一条日志信息,如果直接使用ConsoleAppender,那么不论它是什么级别,总会进行输出,而如果使用这个ForwardingAppender,则只有那些WARN或WARN以上的日志才会发送到ConsoleAppender。

MemoryAppender

详情参考 log4net.Appender.MemoryAppender SDK 文档

似乎不应该使用配置文件来配置MemoryAppender,但如果你非要这么做,看看这个示例(未验证):

<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
    <onlyFixPartialEventData value="true" />
</appender>

NetSendAppender

详情参考 log4net.Appender.NetSendAppender SDK 文档

NetSendAppender向特定用户的屏幕发送消息(未验证)。

<appender name="NetSendAppender" type="log4net.Appender.NetSendAppender">
    <threshold value="ERROR" />
    <server value="Anders" />
    <recipient value="xym" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

OutputDebugStringAppender

详情参考 log4net.Appender.OutputDebugStringAppender SDK 文档

下面这个例子描述了如何配置该Appender以向OutputDebugString API写入日志(未验证)。

<appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

RemotingAppender

详情参考 log4net.Appender.RemotingAppender SDK 文档

RemotingAppender向特定的Sink发送日志信息(未验证):

<!--[if !vml]-->

<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" >
    <sink value="tcp://localhost:8085/LoggingSink" />
    <lossy value="false" />
    <bufferSize value="95" />
    <onlyFixPartialEventData value="true" />
</appender>

RollingFileAppender

详情参考 log4net.Appender.RollingFileAppender SDK 文档

RollingFileAppender以FileAppender为基础,与后者有着相同的配置选项。

下面这个例子演示了如何配置RollingFileAppender以写入log.txt文件。写入的文件名总是为log.txt(StaticLogFileName参数指定为true);根据文件大小(RollingStyle)来生成新的文件;最多保存有10个文件(MaxSizeRollBackups属性,而且一旦写满10个文件,就不再写入日志了),每个文件最大为10KB。这些文件名称为log.txt.1, log.txt.2…等。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="log\Log.txt" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="10" />
    <param name="MaximumFileSize" value="5MB" />
    <param name="RollingStyle" value="Size" />
    <param name="StaticLogFileName" value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    </layout>
</appender>

SmtpAppender

详情参考 log4net.Appender.SmtpAppender SDK 文档。

SmtpAppender通过Smtp邮件服务器发送日志信息:

        <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
            <authentication value="Basic" />
            <to value="anderscui@tom.com" />
            <from value="anderscui@163.com" />
            <username value="anderscui" />
            <password value="password" />
            <subject value="test logging message" />
            <smtpHost value="smtp.163.com" />
            <bufferSize value="512" />
            <lossy value="true" />
            <evaluator type="log4net.Core.LevelEvaluator">
                <threshold value="WARN"/>
            </evaluator>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
            </layout>
        </appender>

将其中的to、from、username、password、subject、smtpHost配置正确才可能发送成功。bufferSize可将多条信息打包在一个邮件中。evaluator可以对日志进行过滤。

SmtpPickupDirAppender

详情参考 log4net.Appender.SmtpPickupDirAppender SDK 文档

配置与SmtpAppender类似,但要把SmtpHost换为PickupDir(未验证)。

<appender name="SmtpPickupDirAppender" type="log4net.Appender.SmtpPickupDirAppender">
    <to value="to@domain.com" />
    <from value="from@domain.com" />
    <subject value="test logging message" />
    <pickupDir value="C:\SmtpPickup" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>

TraceAppender

详情参考 log4net.Appender.TraceAppender SDK 文档

TraceAppender将日志信息写入System.Diagnostics.Trace系统(出现在输出窗口)。

<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

UdpAppender

详情参考 log4net.Appender.UdpAppender SDK 文档

下例演示了如何配置UdpAppender(未验证):

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    <localPort value="8080" />
    <remoteAddress value="224.0.0.1" />
    <remotePort value="8080" />
    <layout type="log4net.Layout.PatternLayout, log4net">
        <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

上面有若干个Appender标注为"未验证"的,是指这些Appender极少用到,或者在我的机器上没能实现 :(

希望这些内容能对您有所帮助。

转载于:https://www.cnblogs.com/gllgsoft/archive/2008/11/24/1339778.html

解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)相关推荐

  1. 使用log4net将日志文件输出替csv格式

    使用log4net将日志文件输出为csv格式 我们在编写程序时,会在程序运行过程中记录一些日志.log4net作为一款经久耐用的日志组件,值得我们信赖.在中小型公司中,往往没有专业的日志服务器来处理应 ...

  2. C#配置NuGet包log4Net,生成日志文件

    log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. [1] log4net是Apache ...

  3. unity3d使用log4net时日志文件生成位置问题

    log4net github指路:https://github.com/apache/logging-log4net 我在U3D中加入Log4Net时,文件相对路径是有问题的,一直生成在U3D的Edi ...

  4. 在运行时修改log4Net的日志文件路径

    最近做一个项目,日志使用log4Net做,路径默认在安装目录下,但客户又想自己设置日志存放位置,那么就得修改这个路径到用户指定的地方. 具体实现步骤如下: 1. 获取默认Repository; 2. ...

  5. log4j日志文件乱码问题的解决方法

    log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了, ...

  6. Zabbix监控网络设备日志文件及字段报警

    Zabbix监控网络设备日志文件及字段报警 一.首先就是配置网络设备日志传送到zabbix存放日志的指定目录,一般目录为/var/log/ 需要配置rsyslog.conf 根据需求添加tcp或者ud ...

  7. db2 修改表空间自增长_db2表空间及日志文件调整

    1.SQLState '57011' and errorCode '-964' 原因:数据库的日志文件已满 解决方法:修改日志文件大小(加大),增加日志文件个数,增加辅助日志文件个数(三个修改参数可以 ...

  8. 如何使用损坏或删除SQL Server事务日志文件重建数据库

    This is the last article, but not the least one, in the SQL Server Transaction Log series. In this s ...

  9. vlf 用法_什么是SQL虚拟日志文件(又名SQL Server VLF)?

    vlf 用法 In this article we'll review SQL Virtual Log files aka SQL Server VLFs, providing an overview ...

最新文章

  1. SKU表管理之删除SKU表数据
  2. 2011 ScrumGathering敏捷个人.pptx
  3. linux中html的图片显示不出来,如何在HTML中显示原始的rgb图像
  4. idea配置tomcat的方法
  5. openpyxl库,1秒合并多张表格并设置图表格式
  6. 基于nginx环境部署nagios
  7. 步步为营UML建模系列总结
  8. html在线编辑器 asp.net,ASP.NET网站使用Kindeditor富文本编辑器配置步骤
  9. bootstrap validator 提供了哪些验证函数
  10. python画两条曲线图_python绘制多个曲线的折线图
  11. delphi if多个条件_判断(if)语句
  12. 多通路fpga 通信_基于USB通信的FPGA高速数据采集系统研究
  13. ng机器学习视频笔记(三) ——线性回归的多变量、特征缩放、标准方程法
  14. 微信语音遥控Windows Azure云虚拟机
  15. MyBatis-SELECT基本查询
  16. 172.阶乘后的零 (力扣leetcode) 博主可答疑该问题
  17. python高中题_python练习题
  18. E-prime 鼠标点击选择
  19. matlab gaot工具箱安装详细说明
  20. CAN分析仪的特点与功能

热门文章

  1. 【技术综述】基于弱监督深度学习的图像分割方法综述
  2. 全球及中国金属粘合剂行业需求规模及产销前景分析报告2022-2027年
  3. 中国蒸汽拖把行业竞争状况分析及十四五发展趋势研究报告2021年版
  4. 【集训心得】在真哥强迫下不得不写的总结
  5. 微软2019暑期实习笔试题
  6. 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息...
  7. DFS——记忆化搜索——动态规划
  8. MHA监控进程异常退出(MHA版本:0.56)
  9. 动态SQL字符长度超过8000
  10. Android之使用Android-AQuery异步加载图片(一)