log4j2 xml配置调用



log4j2 的 xml 配置与程序的调用以解决 Java 程序的日志和跟踪

大型应用程序都需要日志或跟踪,apache log4j 为此提供了一个非常简单的解决方案,仅仅通过 xml 或者 json 的配置,就可以对程序进行分级日志跟踪,并且可以选择日志的输出方式,比如控制台或文件,或者同时输出。


log4j 支持多种格式的配置文件,log4j2.xml 是 log4j 的 xml 配置格式,这里暂时只介绍 xml 格式,以下是配置文件节点属性的描述。

Attribute Name Description
advertiser (Optional) The Advertiser plugin name which will be used to advertise individual FileAppender or SocketAppender configurations. The only Advertiser plugin provided is 'multicastdns".
dest Either "err", which will send output to stderr, or a file path or URL.
monitorInterval The minimum amount of time, in seconds, that must elapse before the file configuration is checked for changes.
name The name of the configuration.
packages A comma separated list of package names to search for plugins. Plugins are only loaded once per classloader so changing this value may not have any effect upon reconfiguration.
schema Identifies the location for the classloader to located the XML Schema to use to validate the configuration. Only valid when strict is set to true. If not set no schema validation will take place.
shutdownHook Specifies whether or not Log4j should automatically shutdown when the JVM shuts down. The shutdown hook is enabled by default but may be disabled by setting this attribute to "disable"
status The level of internal Log4j events that should be logged to the console. Valid values for this attribute are "trace", "debug", "info", "warn", "error" and "fatal". Log4j will log details about initialization, rollover and other internal actions to the status logger. Setting status="trace" is one of the first tools available to you if you need to troubleshoot log4j.
strict Enables the use of the strict XML format. Not supported in JSON configurations.
verbose Enables diagnostic information while loading plugins.

log4j2.xml,文件放到代码的根目录,最基本默认形式的配置,调整 status="info" 的参数可以显示不同的日志级别,可选参数为 "trace", "debug", "info", "warn", "error" and "fatal"。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="info">  
  3.     <Appenders>    <!--指定输出日志文件位置-->
  4.         <Console name="Console" target="SYSTEM_OUT">  
  5.             <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
  6.         </Console>  
  7.     </Appenders>  
  8.     <Loggers>  
  9.         <Root level="info">  
  10.             <AppenderRef ref="Console" />  
  11.         </Root>  
  12.     </Loggers>  
  13. </Configuration>  
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
		</Console>
	</Appenders>
	<Loggers>
		<Root level="info">
			<AppenderRef ref="Console" />
		</Root>
	</Loggers>
</Configuration>

或者针对类有不同级别的调试级别以及继承关系

  1. <Loggers>  
  2.     <Logger name="test1.MyObject2" level="info" additivity="false">  
  3.         <AppenderRef ref="Console" />  
  4.     </Logger>  
  5.     <Logger name="test1.RunMyObject2" level="debug" additivity="false">  
  6.         <AppenderRef ref="Console" />  
  7.     </Logger>  
  8.     <Root level="info">  
  9.         <AppenderRef ref="" />  
  10.     </Root>  
  11. </Loggers>  
	<Loggers>
		<Logger name="test1.MyObject2" level="info" additivity="false">
			<AppenderRef ref="Console" />
		</Logger>
		<Logger name="test1.RunMyObject2" level="debug" additivity="false">
			<AppenderRef ref="Console" />
		</Logger>
		<Root level="info">
			<AppenderRef ref="" />
		</Root>
	</Loggers>

或者僅僅在日志文件中輸出日志

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="error">  
  3.     <Appenders>  
  4.         <Console name="Console" target="SYSTEM_OUT">  
  5.             <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />  
  6.             <!-- Flow tracing is most useful with a pattern that shows location. Below pattern outputs class, line number and method name. -->  
  7.             <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />  
  8.         </Console>  
  9.         <File name="log" fileName="target/test.log" append="false">  
  10.             <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />  
  11.         </File>  
  12.     </Appenders>  
  13.     <Loggers>  
  14.         <Root level="trace">  
  15.             <AppenderRef ref="log" />  
  16.         </Root>  
  17.     </Loggers>  
  18. </Configuration>  
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
			<!-- Flow tracing is most useful with a pattern that shows location. Below pattern outputs class, line number and method name. -->
			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
		</Console>
		<File name="log" fileName="target/test.log" append="false">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
		</File>
	</Appenders>
	<Loggers>
		<Root level="trace">
			<AppenderRef ref="log" />
		</Root>
	</Loggers>
</Configuration>

更加实用的一个配置,每天一个日志文件,每天更新,超过设定字节数后自动更名

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="debug">  
  3.     <Appenders>  
  4.         <!-- 輸出到監視器 -->  
  5.         <Console name="Console" target="SYSTEM_OUT">  
  6.             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
  7.         </Console>  
  8.         <!-- 按天备份 -->  
  9.         <RollingFile name="File" fileName="logs/new.log" filePattern="logs/log_%d{yyyy-MM-dd}_%i.log">  
  10.             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
  11.             <Policies>  
  12.                 <!-- 更新时间 -->  
  13.                 <TimeBasedTriggeringPolicy modulate="true" interval="24" />  
  14.                 <SizeBasedTriggeringPolicy size="128KB" />  
  15.             </Policies>  
  16.             <!-- 最多8个日志 -->  
  17.             <DefaultRolloverStrategy max="8" />  
  18.         </RollingFile>  
  19.     </Appenders>  
  20.     <Loggers>  
  21.         <Logger name="test1.RunMyObject2" level="debug">  
  22.             <!-- 输出到文件 -->  
  23.             <AppenderRef ref="File" />  
  24.         </Logger>  
  25.         <Logger name="test1.MyObject2" level="debug">  
  26.             <!-- 输出至显示器 -->  
  27.             <AppenderRef ref="Console" />  
  28.         </Logger>  
  29.         <Root level="trace">  
  30.             <!-- 输出至显示器 -->  
  31.             <AppenderRef ref="Console" />  
  32.         </Root>  
  33.     </Loggers>  
  34. </Configuration>  
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
	<Appenders>
		<!-- 輸出到監視器 -->
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
		</Console>
		<!-- 按天备份 -->
		<RollingFile name="File" fileName="logs/new.log" filePattern="logs/log_%d{yyyy-MM-dd}_%i.log">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
			<Policies>
				<!-- 更新时间 -->
				<TimeBasedTriggeringPolicy modulate="true" interval="24" />
				<SizeBasedTriggeringPolicy size="128KB" />
			</Policies>
			<!-- 最多8个日志 -->
			<DefaultRolloverStrategy max="8" />
		</RollingFile>
	</Appenders>
	<Loggers>
		<Logger name="test1.RunMyObject2" level="debug">
			<!-- 输出到文件 -->
			<AppenderRef ref="File" />
		</Logger>
		<Logger name="test1.MyObject2" level="debug">
			<!-- 输出至显示器 -->
			<AppenderRef ref="Console" />
		</Logger>
		<Root level="trace">
			<!-- 输出至显示器 -->
			<AppenderRef ref="Console" />
		</Root>
	</Loggers>
</Configuration>



测试代码 MyObject2

  1. package test1;  
  2.   
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5.   
  6. public class MyObject2  
  7. {  
  8.   private static final Logger logger = LogManager.getLogger(MyObject2.class);  
  9.   
  10.   public MyObject2()  
  11.   {  
  12.     logger.entry();  
  13.   
  14.     logger.info("创建  MyObject2 前, info");  
  15.     logger.debug("创建  MyObject2 前, debug");  
  16.   
  17.     int a = 1;  
  18.     int b = 2;  
  19.     int c = 0;  
  20.   
  21.     try  
  22.     {  
  23.       b = 0;  
  24.       logger.error("發生赋值錯誤,乘數不能爲零");  
  25.   
  26.       c = a / b;  
  27.     }  
  28.     catch (Exception x)  
  29.     {  
  30.       logger.fatal("發生除零异常");  
  31.     }  
  32.   
  33.     logger.info("释放  MyObject2 前, info");  
  34.     logger.exit(false);  
  35.     logger.debug("释放  MyObject2 前, debug");  
  36.   }  
  37. }  
package test1;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyObject2
{
  private static final Logger logger = LogManager.getLogger(MyObject2.class);

  public MyObject2()
  {
    logger.entry();

    logger.info("创建  MyObject2 前, info");
    logger.debug("创建  MyObject2 前, debug");

    int a = 1;
    int b = 2;
    int c = 0;

    try
    {
      b = 0;
      logger.error("發生赋值錯誤,乘數不能爲零");

      c = a / b;
    }
    catch (Exception x)
    {
      logger.fatal("發生除零异常");
    }

    logger.info("释放  MyObject2 前, info");
    logger.exit(false);
    logger.debug("释放  MyObject2 前, debug");
  }
}


测试代码调用

  1. package test1;  
  2.   
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5.   
  6. import log4jtest01.Bar;  
  7. import log4jtest01.Log4jApp;  
  8.   
  9. public class RunMyObject2  
  10. {  
  11.   
  12.   private static final Logger logger = LogManager.getLogger(RunMyObject2.class);  
  13.   
  14.   public static void main(final String... args)  
  15.   {  
  16.     logger.trace("Entering application.");  
  17.   
  18.     logger.info("創建 MyObject2");  
  19.   
  20.     MyObject2 myObject2 = new MyObject2();  
  21.   
  22.     logger.warn("釋放 MyObject2");  
  23.   
  24.     logger.trace("Exiting application.");  
  25.   }  
  26.   
  27. }  
package test1;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import log4jtest01.Bar;
import log4jtest01.Log4jApp;

public class RunMyObject2
{

  private static final Logger logger = LogManager.getLogger(RunMyObject2.class);

  public static void main(final String... args)
  {
    logger.trace("Entering application.");

    logger.info("創建 MyObject2");

    MyObject2 myObject2 = new MyObject2();

    logger.warn("釋放 MyObject2");

    logger.trace("Exiting application.");
  }

}

运行时输出的信息,调试级别为 <Root level="info">

  1. 13:35:13.584 [main] INFO  test1.RunMyObject2 - 創建 MyObject2  
  2. 13:35:13.585 [main] INFO  test1.MyObject2 - 创建  MyObject2 前, info  
  3. 13:35:13.585 [main] ERROR test1.MyObject2 - 發生赋值錯誤,乘數不能爲零  
  4. 13:35:13.585 [main] FATAL test1.MyObject2 - 發生除零异常  
  5. 13:35:13.585 [main] INFO  test1.MyObject2 - 释放  MyObject2 前, info  
  6. 13:35:13.585 [main] WARN  test1.RunMyObject2 - 釋放 MyObject2  
13:35:13.584 [main] INFO  test1.RunMyObject2 - 創建 MyObject2
13:35:13.585 [main] INFO  test1.MyObject2 - 创建  MyObject2 前, info
13:35:13.585 [main] ERROR test1.MyObject2 - 發生赋值錯誤,乘數不能爲零
13:35:13.585 [main] FATAL test1.MyObject2 - 發生除零异常
13:35:13.585 [main] INFO  test1.MyObject2 - 释放  MyObject2 前, info
13:35:13.585 [main] WARN  test1.RunMyObject2 - 釋放 MyObject2

当调试基本修改为 debug 时,<Root level="debug"> 将得到更详细的信息

  1. 13:37:09.067 [main] INFO  test1.RunMyObject2 - 創建 MyObject2  
  2. 13:37:09.068 [main] INFO  test1.MyObject2 - 创建  MyObject2 前, info  
  3. 13:37:09.068 [main] DEBUG test1.MyObject2 - 创建  MyObject2 前, debug  
  4. 13:37:09.068 [main] ERROR test1.MyObject2 - 發生赋值錯誤,乘數不能爲零  
  5. 13:37:09.068 [main] FATAL test1.MyObject2 - 發生除零异常  
  6. 13:37:09.068 [main] INFO  test1.MyObject2 - 释放  MyObject2 前, info  
  7. 13:37:09.068 [main] DEBUG test1.MyObject2 - 释放  MyObject2 前, debug  
  8. 13:37:09.068 [main] WARN  test1.RunMyObject2 - 釋放 MyObject2  
13:37:09.067 [main] INFO  test1.RunMyObject2 - 創建 MyObject2
13:37:09.068 [main] INFO  test1.MyObject2 - 创建  MyObject2 前, info
13:37:09.068 [main] DEBUG test1.MyObject2 - 创建  MyObject2 前, debug
13:37:09.068 [main] ERROR test1.MyObject2 - 發生赋值錯誤,乘數不能爲零
13:37:09.068 [main] FATAL test1.MyObject2 - 發生除零异常
13:37:09.068 [main] INFO  test1.MyObject2 - 释放  MyObject2 前, info
13:37:09.068 [main] DEBUG test1.MyObject2 - 释放  MyObject2 前, debug
13:37:09.068 [main] WARN  test1.RunMyObject2 - 釋放 MyObject2


Q群讨论:236201801

本文地址:http://blog.csdn.NET/joyous/article/details/50771752

参考资料来自:https://logging.apache.org/log4j/2.x/manual/index.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
在 Java 中,我们可以使用 log4j 库来进行日志记录。log4j 需要一个配置文件来确定日志输出的详细信息,这个配置文件通常是一个 XML 文件。 下面是一个简单的 log4j.xml 配置文件: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- 输出到控制台 --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> </layout> </appender> <!-- 输出到文件 --> <appender name="file" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="logs/myapp.log" /> <param name="MaxFileSize" value="10MB" /> <param name="MaxBackupIndex" value="10" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> </layout> </appender> <!-- 设置日志级别 --> <root> <priority value="debug" /> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> </log4j:configuration> ``` 在 Java 代码中,我们可以通过如下方式来加载这个配置文件: ```java import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class MyApp { private static final Logger logger = Logger.getLogger(MyApp.class); public static void main(String[] args) { // 加载 log4j.xml 配置文件 DOMConfigurator.configure("log4j.xml"); // 记录日志 logger.debug("Debug message"); logger.info("Info message"); logger.warn("Warn message"); logger.error("Error message"); logger.fatal("Fatal message"); } } ``` 上面的代码中,我们使用 `DOMConfigurator.configure("log4j.xml");` 方法来加载 log4j.xml 配置文件。然后,我们可以通过 `Logger` 类来打印日志。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值