【问题标题】:Separation of Spring logs and User - defined logsSpring日志和用户自定义日志的分离
【发布时间】:2014-11-20 14:06:45
【问题描述】:

我正在使用 Tomcat 服务器构建一个 Spring 启动项目,其中 Spring 自动处理所有日志记录机制,所有日志都存在于“catalina.out”文件中。

现在,我有一个要求,我只需要将特定信息记录到单独的日志文件中。

我已经完成了下面的配置,但是现在包括主日志在内的所有日志都附加在同一个文件中。

我只需要将特定日志放入单独的日志文件中。

谁能建议我解决这个问题?

我的 pom.xml 看起来像这样。

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j</artifactId>
    </dependency>

我的 log4j.properties 看起来像这样。

# Root logger option
log4j.rootLogger=INFO,file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log

log4j.appender.file.File=/my_log.log
log4j.appender.file.Append=true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

java 文件如下所示。

static org.apache.log4j.Logger log4jLogger = org.apache.log4j.Logger.getLogger(MyClass.class.getName());

log4jLogger.info("My specific logs here");

【问题讨论】:

    标签: java spring maven logging log4j


    【解决方案1】:

    根据FAQ LoggingCATALINA_BASE/logs/catalina.out 包含System.outSystem.err 的输出。

    因此,需要重定向Spring的输出 到System.out。这可以使用org.apache.log4j.ConsoleAppender 来完成。

    使用这个 appender,你的配置文件可能类似:

    # Root logger option
    log4j.rootLogger=info, stdout
    
    # Direct log messages to the console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    # Direct log messages to a log file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=/my_log.log
    log4j.appender.file.Append=true
    log4j.appender.file.MaxFileSize=10MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    # Output to the file only from certain packages (e.g. your application)
    log4j.logger.com.foo=trace, file
    log4j.logger.org.company=trace, file
    

    如果您不希望您的应用程序也登录到stdout1,请使用:

    # Output to the file only from certain packages (e.g. your application)
    log4j.logger.com.foo=trace, file
    log4j.additivity.com.foo=false
    log4j.logger.org.company=trace, file
    log4j.additivity.org.company=false
    

    Short introduction to log4jApache log4j 1.2 网页上查看更多信息。


    注意事项

    1. Log4j Tutorial: Additivity – what and why?

    【讨论】:

    • Paul,您的建议已解决到某个阶段,在该阶段我可以像以前一样看到我的控制台输出。但是所有具有“信息”级别的日志仍然会附加到我不需要的特定日志文件中。
    • 你使用的是什么配置?您可以使用pastie.org 分享它并在此处输入生成的 URL。
    • log4j的实例必须是static Logger log4jLogger = Logger.getLogger(MyClass.class);MyClass的包是什么?
    • MyClass 的包是“com.foo.controller”。虽然,所有 Spring 生成的具有“INFO”级别的日志也会附加到文件中。
    • 非常感谢保罗。它现在工作。但我想知道为什么它以前没有按预期工作?
    【解决方案2】:

    您应该创建多个指向不同文件的记录器(现在您只有一个,这就是为什么所有都以一个文件结尾)。然后你可以区分带有一些前缀的记录器包。类似的东西

    log4j.logger.file1.com.spring.something=.../define the logger
    log4j.logger.file2.com.spring.somethingelse=.../second logger
    

    然后在获取记录器时使用类似

    org.apache.log4j.Logger.getLogger("file1" + MyClass.class.getName());
    

    【讨论】:

    • 谢谢纳迪尔。但是我怎样才能在 catalina.out 中维护原始的 Spring 日志?
    • 如果您想使用标准日志,请不要在类名前加上“file1”。还要记住在这种情况下使用标准记录器。
    • 谢谢纳迪尔。由于我已排除“spring-boot-starter-logging”,因此我的控制台上没有打印任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2018-02-09
    • 2016-08-18
    • 2017-12-13
    相关资源
    最近更新 更多