Log4j2 日志记录到文件和控制台的非常简单的应用,其中不需要控制台日志记录

问题描述 投票:0回答:1

我非常简单的 Java 应用程序记录到文件附加器和控制台附加器,其中我只定义了一个文件附加器。

这是我的

log4j2.properties
文件:

appender.file.type = File
appender.file.name = fileLogger
appender.file.fileName=ExampleClass.log
appender.file.layout.type = PatternLayout
appender.file.layout.Pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

logger.ExampleClass.name = ExampleClass
logger.ExampleClass.level = trace
logger.ExampleClass.appenderRef.file.ref = fileLogger

这是尝试记录日志的Java源代码:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ExampleClass {
  private static Log log = LogFactory.getLog(ExampleClass.class);

  public static void main(String[] args) {
      log.info("info in the main method");
      log.error("error in the main method");
  }
}

以下是传递给 JVM 的 VM 参数:

-Dlog4j.configurationFile=log4j2.properties -Dlog4j2.debug

以下是 CLASSPATH 上的 JAR:

commons-logging-1.2.jar
log4j-api-2.17.2.jar
log4j-core-2.17.2.jar
log4j-jcl-2.17.2.jar

这是运行 Java 代码时的控制台日志(来自 Eclipse):

DEBUG StatusLogger Using ShutdownCallbackRegistry class org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry
DEBUG StatusLogger Took 0.271365 seconds to load 222 plugins from jdk.internal.loader.ClassLoaders$AppClassLoader@73d16e93
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger AsyncLogger.ThreadNameStrategy=UNCACHED (user specified null, default is UNCACHED)
TRACE StatusLogger Using default SystemClock for timestamps.
DEBUG StatusLogger org.apache.logging.log4j.core.util.SystemClock supports precise timestamps.
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger PluginManager 'Converter' found 45 plugins
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false.false-1
DEBUG StatusLogger Starting LoggerContext[name=73d16e93, org.apache.logging.log4j.core.LoggerContext@4d826d77]...
DEBUG StatusLogger Reconfiguration started for context[name=73d16e93] at URI null (org.apache.logging.log4j.core.LoggerContext@4d826d77) with optional ClassLoader: null
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger PluginManager 'ConfigurationFactory' found 4 plugins
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger Missing dependencies for Yaml support, ConfigurationFactory org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory is inactive
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger Missing dependencies for Json support, ConfigurationFactory org.apache.logging.log4j.core.config.json.JsonConfigurationFactory is inactive
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@75f9eccc
TRACE StatusLogger Trying to find [log4j2.properties] using context class loader jdk.internal.loader.ClassLoaders$AppClassLoader@73d16e93.
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger Apache Log4j Core 2.17.2 initializing configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@2cbb3d47
DEBUG StatusLogger PluginManager 'Core' found 127 plugins
DEBUG StatusLogger PluginManager 'Level' found 0 plugins
DEBUG StatusLogger PluginManager 'Lookup' found 16 plugins
DEBUG StatusLogger Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
TRACE StatusLogger TypeConverterRegistry initializing.
DEBUG StatusLogger PluginManager 'TypeConverter' found 26 plugins
DEBUG StatusLogger createAppenderRef(ref="fileLogger", level="null", Filter=null)
DEBUG StatusLogger Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig].
DEBUG StatusLogger LoggerConfig$Builder(additivity="null", level="TRACE", levelAndRefs="null", name="ExampleClass", includeLocation="null", ={fileLogger}, ={}, Configuration, Filter=null)
DEBUG StatusLogger Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
DEBUG StatusLogger createLoggers(={ExampleClass})
DEBUG StatusLogger Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
DEBUG StatusLogger PatternLayout$Builder(pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n", PatternSelector=null, Configuration, Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
DEBUG StatusLogger PluginManager 'Converter' found 45 plugins
DEBUG StatusLogger Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender].
DEBUG StatusLogger FileAppender$Builder(fileName="ExampleClass.log", append="null", locking="null", advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n), name="fileLogger", Configuration, Filter=null, ={})
DEBUG StatusLogger Starting FileManager ExampleClass.log
DEBUG StatusLogger Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
DEBUG StatusLogger createAppenders(={fileLogger})
WARN StatusLogger No Root logger was configured, creating default ERROR-level Root logger with Console appender
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false.false-2
DEBUG StatusLogger Configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@2cbb3d47 initialized
DEBUG StatusLogger Starting configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@2cbb3d47
DEBUG StatusLogger Started configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@2cbb3d47 OK.
TRACE StatusLogger Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@10a035a0...
TRACE StatusLogger DefaultConfiguration notified 1 ReliabilityStrategies that config will be stopped.
TRACE StatusLogger DefaultConfiguration stopping root LoggerConfig.
TRACE StatusLogger DefaultConfiguration notifying ReliabilityStrategies that appenders will be stopped.
TRACE StatusLogger DefaultConfiguration stopping remaining Appenders.
DEBUG StatusLogger Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
DEBUG StatusLogger OutputStream closed
DEBUG StatusLogger Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
DEBUG StatusLogger Appender DefaultConsole-1 stopped with status true
TRACE StatusLogger DefaultConfiguration stopped 1 remaining Appenders.
TRACE StatusLogger DefaultConfiguration cleaning Appenders from 1 LoggerConfigs.
DEBUG StatusLogger Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@10a035a0 OK
TRACE StatusLogger Reregistering MBeans after reconfigure. Selector=org.apache.logging.log4j.core.selector.ClassLoaderContextSelector@53aad5d5
TRACE StatusLogger Reregistering context (1/1): '73d16e93' org.apache.logging.log4j.core.LoggerContext@4d826d77
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=StatusLogger'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=ContextSelector'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=Loggers,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=Appenders,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=AsyncAppenders,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=AsyncLoggerRingBuffer'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=Loggers,name=*,subtype=RingBuffer'
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=73d16e93
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=73d16e93,component=StatusLogger
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=73d16e93,component=ContextSelector
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=73d16e93,component=Loggers,name=ExampleClass
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=73d16e93,component=Appenders,name=DefaultConsole-2
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=73d16e93,component=Appenders,name=fileLogger
TRACE StatusLogger Using default SystemClock for timestamps.
DEBUG StatusLogger org.apache.logging.log4j.core.util.SystemClock supports precise timestamps.
TRACE StatusLogger Using DummyNanoClock for nanosecond timestamps.
DEBUG StatusLogger Reconfiguration complete for context[name=73d16e93] at URI C:\Users\mbmas_000\workspace\TestCommonsLogging2\bin\log4j2.properties (org.apache.logging.log4j.core.LoggerContext@4d826d77) with optional ClassLoader: null
DEBUG StatusLogger Shutdown hook enabled. Registering a new one.
DEBUG StatusLogger LoggerContext[name=73d16e93, org.apache.logging.log4j.core.LoggerContext@4d826d77] started OK.
11:22:55.347 [main] INFO  ExampleClass - info in the main method
11:22:55.352 [main] ERROR ExampleClass - error in the main method
DEBUG StatusLogger Stopping LoggerContext[name=73d16e93, org.apache.logging.log4j.core.LoggerContext@4d826d77]
DEBUG StatusLogger Stopping LoggerContext[name=73d16e93, org.apache.logging.log4j.core.LoggerContext@4d826d77]...
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=73d16e93]
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=73d16e93,component=StatusLogger]
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=73d16e93,component=ContextSelector]
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=73d16e93,component=Loggers,name=ExampleClass]
TRACE StatusLogger Unregistering 2 MBeans: [org.apache.logging.log4j2:type=73d16e93,component=Appenders,name=fileLogger, org.apache.logging.log4j2:type=73d16e93,component=Appenders,name=DefaultConsole-2]
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=AsyncAppenders,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=AsyncLoggerRingBuffer'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=73d16e93,component=Loggers,name=*,subtype=RingBuffer'
TRACE StatusLogger Stopping org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@2cbb3d47...
TRACE StatusLogger PropertiesConfiguration notified 2 ReliabilityStrategies that config will be stopped.
TRACE StatusLogger PropertiesConfiguration stopping 1 LoggerConfigs.
TRACE StatusLogger PropertiesConfiguration stopping root LoggerConfig.
TRACE StatusLogger PropertiesConfiguration notifying ReliabilityStrategies that appenders will be stopped.
TRACE StatusLogger PropertiesConfiguration stopping remaining Appenders.
DEBUG StatusLogger Shutting down FileManager ExampleClass.log
DEBUG StatusLogger OutputStream closed
DEBUG StatusLogger Shut down FileManager ExampleClass.log, all resources released: true
DEBUG StatusLogger Appender fileLogger stopped with status true
DEBUG StatusLogger Shutting down OutputStreamManager SYSTEM_OUT.false.false-2
DEBUG StatusLogger OutputStream closed
DEBUG StatusLogger Shut down OutputStreamManager SYSTEM_OUT.false.false-2, all resources released: true
DEBUG StatusLogger Appender DefaultConsole-2 stopped with status true
TRACE StatusLogger PropertiesConfiguration stopped 2 remaining Appenders.
TRACE StatusLogger PropertiesConfiguration cleaning Appenders from 2 LoggerConfigs.
DEBUG StatusLogger Stopped org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@2cbb3d47 OK
DEBUG StatusLogger Stopped LoggerContext[name=73d16e93, org.apache.logging.log4j.core.LoggerContext@4d826d77] with status true

注意以下事项:

  1. 文件ExampleClass.log已创建并且格式正确。

  2. 创建的控制台日志条目(您可以在上面的输出中看到)是:

    11:22:55.347 [main] INFO  ExampleClass - info in the main method

    11:22:55.352 [main] ERROR ExampleClass - error in the main method

    不符合

    log4j2.properties
    中指定的格式。

  3. 日志同时到达控制台和文件。如何仅记录到文件记录器?

java log4j2 apache-commons-logging
1个回答
0
投票

从这条警告信息中可以看出:

WARN StatusLogger No Root logger was configured, creating default ERROR-level Root logger with Console appender

您始终需要配置一个根记录器,否则我们会为您配置一个。

为此,您只需设置其级别即可:

roogLogger.level = OFF
© www.soinside.com 2019 - 2024. All rights reserved.