0

Log4j 似乎忽略了我在 Config.groovy 中的一些 Grails Logging 设置,但没有忽略其他设置。我在 tomcat 上运行 Grails 2.2.1。

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

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"]
    }
}
}

作为旁注,我必须将 stdout 的模式设置为空字符串,因为我不想要标准的控制台日志记录行为,但是将 appender 设置为 null 会破坏我的自定义控制台日志记录,这也是我不想要的。

4

1 回答 1

3

到目前为止,我发现您的配置存在三个主要问题:

  • 日志级别由每个记录器设置- 如果您想将不同级别的消息从同一记录器发送到不同的附加器,那么您需要将记录器设置为最详细的级别,然后在相关附加器上设置阈值以过滤掉消息日志级别太细了。
  • 如果您想限制文件大小并进行备份,那么您应该使用类型的附加程序rollingFile而不是file
  • 禁止stdout您应该使用的默认附加程序'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"]
    }
  }
}
于 2013-03-18T17:37:37.730 回答