使用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的更多相关文章

  1. 使用LogMaster4Net实现应用程序日志的集中管理

    日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道. 那么你是否曾今为这样的一些事情而困扰过: - 远程登录到不同的服务器,找到应用程序目然后查看应用日志: - 来回切换于不 ...

  2. 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 ...

  3. csharp: Socket

    https://github.com/joeandaverde/socket.io-csharp-client http://websocket4net.codeplex.com/ http://ww ...

  4. content

    http://www.cnblogs.com/lrysjtu/p/4474900.html lexus - 博客园 http://www.cnblogs.com/rio2607/p/4472456.h ...

  5. 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】

    因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...

  6. .NET 开源开发项目【翻译】

    原文地址 本文列出了 .NET 开源开发项目(open source developer projects).意在包括对开发过程的所有方面有所帮组的项目.对于消费项目(consumer project ...

随机推荐

  1. 了解HTML5和“她”的 API (一)

    简化了文档声明.字符集 //声明 <!doctype html> //字符 <meta charset="utf-8">  引入了新的标签元素 Select ...

  2. 【LeetCode】【Python解读】Container with most water

    这个问题是芭芭拉在采访中遇到的,不幸的是,的复杂性O(n2)该,太失望了,难怪没有通过面试. Given n non-negative integers a1, a2, ..., an, where ...

  3. JDBC调用存储过程

    一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...

  4. [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略

    原文:[原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 .NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从D ...

  5. Lua 环境结构 --Linux

    curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make linux ...

  6. 一天JavaScript示例-点击图片显示大图片添加鼠标

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 十天学会php第五天

    学习目标:学会读取数据    先看两个函数:    1.mysql_query    送出一个 query 字符串. 语法   : int mysql_query(string query, int ...

  8. MFC 盾webBrowser打开弹出的页面

    void CansDlg::NewWindow3Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR b ...

  9. Akka.net开发第一个分布式应用

    Akka.net开发第一个分布式应用 系列主题:基于消息的软件架构模型演变 既然这个系列的主题是”基于消息的架构模型演变“,少不了说说Actor模型.Akka.net是一个基于Actor模型的分布式框 ...

  10. html5中关于input使用方法的改变

    測试环境:Firefox 10.0.Safari 5.1.Opera 11.61, Chrome 14.0.835.202 自己測试的时候都有写在form表单里,有提交button验证.由于对博客使用 ...