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. 经验分享:Linux 双网卡SNAT和DNAT映射本地端口出外网

    A 机器 网卡1  公网IP网卡2  内网 B 机器网卡1 内网 如果想把公网端口P1 映射为内网B机器端口P2 iptables -t nat -A PREROUTING -d [A公网地址] -p ...

  2. js中的replace全局替换

    比如想把str中的所有“&”替换成“&” replace (\&\,"&");只是替换第一个,那么怎么全部都替换呢? replace(new Reg ...

  3. c#操作access,update语句不执行的解决办法

    update access数据库时,使用了参数化的方式,结果不报错,但是数据也没有更新.后来发现access使用参数化时,参数位置必须和赋值顺序相同才行,否则更新时就会出现数据无法更新但是也不报错的怪 ...

  4. 别再为了this发愁了------JS中的this机制

    别再为了this发愁了------JS中的this机制 题记:JavaScript中有很多令人困惑的地方,或者叫做机制.但是,就是这些东西让JavaScript显得那么美好而与众不同.比方说函数也是对 ...

  5. [Linux] - Docker移动数据到其它盘的办法

    由于使用yum安装Docker,默认是数据是存放在系统盘/var/lib目录下,需要把它放到其实盘里头.方法可以这样做: 1.在其它盘中新建一个目录,比如我的:/yunpan/docker mkdir ...

  6. Shiro权限框架简单快速入门

    声明本文只适合初学者,本人也是刚接触而已,经过一段时间的研究小有收获,特来分享下希望和大家互相交流学习. 首先配置我们的web.xml代码如下: <filter> <filter-n ...

  7. SQLServer根据日期查询星期

    --根据日期查询星期SELECT SYSDATETIME();select datepart(weekday,getdate()); SET DATEFIRST 1select '星期'+case w ...

  8. Redis内存使用优化与存储

    抄自http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage 本文将对Redis的常见数据类型的使用场景以 ...

  9. 解决Dropbox无法连接的问题

    同步共享服务Dropbox从6月18日开始再次遭到封锁,原因是DNS污染.Dropbox上次在2010年5月曾遭到IP封锁和网址关键字过 滤,2012年5月除文件外链功能外其它功能可正常访问:2014 ...

  10. MVC部分视图含义

    Partail Views 类似于ASPX视图引擎中的用户控件,使用部分视图可以创建放置于不同页面的通用部分.