写进syslog_java 在linux环境下写入 syslog 问题研究

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 filesin /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如下:

127.0.0.1

LOCAL1

%msg

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 514tail-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

$UDPServerRun514

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值