LogMaster4Net
使用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)
缺点也不少:
- 虽然在架构上支持各种日志组件,但其开发者暂时只支持了log4net;
- 缺乏相应的日志辅助工具,如dashboard, archive; 如需更多高级功能,需要配合其它工具使用;
展望
当今软件江湖,云计算(PaaS),应用容器(Docker), 微服务等技术(概念)越来越应用广泛。为了追求更好的可靠性,稳定性,易维护性,将来会有更多的系统是以多进程,多实例的方式运行。如此一来,作为软件系统中的基础部件,日志的集中管理将会是一个公共话题。 相关的最佳实践,开源项目也将不断涌现。
传说中的Splunk很好很强大,但是不便宜。 不是所有公司(中国公司)愿意在日志上投入那么多钱。 LogMaster4Net作为其中一个开源软件只是完成了一小步,但对于一些要求不高,技术实力有限的中小IT企业也已经足够。不过还好,LogMaster4Net推出的时间很短,是一个十分年轻的开源项目,如果大家对它有啥建议,不妨直接联系其作者。相信LogMaster4Net在未来的几年里会有不错的发展。
LogMaster4Net的更多相关文章
- 使用LogMaster4Net实现应用程序日志的集中管理
日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道. 那么你是否曾今为这样的一些事情而困扰过: - 远程登录到不同的服务器,找到应用程序目然后查看应用日志: - 来回切换于不 ...
- A Complete List of .NET Open Source Developer Projects
http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...
- csharp: Socket
https://github.com/joeandaverde/socket.io-csharp-client http://websocket4net.codeplex.com/ http://ww ...
- content
http://www.cnblogs.com/lrysjtu/p/4474900.html lexus - 博客园 http://www.cnblogs.com/rio2607/p/4472456.h ...
- 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】
因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...
- .NET 开源开发项目【翻译】
原文地址 本文列出了 .NET 开源开发项目(open source developer projects).意在包括对开发过程的所有方面有所帮组的项目.对于消费项目(consumer project ...
随机推荐
- CentOS在安装配置 Ngnix_tomcat_PHP_Mysql
安装Nginx yum install nginx 假设显示找不到 nginx包,新建一个文件/etc/yum.repos.d/nginx.repo,内容: [nginx] name=nginx re ...
- java提高篇(十四)-----关键字final
在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是"这部分是无法修改的".不想被改变的原因有两个:效 ...
- DNA和纳米(Nano)Fusion技术的发展趋势
细观国内外有关DNA与Nano技术的报道.不得不承认存在不小的差距,并且差距有继续拉大的趋势. 在我们国内,DNA技术是作为遗产基因来对待的.引用的有关中文參考资料一般比較陈旧.缺少參考价值.在发达国 ...
- Android使用开发WebView战斗技能
转载请注明出处:http://blog.csdn.net/allen315410/article/details/44619181 前段时间做项目的时候.在项目中用了WebView组件,遇到了一些问题 ...
- UVA 11464 Even Parity(递归枚举)
11464 - Even Parity Time limit: 3.000 seconds We have a grid of size N x N. Each cell of the grid in ...
- mongodb.conf
# mongodb.conf # Where to store the data. dbpath=/var/lib/mongodb #where to log logpath=/var/log/mon ...
- 深入浅出java并发
http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
- vs2015web工程中的html引用压缩后css后无法智能提示的问题解决
环境:win10x64 vs2015企业版 项目:空白web项目(.net framework4) 问题:html页面加入压缩后的css(eg:bootstrap.min.css),编码的时候无法智能 ...
- 先锋军Android注射技术《三》
继续 于<两>通过专门出台ptrace实施注射的技术解决方案,在这一章,我就为大家介绍一Android在独特的喷射技术,我点了他的名字--Component Injection.顾名思义. ...
- 通达OA web页面与精灵显示内容更新后不一致的问题
前一段就发现有这种问题.就是在开发的电话查询里更新的信息,可是在精灵对话窗体上显示的还是原来的信息.这样导致从新开发入口更新信息就不能使用.一開始还以为是厂家升级,变更了存储的表结构.感觉下载近期的升 ...