使用 Groovy 或 Java 将日志发送到 Syslog 服务器
Posted
技术标签:
【中文标题】使用 Groovy 或 Java 将日志发送到 Syslog 服务器【英文标题】:Sending Logs to Syslog Servers using Groovy or Java 【发布时间】:2015-11-19 14:57:22 【问题描述】:日志来自 POSTGRESQL,我也在使用 Script Runner 来实现它。我一直在寻找将这些日志发送到 syslog 服务器的方法,因为我真的很陌生,我不知道从哪里开始。
假设这是服务器的名称:syslog12 和端口:514
如果有人能教我如何将日志发送到系统日志服务器,我将不胜感激。
这是我的 groovy 代码:
return getUserId()
class Logs
String id = ""
String created = ""
String summary =""
String category =""
String searchField =""
String toString()
"$id ==== $created-$summary,$category,$searchField"
def getUserId()
def driver = Class.forName('org.postgresql.Driver').newInstance() as Driver
def props = new Properties()
props.setProperty("user", "USERNAME")
props.setProperty("password", "PASSWORD")
props.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory")
props.setProperty("ssl", "true")
def conn = driver.connect("jdbc:postgresql://DATABASE:PORT/GRP", props)
def sql = new Sql(conn)
try
BufferedWriter outputFile = new BufferedWriter(new FileWriter("/GRP/atlassian/testProd1.txt", true))
def logs = new Logs()
String query = "SELECT * from audit_log where created >='2015-04-15' AND created < '2015-04-26' order by id ASC"
PreparedStatement statement = conn.prepareStatement(query)
ResultSet result = statement.executeQuery()
while(result.next())
String id1 = result.getString("id")
logs.id = id1
String created1 = result.getString("created")
logs.created = created1
String summary1 = result.getString("summary")
logs.summary = summary1
String category1 = result.getString("category")
logs.category = category1
String searchField1 = result.getString("search_field")
logs.searchField = searchField1
outputFile.write("[GRP2.0] "+logs.toString())
outputFile.newLine()
outputFile.close()
return ("[GRP2.0] "+logs.toString())
finally
sql.close()
conn.close()
【问题讨论】:
blog.trifork.com/2010/01/14/… 【参考方案1】:Logback 有一个非常方便的syslog appender。因为它可以是configured with groovy,所以一个简单的例子真的很简单:
Example.groovy
package com.jalopaba.syslog
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class Example
private static final Logger LOG = LoggerFactory.getLogger(Example.class)
static void main(args)
LOG.info('Test message: ' + new Date())
logback.groovy
appender('console', ConsoleAppender)
encoder(PatternLayoutEncoder)
pattern = "%dHH:mm:ss.SSS %-5level [%thread] - %msg%n"
appender('syslog', SyslogAppender)
syslogHost = 'remote_host'
facility = 'USER'
suffixPattern = "%thread: %-5level %logger36 - %msg%n"
logger('com.jalopaba', DEBUG, ['console', 'syslog'])
这样:
remote_host:~$ tail -f /var/log/syslog
Nov 20 12:35:58 jalopaba_machine main: INFO com.jalopaba.syslog.Example - Test message: Fri Nov 20 12:35:58 CET 2015#015
请记住,syslog/rsyslog 通常默认未启用远程日志记录:What's wrong with my logback syslog appender?
【讨论】:
嗨,我只是想知道端口放在哪里以及它是UDP还是TCP? 如果未指定,端口是 syslog 默认值 (514)。如果你想改变它,SyslogAppender 有一个port
属性(查看文档)。
AFAIK,logback 的 syslog appender 使用 UDP。
我对模式和后缀模式有点困惑,因为我正在学习如何在上面的代码中实现这一点
“由于 syslog 请求的格式遵循相当严格的规则,因此没有可用于 SyslogAppender 的布局。但是,使用 suffixPattern 选项可以让用户显示任何信息。”以上是关于使用 Groovy 或 Java 将日志发送到 Syslog 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 调用 Groovy 或 Scala UDF 来更新 Oracle?
获得使用 Java 或 Groovy 填充的有效 oauth_signature 的绝对最少代码?