Log4j插件可以通过log4j.jar获取Java日志,搭配Log4j的SocketAppender和SocketHubAppender使用,常用于简单的集群日志汇总。

最小化的配置

input {
log4j {
host=>"localhost"
port=>4560
}
}
output {
stdout {}
}

  log4j插件配置host以及port就能监听localhost上的4560端口的log4j消息。

  此时,如果你的log4j向本地主机以SocketAppender的方式输出日志消息,Logstash就能捕获到,参考的log4j配置文件如下:

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j=" http://jakarta.apache.org/log4j/" >
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender" >
<layout class="org.apache.log4j.PatternLayout" >
<param name="ConversionPattern" value="%d{yyyy/MM/dd-HH:mm:ss} >> %5p >> %t >> %l >> %m%n" />
</layout>
</appender> <appender name="socketAppender" class="org.apache.log4j.net.SocketAppender">
<param name="remoteHost" value="localhost" />
<param name="port" value="4560" />
<param name="Threshold" value="INFO" />
<param name="ReconnectionDelay" value="1000" />
<param name="LocationInfo" value="true" />
</appender> <root>
<priority value="info" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="sockethubAppender" />
</root>
</log4j:configuration>

重要参数详解

  mode logstash工作模式,可选"server"或者"client",默认是"server"

  server就是把logstash看做是日志的服务器,接收log4j主机端生成的日志消息。

  client则是把logstash看做是tcp的发起者,请求log4j主机返回日志消息。

  host 主机地址,字符串类型,如"localhost"或者"192.168.0.1"

  如果是server模式,就是监听的主机地址

  如果是client模式,就是连接的目标地址

  port 端口号,数字类型,如 4567 或者 12345

  如果是server模式,就是监听的端口号

  如果是client模式,就是连接的目标端口号

  data_timeout 超时时间,秒为单位。如果设置-1,则永不超时,默认是5

  如果某个tcp连接闲置了,则超过该时间限制,就断开或者关闭连接。

Server模式

  server模式就是把logstash作为服务器,输出日志消息的java程序所在的主机作为客户机,大致类似如下:

  Logstash的插件配置如下:

input{
log4j {
mode => "server"
host => "localhost"#注意这里,这里是Logstash服务器的地址或者主机名
port => 4560
}
}
output{
stdout{}
}

  java程序log4j日志配置文件如下:

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender" >
<layout class="org.apache.log4j.PatternLayout" >
<param name="ConversionPattern" value="%d{yyyy/MM/dd-HH:mm:ss} >> %5p >> %t >> %l >> %m%n" />
</layout>
</appender>
<appender name="socketAppender" class="org.apache.log4j.net.SocketAppender">
<param name="remoteHost" value="localhost" /><!-- 远程主机地址 -->
<param name="port" value="4560" /><!-- 远程主机端口 -->
<param name="Threshold" value="DEBUG" />
<param name="ReconnectionDelay" value="60000" />
<param name="LocationInfo" value="true" />
</appender>
<root>
<priority value="debug" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="socketAppender" />
</root>
</log4j:configuration>

  另外需要注意的是,如果使用server模式,监听的ip地址只能是本机地址,否则无法绑定socket。

  例如,我本身的服务器地址是10.4.5.6,那么我要绑定一个远端机器,10.4.5.7,就会报如下错误:

Client模式

  client模式就是把Logstash当做客户端,去请求返回java程序所在的主机输出的日志,大致如下:

  logstash的配置如下:

input{
log4j {
mode => "client"
host => "10.4.5.6"
port => 9999
}
}
output{
stdout{}
}

  java程序这端的log4j配置文件如下:

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j=" http://jakarta.apache.org/log4j/" >
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender" >
<layout class="org.apache.log4j.PatternLayout" >
<param name="ConversionPattern" value="%d{yyyy/MM/dd-HH:mm:ss} >> %5p >> %t >> %l >> %m%n" />
</layout>
</appender> <appender name="sockethubAppender" class="org.apache.log4j.net.SocketHubAppender">
  <param name="port" value="9999" />
      <param name="Threshold" value="INFO" />
      <param name="LocationInfo" value="true" />
</appender> <root>
<priority value="info" />
<appender-ref ref="ConsoleAppender" />
       <appender-ref ref="sockethubAppender" />
</root>
</log4j:configuration>

扩展

  其实从logstash源码的角度看,就比较好理解他们的不同工作了!

  可以看到,如果是server模式,logstash会创建一个新的线程,持续的监听目标主机和端口;如果是client模式,则是创建了一个tcp连接。

  对应来说,server模式对应log4j的SocketAppender模式,client模式对应log4j的SocketHubAppender模式。

  

  注意:

  1 如果是server模式,那么监听的主机地址应该是IP地址,写localhost会导致无法接收其他主机发送的信息。

  2 如果是client模式,监听的端口不能是4560

  关于Log4j插件大致的内容就是如此了。

参考

【1】logstash log4j插件:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html

【2】log4j SocketAppender:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html

【3】log4j SocketHubAppender:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketHubAppender.html

[logstash-input-log4j]插件使用详解的更多相关文章

  1. slf4j log4j logback关系详解和相关用法

    slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...

  2. fullPage教程 -- 整屏滚动效果插件 fullpage详解

    1.引用文件 [html] view plain copy print?在CODE上查看代码片派生到我的代码片 <link rel="stylesheet" href=&qu ...

  3. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  4. maven常用插件配置详解

    常用插件配置详解Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...

  5. Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)

    1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...

  6. jQuery Pagination Ajax分页插件中文详解(摘)

    jQuery Pagination Ajax分页插件中文详解 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxin ...

  7. jQuery form插件使用详解

    点击打开: jquery选择器全解 jquery中的style样式操作 jquery中的DOM操作 jquery中的事件操作全解 jquery中的动画操作全解 jquery中ajax的应用 自定义jq ...

  8. Maven 变量及常见插件配置详解

    Maven 的 pom.xml 常用 变量 插件 配置 详解 一.变量 - 自定义变量及内置变量 1. 自定义变量 <properties> <project.build.name& ...

  9. Spark log4j日志配置详解(转载)

    一.spark job日志介绍    spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...

  10. log4j.properties配置详解与实例

    log4j.properties配置详解与实例 第一步:加入log4j-1.x.x.jar到lib下. 第二步:在工程的src下下建立log4j.properties.内容如下: #OFF,syste ...

随机推荐

  1. java Map及Map.Entry详解

    Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法. keySet()方法返回值是Map中key值的集合:e ...

  2. Backbone源码解析(二):Model(模型)模块

    Model(模型)模块在bk框架中的作用主要是存储处理数据,它对外和对内都有很多操作数据的接口和方法.它与视图(Views)模块精密联系着,通过set函数改变数据结构从而改变视图界面的变化.下面我们来 ...

  3. dojo/dom-form

    表单的处理在前端开发中一样意义非凡,dojo/dom-form模块提供了一系列方法来处理表单元素.比如: fieldToObject: 将一个表单字段转化成JavaScript原生类型,可能是stri ...

  4. Wix 安装部署教程(八) 自动生成XML小工具

    这个功能类似于Heat.exe,指定文件夹,生成对应的WIX标签.Winform做的,代码简单,生成的标签需要粘贴到对应的目录才能使用,并不是一步到位. 需要设定两个参数,一个是文件夹路径,一个是文件 ...

  5. 面向对象架构模式之:领域模型(Domain Model)

    一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去做”,即:“你得在一个个领域类之间跳转 ...

  6. Django集成百度富文本编辑器uEditor

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. 首先从ueEditor官网下载最新版本的包, ...

  7. cmd 下通过NTML代理访问Maven 库

    公司用web代理,NTLM验证的,这样在普通CMD下无法使用mvn命令访问网上的maven库,使用CNTLM工具解决. 下载CNTLM工具,安装,修改安装路径下的cntlm.ini,改成实际的ntlm ...

  8. Tomcat-MAC下添加Tomcat环境并运行

    MAC下添加Tomcat环境运行 1. 首先,下载tomcat.http://tomcat.apache.org/index.html 2. 然后解压.用终端进入到解压文件夹下的bin目录.  ...

  9. FIR.im Weekly - 这是多产的一周

    前方干货颇多,请备好小板凳,泡好茶,慢慢看. 上周四到周六(23号-25号),由 infoQ 主办的 QCon 在北京召开,各技术大牛围绕敏捷开发.技术架构.开发实践等话题进行了技术分享与探讨. QC ...

  10. iOS--二维码

    现在很多APP都涉及了二维码扫码功能,这个功能简单实用,很多情况下用户乐于使用,现在本文带来iOS7自带二维码扫码的教程,也包括扫条形码,足以满足简单的扫码要求,而且避免使用第三方的繁琐. 后期项目中 ...