log4j2.xml配置和logback.xml配置说明,例子等

本文详细介绍了Log4j2与Logback的日志配置文件实例,包括日志级别、滚动策略、输出格式等关键配置项,并展示了如何通过配置实现精细化的日志管理。
log4j2功能较为强大,运行效率也较高,下面就是这个配置文件:
<Configuration status="WARN" monitorInterval="30">
  <Properties>
    <Property name="instance">$${sys:instance}</Property>
    <Property name="log.dir">$${sys:logdir}</Property>
  </Properties>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout
          pattern="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n"/>
    </Console>
<RollingRandomAccessFile name="infoLog" fileName="${log.dir}/${instance}-info.log"
        filePattern="${log.dir}/%d{yyyy-MM}/${instance}-info-%d{yyyy-MM-dd}-%i.log.gz"
        append="true">
      <PatternLayout
          pattern="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n"/>
      <Filters>
        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
      </Filters>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="20 MB"/>
      </Policies>
    </RollingRandomAccessFile>
   <RollingRandomAccessFile name="warnLog" fileName="${log.dir}/${instance}-warn.log"
        filePattern="${log.dir}/%d{yyyy-MM}/${instance}-warn-%d{yyyy-MM-dd}-%i.log.gz"
        append="true">
      <Filters>
        <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
        <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout
          pattern="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n"/>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="20 MB"/>
      </Policies>
    </RollingRandomAccessFile>
    <RollingRandomAccessFile name="errorLog" fileName="${log.dir}/${instance}-error.log"
        filePattern="${log.dir}/%d{yyyy-MM}/${instance}-error-%d{yyyy-MM-dd}-%i.log.gz"
        append="true">
      <Filters>
        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout
          pattern="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n"/>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="20 MB"/>
      </Policies>
    </RollingRandomAccessFile>
  </Appenders>
  <Loggers>
    <!-- 第三方的软件日志级别 -->
    <logger name="org.springframework" level="info" additivity="true">
      <AppenderRef ref="warnLog"/>
      <AppenderRef ref="errorLog"/>
    </logger>
    <logger name="java.sql.PreparedStatement" level="debug" additivity="true">
      <AppenderRef ref="Console"/>
    </logger>
    <!-- root logger -->
    <Root level="info" includeLocation="true">
      <AppenderRef ref="infoLog"/>
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

logback.xml 样子为:

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <property name="LOG_HOME" value="/data/logs/druid/tranquility/" />
  <!-- 日志记录器,日期滚动记录 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${LOG_HOME}/debug.log</file>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,
		 可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。      而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_HOME}/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
            命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 <root level="warn">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

在 etc/hadoop/hadoop-env.sh 改变 HADOOP_LOG_DIR 值就可以指定hadoop的日志输出目录。缺省是${HADOOP_HOME}/logs。

在 mapred-env.sh 中指定 HADOOP_MAPRED_LOG_DIR可以改变mapreduce 日志的存放位置。

在 yarn-env.sh 中指定 YARN_LOG_DIR可以改变mapreduce 日志的存放位置


<think>首先,用户的问题是:“Java日志系统使用classpath:log4j2.xml配置初始化失败,出现java.lang.IllegalStateException: Logback配置错误的解决办法”。用户提到了引用内容,但明确指出这些引用仅供参考,不是真正的需求。我应该基于用户的问题提供解决方案。 关键点: - 错误:`java.lang.IllegalStateException: Logback configuration error detected` - 配置:使用`classpath:log4j2.xml`来配置Log4j2。 - 问题:初始化失败,出现Logback配置错误。 用户指定配置Log4j2log4j2.xml),但错误提到了Logback。这表明可能有日志系统的冲突,比如Spring或其他依赖自动加载了Logback。 从引用中提取有用信息: - 引用[1]:提到Spring默认会找Logback,但支持Log4j配置log4j.xml放在source目录下即可,Spring会自动加载。但用户使用的是log4j2.xml,不是log4j.xml。 - 引用[2]:提到了加载ApplicationContext的错误,可能配置路径相关。 - 引用[3]:版本冲突问题,需要调整Spring版本以避免错误。 用户的问题是日志系统初始化失败,具体是Log4j2配置Logback干扰。 我的回答需要: - 使用中文回答。 - 结构清晰,步骤解决。 - 遵循系统级指令:内联数学用$...$,独立公式用$$...$$(但这里可能不涉及数学),LaTeX语法正确,生成相关问题。 - 末尾添加引用标识。 解决方案步骤: 1. **理解问题**:错误表明Logback在尝试配置,但用户想用Log4j2。这可能是因为依赖中有Logback的jar包或Spring自动配置导致的。 2. **排除Logback依赖**:确保项目中没有Logback的依赖。如果使用Maven或Gradle,移除logback-classiclogback-core。 3. **添加Log4j2依赖**:确保有log4j-corelog4j-api。 4. **配置排除**:在Spring Boot应用中,可能需要排除Logback的自动配置。使用`@SpringBootApplication(exclude = {LogbackAutoConfiguration.class})`。 5. **指定配置文件**:确认log4j2.xml在classpath根目录下。 6. **检查版本兼容性**:如引用[3]提到,版本冲突可能导致问题。确保Spring或Dubbo版本Log4j2兼容。 7. **其他可能原因**:检查是否有多个日志框架依赖导致冲突。 生成相关问题: 根据用户问题,生成相关的问题列表。 回答结构: - 先解释问题原因。 - 给出逐步解决方案。 - 生成相关问题。 最终回答: - 开头简述问题。 - 分步解决方案。 - 结束相关问题。 </think>### Java日志系统初始化失败:Logback配置错误解决方案 您的查询涉及在使用`classpath:log4j2.xml`配置Log4j2时,出现`java.lang.IllegalStateException: Logback configuration error detected`的错误。这个问题的根本原因是日志框架冲突:Spring Boot或相关依赖默认优先加载Logback,导致Log4j2配置被覆盖或干扰。以下是基于最佳实践常见问题的逐步解决方案(参考了您提供的引用信息[^1][^2][^3],并结合日志框架的官方文档)。 #### 问题原因分析 - **错误本质**:Spring Boot在启动时会自动检测日志框架。如果项目中存在Logback的jar包(如`logback-classic`),Spring会优先加载Logback配置文件(即使您指定了`log4j2.xml`),从而引发冲突错误[^1]。 - **常见触发场景**: - 依赖中包含Logback库(例如通过Spring Boot Starter引入)。 - 配置文件位置错误或命名不规范(如缺少`log4j2.xml`)。 - 版本不兼容(如SpringLog4j2版本冲突)[^3]。 - **关键点**:确保项目完全排除Logback依赖,并显式启用Log4j2。 #### 解决方案步骤 按照以下步骤逐一排查修复问题。每个步骤都基于实际项目经验,确保可靠性可重现性。 1. **移除Logback依赖** 确保项目中完全移除Logback的jar包。 - **Maven项目**:在`pom.xml`中添加排除规则: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除Logback依赖 --> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> </dependencies> ``` - **Gradle项目**:在`build.gradle`中添加: ```gradle configurations { all*.exclude group: 'ch.qos.logback', module: 'logback-classic' } ``` 验证:检查项目依赖树(Maven用`mvn dependency:tree`,Gradle用`gradle dependencies`),确保无`logback-classic`或`logback-core`存在[^1]。 2. **添加Log4j2依赖** 引入必要的Log4j2库: - **Maven**: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> </dependencies> ``` - **Gradle**: ```gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-log4j2' } ``` 注:无需手动导入`log4j2.xml`文件,Spring会自动从classpath加载(文件需放在`src/main/resources/`目录)。 3. **排除Logback自动配置(Spring Boot特有)** 在Spring Boot应用的主类中,添加排除Logback自动配置的注解: ```java @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.logging.LogbackAutoConfiguration.class }) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 这确保Spring不会初始化Logback[^1]。 4. **确认配置文件位置内容** - **文件位置**:确保`log4j2.xml`位于`src/main/resources/`根目录(即classpath根目录)。Spring启动时会自动查找此文件[^1]。 - **文件内容**:验证配置文件语法正确(示例最小配置): ```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="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` 使用IDE验证XML文件无错误(如IntelliJ的XML检查)。 5. **检查版本兼容性** 如引用[^3]所述,版本冲突可能导致初始化失败。 - **推荐版本组合**: - Spring Boot 2.x:使用Log4j22.17.0(避免安全漏洞)。 - Spring Boot 3.x:确保Log4j22.18.0。 - **排查方法**:在`pom.xml`或`build.gradle`中显式指定版本: ```xml <properties> <log4j2.version>2.20.0</log4j2.version> <!-- 最新稳定版 --> </properties> ``` 6. **清理重启** - Maven/Gradle清理缓存:运行`mvn clean install`或`gradle clean build`。 - IDE清理:重启IDE并刷新项目(避免缓存问题)。 #### 验证步骤 - 启动应用:错误应消失,日志输出符合`log4j2.xml`配置。 - 调试提示:如果问题残留,添加JVM参数`-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE`查看Log4j2初始化日志。 #### 常见陷阱 - **多个配置文件冲突**:确保项目中无`logback.xml`或`log4j.properties`残留文件。 - **嵌入式服务器问题**:如使用Tomcat,检查`WEB-INF/classes`目录是否包含正确配置文件。 - **Dubbo集成**:如引用[^3]提到,DubboSpring版本冲突可能间接引发日志错误,确保Dubbo版本匹配(例如Dubbo 3.x + Spring 5.3.x)。 如果以上步骤无效,请提供更多上下文(如pom.xml片段),我会进一步协助您排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值