最近参与了一个项目,单台主机上布置了多个应用实例。为了后期维护和监控,需要将各个应用实例的部分关键日志汇总到一个文件里,同时自动备份前一天的日志,并带上日期。最开始只是配置了log4j.properties文件,控制部分日志输出级别。发现,日志正常情况下能输出到指定文件夹里,但是在每天自动备份日志的时候,总有部分日志仍然输出到并且覆盖了前一天的备份文件,最后发现是因为多实例并发导致的。

因此决定采用log4j自带的日志服务器功能,将各个实例的日志统一汇总到日志服务器再打印输出到文件。

相关配置如下:

1.客户端log4j.properties配置文件

#该部分为正常的输出到控制台的配置
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.AIPatternLayout
log4j.appender.console.layout.ConversionPattern=[%d] [%t] (%u) (%F:%L) %-5p %c - %m%n
log4j.rootLogger=info,console,A1#该部分为输出到日志服务器的配置
log4j.rootCategory=,A1
log4j.appender.A1=org.apache.log4j.net.SocketAppender
log4j.appender.A1.RemoteHost=localhost
log4j.appender.A1.Port=55555
log4j.appender.A1.Threshold = ERROR

2.日志服务器配置文件

log4j.rootLogger=DEBUG,applog
log4j.category.org.apache.log4j.net=INFO
log4j.appender.applog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.applog.file=/home/hds/log/app.log
log4j.appender.applog.Threshold = ERROR
log4j.appender.applog.append=true
log4j.appender.applog.DatePattern='.'yyyy-MM-dd
log4j.appender.applog.layout=org.apache.log4j.PatternLayout

3.启动日志服务器的命令

命令格式:java -cp 'CLASSPATH' 'APP_MAIN_CLASS' 'Port' '日志服务器的配置文件' '客户端配置文件所在目录(可以不配置)'
java -cp /home/hds/libext/log4j-1.2.8.jar org.apache.log4j.net.SocketServer 55555 /home/hds/app/log4jsocket/socketserver.properties /home/hds/app/log4jsocket/clientConfig

4.启停日志服务器的shell脚本

(1).catalina.sh

#!/bin/bash BASE_APP_HOME="/home/hds"
echo "BASE_APP_HOME=${BASE_APP_HOME}"
#监听的端口号
LISTEN_PORT=55555
#服务端log4j配置文件
SERVER_CONFIG="${BASE_APP_HOME}/app/log4jsocket/socketserver.properties"
#客户端的配置目录
CLIENT_CONFIG_DIR="${BASE_APP_HOME}/app/log4jsocket/clientConfig"#Log4j的jar包目录
APP_HOME="${BASE_APP_HOME}/libext"
#需要启动的Java主程序(main方法类)
APP_MAINCLASS=org.apache.log4j.net.SocketServer  #拼凑完整的classpath参数,包括指定lib目录下所有的jar
CLASSPATH="$APP_HOME"/"log4j-1.2.8.jar"
#for i in "$APP_HOME"/log4j-1.2.8.jar; do
#    CLASSPATH="$CLASSPATH":"$i"
#done  #JDK所在路径
JAVA_HOME="${BASE_APP_HOME}/java"
echo "JAVA_HOME=${JAVA_HOME}"
#执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号
#RUNNING_USER=hds#java虚拟机启动参数
JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"   #初始化psid变量(全局)
psid=0  checkpid() {  javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`  if [ -n "$javaps" ]; then  psid=`echo $javaps | awk '{print $1}'`  else  psid=0  fi
}  start() {  checkpid  if [ $psid -ne 0 ]; then  echo "================================"  echo "warn: $APP_MAINCLASS already started! (pid=$psid)"  echo "================================"  else  echo -n "Starting $APP_MAINCLASS ..."  $JAVA_HOME/bin/java -cp $CLASSPATH $APP_MAINCLASS $LISTEN_PORT $SERVER_CONFIG $CLIENT_CONFIG_DIR >/dev/null 2>&1 & checkpid  if [ $psid -ne 0 ]; then  echo "(pid=$psid) [OK]"  else  echo "[Failed]"  fi  fi
}  stop() {  checkpid  if [ $psid -ne 0 ]; then  echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "  kill -9 $psidif [ $? -eq 0 ]; then  echo "[OK]"  else  echo "[Failed]"  fi  checkpid  if [ $psid -ne 0 ]; then  stop  fi  else  echo "================================"  echo "warn: $APP_MAINCLASS is not running"  echo "================================"  fi
}  status() {  checkpid  if [ $psid -ne 0 ];  then  echo "$APP_MAINCLASS is running! (pid=$psid)"  else  echo "$APP_MAINCLASS is not running"  fi
}
info() {  echo "System Information:"  echo "****************************"  echo `head -n 1 /etc/issue`  echo `uname -a`  echo  echo "JAVA_HOME=$JAVA_HOME"  echo `$JAVA_HOME/bin/java -version`  echo  echo "APP_HOME=$APP_HOME"  echo "APP_MAINCLASS=$APP_MAINCLASS"  echo "****************************"
}
case "$1" in  'start')  start  ;;  'stop')  stop  ;;  'restart')  stop  start  ;;  'status')  status  ;;  'info')  info  ;;  *)  echo "Usage: $0 {start|stop|restart|status|info}"   exit 0
esac

(2).startup.sh

#!/bin/bash
EXECUTABLE=catalina.sh
exec "$EXECUTABLE" start "$@"

(3).shutdown.sh

#!/bin/bash
EXECUTABLE=catalina.sh
exec "$EXECUTABLE" stop "$@"

解决Log4j日志文件输出到了前一天的备份文件里相关推荐

  1. log4j日志文件乱码问题的解决方法

    log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了, ...

  2. linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法

    log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起 ...

  3. Tomcat下log4j日志文件 配置过程

    1) tomcat6.0下的log4j日志文件 配置过程 首先下载两个文件,如我的tomcat版本是v6.0.24 http://www.apache.org/dist/tomcat/tomcat-6 ...

  4. log4j日志文件模板配置整理

    log4j日志文件模板配置整理 模板一 模板二 模板三 log4j配置参数介绍 备注 模板一 以xml文件配置,按照不同的日志级别输出到不同的文件中 <?xml version="1. ...

  5. 解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题

    解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题 参考文章: (1)解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题 (2)https://www.cnblogs.co ...

  6. Unity3D打包后日志文件输出目录

    Unity3D打包后日志文件输出目录,包括日志文件和崩溃时记录文件 C:\Users\Administrator\AppData\LocalLow\长沙迪迈科股份有限公司\镍矿探秘 其中". ...

  7. 使用log4net将日志文件输出替csv格式

    使用log4net将日志文件输出为csv格式 我们在编写程序时,会在程序运行过程中记录一些日志.log4net作为一款经久耐用的日志组件,值得我们信赖.在中小型公司中,往往没有专业的日志服务器来处理应 ...

  8. log4j日志文件的使用及log4j日志文件失效原因分析

    log4j的使用步骤 1.导入log4j-*.jar,例:log4j-1.2.17-jar; <dependency><groupId>log4j</groupId> ...

  9. log4j日志文件配置说明及使用

    一.log4j.properties文件格式说明:    log4j.rootLogger=info, stdout log4j.appender.stdout=org.apache.log4j.Co ...

最新文章

  1. Word2016如何取消宏已被禁用的提示
  2. 2016 Multi-University Training Contest 1 GCD【RMQ+二分】
  3. 自定义分页(模块化)
  4. ecshop 默认图处理
  5. 小程序使用wx.uploadFile上传图片报错:uploadFile:fail Error: connect ECONNREFUSED
  6. BeetleX实现MessagePack和Protobuf消息控制器调用websocket服务详解
  7. Bootloader启动过程
  8. android:scaletype=quot;fitxyquot;,Android ImageView的ScaleType属性
  9. Android studio 的那些坑
  10. Mac 查看jdk版本
  11. 【STM32H7的DSP教程】第12章 DSP基础函数-相反数,偏移,移位,减法和比例因子
  12. EntityWrapper
  13. 在微信小程序中怎么让一个页面的信息传递到另一个页面
  14. html中写jq,在jQuery中,能够操作HTML代码及其文本的方法是()
  15. WeCenter 与 UCenter 对接
  16. 自己私藏的一篇:和现在做网络营销、咨询公司业务有关 和技术无关 和CRM有点关系 可能给网络社区和网络营销从业者有启发
  17. struct 结构体的内存对齐
  18. 程序员睡眠与养生诀窍
  19. DeAuth 无线信道MDK3攻击辅助工具
  20. caffe层解析之softmaxwithloss层

热门文章

  1. seo视频教程,seo视频教程,seo新手教学
  2. 雷军谈人生三段低谷:站店卖货、泡吧泡论坛、错失互联网第一波浪潮!
  3. nodejs+express+mysql实现图片上传
  4. 如何理解maxcompute常见报错信息?
  5. Bladed V4.3安装(PoJie)流程
  6. 包工协议书样本_包工合作合同协议书范本
  7. Ardunio开发实例-LM35、LM335、LM34温度传感器
  8. C# 压缩MDB数据库
  9. Service References和Web References的引用
  10. WordPress怎么使用支持注册用户上传自定义头像功能?