java - 使用 Groovy 或 Java 将日志发送到 Syslog 服务器

标签 java logging groovy log4j syslog

日志来自POSTGRESQL,我也使用Script Runner来实现这一点。我一直在寻找将这些日志发送到系统日志服务器的方法,因为我对此很陌生,所以我不知道从哪里开始。

假设这是服务器名称:syslog12 和端口:514

如果有人能教我如何将日志发送到系统日志服务器,我将非常感激。

这是我的常规代码:

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()
        }

}

最佳答案

Logback有一个真的很方便syslog appender 。既然可以是configured with groovy ,一个简单的例子非常简单:

示例.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 = "%d{HH:mm:ss.SSS} %-5level [%thread] - %msg%n"
    }
}

appender('syslog', SyslogAppender) {
    syslogHost = 'remote_host'
    facility = 'USER'
    suffixPattern = "%thread: %-5level %logger{36} - %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?

关于java - 使用 Groovy 或 Java 将日志发送到 Syslog 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807260/

相关文章:

java - 清除 JPanel

java - JUnit 测试 - Intellij Idea

Java 闪烁图形

php - 静默 PHP 7.4.8 服务器请求日志 "Accepted", "Closing"

ubuntu - XDebug 无法打开远程调试文件 '/var/log/xdebug/xdebug.log'?

html - 如何在 Play Framework 中使用 Groovy 对非转义 HTML 字符进行子串

java - 如何用一个对象作为值来创建 HashMap,它又拥有自己的对象 HashMap。 java

ruby - 使用 Ruby 按时间戳对文本文件中的行进行排序

grails - hbase-如何在不删除表的情况下更改表结构

mysql - groovy中连接mysql时找不到合适的驱动