已加载log4j2.xml但未应用[JVM参数]

时间:2015-05-06 12:29:31

标签: java xml spring spring-boot spring-batch

我正在尝试使用弹簧批,弹簧mvc和弹簧靴创建批次。我正在使用log4j2进行日志记录。

我的目标是加载外部log4j2.xml配置文件,这要归功于像

这样的JVM参数
-Dlog4j.configurationFile=file://C:\{path}\Workspace\demo-indexeur\config\log4j2.xml

Spring boot检测我的文件(我在控制台中没有错误)并加载它但是不应用我放在文件中的配置。

以下是我的配置文件加载的调试:

2015-05-06 15:36:53,279 DEBUG Starting configuration XmlConfiguration[location=C:\{path}\Workspace\demo-indexeur\config\log4j2.xml]
2015-05-06 15:36:53,279 DEBUG PluginManager 'Core' found 69 plugins
2015-05-06 15:36:53,279 DEBUG PluginManager 'Level' found 0 plugins
2015-05-06 15:36:53,279 DEBUG PluginManager 'Lookup' found 10 plugins
2015-05-06 15:36:53,279 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout]. Searching for builder factory method...
2015-05-06 15:36:53,279 DEBUG Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.layout.PatternLayout$Builder org.apache.logging.log4j.core.layout.PatternLayout.newBuilder().
2015-05-06 15:36:53,289 DEBUG TypeConverterRegistry initializing.
2015-05-06 15:36:53,289 DEBUG PluginManager 'TypeConverter' found 21 plugins
2015-05-06 15:36:53,299 DEBUG Calling build() on class class org.apache.logging.log4j.core.layout.PatternLayout$Builder for element PatternLayout with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", Configuration(C:\{path}\Workspace\demo-indexeur\config\log4j2.xml), null, charset="null", alwaysWriteExceptions="null", noConsoleNoAnsi="null", header="null", footer="null")
2015-05-06 15:36:53,299 DEBUG PluginManager 'Converter' found 33 plugins
2015-05-06 15:36:53,299 DEBUG Built Plugin[name=layout] OK from builder factory method.
2015-05-06 15:36:53,299 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender]. Searching for builder factory method...
2015-05-06 15:36:53,299 INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.
2015-05-06 15:36:53,299 DEBUG PluginManager 'Converter' found 33 plugins
2015-05-06 15:36:53,299 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2015-05-06 15:36:53,299 DEBUG Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.appender.ConsoleAppender$Builder org.apache.logging.log4j.core.appender.ConsoleAppender.newBuilder().
2015-05-06 15:36:53,299 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
2015-05-06 15:36:53,299 DEBUG Encountered type [org.apache.logging.log4j.core.layout.PatternLayout] which can only be checked for null.
2015-05-06 15:36:53,309 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
2015-05-06 15:36:53,309 DEBUG Encountered type [org.apache.logging.log4j.core.appender.ConsoleAppender$Target] which can only be checked for null.
2015-05-06 15:36:53,309 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
2015-05-06 15:36:53,309 DEBUG Calling build() on class class org.apache.logging.log4j.core.appender.ConsoleAppender$Builder for element Console with params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), null, target="SYSTEM_OUT", name="Console", follow="null", ignoreExceptions="null")
2015-05-06 15:36:53,309 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2015-05-06 15:36:53,309 DEBUG Built Plugin[name=appender] OK from builder factory method.
2015-05-06 15:36:53,309 DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin]. Searching for builder factory method...
2015-05-06 15:36:53,309 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.AppendersPlugin. Going to try finding a factory method instead.
2015-05-06 15:36:53,309 DEBUG Still building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin]. Searching for factory method...
2015-05-06 15:36:53,309 DEBUG Found factory method [createAppenders]: public static java.util.concurrent.ConcurrentMap org.apache.logging.log4j.core.config.AppendersPlugin.createAppenders(org.apache.logging.log4j.core.Appender[]).
2015-05-06 15:36:53,309 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.AppendersPlugin for element Appenders with params(={Console})
2015-05-06 15:36:53,309 DEBUG Built Plugin[name=appenders] OK from factory method.
2015-05-06 15:36:53,309 DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef]. Searching for builder factory method...
2015-05-06 15:36:53,309 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.AppenderRef. Going to try finding a factory method instead.
2015-05-06 15:36:53,309 DEBUG Still building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef]. Searching for factory method...
2015-05-06 15:36:53,309 DEBUG Found factory method [createAppenderRef]: public static org.apache.logging.log4j.core.config.AppenderRef org.apache.logging.log4j.core.config.AppenderRef.createAppenderRef(java.lang.String,org.apache.logging.log4j.Level,org.apache.logging.log4j.core.Filter).
2015-05-06 15:36:53,309 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(ref="Console", level="null", null)
2015-05-06 15:36:53,309 DEBUG Built Plugin[name=AppenderRef] OK from factory method.
2015-05-06 15:36:53,309 DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for builder factory method...
2015-05-06 15:36:53,309 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger. Going to try finding a factory method instead.
2015-05-06 15:36:53,309 DEBUG Still building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for factory method...
2015-05-06 15:36:53,309 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig$RootLogger.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
2015-05-06 15:36:53,319 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root with params(additivity="null", level="ERROR", includeLocation="null", ={Console}, ={}, Configuration(C:\{path}\Workspace\demo-indexeur\config\log4j2.xml), null)
2015-05-06 15:36:53,319 DEBUG Built Plugin[name=root] OK from factory method.
2015-05-06 15:36:53,319 DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for builder factory method...
2015-05-06 15:36:53,319 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggersPlugin. Going to try finding a factory method instead.
2015-05-06 15:36:53,319 DEBUG Still building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for factory method...
2015-05-06 15:36:53,319 DEBUG Found factory method [createLoggers]: public static org.apache.logging.log4j.core.config.Loggers org.apache.logging.log4j.core.config.LoggersPlugin.createLoggers(org.apache.logging.log4j.core.config.LoggerConfig[]).
2015-05-06 15:36:53,319 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.LoggersPlugin for element Loggers with params(={root})
2015-05-06 15:36:53,319 DEBUG Built Plugin[name=loggers] OK from factory method.
2015-05-06 15:36:53,319 DEBUG Started configuration XmlConfiguration[location=C:\{path}\Workspace\demo-indexeur\config\log4j2.xml] OK.
2015-05-06 15:36:53,319 TRACE Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@5b87edb3...
2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 0 AsyncLoggerConfigs.
2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 0 AsyncAppenders.
2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 1 Appenders.
2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 0 Loggers.
2015-05-06 15:36:53,319 DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@5bc79274 OK
2015-05-06 15:36:53,319 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44
2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=StatusLogger
2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=ContextSelector
2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=Loggers,name=
2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=Appenders,name=Console
2015-05-06 15:36:53,329 DEBUG Reconfiguration complete for context[name=sun.misc.Launcher$AppClassLoader@c387f44] at null (org.apache.logging.log4j.core.LoggerContext@72b6cbeb) with optional ClassLoader: null
2015-05-06 15:36:53,329 DEBUG Shutdown hook enabled. Registering a new one.
2015-05-06 15:36:53,329 DEBUG LoggerContext[name=sun.misc.Launcher$AppClassLoader@c387f44, org.apache.logging.log4j.core.LoggerContext@7fac633a] started OK.
2015-05-06 15:36:53,489 DEBUG Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@6973bf95
2015-05-06 15:36:53,489 INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.

当我在“src / main / resources”中移动文件时,它可以很好地工作,但是当我尝试将文件外部化时却没有。

这是我的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

以下是我的依赖项:

<!--    Spring Batch -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
        <exclusions>
<!--            Suppression de SLF4J -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

<!--    Spring web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
<!--            Suppression de SLF4J -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

<!--    Utilisation de LOG4J2 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

当我外化文件时,有人能告诉我为什么它不起作用? 谢谢你的帮助。

5 个答案:

答案 0 :(得分:2)

  

Log4j能够在初始化期间自动配置自身。   Log4j将检查&#34; log4j.configurationFile&#34;系统属性,如果设置,将尝试加载配置。

这就是为什么我的文件被检测到并加载而没有错误但春季启动没有使用的原因。

我忘记的是告诉spring boot在哪里找到日志配置文件,为此,我必须添加spring boot的application.properties:

logging.config= # location of logging config file

之后,一切运作良好。

答案 1 :(得分:1)

我认为我们只需要在application.properties中添加属性 例如,我们想将log4j2.xml放在名为config的jar的子目录中。因此,在application.properties中我们有:

logging.config=classpath:config/log4j2.xml

答案 2 :(得分:0)

尝试以下格式之一:

-Dlog4j.configurationFile=/Workspace/demo-indexeur/config/log4j2.xml
-Dlog4j.configurationFile=file://c:/Workspace/demo-indexeur/config/log4j2.xml
-Dlog4j.configurationFile=file:///c:/Workspace/demo-indexeur/config/log4j2.xml

如果运行jar文件,则必须将此参数放在-jar application.jar之前。

答案 3 :(得分:0)

如果将log4j2.xml文件放在Maven项目结构的默认资源文件夹中,

logging.config = classpath:log4j2.xml 将起作用。

在Spring BOOT 1.3.5上测试

答案 4 :(得分:0)

tomcat JVM参数将覆盖logging.config属性。尝试通过静态块实现此目的。

static {
   // ...get the log4j2.xml uri
   org.apache.logging.log4j.LogManager.getContext(null, false, uri);
}