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. ubuntu 更换系统语言,Change System Language

    1.打开设置,打开“Language Support”. 2.如果列表中没有你的语言,点击“Install/Remove Language”,下拉选择你的语言,点击“Apply Changes”. 3 ...

  2. PBR实现2.0

    之前的错误和欠缺 1. 过于简单的划分diffuse和specular,非常光滑的非金属材料也是很能反光的2. 费奈尔效应的处理,F0的选取也比较随意3. 没有GI,更不支持AO 正确划分diffus ...

  3. OAF_开发系列21_实现OAF事物控制TransactionUnitHelper(案例)

    20150716 Created By BaoXinjian

  4. ArcGIS Engine中的8种数据访问 (转)

    数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文主要介绍一下以下八种数据格式在ArcGI ...

  5. PHP常用功能

    1.PHP字符串 字符串声明 变量=''或者""(一般情况会使用单引号,因为写起来会比较方便) $str = 'Hello PHP'; echo $str; strpos 计算字符 ...

  6. CentOS 6.5安装Oracle 11.2.0.4------CentOS 6.5安装

    规划: IP:192.168.213.199 mask: 255.255.255.0 gateway:192.168.213.1 DNS1:202.101.172.35 磁盘分区: 磁盘总大小:25G ...

  7. Modelsim-altera 仿真 顶层原理图的解决办法

    解决办法:首先需要将.bdf原理图文件转换为Verilog HDL等第三方EDA工具所支持的标准描述文件.在Quartus下,保持*.bdf为活动窗口状态,运行[File]/[Create/Updat ...

  8. appium移动端测试之滑动(二)

    在ios测试中,需要用到滑动,所以用java封装了一套滑动的方法,不多说,贴代码 /** * 上滑1/4屏幕 */ public void slideUP1_4() { int x = driver. ...

  9. 总结一下 input propertychange

    最近做的一些项目,经常遇到输入框检查的需求,最常见的是即时搜索,今天好好小结一下. ========================================================== ...

  10. 2015.05.14:codesmith

    安装: 安装好codesmith会有两个软件:一个编译器(CodeSmith Generator Explorer),一个生成工具(CodeSmith Generator Studio) 破解: 一般 ...