使用LogMaster4Net实现应用程序日志的集中管理
日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道。 那么你是否曾今为这样的一些事情而困扰过:
- 远程登录到不同的服务器,找到应用程序目然后查看应用日志;
- 来回切换于不同服务器并使用tail来实时监控日志输出信息;
- 解决在各个服务器上各个应用日积月累生成的大量日志文件造成的磁盘空间不足的问题;
如果在你的系统中存在着很多个不同的进程并且运行在多个服务器上,上面的问题将会显得尤为突出。很不幸是,笔者所在的公司的系统中,有数十个windows服务,控制台程序,计划任务同时工作在多个服务器上。 因此,笔者不胜其扰,终于开始寻找日志集中管理的解决方案。 幸运的是,一款开源的日志服务器软件 LogMaster4Net 刚好满足需求,而且正好支持笔者公司系统采用的日志组件log4net。 经过一段时间的使用,LogMaster4Net已在笔者公司稳定运行了超过半年时间。 笔者公司的日志从此规整,监控系统运行情况也比以前方便很多,查询系统运行问题也更迅速。
下面介绍一下LogMaster4Net的使用方法:
下载安装
下载地址: https://github.com/kerryjiang/LogMaster4Net/releases/tag/0.1
配置端口: 打开根目录配置文件(SuperSocket.SocketService.exe.config)设置端口号(默认为2020)
<server name="LogMasterServer"
...
port="[port]"
...
</server>
安装Windows服务: 命令行运行如下指令,安装成功后,如发现服务未启动请在服务列表里找到服务LogMaster4NetService并启动
SuperSocket.SocketService.exe -i
将应用程序的log4net配置文件复制到LogMaster4Net目录
LogMaster4Net可直接使用应用的日志配置文件。应用日志如有文件生成,请注意文件保存路径。 应用配置文件应存放于LogMaster4Net的Config文件夹, 相对路径如下:
\Config\log4net.[LogAppName].Config
[LogAppName] 为应用在LogMaster4Net中的唯一名称,将会在后面设置中使用。
如果 [LogAppName] 为 "QueryApp", 那么此应用的日志配置文件名为:
\Config\log4net.QueryApp.Config
此应用的日志配置内容可为:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
</filter>
<file value="AppLogs\SampleApp\info.log" />
<encoding value="utf-8"/>
<preserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="infoAppender" />
</root>
</log4net>
应用程序日志转发设置
使用log4net的UdpAppender转发日志:
<appender name="udpAppender" type="log4net.Appender.UdpAppender">
<remoteAddress value="[ServerAddress]" />
<remotePort value="[port]" />
<layout type="log4net.Layout.XmlLayout">
<locationInfo value="true" />
</layout>
</appender>
- [ServerAddress]: LogMaster4Net服务安装运行的地址
- [Port]: LogMaster4Net服务监听的端口号;
设置日志全局变量"LogAppName":
log4net.GlobalContext.Properties["LogAppName"] = "QueryApp";
此处LogAppName即为上步所述应用在LogMaster4Net中的唯一名称"QueryApp"。
完成上述步骤之后,编译运行应用程序,日志便会转发到LogMaster4Net上并按照应用的日志的配置进行处理。
LogMaster4Net的优势与缺点
优势如下:
- 简单: 直接使用现有日志组件的特性,无需额外开发;
- 透明: 仍使用原应用的配置进行处理,如同在应用本地处理日志一样;
- 灵活: 灵活的配置策略: 基于SuperSocket的配置允许LogMaster4Net监听多个IP和端口,甚至能允许你运行多个LogMaster4Net服务器实例;
- 跨平台: 二进制级别的兼容Unix/Linux (通过Mono); (http://docs.supersocket.net/v1-6/zh-CN/Run-SuperSocket-in-Linux-Unix)
缺点:
- 缺乏相应的日志辅助工具,如dashboard, archive; 如需更多高级功能,需要配合其它工具使用;
展望
当今软件江湖,云计算(PaaS),应用容器(Docker), 微服务等技术(概念)越来越应用广泛。为了追求更好的可靠性,稳定性,易维护性,将来会有更多的系统是以多进程,多实例的方式运行。如此一来,作为软件系统中的基础部件,日志的集中管理将会是一个公共话题。 相关的最佳实践,开源项目也将不断涌现。
传说中的Splunk很好很强大,但是不便宜。 不是所有公司(中国公司)愿意在日志上投入那么多钱。 LogMaster4Net作为其中一个开源软件只是完成了一小步,但对于一些要求不高,技术实力有限的中小IT企业也已经足够。不过还好,LogMaster4Net推出的时间很短,是一个十分年轻的开源项目,如果大家对它有啥建议,不妨直接联系其作者。相信LogMaster4Net在未来的几年里会有不错的发展。
使用LogMaster4Net实现应用程序日志的集中管理的更多相关文章
- C# 使用Log4Net记录程序日志
在之前的博客中,写过使用系统内置的Trace类记录程序日志,具体请参考:C# 使用Trace记录程序日志.这篇博客将介绍如何使用Log4Net记录程序日志. 首先需要引用Log4Net.dll,我们可 ...
- 使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB)
使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB) http://www.cnblogs.com/mrkelly/p/4015245.html 以往调试Androi ...
- 深入剖析HADOOP程序日志
深入剖析HADOOP程序日志 前提 本文来自于 博客园 逖靖寒的世界 http://gpcuster.cnblogs.com 了解log4j的使用. 正文 本文来自于 博客园 逖靖寒的世界 http: ...
- 写window应用程序日志System.Diagnostics.EventLog.WriteEntry
System.Diagnostics.EventLog.WriteEntry( MySource , Writing to event log. ); 可以写window应用程序日志 查看的地方:右击 ...
- 优雅地记录Python程序日志1:logging模块简介
本文摘自:https://zhuanlan.zhihu.com/p/31893724 本篇涉及: logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 前言 在使 ...
- 使用Log4j将程序日志实时写入Kafka(转)
原文链接:使用Log4j将程序日志实时写入Kafka 很多应用程序使用Log4j记录日志,如何使用Kafka实时的收集与存储这些Log4j产生的日志呢?一种方案是使用其他组件(比如Flume,或者自己 ...
- [转]利用C#自带组件强壮程序日志
利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
- Linux 文件管理(C语言库函数二--程序日志)
文件删除和改名 int remove(const char *pathname); int rename(const char *oldpath,const char *newpath); remov ...
- 转载——利用C#自带组件强壮程序日志
利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
随机推荐
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- Python高手之路【二】python基本数据类型
一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
- jq跑马灯效果
这几天公司产品有个无缝循环滚动的广告跑马灯要做,最开始想到的是<marquee>标签,但在PC端正常,在安卓广告屏上却怎么都跑不动,后来用的css3的animation,结果也是PC端及其 ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
- Python标准模块--Unicode
1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...
- MVC Core 网站开发(Ninesky) 2、栏目
栏目是网站的常用功能,按照惯例栏目分常规栏目,单页栏目,链接栏目三种类型,这次主要做添加栏目控制器和栏目模型两个内容,控制器这里会用到特性路由,模型放入业务逻辑层中(网站计划分数据访问.业务逻辑和We ...
- 使用cmake自动构建工程
公司引擎是用cmake根据目标平台来构建工程的,刚接触的时候深深体会到cmake的方便:如果目标平台是windows,它可以帮你自动构建出vs工程:如果是安卓,自动构建出eclipse工程,如果是IO ...
- StringUtils的isBlank与isEmply
1.public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 StringUtil ...
- 满堂红CIO邓劲翔:房屋中介突围
人脸识别.客户关系管理进度监控.业务流程实时监控.网站访问人数及流量实时监控等实际企业应用场景淋漓尽致.羽羽如生的以大屏幕上图表形式展现在人们面前,如果你不去继续询问,你不会知道这是一家才刚刚在房地产 ...