tomcat - 忽略 Grails 日志记录配置

标签 tomcat grails logging log4j

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

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

appenders 部分提到的所有文件都在适当的位置创建,并接收日志消息。但是,ma​​ster.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 会破坏我的自定义控制台日志记录,这也是我不想要的.

最佳答案

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

  • 日志级别设置为每个记录器 - 如果你想从同一个记录器发送不同级别的消息到不同的附加程序,那么你需要将记录器设置为最详细的级别,然后设置一个threshold 在相关的 appender(s) 上过滤掉日志级别太细的消息。
  • 如果你想限制文件大小并进行备份,那么你应该使用 rollingFile 类型的 appender 而不是 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"]
    }
  }
}

关于tomcat - 忽略 Grails 日志记录配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482900/

相关文章:

c++ - 使用 STL 从文件中删除除最后 500,000 字节以外的所有字节

java - jquery.js 没有在 Tomcat 中加载

java - tomcat从服务启动时如何查看tomcat控制台

java - 部署后未找到 jdbc mysql 驱动程序

grails - Grails中的Log Spring安全主体

validation - Grails 3:以编程方式调用约束验证方法

flask - 如何显示在 IIS 上运行的 Flask 的错误日志?

java - tomcat-maven-插件 401 。显示不同的端口号时出错

php - 如何绕过grails中的spring security登录检查

java - 记录器应该始终是最终的和静态的吗?