Apache 永久限制tomcat的catalina.out文件大小

Apache 永久限制tomcat的catalina.out文件大小,apache,tomcat,logging,catalina,Apache,Tomcat,Logging,Catalina,我正在运行Ubuntu的虚拟机上使用Tomcat7。现在,我在/var/lib/tomcat7/logs/catalina.out上有一个大于20GB的catalina.out文件。我首先尝试通过教程旋转日志文件。然后我发现它会在晚上监控它。即使是手动启动服务也没有多大用处。所以我删除了这个文件,但它是在我重新启动tomcat之后出现的 然后,我尝试按照公认的答案去做,即进入conf/logging.properties,并将以下行从: .handlers=1catalina.org.apach

我正在运行Ubuntu的虚拟机上使用Tomcat7。现在,我在
/var/lib/tomcat7/logs/catalina.out
上有一个大于20GB的
catalina.out
文件。我首先尝试通过教程旋转日志文件。然后我发现它会在晚上监控它。即使是手动启动服务也没有多大用处。所以我删除了这个文件,但它是在我重新启动tomcat之后出现的

然后,我尝试按照公认的答案去做,即进入
conf/logging.properties
,并将以下行从:

.handlers=1catalina.org.apache.juli.FileHandler,java.util.logging.ConsoleHandler

.handlers=1catalina.org.apache.juli.FileHandler

这似乎已经工作了一分钟,至少在我重新启动虚拟机之前是这样。一旦发生这种情况,我就得到了另一个20GB
catalina.out
文件


是否有一些行之有效的方法可以阻止文件超过5MB,或者完全限制文件?

正如“Stefan”所指出的,您可以使用标准的
java.util.logging.FileHandler
而不是Tomcat附带的方法

默认情况下,该级别设置为“全部”。您可以尝试提高处理程序日志级别以筛选调试类型消息组

.handlers = 1catalina.org.apache.juli.FileHandler
1catalina.org.apache.juli.FileHandler.level=WARNING
#1catalina.org.apache.juli.FileHandler.level=OFF
否则,看起来您必须通过设置
.filter
属性在处理程序上编写自定义筛选器和

public class FileLengthFilter implements Filter {

    private final File target;
    private final long limit;

    public FileLengthFilter() {
        final String p = getClass().getName();
        LogManager lm = LogManager.getLogManager();
        String v = lm.getProperty(p + ".file");
        target = new File(v == null ? "." : v);

        v = lm.getProperty(p + ".limit");
        long l;
        try {
            l = Long.parseLong(v);
        } catch (RuntimeException re) {
            l = 5L * 1024L * 1024L;
        }
        this.limit = l;
    }

    @Override
    public boolean isLoggable(LogRecord record) {
        try {
            return target.length() <= limit;
        } catch (RuntimeException se) {
            return false;
        }
    }
}
公共类FileLengthFilter实现过滤器{
私有最终文件目标;
私人最终长期限制;
公共文件长度筛选器(){
最后一个字符串p=getClass().getName();
LogManager lm=LogManager.getLogManager();
字符串v=lm.getProperty(p+“.file”);
目标=新文件(v==null?”。“:v);
v=lm.getProperty(p+“.limit”);
长l;
试一试{
l=Long.parseLong(v);
}捕获(运行时异常re){
l=5L*1024L*1024L;
}
这个极限=l;
}
@凌驾
公共布尔isLoggable(日志记录){
试一试{

return target.length()正如“Stefan”所指出的,您可以使用标准的
java.util.logging.FileHandler
而不是Tomcat附带的

默认情况下,级别设置为“全部”。您可以尝试提高处理程序日志级别以筛选调试类型消息组

.handlers = 1catalina.org.apache.juli.FileHandler
1catalina.org.apache.juli.FileHandler.level=WARNING
#1catalina.org.apache.juli.FileHandler.level=OFF
否则,看起来您必须通过设置
.filter
属性在处理程序上编写自定义筛选器和

public class FileLengthFilter implements Filter {

    private final File target;
    private final long limit;

    public FileLengthFilter() {
        final String p = getClass().getName();
        LogManager lm = LogManager.getLogManager();
        String v = lm.getProperty(p + ".file");
        target = new File(v == null ? "." : v);

        v = lm.getProperty(p + ".limit");
        long l;
        try {
            l = Long.parseLong(v);
        } catch (RuntimeException re) {
            l = 5L * 1024L * 1024L;
        }
        this.limit = l;
    }

    @Override
    public boolean isLoggable(LogRecord record) {
        try {
            return target.length() <= limit;
        } catch (RuntimeException se) {
            return false;
        }
    }
}
公共类FileLengthFilter实现过滤器{
私有最终文件目标;
私人最终长期限制;
公共文件长度筛选器(){
最后一个字符串p=getClass().getName();
LogManager lm=LogManager.getLogManager();
字符串v=lm.getProperty(p+“.file”);
目标=新文件(v==null?”。“:v);
v=lm.getProperty(p+“.limit”);
长l;
试一试{
l=Long.parseLong(v);
}捕获(运行时异常re){
l=5L*1024L*1024L;
}
这个极限=l;
}
@凌驾
公共布尔isLoggable(日志记录){
试一试{

return target.length()应该深入查看和。应该深入查看和。