2013-03-18 107 views
0

Log4j似乎忽略了Config.groovy中的一些Grails日志记录设置,但忽略了其他日志设置。我在tomcat上运行Grails 2.2.1。忽略Grails日志配置

我已经建立了我的配置文件(如下)以将所有错误和更高的消息记录到控制台(它映射到tomcat中的catalina.out),解析,计划和联合包中的所有信息和更高的消息master.log,并且所有解析,计划和联合包中的更高的消息调试到它们各自的解析,计划和联合日志。

在appenders部分中提到的所有文件都在适当的位置创建并接收日志消息。然而,MASTER.LOG正在接受调试消息,都MASTER.LOG和syndicate.log已发展到19GB大小,当配置显然他们限制为25MB ...

谁能明白我我做错了吗? Grails如何尊重我的配置的一行而不是下一行?我的Config.groovy文件的相关部分是:

log4j = { 
// Uncomment to override the default logging level across all 
// classes. 
root { 
     warn catalinaOut 
} 

appenders { 
    // this line prevents all messages from being duplicated to stdout DONT DELETE 
    console name: "stdout", 
      layout: pattern(conversionPattern: "") 
    console name: "catalinaOut", 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    file name: "dcsFileAppender", 
       file: "logs/data-collection-system/master.log", 
       maxFileSize: "25MB",in 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    file name: "parseFileAppender", 
       file: "logs/data-collection-system/parse.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    file name: "scheduleFileAppender", 
       file: "logs/data-collection-system/schedule.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    file name: "syndicateFileAppender", 
       file: "logs/data-collection-system/syndicate.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
} 

environments { 
    production { 
     info dcsFileAppender: ["com.progauge.icp.parse", "com.progauge.icp.schedule", "com.progauge.icp.syndicate"] 
     all parseFileAppender: ["com.progauge.icp.parse"], 
     scheduleFileAppender: ["com.progauge.icp.schedule"], 
     syndicateFileAppender: ["com.progauge.icp.syndicate"] 
    } 
} 
} 

作为一个方面说明,我不得不为标准输出模式设置为空字符串,因为我不想标准控制台日志记录行为,但设置附加器为null打破了我的自定义控制台日志记录,这也是我不想要的。

回答

3

我看到与配置三个主要问题,你有这么远:

  • 日志级别设置每个记录 - 如果你想从同一个记录器,以不同的appender发送不同级别的消息,那么你需要将记录器设置为最详细的级别,然后在相关的附加程序上设置阈值以过滤掉日志级别过高的消息。
  • 如果要限制文件大小和进行备份,那么你应该使用rollingFile类型的追加程序,而不是file
  • 打压默认stdout的appender你应该使用'null'(这是四个字符的字符串null作为反对null值,并且定义了一个忽略写入它的任何日志消息的接收器(Log4J NullAppender)。

尝试更多的东西是这样的:

log4j = { 
    // Uncomment to override the default logging level across all 
    // classes. 
    root { 
     warn 'catalinaOut' 
    } 

    appenders { 
    // this line prevents all messages from being duplicated to stdout 
    'null' name: "stdout" 

    console name: "catalinaOut", 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 

    // threshold to make this appender only log INFO and higher messages 
    rollingFile name: "dcsFileAppender", 
       file: "logs/data-collection-system/master.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n"), 
       threshold: org.apache.log4j.Level.INFO 

    rollingFile name: "parseFileAppender", 
       file: "logs/data-collection-system/parse.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    rollingFile name: "scheduleFileAppender", 
       file: "logs/data-collection-system/schedule.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    rollingFile name: "syndicateFileAppender", 
       file: "logs/data-collection-system/syndicate.log", 
       maxFileSize: "25MB", 
       maxBackupIndex: 10, 
       layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n") 
    } 

    environments { 
    production { 
     all parseFileAppender: ["com.progauge.icp.parse"], 
     scheduleFileAppender: ["com.progauge.icp.schedule"], 
     syndicateFileAppender: ["com.progauge.icp.syndicate"], 
     dcsFileAppender: ["com.progauge.icp.parse", "com.progauge.icp.schedule", "com.progauge.icp.syndicate"] 
    } 
    } 
} 
+0

好了,变化到stdout杀死了所有登录到控制台,但其他两个建议的工作,而这些都是我一直在与有关。谢谢。 – therealmitchconnors 2013-03-19 19:03:44

+0

@therealmitchconnors而不是尝试和完全禁止默认的'stdout' appender,并在它的位置创建另一个控制台appen只是简单地说'console name:'stdout',layout:...'并使用'stdout'代替'catalinaOut' – 2013-03-19 19:59:35

+0

问题是,当我这样做的时候,我得到了两个去控制台的日志消息的实例:一个通过我配置的记录器,一个通过grails的隐式默认记录器。 – therealmitchconnors 2013-03-20 23:07:11