使用java向rsyslog发送日志

来源:互联网 发布:爱奇艺会员 淘宝 编辑:程序博客网 时间:2024/05/16 03:50

  • 补充rsyslog的配置方法
  • 一基本使用方法
  • 二不使用配置文件

补充rsyslog的配置方法

(一)基本使用方法

1、开通rsyslog远程UDP访问

vi /etc/rsyslog.conf

将下面两段前面的#号去掉

#$ModLoad imudp  #$UDPServerRun 514  

如果原来没有话则加上这2行

2,建立存放log的文件地址
vi /etc/rsyslog.conf
加入以下两段

local2.info       /var/log/login_info.log  local2.debug       /var/log/login_debug.log  

3,开通防火墙
将UDP端口514对外开放出来

4,重启rsyslog
service rsyslog restart

5,log4j的配置
将日志同时输出到syslog和console

log4j.rootLogger =ALL,systemOut,SYSLOGlog4j.appender.systemOut = org.apache.log4j.ConsoleAppender log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n log4j.appender.systemOut.Threshold = DEBUG log4j.appender.systemOut.ImmediateFlush = TRUE log4j.appender.systemOut.Target = System.out log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender  log4j.appender.SYSLOG.syslogHost=192.168.172.114log4j.appender.syslog.Threshold=DEBUG  log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout  log4j.appender.SYSLOG.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n  log4j.appender.SYSLOG.Header=truelog4j.appender.SYSLOG.Facility=local2   

6、写java代码

package com.lujinhong.demo.log4j;import org.apache.log4j.Logger;public class Log4jDemo {    private static Logger LOG  =  Logger.getLogger(Log4jDemo. class );  public static void main(String[] args) {    //System.setProperty("LOGDIR","/Users/liaoliuqing/Downloads/");    LOG.info("lujinhong !!INFO MESSAGE!!");    LOG.error("ERROR MESSAGE!!!!");    LOG.debug("DEBUG MESSAGE!");    LOG.warn("WARN MESSAGE!!");    new MyJavaClass().adder(2, 3);  }}

7,运行应用程序,可以在/var/log下看到不同级别的日志信息,如login_info.log和login_debug.log

(二)不使用配置文件

有时候,log4j的配置文件会互相覆盖,真的很烦,因此可以将配置写到代码中去
1、定义一个单例类,将相关配置写入:

package com.lujinhong.demo.log4j;import org.apache.log4j.Level;import org.apache.log4j.Logger;import org.apache.log4j.PatternLayout;import org.apache.log4j.net.SyslogAppender;public class MySysLogger {    //日志级别    private static Level level = Level.INFO;    private static Logger LOG = null;    public static synchronized Logger getInstance() {        if (LOG == null) {            new MySysLogger();        }        return LOG;    }    private MySysLogger() {        LOG = Logger.getRootLogger();        LOG.setLevel(level);        SyslogAppender appender = new SyslogAppender();        appender.setName("ma30");        appender.setSyslogHost("192.168.1.100");        appender.setLayout(new PatternLayout(                "%r [%t] %-5p %c%x: - %m%n"));        appender.setHeader(true);        appender.setFacility("local7");        //appender.setWriter(new PrintWriter(System.out));        //如果是文件是RollingFileAppender:setWriter(new PrintWriter(new File("F:/test/_debug.log")));        LOG.addAppender(appender);    }}

2、在需要日志输出的类中添加以下语句

private static Logger LOG = MySysLogger.getInstance();

然后就可以使用LOG变量进行日志输出了

吐槽几句,log4j的坑啊….
(1)CLASSPATH中不能有多个log4j的版本本,否则有有奇形怪状的NoSuchMethod, NoSuchFiled, NoClassDefineFound等异常。明明是太多了,还告诉你没有
(2)与slf4j的搭建,必须版本一致,如slf4j-1.7.2对应log4j-1.2.17
(3)配置文件啊,如果你引用的第三方包有log4j.properties,而又没有提供给你编辑,那恭喜你,慢慢调吧。把log4j的配置写入代码吧,不要用配置文件了

0 0
原创粉丝点击