Java Spring日志和用户定义日志的分离

Java Spring日志和用户定义日志的分离,java,spring,maven,logging,log4j,Java,Spring,Maven,Logging,Log4j,我正在使用Tomcat服务器构建一个Spring引导项目,在Spring中,所有日志都自动处理所有日志机制,所有日志都存在于“catalina.out”文件中 现在,我有一个要求,我只需要将特定信息记录到一个单独的日志文件中 我已经完成了以下配置,但现在所有日志(包括主日志)都附加在同一个文件中 我只需要将特定的日志保存到单独的日志文件中 有人能给我一个解决这个问题的建议吗 我的pom.xml如下所示 <dependency> <groupId>org.

我正在使用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>
# 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
static org.apache.log4j.Logger log4jLogger = org.apache.log4j.Logger.getLogger(MyClass.class.getName());

log4jLogger.info("My specific logs here");
java文件如下所示

 <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>
# 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
static org.apache.log4j.Logger log4jLogger = org.apache.log4j.Logger.getLogger(MyClass.class.getName());

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

您应该创建多个指向不同文件的记录器(现在只有一个,这就是为什么所有日志都以一个文件结尾)。然后,您可以使用包的一些前缀来区分记录器。差不多

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());
然后在获取记录器时,使用

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_BASE/logs/CATALINA.out包含
System.out
System.err
的输出

因此,您需要重定向Spring的输出 至
系统输出
。这可以通过使用

使用此附件,您的配置文件可能类似:

# 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
如果您不希望您的应用程序也登录到
stdout
1,请使用:

请参阅网页中的更多信息


注释


  • 谢谢你,纳迪尔。但是我怎样才能在catalina.out中保持原来的Spring日志呢?如果你想使用标准日志,就不要在类名前面加上“file1”。在这种情况下,还记得要有一个标准的记录器。谢谢Nadir。由于我排除了“spring boot starter logging”,所以我的控制台上没有打印任何内容。Paul,您的建议解决到了某个阶段,在这个阶段中,我可以像以前一样看到我的控制台输出。但是所有带有“info”级别的日志仍然附加在我不需要的特定日志文件中。您使用的是什么配置?您可以使用共享它,并在此处键入生成的URL。log4j的实例必须是静态记录器log4jLogger=Logger.getLogger(MyClass.class)MyClass的包是什么?MyClass的包是“com.foo.controller”。尽管如此,所有Spring生成的带有“INFO”级别的日志也被添加到文件中。非常感谢。现在开始工作了。但我想知道为什么它没有像预期的那样工作?