存档

文章标签 ‘log4j配置’

Resin服务相关-日志统计SocketServer

2011年5月24日 没有评论

在前面的章节中,我们讲述了Resin本地部署服务脚本Resin更新服务脚本,本章中,我们重点讲述下对log的收集,在日常工作中我们对一些不重要的数据往往不会保存到数据库,而是直接打印到文件的方式,具体到应用的时候在对log文件进行分析,但是线上运行的机器往往都是多台,每台分析相同的事情或者对所有数据做合并处理的时候就显得很不方便,于是我们可以采用一种集中管理的方式,log4j的包为我们提供了丰富的功能,不用再自己实现,远程log用的是SocketServer。

假设10.2.1.100,10.2.1.200是客户端机器,10.2.1.500是log server.

在客户端log4j的配置文件中,设置远程记录log,并设置好端口

        <appender name="socket" class="org.apache.log4j.net.SocketAppender">
                <param name="remoteHost" value="10.2.1.500" /><!-- 这是远程log server -->
                <param name="port" value="9123" /><!-- 这是远程log server port-->
                <param name="Threshold" value="INFO" /><!-- log 级别 -->
                <param name="ReconnectionDelay" value="6000" />
                <param name="LocationInfo" value="true" />
        </appender>

100和200做同样的设置,对于服务器端500 server需要进行区分。
服务器端默认的配置文件记录在lcf文件夹中,每个文件代表一个客户端机器,目录如下:

[root@SJSWT45-26 lcf]# ls -l
总计 36
-rw-r--r-- 1 root root  893 2010-08-03 10.2.1.100.lcf
-rw-r--r-- 1 root root  895 2010-08-03 10.2.1.200.lcf

打开看一下,具体的配置文件,以100.lcf为例子

log4j.logger.promotion=DEBUG,FILELOGER2
log4j.additivity.promotion=false
log4j.appender.FILELOGER2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILELOGER2.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.FILELOGER2.encoding=UTF-8
log4j.appender.FILELOGER2.File=/data/remote-log-server/log/promition1.log      <!-- 本地记录路径,一个客户端一个地址,本例子中,100200分别设置不同的路径 -->
log4j.appender.FILELOGER2.layout=org.apache.log4j.PatternLayout  <!-- 日志的记录格式 -->
log4j.appender.FILELOGER2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss},%m %n

大功告成,现在我们把服务器500服务器的log服务启动起来,需要activation-1.1.jar 和log4j-1.2.16.jar两个包,如果加入自动发邮件的功能话,还需要引入mail-1.4.1.jar 。启动脚本如下:

/opt/j2sdk/bin/java -Xmx1G -cp /data/remote-log-server/lib/activation-1.1.jar:/data/remote-log-server/lib/mail-1.4.1.jar:/data/remote-log-server/lib/log4j-1.2.16.jar org.apache.log4j.net.SocketServer 9123 /data/remote-log-server/logserver.properties /data/remote-log-server/lcf

为了方便改动后,重启服务生效,我们可以写个shell脚本:

#!/bin/sh

ulimit -n 1000000 -s unlimited -u unlimited
export LIB_DIR=/data/remote-log-server/lib
#set -x
/opt/j2sdk/bin/java -Xmx1G -cp $LIB_DIR/activation-1.1.jar:$LIB_DIR/mail-1.4.1.jar:$LIB_DIR/log4j-1.2.16.jar org.apache.log4j.net.SocketServer "$@" &amp;
SPID=$!
sleep 1
echo $SPID &gt; /var/run/log4j.pid

其中,”$@”代表shell脚本传入的参数,在该实例中,需要传入三个参数,分别对应端口port服务器日志配置客户端收集log的配置信息目录lcf.

然后写个脚本来检测我们的服务端口9123就行了。

#!/bin/sh

out=`/bin/netstat -nlt | grep :9123`
if [ -n "$out" ]; then
        echo 'PORT 9123 OK !!! '`date`
else
        echo 'PORT 9123 HAS DOWN...... RESTART...... '`date`
        /sbin/service log4j start
fi

配置log服务的重启脚本如下,放在/ect/init.d/目录下,这儿我们命名为remote_log4j, vim /etc/init.d/remote_log4j

#!/bin/bash
#
# Startup script for Log4J Socket Server
#
# chkconfig: - 86 15
# description: Log4J Socket Server
# processname: log4j
 
ulimit -n 1000000 -s unlimited -u unlimited
 
JAVA_HOME=/opt/j2sdk
export JAVA_HOME
start_log4j="/data/remote-log-server/bin/startSockerServer.sh  9123 /data/remote-log-server/logserver.properties /data/remote-log-server/lcf "
stop_log4j="kill -9 `cat /var/run/log4j.pid`"
 
start() {
        echo -n "Starting log4j Socket Server:"
        ${start_log4j}
        echo "done."
}
stop() {
        echo -n "Shutting down log4j: "
        ${stop_log4j}
        echo "done."
}
 
# See how we were called
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        sleep 1
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
esac
 
exit 0

记录下log4j的文件滚动格式

2010年11月2日 1 条评论

log4j 可以根据日志的大小按月,周,半天,天,小时,分钟滚动进行日志配置。基本的样式如下:
# log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
# log4j.appender.fileout.File=./logs/programdolt.log
##log4j.appender.fileout.DatePattern='.'yyyy-MM-dd
# log4j.appender.fileout.DatePattern='.'yyyy-MM-dd-HH-mm

其中log4j.appender.fileout.DatePattern 就是要配置的日志格式。其中DailyRollingFileAppender 继承自FileAppender ,所以可以根据用户的选择进行日志的滚动。常用的格式如下:

'.'yyyy-MM ##每月滚动一次,/foo/bar.log will be copied to /foo/bar.log.2010-08
'.'yyyy-ww ##每周滚动一次,其中每周的第一天跟时区设置有关,/foo/bar.log will be copied to /foo/bar.log.2010-23
'.'yyyy-MM-dd ##每天滚动一次,/foo/bar.log will be copied to /foo/bar.log.2010-08-08
'.'yyyy-MM-dd-a ##每半天滚动一次,/foo/bar.log will be copied to /foo/bar.log.2010-08-09-AM
'.'yyyy-MM-dd-HH ##每小时滚动一次./foo/bar.log will be copied to /foo/bar.log.2010-08-09-10
'.'yyyy-MM-dd-HH-mm ##每分钟滚动一次./foo/bar.log will be copied to /foo/bar.log.2010-08-09-10-22