基本代码

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. 基于Jquery插件Uploadify实现实时显示进度条上传图片

    网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们可以参考 ...

  3. chosen jquery ajax搜索,基于chosen插件实现人员选择树搜索自动筛选功能

    要实现的功能截图: 要求: 1.点击输入框可以根据拼音自动筛选数据,并且标记已经选择的数据,没有结果的时候提示,相应的更新左边树状态 2.勾选树右侧树的复选框左侧出现相应的内容 我用到的插件 vue+ ...

  4. 基于 Tampermonkey 插件平台开发的淘宝直通车爬虫

    crawler-userscript 一个基于 Tampermonkey 插件平台开发的爬虫.主要目的是最大限度模拟用户环境,避免被反爬虫系统识破. 本项目除了实现了一个爬虫框架以外,还是一个完整的淘 ...

  5. 基于vs插件的abp代码生成器

    工作了这么多年,一直都在小公司摸爬滚打,对于小公司而言,开发人员少,代码风格五花八门.要想用更少的人,更快的速度,开发更规范的代码,那自然离不开代码生成器.之前用过动软的,也用过T4,后面又接触了力软 ...

  6. 动态调整web主题(3): 基于tailwindcss插件的主题色生成方案‘

    动态调整web主题(3): 基于tailwindcss插件的主题色生成方案 动态调整web主题(3): 基于tailwindcss插件的主题色生成方案 前言 tailwind-css-variable ...

  7. 基于fiddler插件的代理扫描系统:越权漏洞检测

    基于fiddler插件的代理扫描系统:越权漏洞检测 # 概述 ##越权检测原理 ###系统架构 #基本步骤 待优化与工具联动 工具联动: 其他漏洞检测 # 概述 随着现在企业安全水平的提高, 单独依赖 ...

  8. 2022去/水印小程序源码+基于WordPress插件

    正文: 2022去/水印小程序源码+基于WordPress插件,本版本代码是全开源的,基于Wordpress的插件开发的. 上传到Wordpress,安装插件,启动之后,绑定自己的小程序id即可,wo ...

  9. 基于clang插件的一种iOS包大小瘦身方案

    引子 \ 包瘦身,包瘦身,包瘦身,重要的事情说三遍. \ 最近公司一款iOS APP(本文只讨论使用Objective C开发的iOS安装包)一直在瘦身,我们团队的APP也愈发庞大了.而要解决这个问题 ...

最新文章

  1. C语言小知识:typedef\函数模板\
  2. xp系统的计算机管理中用户在哪里,XP系统设备管理器中一片空白怎么修复?
  3. XOR Specia-LIS-t 异或和 贪心
  4. GDCM:获取SubSequence数据的测试程序
  5. php 调用python 脚本
  6. c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建
  7. Hive从一个表向另一个表插入数据的注意事项
  8. filezilla server 有时连不上可以重启arm试试 server安装为手动 每次要点下start
  9. vue差(插)值表达式
  10. Atitit 健康减肥与软件健康减肥的总结 attilax著 1. 几大最佳实践减肥行为 1 1.1. 控制饮食分量用小碗 小盘子 小餐具 1 1.2. 软件如何减肥,控制资源占有率,比如体积 打包
  11. MaskFlownet图
  12. python RTL自动生成_RTL建模
  13. access查询出生日期格式转换_Access时间格式处理
  14. web版ppt制作插件impress.js源码注释翻译
  15. Exploring Simple Siamese Representation Learning阅读笔记
  16. 记事本APP之Alpha报告
  17. [设计模式]创建模式-建造者(C++描述)
  18. 工业大数据的关键技术是什么
  19. 谷歌变坏了?Chrome 已成众矢之的:15 篇前端热文回看
  20. C++ std::accumulate

热门文章

  1. 数据恢复:解决ORA-600[kghstack_free2][kghstack_err+0068]一例
  2. Python+selenium自动化测试:报错:TypeError: 'WebElement' object is not iterable
  3. ASP.NET 2.0的异步页面刷新真给劲
  4. php对象的底层机制
  5. zabbix简介(第一章第一节)
  6. Hadoop Hive迁移至MaxCompute
  7. hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟
  8. 【重要预警】“永恒之蓝”漏洞又现新木马 组成僵尸网络挖矿虚拟货币
  9. Realm数据库拾遗
  10. Java 类加载机制详解