使用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#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
随机推荐
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
- logstash file输入,无输出原因与解决办法
1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...
- CodeSimth - .Net Framework Data Provider 可能没有安装。解决方法
今天想使用CodeSimth生成一个sqlite数据库的模板.当添加添加数据库的时候发现: .Net Framework Data Provider 可能没有安装. 下面找到官方的文档说明: SQLi ...
- app引导页(背景图片切换加各个页面动画效果)
前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...
- 模拟AngularJS之依赖注入
一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...
- P2V之后的磁盘扩容新思路
背景: 原先的物理机环境多是若干块物理磁盘经过RAID卡进行了RAID5之后的虚拟磁盘组,这样我们在操作系统内看到的也就是一块完整的磁盘.我们会在上面进行分区,然后格式化后以便使用. Figure 1 ...
- so 问题来了,你现在值多少钱?
年底了一大帮人都写着年底总结,总结一年做过的事.错过的事和做错的事.增长了多少本事,找没找到女朋友……来年做好升职加薪,要么做跳槽的准备,程序猿又开始浮躁了……. so 问题来了,你现在值多少钱? 这 ...
- 自己写的数据交换工具——从Oracle到Elasticsearch
先说说需求的背景,由于业务数据都在Oracle数据库中,想要对它进行数据的分析会非常非常慢,用传统的数据仓库-->数据集市这种方式,集市层表会非常大,查询的时候如果再做一些group的操作,一个 ...
- 使用github远程仓库
经过几天对github的研究,终于把自己想完成的给解决了,发现google真的有很多解释,但是很多也会出现一些bug,对于初学者真的很多烦恼,所以整理一份,能给初识github的你有所帮助 一,首先, ...
- App解读
一直不懂别人口中说的原生开发.混合式开发.今天突然看了一篇文章讲解的是什么叫做原生App?移动 Web App?混合APP?分享给大家. 原生App是专门针对某一类移动设备而生的,它们都是直接安装到设 ...