当前位置: 首页 > 知识库问答 >
问题:

在grails中使用文件附加符和stdout记录配置

毕衡
2023-03-14

我的grails应用程序中有一个配置错误,导致我的附加程序将输出发送到错误的地方,或者根本不发送。似乎有许多关于重复日志记录的问题,但我无法对我的情况应用任何答案。

下面是我的日志配置片段:

log4j = {

        appenders {
                // appender for usage tracking
                appender new org.apache.log4j.RollingFileAppender(
                        name:"usageAppender",
                        maxFileSize:"1000KB",
                        maxBackupIndex: 10000,
                        file: "/var/log/tomcat6/app/usage.log",
                        layout:pattern(conversionPattern: '%d{DATE} %5p %c{1}:%L - %m%n')
                )
                appender new org.apache.log4j.RollingFileAppender(
                        name:"application",
                        maxFileSize:"1000KB",
                        maxBackupIndex: 10000,
                        file:"/var/log/tomcat6/app/application.log",
                        layout:pattern(conversionPattern: '%d{DATE} %8X{memoryused} %5p %t %c{1}:%L %X{username} %X{request} - %m%n')
                )
                console name:'stdout', layout:pattern(conversionPattern: '%d{DATE} %8X{memoryused} %5p %t %c{1}:%L %X{username} %X{request} - %m%n')
        }
        root {
                // also tried error 'stdout'
                error  'application'
        }

        error  'org.codehaus.groovy.grails.web.servlet',  //  controllers
                   'org.codehaus.groovy.grails.web.pages', //  GSP
                   'org.codehaus.groovy.grails.web.sitemesh', //  layouts
                   'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
                   'org.codehaus.groovy.grails.web.mapping', // URL mapping
                   'org.codehaus.groovy.grails.commons', // core / classloading
                   'org.codehaus.groovy.grails.plugins', // plugins
                   'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
                   'org.springframework',
                   'org.hibernate'

        info 'usageAppender':'usage.gui'
}

当我的程序运行时,输出将出现在catalina.outusage.logapplication.log中。直接发送到stdout的输出(绕过log4j)出现在catalina.out中

如果我设置

 info additivity: false 'usageAppender': 'usage.gui'

那么任何文件appender都不会被记录,但是stdout仍然会进入catalina.out(绕过log4j)。

我希望“usage.gui”记录器的输出转到usage.log文件,所有其他日志记录的输出转到application.log文件,所有打印语句输出转到catalina.out。我不想要多余的日志记录。如何配置?

更新为了回答@dmahapatro的问题,应用程序中的日志记录可以使用标准的grails日志记录来完成

log.trace('some event');

或者使用如下所创建的自定义记录器:

def usageLog
public UsageService() {
    usageLog = Logger.getLogger("usage.gui")
}

并通过调用此函数使用:

protected void writeRecord(String topicId, String user, Long id, Long priorId, Long clientTime, String component, String action, String otherData) {
    String msg = "$topicId\t$user\t$id\t$priorId\t$clientTime\t$component\t$action\t$otherData"
    usageLog.info(msg)
}

共有1个答案

邵羽
2023-03-14

请尝试此设置。

  • stdout保留在根位置(如果需要,将级别更改为info/debug/all)。将可加性设置为false以限制将控制台日志添加到用法应用程序追加器。
  • 其他附加程序从继承,为应用程序用法设置可加性以限制控制台日志记录。
  • application使用grails.appapplication.log中记录所有与应用程序相关的日志。

如:

root {
         error 'stdout'
         additivity: false
     }

info usageAppender: 'usage.gui'
        additivity: false

info application: 'grails.app'
       additivity: false

注意:-
不同日志级别的日志对相同的包结构不起作用。例如:

info usageAppender: 'usage.gui'
error usageAppender1: 'usage.gui'

将只记录usage.gui错误

 类似资料:
  • 我在单独的项目中有2个文件。一个使用FileAppender将JDBC SQL记录到文件中,另一个使用ConsoleAppender将错误记录到stdout中。 下面是我对每个文件的logback.xml文件。 我已经向添加了这两个附加项,但我不确定如何处理新的中的记录器和根标记。

  • 问题内容: 我在单独的项目中有2个文件。一个使用FileAppender将JDBC SQL记录到文件中,另一个使用ConsoleAppender将错误记录到stdout中。 这是我的每个logback.xml文件。 文件记录 控制台记录 我正在合并这两个项目,我希望能够继续将信息级别的SQL记录到文件中,并将错误记录到STDOUT中。 我已将两个追加器添加到中,但是我不确定该如何处理记录器和new

  • 问题内容: 我想记录stdout和stderr来记录文件,这就是我尝试过的方法。 然后,我想将控制台输出记录在文件中。如 我能做什么? 问题答案: 你提到的不是来自flask的记录器的日志消息中,来自 的记录,你还需要你的处理程序添加到该记录器实例手段,使其工作,如: 如果你查看werkzeug如何初始化其记录器,则将看到只有在尚未设置日志记录的情况下,它才会添加默认处理程序。这意味着,如果你在w

  • 我怎么做?从主管手册上看不清楚。 我还会考虑一个不同的工具,而不是Supervisor。它的缺点之一是它是用python编写的,这确实会使docker容器变得臃肿。如果你有一个解决方案,那么有没有一个更优化的工具可以更好地使用Docker?

  • 我是一个Linux新手,我正在运行以下Linux命令: 一切都如预期的那样运作;python(2.7)print语句的所有输出都记录在名为my.out的文件中。 唯一的问题是,在运行了几天之后,My.out文件变得非常大。有没有一种方法(在Linux shell级别)可以创建一个新的“my.out”,比方说每天一次,在文件名中带有时间戳?