打造适合你的ABP(1)---- 完善日志系统
最近使用Abp开发了一个项目,对abp有一个大概的了解,第一个小项目接近尾声,新的项目马上开始,针对开发第一个项目中发现的问题及不方便的地方,本人做一些修改,特此记录,请大家多多指正!
本人的开发环境vs2017 ,vs code,使用abp版本为abp3.5 + angular开发,安装过程就免了,另外本人使用的aspnetzero。请大家自觉支持正版,技术支持很给力。
首先,完善下Abp的日志,apb 的日志系统使用Castle Windsor的日志记录工具,它可以和不同的logginh(日志)类库协作:Log4Net、NLog、Serilog等。Castle为所有Logger库提供一个公共接口,所以它独立于logging库,也可以在有需要的时候很容易地替换logging。
ABP模板 默认采用采用Log4Net,进行了简单的配置,主要是文件日志,查看下log4net的配置方法,尝试了其他的配置,例如数据库等,有些可以成功,有些不行:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file type="log4net.Util.PatternString" value="App_Data/Logs/Log.txt"/>
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
</layout>
</appender>
abp默认不在控制台输出日志内容,因此有时候错误没办法找,必须打开日志文件(App_Data/Logs/Log.txt)查找最新的错误,这个有点低端,每次打开文本效率有点低,不符合我一贯能装的性格,有没有其他查看日志的方法:web signalr方式,我能想到的大神们估计都想到了,我这里配置了两个能装逼的:log2console和exceptionless;完成这个瞬间牛逼了许多。
先说第一个问题,abp日志配置有个问题就是有的配置节点中的layout type不能采用其他格式,主要是xml格式的貌似不支持;
xml配置方式是log2console的默认配置方式
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j" />
</appender>
这个配置在abp中是没效果的,是不是我漏掉什么了,大神们给个提示,非常感谢!
exceptionless也是这样,无敌了,叔可忍婶不可忍!
1、log2console
修改log2console源码,添加一个receiver,要做的很简单,复制原来的udp receiver,修改解析方法,首先做一个PatternLayout:
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value='{"date":"%date","thread":"%-5.5thread","level":"%-5level","logger":"%-40.40logger"} %message' />
</layout>
这个很简单,就是把消息包装成json字符串加上message。
在log2console,Log2Console.Receiver.ReceiverUtils类中添加解析函数:
public static LogMessage ParsePatternLayoutLogEvent(string logEvent, string defaultLogger)
{
var logMsg = new LogMessage();
var sl = logEvent.Split('}');
if (sl.Length < )
logMsg.Message = logEvent;
else
{
var jo = Newtonsoft.Json.JsonConvert.DeserializeObject<msgObj>(sl[] + "}");
logMsg.TimeStamp = DateTime.Parse(jo.date.Trim().Replace(',','.'));
logMsg.Level = LogLevels.Instance[jo.level.Trim()];
logMsg.LoggerName = jo.logger.Trim();
logMsg.ThreadName = jo.thread.Trim();
logMsg.Message = sl[];
}
return logMsg; }
在receiver中添加新的解析类UdpPatternLayoutReceiver,简单复制udpReceiver,修改几行代码即可,start函数中,修改解析方法:
LogMessage logMsg = ReceiverUtils.ParsePatternLayoutLogEvent(loggingEvent, "UdpLogger");
另外修改SampleClientConfig,可以给用户提供个配置提示。
编译生成log2console。
最终生成的log2console界面。
最后一步,在abp项目中添加udp配置:
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<param name="Encoding" value="utf-8" />
<remoteAddress value="10.1.12.188" />
<remotePort value="7071" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value='{"date":"%date","thread":"%-5.5thread","level":"%-5level","logger":"%-40.40logger"} %message' />
</layout>
</appender> <root> ........
<appender-ref ref="UdpAppender" />
<level value="ALL" />
</root>
现在,解决了看日志的问题了。
2、exceptionless配置
解决了看日志的问题保存日志的问题还是保存在文件里,查看历史不方便,exceptionless很好。
exceptionless的安装按照官方说明安装即可,我是在iis上安装的,安装过程中要注意两点,一是版本es版本要按照说明的版本安装,最新版本不支持。二是,es安装完成后,折腾了好长时间,我安装了head这个插件,进行配置没问题了,觉得安装过程中主要是配置了这个参数:
action.auto_creat_index:true 但没有测试不安装head插件仅配置这个参数是否可用。
es的head插件安装成功界面。
安装完成打开exceptionless,注册一个账号后,配置exceptionless,不允许新用户注册即可:
webconfig中添加或修改:<add key="EnableAccountCreation" value="true" />
exceptionless 安装成功。
配置abp中log 的exceptionless:
<appender name="exceptionless" type="Exceptionless.Log4net.ExceptionlessAppender,Exceptionless.Log4net">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline"/>
</layout>
</appender> <root>
//其他配置
<appender-ref ref="exceptionless" />
<level value="ALL" />
</root>
安装nuget exceptionless的包:exceptionless.aspnetcore
在app.config中配置:
"Exceptionless": {
"ApiKey": "你的apkkey",
"ServerUrl": "http://你的地址",
"DefaultData": {
"JSON_OBJECT": "{ \"Name\": \"Blake\" }",
"Boolean": true,
"Number": 1,
"Array": "1,2,3"
},
"DefaultTags": [ "xplat" ],
"Settings": {
"FeatureXYZEnabled": false
}
},
最后在host项目的startup的Configure函数中添加:app.UseExceptionless(_appConfiguration);
后续主要有这些方面的完善,敬请期待:
大功告成,谢谢你的打赏!
打造适合你的ABP(1)---- 完善日志系统的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- ABP应用层——审计日志
ABP应用层——审计日志 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Pro ...
- 打造适合自己的vim编辑器方法总结
vim使用方法总结 说明:这是打造适合自己的vim编辑器的进阶方法,关于vim基础知识,请自行百度.也可参考文章末尾推荐blog网址 如果觉得自己打造vim编辑器麻烦,可以从github上面克隆一个, ...
- 【转载】scribe、chukwa、kafka、flume日志系统对比
原文地址:http://www.ttlsa.com/log-system/scribe-chukwa-kafka-flume-log-system-contrast/ 1. 背景介绍许多公司的平台每天 ...
- scribe、chukwa、kafka、flume日志系统对比 -摘自网络
1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:(1) 构建应用系统和分析系统的桥梁 ...
- 开源日志系统比较:scribe、chukwa、kafka、flume
1. 背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征: (1) 构建应用系统和分析系统的 ...
- nxlog4go 简介 - 基于log4go的下一代go语言日志系统
nxlog4go的项目网址: https://github.com/ccpaging/nxlog4go 项目历史 ccpaging's log4go forked from https://githu ...
- ELK统一日志系统的应用
收集和分析日志是应用开发中至关重要的一环,互联网大规模.分布式的特性决定了日志的源头越来越分散, 产生的速度越来越快,传统的手段和工具显得日益力不从心.在规模化场景下,grep.awk 无法快速发挥作 ...
- .NET下日志系统的搭建——log4net+kafka+elk
.NET下日志系统的搭建--log4net+kafka+elk 前言 我们公司的程序日志之前都是采用log4net记录文件日志的方式(有关log4net的简单使用可以看我另一篇博客),但是随着 ...
随机推荐
- 启动mongodb遇到的错:warning: 32-bit servers don't have journaling enabled by deflity
执行修复:mongod --repair即可 正常关闭:killall mongod
- idea中使用svn,忽略本地修改的指定的文件
1.打开version control 2.可以查看目前忽略的文件 3.配置要忽略的文件 4.可以用通配符忽略匹配的文件 还有第二种方法,那就是: 在svn提交的界面,如果是没有加入到version- ...
- 面向对象进阶---attr家族
一. isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查obj是否是类 cls 的对象 class Foo: pass ob ...
- 蛋疼zipline安装
比安装zipline更让人蛋疼的是,网上的教程没有一个是TM对的,真的是忍不住要吐血. 真的是一步一坑,一步一坑 安装环境: Windows7旗舰版,64位系统 python 版本3.5.3 我没有用 ...
- hdu1568 Fibonacci---前4位
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1568 题目大意: 求斐波那契数列第i项的前四位.i<1e8 思路: 由于数据范围大,不可能打表 ...
- re模块中的compile函数
compile compile(pattern,flag=0) compile a regular expression pattern,return a pattern object compile ...
- js实现继承的5种方式
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
- vue+iview实现动态路由和权限验证
github上关于vue动态添加路由的例子很多,本项目参考了部分项目后,在iview框架基础上完成了动态路由的动态添加和菜单刷新.为了帮助其他需要的朋友,现分享出实现逻辑,欢迎一起交流学习. Gith ...
- mybatis学习三
Mybatis与pageHelper分页: 分页分为假分页和真分页对应的专业术语叫做逻辑分页和物理分页 逻辑分页:将所有的数据从数据库查询出来,根据需求截取符合要求的数据返回,方便统一但效 ...
- 机器学习技法:07 Blending and Bagging
Roadmap Motivation of Aggregation Uniform Blending Linear and Any Blending Bagging (Bootstrap Aggreg ...