Tomcat Logrotate文件名中包含日期的文件
我正在尝试在RHEL中为tomcat6日志配置logrotate。目前,logrotate对于catalina.out log工作正常,它被正确地旋转和压缩 问题在于其中包含日期的文件,如:Tomcat Logrotate文件名中包含日期的文件,tomcat,date,redhat,logrotate,Tomcat,Date,Redhat,Logrotate,我正在尝试在RHEL中为tomcat6日志配置logrotate。目前,logrotate对于catalina.out log工作正常,它被正确地旋转和压缩 问题在于其中包含日期的文件,如: catalina.2012-01-20.log catalina.2012-01-21.log catalina.2012-01-22.log 这些文件没有被旋转。我知道我必须在/etc/logrotate.d/tomcat6文件中配置这些文件,其中配置了catalina.out的旋转。但我无法配置它 我
catalina.2012-01-20.log
catalina.2012-01-21.log
catalina.2012-01-22.log
这些文件没有被旋转。我知道我必须在/etc/logrotate.d/tomcat6文件中配置这些文件,其中配置了catalina.out的旋转。但我无法配置它
我只想每天压缩这些旧文件,除了当前的日期日志文件
有谁能帮我一下吗
谢谢
正常A.在日志旋转文件中,使用
旋转#
,其中#是删除日志之前要保留的日志数
轮换计数
日志文件在被删除或删除之前会被旋转多次
邮寄到邮件指令中指定的地址。如果计数是
0,旧版本将被删除,而不是旋转
我花了很长时间阅读了大量文档。Logrotate似乎无法对文件名中包含日期的不同文件进行分组。Logrotate不能做我们需要它做的事情 有两个选项可以更改java/tomcat提供的日志记录功能,使其在文件名中不包含日期。 第二种也是更快的方法是使用自己的小脚本为您完成工作,使用
find
find/pathtologs/*-mtime+5-exec rm{}\
我选择了第二个选项,因为我们的开发人员在文件名中为日期编码。所以它需要保持这种状态。
-mtime+5
将find设置为仅查找大于5天的文件
从查找的文档
文件的数据上次修改是在n*24小时前。请参阅-atime的注释,了解舍入如何影响文件修改时间的解释
根据评论更新
find/pathtologs/*-mtime+5-删除
如果您特别想删除,这是一种快速的方法。
如果需要其他命令,您可以随时替换exec rm{}使用其他内容编写>。您可能可以从日志文件名中删除日期,如中所述
能够使用logrotate规则
这至少对本地主机访问日志有效。/path/to/logs/*.log{
米森戈克
压缩
轮换7次
}
这种类型的东西不能正常工作,因为正如其他人指出的,tomcat有自己的日志循环。您可以使用简单的cron删除旧文件,也可以关闭访问日志阀上的旋转。通过关闭日志旋转(并可能更改文件名模式),上述日志旋转和其他类似配置将正常工作
底线是您应该在tomcat中使用logrotate或内置的logrotate,但不能同时使用两者。类似于/etc/cron.d/rotate\u tomcat\u logs中的内容:
# delete every log file over 100 days old, and compress every log file over 1 day old.
00 1 * * * root ( find /opt/tomcat/logs -name \*log\* -name \*.gz -mtime +100 -exec rm -f {} \; >/dev/null 2>&1 )
05 1 * * * root ( find /opt/tomcat/logs -name \*log\* ! -name \*.gz -mtime +1 -exec gzip {} \; >/dev/null 2>&1 )
(有史以来的第一篇帖子,如果它看起来像喝醉了的蜘蛛格式化了它,那么很抱歉)
在使用了我们的朋友Google之后,我记不起我在哪里使用logrotate(而不是cron或其他类似工具)实现了一些东西
在/var/log/rsync/中,我有一个如下代码:
-rw-r--r-- 1 root root 1.1M Apr 9 08:13 2014-04-09 07:48:18.log
-rw-r--r-- 1 root root 1.4M Apr 11 15:20 2014-04-11 15:02:52.log
-rw-r--r-- 1 root root 1.6M Apr 11 15:42 2014-04-11 15:22:04.log
-rw-r--r-- 1 root root 1.8M Apr 12 08:01 2014-04-12 07:45:31.log
-rw-r--r-- 1 root root 2.0M Apr 13 08:10 2014-04-13 07:53:38.log
-rw-r--r-- 1 root root 2.2M Apr 14 08:19 2014-04-14 07:51:09.log
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
以及以下日志文件:
/var/log/rsync/*.log {
daily
rotate 7
compress
delaycompress
notifempty
missingok
}
我认为这是完全合理的。但在它拒绝工作后,当我发现它永远不会工作(这篇文章提供了帮助)时,我想知道它是否可以被捏造以使它工作
经过多次测试和调整后,我成功地通过以下方式对其进行了篡改:
/var/log/rsync/dummy {
daily
rotate 0
create
ifempty
lastaction
/usr/bin/find /var/log/rsync/ -mtime +7 -delete
/usr/bin/find /var/log/rsync/ -mtime +1 -exec gzip -q {} \;
endscript
}
进入名为/etc/logrotate.d/local-rsync的logrotate配置文件。然后创建虚拟日志文件:
touch /var/log/rsync/dummy
然后使用以下命令强制日志旋转:
logrotate -fv /etc/logrotate.d/local-rsync
其中:
-rw-r--r-- 1 root root 71K Apr 9 08:13 2014-04-09 07:48:18.log.gz
-rw-r--r-- 1 root root 88K Apr 11 15:20 2014-04-11 15:02:52.log.gz
-rw-r--r-- 1 root root 82K Apr 11 15:42 2014-04-11 15:22:04.log.gz
-rw-r--r-- 1 root root 84K Apr 12 08:01 2014-04-12 07:45:31.log.gz
-rw-r--r-- 1 root root 87K Apr 13 08:10 2014-04-13 07:53:38.log.gz
-rw-r--r-- 1 root root 92K Apr 14 08:19 2014-04-14 07:51:09.log.gz
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
-rw-r--r-- 1 root root 0 Apr 16 12:11 dummy
现在就等明天早上吧
我意识到cron会更整洁,但是我在logrotate配置文件中有另一个元素,希望将两者保持在一起
虚拟文件的好处是它不占用任何空间
您可能会发现,它似乎没有旋转任何一天。我花了一段时间才弄明白原因,但后来它突然变小了。find-mtime+1是一整天(即24*60分钟),如果自上次创建日志以来,每日日志在不到24小时内启动,则它有时似乎不起作用。如果您感到困扰,那么使用find-mmin+1380使用23小时可能更合适。要在tomcat[linux]中启用每日日志循环,并将日期后缀添加到catalina文件,请执行以下更改
下载cronolog包并在linux操作系统中安装
wget
使用vi命令打开apache-tomcat-7.0.65/bin/catalina.sh文件,并更改行,如下所示
示例:/opt/apache-tomcat-7.0.65/bin/catalina.sh
shift
touch "$CATALINA_OUT"
# comment above line as below
#touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
#>> "$CATALINA_OUT" 2>&1 "&"
# comment above line and add below given line
2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &
else
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
#>> "$CATALINA_OUT" 2>&1 "&"
# comment above line and add below given line
2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &
fi
在上述更改之后,保存文件并重新启动tomcat以应用更改。好吧,我对任何答案都不完全满意,即使那些声明logrotate
不支持这种情况(即只是删除由其他应用程序旋转的文件)的场景肯定是正确的(可能对该工具提出功能请求?)
因此,我想与大家分享我的另一种方法。与“find/path/to/logs-mtime+7-delete
”解决方案不同,此解决方案不会在指定的时间段后删除所有旧日志。因此,下面是一个示例one-liner bash命令,它只在磁盘上留下最后N个日志(无论何时运行):
最后,为了完全涵盖这个主题,最后一个替代解决方案是不旋转日志文件(例如,在Tomcat的情况下使用rotatable=false
,请参阅其文档),并像通常一样使用logrotate
,但不要忘记将其与选项一起使用
欢迎您提出建议…要在旋转文件中包含日期,您可能可以使用“dateext”选项
$ cat logrotate.conf
/var/nginx/logs/access.log {
size 10k
copytruncate
dateext
rotate 10
compress
}
旋转后的文件的创建应与下面类似
root@nitpc:~# ls -lrt /var/nginx/logs/access.*
-rw-r--r-- 1 nginx root 5422 May 31 08:26 access.log
-rw-r--r-- 1 nginx root 466 May 31 08:26 access.log-20180531.gz
唯一的缺点是你不会
$ cat logrotate.conf
/var/nginx/logs/access.log {
size 10k
copytruncate
dateext
rotate 10
compress
}
root@nitpc:~# ls -lrt /var/nginx/logs/access.*
-rw-r--r-- 1 nginx root 5422 May 31 08:26 access.log
-rw-r--r-- 1 nginx root 466 May 31 08:26 access.log-20180531.gz
1 0 * * * /usr/bin/find /var/log/tomcat/ -mtime +30 -delete
2 0 * * * /usr/bin/find /var/log/tomcat/ -mtime +1 -exec gzip -q {} \;
catalina.2012-01-20.log
catalina.2012-01-21.log
catalina.2012-01-22.log
/somepath/catalina.log {
# truncate file in place
copytruncate
# rotate daily
daily
# keep max 7, will delete after that
rotate 7
# when rotating create file with date, e.g. catalina.log-20200304
dateext
# compress
compress
# manpage: "Postpone compression of the previous log file
# to the next rotation cycle.
# This only has effect when used in combination with compress."
delaycompress
# change this to correct owner and permissions of logfile
create 750 tomcat6 tomcat6
# do not generate an error if logfile is missing
missingok
# do not rotate if the file is empty
notifempty
catalina.log
catalina.log-20200304
catalina.log-20200303.gz
...