Log4Net Layout使用以及扩展

在上篇文章中介绍几个主要的Appender的配置,本篇文章中介绍下如何编写Layout的配置,以及做些简单的扩展。

Layout组件的作用就是向用户显示格式化的输出信息。一个Appender对象只能有一个Layout对象。其中,我们可以通过继承log4net.Layout.LayoutSkeleton来实现自己的Layout组件。Log4net中提供了PatternLayout组件给来实现一个常用信息的输出。PatternLayout中包含了许多种PatternConverter,下面详细说下几种转换模式。

PatternConverter

1)NewLinePatternConverter

作用:换行;通配符:%newline,%n

2)LoggerPatternConverter

作用:显示Logger名;通配符:%logger,%c

3)TypeNamePatternConverter

作用:显示类名;通配符:%C,%class,%type

4)DatePatternConverter

作用:显示时间;通配符:%d,%date

5)ExceptionPatternConverter

作用:异常信息;通配符:%exception

6)LineLocationPatternConverter

作用:语句所在的行号;通配符:%L,%line

7)MessagePatternConverter

作用:信息内容;通配符:%message,%m

8)LevelPatternConverter

作用:消息等级;通配符:%level,%p

下面我们先来看一个配置的示例:

1

2

3

<layout type="log4net.Layout.PatternLayout">

    <conversionPattern value="%date [%thread] %-5level %logger  %message%newline" />

</layout>

说下%-5的意思就是长度为5,不够补空,运行的效果:

image

扩展

现在在现实开发中我们遇到了一个情况就是,需要将客户端访问的IP、用户信息、等等信息记录到数据库中,我们可以通过自定义Layout来实现。首先来分析下PatternLayout的初始化方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

static PatternLayout()

{

    s_globalRulesRegistry = new Hashtable(45);

  

    s_globalRulesRegistry.Add("literal", typeof(log4net.Util.PatternStringConverters.LiteralPatternConverter));

    s_globalRulesRegistry.Add("newline", typeof(log4net.Util.PatternStringConverters.NewLinePatternConverter));

    s_globalRulesRegistry.Add("n", typeof(log4net.Util.PatternStringConverters.NewLinePatternConverter));

  

    s_globalRulesRegistry.Add("c", typeof(LoggerPatternConverter));

    s_globalRulesRegistry.Add("logger", typeof(LoggerPatternConverter));

  

    ...

  

    s_globalRulesRegistry.Add("w", typeof(UserNamePatternConverter));

    s_globalRulesRegistry.Add("username", typeof(UserNamePatternConverter));

}

 

因为我们所需要的功能只是多输出IP、用户信息等,所以只需要在首先添加自己的PatternConverter,然后再初始化时添加进去,首先来看自定义的PatternConvert:

1

2

3

4

5

6

7

8

9

10

public class ClientIpPatternConvert : PatternLayoutConverter

{

 

    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)

    {

        var LogMessage = loggingEvent.MessageObject as SysLogMessage;

        if (LogMessage != null)

            writer.Write(LogMessage.Client_IP);

    }

}

添加自己的layout来继承于PatternLayout:

1

2

3

4

5

6

7

8

9

10

11

12

public class HJRightLayout:PatternLayout

{

    public HJRightLayout()

    

        //添加Convert

        this.AddConverter("UserName", typeof(UserNamePatternCovert));

        this.AddConverter("Category", typeof(CategoryPatternCovert));

        this.AddConverter("SysURL", typeof(SysURLPatternConvert));

        this.AddConverter("ClientIP", typeof(ClientIpPatternConvert));

        this.AddConverter("SysMessage", typeof(SysMessagePatternConvert));

    }

}

1

在来看看配置文件:

1

2

3

<layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">

    <conversionPattern value="%date [%thread] %-5level %logger - %SysMessage%newline" />

</layout>

看看运行效果

image

总结

本文中主要介绍了Layout的一些配置,以及很小的一个扩展,如果需要更为复杂的实现,可以通过继承于LayoutSkeleton,来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个通用的Android端弹窗管理框架,内部维护弹窗优先级队列 具备弹窗管理扩展功能 整合Dialog,PoupoWindow,悬浮Widget,透明Webview,Toast,SnackBar,无需再为繁琐的业务弹窗逻辑所困扰如何添加依赖只需要两行代码轻松接入//add this to your repositories  maven { url 'https://www.jitpack.io' } //add this to your dependencies implementation 'com.github.MrCodeSniper:PopLayer:2.0.0'具体如何使用1.根据策略创建对应的弹窗view//Dialog形式 PopLayerView  mLayerView = new PopLayerView(this,R.layout.common_dialog_upgrade_app); //透明Webview形式 PopLayerView mLayerView = new PopLayerView(this,LayerConfig.redPocketScheme);2.开始装配弹窗配置Popi mUpgradePopi1 = new Popi.Builder()                 .setmPopId(4)//弹窗的唯一标识 当id发生改变 视为新的弹窗                 .setmPriority(2)//优先级这里不具体划分对应的范围 值越小优先级越高                 .setmCancelType(TRIGGER_CANCEL)//弹窗消失的类型分为 TRIGGER_CANCEL(触摸消失) COUNTDOWN_CANCEL (延时消失)                 .setMaxShowTimeLength(5)//最长显示时间(S)                 .setMaxShowCount(5)//最大显示次数                 .setmBeginDate(1548858028)//开始时间 2019-01-30 22:20:28                 .setmEndDate(1548944428)//结束时间 2019-01-31 22:20:28                 .setLayerView(mLayerView)//弹窗View                 .build();3.纳入弹窗管理//纳入弹窗管理 PopManager.getInstance().pushToQueue(mUpgradePopi); //开始显示弹窗 PopManager.getInstance().showNextPopi();效果预览未来的计划逐步统一 其他类型的弹窗 希望能提供给大家一个较为全面的应对业务需求的弹窗管理框架版本记录V1方案版本号LOG进度更新V1.0.0项目开源,完成弹窗管理与Dialog形式扩展Dialog策略扩展完成V1.0.1修复Dialog策略无法获取dialog实体bugDialog策略优化V1.0.2修复activity摧毁造成的弹窗异常 bugDialog策略优化V1.0.3优化了弹窗的使用更加方便快捷框架使用优化V2方案版本号LOG进度更新V2.0.0正式加入透明Webview弹窗策略扩展透明Webview策略扩展完成作者介绍Hello 我叫lalala,如果您喜欢这个项目 请给个star 能follow我那真是太好了!!
1、概述 log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。 2、一个简单的使用实例 第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0。 第二步:程序启动时读取log4net的配置文件。 如果是CS程序,在根目录的Program.cs中的Main方法中添加: log4net.Config.XmlConfigurator.Configure(); 如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加: log4net.Config.XmlConfigurator.Configure(); 无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句: [assembly: log4net.Config .XmlConfigurator()] 也可以使用自定义的配置文件,具体请参见4.4 关联配置文件。 第三步:修改配置文件。如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。 App.config文件添加内容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <root> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> <logger name="testApp.Logging"> <level value="DEBUG"/> </logger> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header] "/> <param name="Footer" value="[Footer] "/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <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> </log4net> </configuration> 第四步:在程序使用log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");//获取一个日志记录器 log.Info(DateTime.Now.ToString() + ": login success");//写入一条新log 这样就将信息同时输出到控制台和写入到文件名为“log-file.txt”的文件中,其中“log-file.txt”文件的路径是当前程序运行所在目录;也可以定义为绝对路径,配置如: <param name="File" value="C:/log-file.txt" />就写入C盘根目录下log-file.txt文件中
默认的Instagram.com布局没有针对桌面进行优化。这个扩展改善这一点。 默认的Instagram.com布局未针对桌面进行优化。 此扩展改进了设计。 它还可以让您在网络上查看保存的(“收藏集”)和喜欢的图像! 要查看它们,请单击右上角的3点菜单。 接下来,由于Instagram已针对手机进行了优化,因此它们永远不会加载最高质量的图片,并阻止右键单击图片下载。 该扩展程序改变了这一点,并允许您通过右键单击来保存最高质量! 我的扩展程序不收集任何私人数据,并且图像仅存储在PC上。 此外,该代码是开放源代码,供您检查/贡献:https://github.com/kurtextrem/Improved-for-Instagram隐私权政策:https://kurtextrem.de/chrome/PRIVACY.html(敏感数据为*仅收集并存储在您自己的PC *上,如果打开Chrome Sync,则选项会同步。)权限:“ *。instagram.com/*”、“instagram.com/*”表示只能访问Instagram API和Instagram网站。 如上所述,数据仅在您自己的PC上收集。 Changelog --------- v2.10.2:修复了IG更新v2.10.0之后无法正常播放的视频:当用户观看其帖子时,如果用户更改了他/她的个人资料图片,现在会收到通知。 v2.9.5.7:修复“监视”不适用于新安装(对不起!)。 v2.9.5:修复了无法将用户添加到监视列表的问题; 修复每个帖子上不起作用的3点; 在夜间模式下修复视频; 删除了“阻止故事”功能,因为您可以在Instagram本身中通过长按故事v2.9.4来使用帖子中的3点或在应用程序中使用三点:修复“观看”不起作用(大多数通知都不会时间),修复浏览器页面并修复新的单个帖子(布局有点中断)v2.9.3:修复了“标记的用户不可见”,略微更新了夜间模式v2.9.2:修复了“无法在新版中打开图片标签”错误v2.9.0:故事的新设计! v2.8.3:更新了夜间模式。 更好的颜色。 修复了有关3点页面的一些错误。 v2.8.2:修复了消失的选项。 该错误确实很奇怪。 v2.8.0:现在,您可以看到“收藏夹”文件夹。 但是,此刻目前处于beta测试中。 因此,您看到的是ID而不是集合名称。 v2.7.0:令人兴奋的新功能:您现在可以观看用户并在他们发布任何内容或添加故事时得到通知! v2.6.0:感谢易卜拉欣·特内凯西(Ibrahim Tenekeci),新徽标/图标! v2.5.9:故事滚动得到了稍微改善。 v2.5.7:修复了一些错误。 v2.5.4:新设置:控制帖子的宽度。 此外,还修复了有关故事的错误(此外:您现在可以下载故事中的视频)。 v2.5:3点菜单现在包含选项,例如,可以启用夜间模式(Alpha版)! 将来会有更多设置。 v2.3.27:漏洞修复v2.3.21:新功能:在单个帖子页面上,最高质量的页面被加载。 因此,您可以右键单击以原始质量保存图片。 v2.3.20:更新到最新的Instagram更改v2.3.15:3点菜单比以往更快,并且修复了一些错误。 v2.3.14:可以再次下载视频v2.3.10:支持Web上的本机故事(Instagram已实现,并且正在推广;不再需要第三者扩展:))v2.3.9:修复了“无法滚动“ 问题!! 遗憾的是,由于存在Instagram,我无法再在小屏幕上连续使用3个帖子。 可能性为:每行2或4。 (大屏幕每行停留在4个以上)请给我您喜欢的反馈! (以后会添加一个选项)v2.3.4:修复了“全屏视频无法正常工作” v2.3.3:改进了3点页面的性能; 错误修正v2.2.14:错误修正(感谢社区报告错误,尤其是Kelvin!)v2.2.5:修正了“谁喜欢我的图片” +隐藏在页面v2.2.0后面的搜索建议:现在支持3点菜单页面轮播发布正确:) v2.1.0:针对最新Instagram设计的更新。 v2.0.0:增加了在网络上查看喜欢和保存的图像的功能! 单击右上角的三个点以查看它们。 此外,还修复了许多错误。 v1.0.20:修复了社区报告的问题:从主页导航到个人资料,然后单击帖子时,导致模式损坏。 v1.0.15:略微提高了性能v1.0.14:缺少Chrome IG Story时的固定版式v1.0.12:新图标,名称和错误修复该项目绝不与Instagram或其他机构有任何关联,授权,维护,赞助或认可其关联公司或子公司。 这是一个独立的项目。 使用风险自负。 支持语言:Deutsch,English
NFine快速开发框架源码 源码描述: 一、源码特点 1、NFine 是基于 C# 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展,让Web开发更迅速、简单。能解决60%重复工作。为您节约更多时间,去陪恋人、家人和朋友。轻松开发,专注您的业务,从NFine开始。 二、菜单功能 1、NFine是一套基于 ASP.NET MVC+EF6+Bootstrap 开发出来的框架,源代码完全开源,可以帮助你解决C#以及.NET 项目68%的重复工作,让开发人员远离加班。 2、使用 Apache License 2.0 协议,采用主流框架,容易上手,简单易学,学习成本低。可完全实现二次开发、基本满足80%项目需求。 3、可以帮助解决 .NET 项目70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。 4、支持 SQLServer、MySQL、Oracle、SQLite、Access 等多数据库类型。模块化设计,层次结构清晰。内置一系列企业信息管理的基础功能。 5、操作权限控制精密细致,对所有管理链接都进行权限验证,可控制到导航菜单、功能按钮。 6、数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段 7、提高开发效率及质量。常用类封装,日志、缓存、验证、字典、文件、邮件、,Excel。等等,目前兼容浏览器(IE8+、Chrome、Firefox、360浏览器等) 8、适用范围:可以开发 OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、快递管理系统、教务管理系统等各类管理软件 NFine技术介绍: 1、前端技术 JS框架:jquery-2.1.1、Bootstrap.js、JQuery UI CSS框架:Bootstrap v3.3.4(稳定是后台,UI方面根据需求自己升级改造吧)。 客户端验证:jQuery Validation Plugin 1.9.0。 在线编辑器:ckeditor、simditor 上传文件:Uploadify v3.2.1 动态页签:Jerichotab(自己改造) 数据表格:jqGrid、Bootstrap Talbe 对话框:layer-v2.3 下拉选择框:jQuery Select2 树结构控件:jQuery zTree、jQuery wdtree 页面布局:jquery.layout.js 1.4.4 图表插件:echarts、highcharts 日期控件: My97DatePicker 2、后端技术 核心框架:ASP.NET MVC5、WEB API 持久层框架:EntityFramework 6.0 定时计划任务:Quartz.Net组件 安全支持:过滤器、Sql注入、请求伪造 服务端验证:实体模型验证、自己封装Validator 缓存框架:微软自带Cache、Redis 日志管理:Log4net、登录日志、操作日志 工具类:NPOI、Newtonsoft.Json、验证码、丰富公共类似 三、注意事项 1、开发环境为Visual Studio 2012,数据库为SqlServer2008R2,使用.net 4.5开发。 2、数据库文件在DB文件夹中

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值