log4net RemotingAppender 的配置

Before you even start trying any of the alternatives provided, ask yourself whether you really need to have multiple processes log to the same file, then don‘t do it ;-).

FileAppender offers pluggable locking models for this usecase but all existing implementations have issues and drawbacks.

By default the FileAppender holds an exclusive write lock on the log file while it is logging. This prevents other processes from writing to the file. This model is known to break down with (at least on some versions of) Mono on Linux and log files may get corrupted as soon as another process tries to access the log file.

MinimalLock only acquires the write lock while a log is being written. This allows multiple processes to interleave writes to the same file, albeit with a considerable loss in performance.

InterProcessLock doesn‘t lock the file at all but synchronizes using a system wide Mutex. This will only work if all processes cooperate (and use the same locking model). The acquisition and release of a Mutex for every log entry to be written will result in a loss of performance, but the Mutex is preferable to the use of MinimalLock.

If you use RollingFileAppender things become even worse as several process may try to start rolling the log file concurrently. RollingFileAppendercompletely ignores the locking model when rolling files, rolling files is simply not compatible with this scenario.

A better alternative is to have your processes log to RemotingAppenders. Using the RemoteLoggingServerPlugin (or IRemoteLoggingSink) a process can receive all the events and log them to a single log file. One of the examples shows how to use the RemoteLoggingServerPlugin.

原于这段话, 大致的是文件方式写日志,会遇到多个process同时写入同一个日志文件的问题.最后提到最好的方法是使用RemotingAppender。 之后花了一点时间研究了一下。主要想讲几个注意点。客户端的配置

<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" >
    <sink value="tcp://localhost:8085/LoggingSink" />
    <lossy value="false" />
    <bufferSize value="95" />
    <onlyFixPartialEventData value="true" />
</appender>注意:bufferSize 是表示一个缓存区大小,remotingappender不是立即就把日志发送给服务端的,等到缓冲区满了设置的大小之后才会发,如果想立即发送请把这个值设成0当然remotingappender 和其他的appender一样都可以设置日志格式的。主要是讲一下 服务端
首先注册信道, 客户端配置了tcp 所以服务器端也使用TcpChannel 注册的时候  ChannelServices.RegisterChannel(channel, false); 注意第二个参数要是设置成false;(我就在这里花了很多时间)。注册远程对象 使用  RemotingServices.Marshal  (注log4net 内部使用的是接口方式激活远程对象)远程对象必须继承 RemotingAppender.IRemoteLoggingSink借口第二种发布方式,使用log4net 提供的 RemoteLoggingServerPlugin 插件 log4net.LogManager.GetRepository().PluginMap.Add(new log4net.Plugin.RemoteLoggingServerPlugin("LoggingSink"))其中“LoggingSink”是远程对象发布的名称使用第二种方式,不需要自己实现远程对象,log4net中帮我们实现好了一个远程对象。要获取日志信息,只要在服务器端在配置一个appender 就可以了!
时间: 2024-10-12 17:57:23

log4net RemotingAppender 的配置的相关文章

Log4Net 的简要配置

引用log4net.dll AssemblyInfo.cs中 [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: log4net.Config.DOMConfigurator(ConfigFileExtension = "config", Watch = true)] 3.App.config <config

关于log4net日志的配置流程

最近又重新整理一下log4net日志的配置,现在记录一下流程和一些遇到的问题,以备后续使用,具体的配置参数等信息.此文无,见谅! 1. 下载log4net.dll文件(网上很多,随便找一个!) 2. 项目中引用此dll 3. appconfig中配置log4net(具体配置方案有很多例子.) 4. AssemblyInfo.cs 中添加"[assembly: log4net.Config.XmlConfigurator(Watch = true)]" 5. winform中调用&quo

log4net的简单配置和使用

因为看到公司项目有用到过这个来写日志,所以自己试着来配置和写了下日志.废话不多说,看下面说明配置和使用log4net的步骤: 1.下载log4net.dll,地址是:http://logging.apache.org/log4net/  个人建议下载源码版,如果写不了日志可以调试. 2引入dll到项目中. 3配置log4net,有两种方式:使用web.config或者新建一个**.config配置文件来配置.下面我的是用新建一个配置文件来配置的,配置文件和说明如下 <?xml version=&qu

log4net日志的配置及简单应用

在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工具,其中也学到了一些皮毛,所谓好记性不如烂笔头嘛.为此,将把这些心得体会记录下来,以免遗忘.同时,也为各位童鞋提供一些参考.在此声明,本文粗浅之极,大神莫入. 对于log4net有什么功能,这里就不赘述了.直接进入本文重点,也就是log4net的配置和简单使用. 首先,项目要引入log4net.dl

.net Log4Net日志的配置及使用 全局异常过滤器

.net添加Log4Net日志的配置及使用,以及将其设置为全局异常过滤器,主要有以下步骤: 1. 新建一个Web应用程序2. 引用log4net.dll3. 添加config文件4. 在AssemblyInfo.cs进行注册5. 在Global.asax中进行初始化设置6. 添加Log4Helper.cs帮助类7. 新增过滤器LogExceptionFilter.cs文件8. 在FilterConfig.cs中添加过滤器9. 在Global.asax中注册过滤器 详细步骤如下: 1.新建一个we

log4net NHibernate日志配置

1. 通过Nuget引用log4net 2. 在程序开始的执行的地方(一般是在Global.asax文件中)加入下面log4net配置语句 protected void Application_Start() { log4net.Config.XmlConfigurator.Configure(); } 3. 在web.config 中configuration 节点中 加入如下配置 <configuration> <configSections> <section name

log4net 使用与配置 每天一份log文件

1.下载 或 在nuget安装 log4net 2. web.config (app.config) <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net>

Log4net日志GUI配置工具

关于log4net的配置文章在园子里真的很多,但是有关GUI界面配置的文章确定太少,改写了一个以前很早的工具 以前的那个有很多的问题,这个基本的大的问题没有,可能一个小问题还是需要修改下,基本功能肯定是能满足的,先上图再说: 首先选择一个要配置的文件,然后加载配置文件里面相关配置显示到界面上,然后再分别配置Appender与logger,关于它们, appender其实就是输出到哪种介质上,也就是输出源,logger就是记录器. 点击Appenders中的新增,可以添加一个新的附加器,如下图所示

Log4Net web.config配置

 1 .[assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]  写到自定义的Log类中的AssemblyInfo.cs中 <configSections> <!-- 添加log4net配置节 --> <section name="log4net" type="log4net.Config.Log4NetConfig