基本代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Util;
using System.IO;
using System.Net; using Log4netUTS.Model; namespace log4netUTS
{
/// <summary>
/// <code>
/// <appender name="HttpAppender" type="log4netUTS.HttpAppender,log4netUTS">
/// <param name="Host" value="http://localhost:30532/WEBFORM1.ASPX"/>
/// <param name="ServerTag" value="192.168.0.1"/>
/// <param name="AppName" value="test"/>
/// <param name="Timer" value="60000"/>
/// <param name="MaxRecords" value="1000"/>
/// </appender>
/// </code>
/// </summary>
public class HttpAppender : log4net.Appender.AppenderSkeleton
{
public HttpAppender()
{
Timer = 5000;
MaxRecords = 300;
} private System.Threading.Timer mTimer; private void CreateTime()
{
lock (this)
{
if (mTimer == null)
mTimer = new System.Threading.Timer(Upload, null, Timer, Timer);
}
} private readonly static Type declaringType = typeof(HttpAppender); private Queue<LogEvent> mEvents = new Queue<LogEvent>(1000); private void Add(LogEvent item)
{
CreateTime();
lock (mEvents)
{
mEvents.Enqueue(item);
if (mEvents.Count > MaxRecords)
Upload(null);
}
} private void Upload(object state)
{
List<LogEvent> items = new List<LogEvent>();
lock (mEvents)
{
while (mEvents.Count > 0)
{
items.Add(mEvents.Dequeue());
}
}
if (items.Count > 0)
{
OnUpload(items);
}
} private void OnUpload(object state)
{
try
{
List<LogEvent> items = (List<LogEvent>)state;
string param =string.Format("UserName={0}&UserPwd={1}&LogData={2}",UserName,UserPWD, Newtonsoft.Json.JsonConvert.SerializeObject(items));
byte[] data = Encoding.UTF8.GetBytes(param);
HttpWebRequest req =
(HttpWebRequest)HttpWebRequest.Create(Host);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
}
using (WebResponse wr = req.GetResponse())
{ }
}
catch (Exception e_)
{
LogLog.Error(declaringType, e_.Message);
}
} public string Host
{
get;
set;
} public string ServerTag
{
get;
set;
} public string AppName
{
get;
set;
} public int MaxRecords
{
get;
set;
} public int Timer
{
get;
set;
} public string UserName
{
get;
set;
}
public string UserPWD
{
get;
set;
} protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
try
{
LogEvent le = new LogEvent();
le.ErrorTime =loggingEvent.TimeStamp.ToString("yyyy-MM-dd HH:mm:ss");
le.EventType = loggingEvent.Level.ToString();
le.Message = loggingEvent.RenderedMessage;
le.AppName = AppName;
le.ServerTag = ServerTag;
le.ErrorType = loggingEvent.ExceptionObject != null ? loggingEvent.ExceptionObject.GetType().ToString() : "未知错误类型";
AddError(le, loggingEvent.ExceptionObject);
Add(le); }
catch (Exception e_)
{
LogLog.Error(declaringType, e_.Message);
}
} private void AddError(LogEvent e, Exception err)
{
if (err != null)
{
e.Errors.Add(new EventMessage { Message = err.Message, StackTrace = err.StackTrace });
err = err.InnerException;
while (err != null)
{
e.Errors.Add(new EventMessage { Message = err.Message, StackTrace = err.StackTrace });
err = err.InnerException;
}
} }
}
}

使用配置:

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<!-- Define some output appenders -->
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="Log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value="
----------------------header--------------------------
" />
<param name="Footer" value="
----------------------footer--------------------------
" />
</layout>
</appender>
<appender name="HttpAppender" type="log4netUTS.HttpAppender,log4netUTS">
<param name="Host" value="http://tLog.cn100.com/HttpLogReceive.aspx"/>
<param name="ServerTag" value="192.168.0.1"/>
<param name="AppName" value="test"/>
<param name="Timer" value="5000"/>
<param name="MaxRecords" value="1000"/>
<param name="UserName" value="Admin"/>
<param name="UserPWD" value="8D70D8AB2768F232EBE874175065EAD3"/>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="SysAppender" />
<appender-ref ref="HttpAppender"/>
</root>
</log4net>

里面可能有些model的引用,根据自己的项目情况,写个就行了!

而且使用了第三方的序列组件 Newtonsoft.Json.Net35

基于Log4net插件的更多相关文章

  1. 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)

    背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...

  2. struts2基于Convention插件的约定映射使用

    一.首先说明一点:所谓的基于Convention插件的约定优于配置的使用,并不是严格意义上的零配置,struts.xml文件并不能完全舍弃. 获得Convention插件功能,所必需的jar包有:|a ...

  3. 基于maven插件的缓存控制插件

    asset-cache-control github源码及下载地址: https://github.com/StruggleBird/asset-cache-control 基于maven插件的缓存控 ...

  4. [开源]基于Log4Net简单实现KafkaAppender

    背景 基于之前基于Log4Net本地日志服务简单实现 实现本地日志服务,但是随着项目开发演进,本地日志服务满足不了需求,譬如在预发布环境或者生产环境,不可能让开发人员登录查看本地日志文件分析. Kaf ...

  5. 基于Log4Net本地日志服务简单实现

    背景 项目开发中,我们或多或少会使用诸如NLog,Log4Net,Kafka+ELK等等日志套件: 基于关注点分离原则,业务开发的时候不应该关注日志具体实现:并且后续能方便切换其他日志套件: 这里先实 ...

  6. 基于tomcat插件的maven多模块工程热部署(附插件源码)

    内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...

  7. 基于etcd插件的CoreDNS动态域名添加

    前提条件:已经有一个可用的etcd环境. 一.CoreDNS简介 CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件.CoreDNS是云本土计算基金会启动阶段项目. ...

  8. windows下编译基于nginx插件的rtmp流媒体服务nginx-rtmp

    1 概述 rtmp流媒体服务器,开源方案有多种,包括srs,red5,crtmpserver,fms,nginx插件等.本文描述了基于nginx插件的方式来实现rtmp流媒体服务器nginx-rtmp ...

  9. 基于Lua插件化的Pcap流量监听代理

    1.前言 我们在实际工作中,遇到了一个这样的用例,在每天例行扫描活动中,发现有些应用系统不定期的被扫挂,因为我们不是服务的制造者,没有办法在不同的系统里打印日志,所以我们就想用一个工具来获取特定服务的 ...

随机推荐

  1. springMVC 获取本地项目路径 及后整理上传文件的方法

    String path=request.getSession().getServletContext().getRealPath("upload/img/product"); // ...

  2. springbatch操作CSV文件

    一.需求分析 使用Spring Batch对CSV文件进行读写操作: 读取一个含有四个字段的CSV文件(id, name, age, score), 对文件做简单的处理, 然后输出到还有一个csv文件 ...

  3. Wowza流媒体Live直播和VOD点播配置实战-attach

    Wowza是当今可以说最流行的流媒体服务器之一,近来因为需要搭建相应的服务器,但又不想用camera等作真实的直播,所以想办法用媒体文件转换成直播流再提供给Wowza进行直播.这里把该设置步骤以及设计 ...

  4. oracle中导入导出数据备份数据库

    原文:oracle中导入导出数据备份数据库 数据库所在位置                         将数据导出到的文件名                    用户名 备份数据库 :exp c ...

  5. 日志之再说Log4J

    网上关于LOG4J的使用文章太多了,写这篇文章的目的一方面是为了回顾LOG4J的用法,一方面针对配置的使用自动将日志插入数据库,自动发送邮件,还有就是自定义输入实现.后续文章会总结下从LOG4J到LO ...

  6. 题注Oracle数据库的网络连接原理

    版权声明:本文博客原创文章,博客,未经同意,不得转载.

  7. linux服务创建及jq配置服务列表查看

    1.应用背景 随着业务需求,后台处理服务不断增多,对于这些服务或后台程序的查看.更新操作越来越凌乱,所以我们首先需要一个服务列表查看工具,方便查看各 服务的端口.运行状态.jar包路径等等. 2.创建 ...

  8. asp.net页面生命周期回顾

    ---根据一讲师所讲做了一下笔记,仅供参考 会存在些错误 页面声明周期: 1.HttpApplication在第11和第12个事件之间开始了页面声明周期,调用了第8个事件创建实例的pr(Process ...

  9. Entity Framework,TransactionScope 混合使用的问题讨论

    using (var ts = new TransactionScope()) { string connStr = "Data Source=.;Initial Catalog=Test; ...

  10. Pi

    Math]Pi   数学知识忘地太快,在博客记录一下pi的生成. 100 Decimal places 3.1415926535897932384626433832795028841971693993 ...