1.Syslog

在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网

络管理工具、安全管理系统、日志审计系统。

2.linux下syslog系统

syslog是Linux系统默认的日志守护进,内核等一些模块的日志基本上是通过syslog存储的。新版本的ubuntu(不知道具体从哪个版本开始),把syslog扩展到了rsyslog。

syslog日志最主要的部分是产生日志的程序模块(Facility)和日志等级(Level),其他还有诸如时间、主机ip、进程ID等信息。

ubuntu下syslog服务的配置文件为: /etc/rsyslog.conf

打开这个文件,比较有用的部分是:

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

这句话告诉服务器去哪里读取更详细的配置文件,在/etc/rsyslog.d/文件夹下,有数个详细配置文件。如果想要包含别的路径的配置文件,可以按照类似规则添加。

在/etc/rsyslog.d/文件夹下有两个文件20-ufw.conf和50-default.conf,在50-default.conf中可以看到有如下部分信息:

#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
local1.* -/var/log/local1.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log

其中的local1.* 代表了前文说的[Facility].[Level]组合。

Facility代表服务,指定syslog功能,local0~local7 为自定义程序使用,一般应用都选取1~7中的一个作为服务标志。

Level代表优先级,由高到低为panic, alert, crit, err, warning, notice, info, debug, none。

后半部分-/var/log/local1.log 表示日志文件的路径。

cmd语句示例如:logger -p local1.info -t "test" "a test of syslog"。

3. java写入syslog代码

在linux环境下,使用logback日志框架连接syslog,xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> <appender name="RSYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost>127.0.0.1</syslogHost>
<facility>LOCAL1</facility>
<suffixPattern>%msg</suffixPattern>
</appender> <logger name="com.xy.SystemLogger" level="DEBUG">
<appender-ref ref="RSYSLOG" />
</logger> </configuration>

 java代码如下:

static final Logger LOGGER = LoggerFactory.getLogger(SystemLogger.class);

 // send to syslog
LOGGER.info("java[" + pid + "]: " + message);

但是,在syslog日志中没有发现对应语句,java代码没有写入。。。

请教大牛后,排查过程如下:

tcpdump -XX -v -i any host 127.0.0.1 and port 514
tail -f /opt/slk/var/log/SLK.log
strace -f java -jar target/consumer-1.0-SNAPSHOT.jar
ps auxwww | grep syslog
netstat -alp
ls /proc/pid/

最后找到原因:syslog在linux中默认使用unix domain socket机制,而java logger使用UDP socket方式无法链接上。

解决办法是让syslog使用UDP方式,修改/etc/rsyslog.conf:

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

java 在linux环境下写入 syslog 问题研究的更多相关文章

  1. 由一个简单需求到Linux环境下的syslog、unix domain socket

    本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参 ...

  2. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  3. 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解

    一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...

  4. Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法(修订)

    Fedora 24 Linux 桌面环境默认字体渲染引擎 freetype 及字体配置工具 fontconfig 采用的是未经优化的编译及设置,字体渲染效果比较差.而某些 Linux 发行版的桌面字体 ...

  5. Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决(补充说明)

    在前一篇随笔中,我讲了一下有关 Linux 环境下思源黑体与 Java 之间的兼容性问题,后来经过测试发现,默认安装的思源黑体字体同时包含简体字体和繁体字体,并且其对应的语言编码也是不同的.尝试着把繁 ...

  6. Java入门——在Linux环境下安装JDK并配置环境变量

    Java入门——在Linux环境下安装JDK并配置环境变量 摘要:本文主要说明在Linux环境下JDK的安装,以及安装完成之后环境变量的配置. 使用已下载的压缩包进行安装 下载并解压 在Java的官网 ...

  7. windows和linux环境下java调用C++代码-JNI技术

    最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...

  8. Linux环境下安装Java JDK

    一.说明 操作系统:CenterOS 7 工具:MobaXterm (根据个人喜好xshell等工具也行) 三.安装步骤 第一步:下载JDK 1.下载LInux环境下的jdk,请去 官网 中下载jdk ...

  9. mosquitto在Linux环境下的部署/安装/使用/测试

    mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...

随机推荐

  1. 【转】SSL/TLS协议运行机制的概述

    互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...

  2. python 发邮件-带附件-文本-html

    #!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...

  3. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

  4. html: title换行方法 如a链接标签内title属性鼠标悬停提示内容换行

    换行代码符合分别为: “&#;”和“&#;” <a href="0.shtml" title="第一排 第二排 第三排">title ...

  5. 【Jsch】使用SSH协议连接到远程Shell执行脚本

    如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉,ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接,SSH 在连接和传送的过程中会加密所有的数据. 但是SSH一般 ...

  6. JSP的基本语法:

    JSP文件有5类元素:注释,模版,脚本,指令,行为 下面我就和大家分别唠唠,这5个玩意到底是啥玩意! 一.注释(我feel有三种): html注释:<!--……-->  显式注释,即客户端 ...

  7. TextView 获取行数,某一行的内容,某行的宽度

    获取行数 ViewTreeObserver vto = textView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlob ...

  8. java基础-servlet-1

    servlet,是运行于服务器端的小程序.它既可以运行在http服务器端,也可以运行在mail等其他服务器端.我是这样理解,tomcat把接收到的客户端请求,转发给servlet,它负责业务处理,并且 ...

  9. APP常见崩溃原因和测试方法整理

    测试过APP的人都应该发现,app崩溃是一类非常常见的问题,很多时候还是致命性的,这就要求我们测试人员要尽最大可能去找出软件当中的缺陷,减少app崩溃出现的概率,这里我将收集到的关于针对APP崩溃测试 ...

  10. CentOS配置SVN服务器

    系统环境:CentOS系统:CentOS 6.5 1.检查是否安装了低版本的SVN rpm -qa subversion 2.卸载旧版本SVN yum remove subversion 3.安装SV ...