[logstash-input-log4j]插件使用详解
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]插件使用详解的更多相关文章
- slf4j log4j logback关系详解和相关用法
slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...
- fullPage教程 -- 整屏滚动效果插件 fullpage详解
1.引用文件 [html] view plain copy print?在CODE上查看代码片派生到我的代码片 <link rel="stylesheet" href=&qu ...
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- maven常用插件配置详解
常用插件配置详解Java代码 <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...
- Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)
1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...
- jQuery Pagination Ajax分页插件中文详解(摘)
jQuery Pagination Ajax分页插件中文详解 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxin ...
- jQuery form插件使用详解
点击打开: jquery选择器全解 jquery中的style样式操作 jquery中的DOM操作 jquery中的事件操作全解 jquery中的动画操作全解 jquery中ajax的应用 自定义jq ...
- Maven 变量及常见插件配置详解
Maven 的 pom.xml 常用 变量 插件 配置 详解 一.变量 - 自定义变量及内置变量 1. 自定义变量 <properties> <project.build.name& ...
- Spark log4j日志配置详解(转载)
一.spark job日志介绍 spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...
- log4j.properties配置详解与实例
log4j.properties配置详解与实例 第一步:加入log4j-1.x.x.jar到lib下. 第二步:在工程的src下下建立log4j.properties.内容如下: #OFF,syste ...
随机推荐
- xml笔记
<?xml version="1.0" encoding="UTF-8"?> ----------------------------------- ...
- 《BI深入浅出》笔记
今年的项目涉及到BI的知识点,读了<商业智能深入浅出>,这本书是基于IBM的产品做的,基础知识部分讲的非常成体系.记下来做个备忘: 1. BI简介 1.1 实施方案 1)项目规划: 2)系 ...
- 团队项目——站立会议DAY7
第七次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:对功能模块代码进行近一步的审查和辅助,并对出错处进行修改和完善. 2.钟灵毓秀:对代码近一步的修改,将各个 ...
- 整理BOM时写的关于拆分单元格的VB代码
Public Function AddRows(pos As Integer, amount As Integer) Dim rpos As Integer rpos = pos + To amoun ...
- 翻译-Salt与Ansible全方位比较
原文链接:http://jensrantil.github.io/salt-vs-ansible.html 作者: Jens Rantil 之前某些时候我需要评估配置管理系统.结合从他人得到的意见,我 ...
- Linux-磁盘管理小结
这篇博文主要总结了Linux磁盘的一些操作,主要是硬盘的加载,分区(MBR分区和GPT分区),分区的挂载,以及swap分区的加载设置. 基础命令 df查看磁盘分区使用状况 -l //仅显示本地磁盘(默 ...
- IOS Block-Block块的使用与理解
在IOS中,block块是新添加的语法,其他程序语言中也被称为闭包. 程序块的理念是像任何其他C语言类型一样对待特定的代码块.程序块可以分配给一个变量,以参数的形式传递给函数或方法,当然也可以执行(不 ...
- 为什么Java方法里面不能再嵌套方法?
直接原因: 这是Java基本语法定义的,方法中不可以再次声明方法,只能调用其他的方法. 个人理解: 1.方法栈是需要一个载体的,这个载体就是Class,如果一个方法的上一级不是一个类,就说明没有载体. ...
- .NetCore~Linux环境下部署
NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...
- 在Windows下安装Memcached
Windows下的Memcache安装: 需要运行命令行工具cmd 请以管理员权限运行 开始->附件->命令提示符,以管理员身份运行 假如当前C:\windows\system32,输入c ...