分布式数据库启动日志服务配置方法

今天弄了一天远程log的配置,因为文档和攻略的缺失,调试弄的异常艰难。网上搜的东西,大多只是贴代码,完全不讲原理。最后终于配成功了,现在把过程整理如下。

      概述:基于Socket的远程log由server端和client端组成,server端需要启动一个JAVA类org.apache.log4j.net.SocketServer,client端使用SocketAppender。

      Client端:

      Client端其实就是写logger的应用,配置分为两部分,Appender和Logger,当然是写在log4j.xml里了。

      Appender:

1
2
3
4
5
6
7
< appender  name = "remoteFile"  class = "org.apache.log4j.net.SocketAppender" >
         < param  name = "remoteHost"  value = "localhost"  /> <!-- 这是远程log server -->
         < param  name = "port"  value = "4560"  /> <!-- 这是远程log server port -->
         < param  name = "Threshold"  value = "INFO"  /> <!-- log 级别 -->
         < param  name = "ReconnectionDelay"  value = "1000"  />
         < param  name = "LocationInfo"  value = "true"  />
</ appender >

 

      配置看名字也一目了然了。

      Logger的配置与普通Logger没任何区别。例:

1
2
3
4
< logger  name = "testRemote"  additivity = "false" >
         < level  value = "INFO"  />
         < appender-ref  ref = "remoteFile"  />
</ logger >

       写了一段小代码测试Logger。

1
2
3
4
5
6
7
public  class  TestLog4j {
     public  static  void  main(String[] args) {
         DOMConfigurator.configure(TestLog4j. class .getResource( "/log4j.xml" ));
         Logger remoteLogger = LogManager.getLogger( "testRemote" );
         remoteLogger.info( "blabla" );
     }
}

      Server端:

      Server端使用SocketServer类。这个类提供了main函数,直接运行就可以了,不过需要注意参数的使用:

      以下是一个运行的例子:

      java -cp log4j-1.2.16.jar org.apache.log4j.net.SocketServer 4560 /data/log4j/log4jserver.properties /data/log4j/lcf/

      4560是监听的端口,貌似SocketAppender默认也是这个端口。/data/log4j/log4jserver.properties是配置文件的地址,这个可以随便改。/data/log4j/lcf/依然是配置文件的地址,不过是以文件夹的形式。操蛋的是,这个文件夹下面随便写个配置文件它是不会读的!现在只知道generic.lcf会读,其它类似1.lcf之类的文件都会被跳过去。

     下面介绍配置文件的写法。

     配置文件依然分为Appender和Logger。其实配置方法跟client差不多,只是换成了非xml的写法罢了。

log4jserver.properties:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
log4j.rootCategory=INFO, globalfile             //logger
log4j.logger.org.apache.log4j.net.SocketServer=DEBUG,serverFile     //logger
log4j.additivity.org.apache.log4j.net.SocketServer= false    //logger
log4j.appender.serverFile=org.apache.log4j.DailyRollingFileAppender  //appender
log4j.appender.serverFile.DatePattern= '.' yyyy-MM- dd -HH  //appender
log4j.appender.serverFile.encoding=UTF-8  //appender
log4j.appender.serverFile.File= /data/log4j/logs/log4jserver .log  //appender
log4j.appender.serverFile.layout=org.apache.log4j.PatternLayout  //appender
log4j.appender.serverFile.layout.ConversionPattern=%d{yyyy-MM- dd  HH:mm:ss},%m %n  //appender
     
log4j.appender.globalfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.globalfile.DatePattern= '.' yyyy-MM- dd -HH
log4j.appender.globalfile.encoding=UTF-8
log4j.appender.globalfile.File= /data/log4j/logs/global .log
log4j.appender.globalfile.layout=org.apache.log4j.PatternLayout
log4j.appender.globalfile.layout.ConversionPattern=%d{yyyy-MM- dd  HH:mm:ss},%m %n

      其中上面的logger和appender都标出来了。

      最后要说明的是Server和Client的对应关系。Server端和Client端通过Logger来对应,与两边Appender取什么名字无关。Client端的Logger是什么名字,那么这个logger输出的log最终会被Server端相应的Logger输出。

generic.lcf:

1
2
3
4
5
6
7
8
log4j.logger.testRemote=INFO,localFile
log4j.additivity.testRemote= false
log4j.appender.localFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.localFile.DatePattern= '.' yyyy-MM- dd
log4j.appender.localFile.encoding=UTF-8
log4j.appender.localFile.File= /data/log4j/logs/localFile .log
log4j.appender.localFile.layout=org.apache.log4j.PatternLayout
log4j.appender.localFile.layout.ConversionPattern=%d{yyyy-MM- dd  HH:mm:ss}, %p %m %n

如果没有配log4j.rootCategory,那么Server运行时会提示:

1
2
3
4
5
6
log4j:WARN No appenders could be found  for  logger (org.apache.log4j.net.SocketNode).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http: //logging .apache.org /log4j/1 .2 /faq .html #noconfig for more info.
log4j:WARN No appenders could be found  for  logger (testRemote2).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http: //logging .apache.org /log4j/1 .2 /faq .html #noconfig for more info.

     其实它只写了个:

     2011-08-25 21:00:46,Caught java.io.EOFException closing conneciton。这个提示很坑爹,让我一直以为是传过来的logger找不到appender。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值