`
tianzhihehe
  • 浏览: 20958 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

log4j2 property 配置问题

 
阅读更多

由于要把logback框架升级到log4j2,把配置改了一遍。发现property属性总是配置失败。跟踪了代码,发现log4j2的小伙砸写的代码有问题。但不知道其他人的配置为什么能工作。

logback配置

<property name="LICAI_LOG_HOME" value="/data/logs/tomcat/licaiweb" />

 

 

先上正确的log4j2配置

 

<Properties>
    <Property name="LICAI_LOG_HOME">
    <![CDATA[/data/logs/tomcat/licaiweb]]>
        </Property>
</Properties>

 

 跟踪代码发现了问题。

private void constructHierarchy(final Node node, final Element element) {
        processAttributes(node, element);
        final StringBuilder buffer = new StringBuilder();
        final NodeList list = element.getChildNodes();
        final List<Node> children = node.getChildren();
        for (int i = 0; i < list.getLength(); i++) {
            final org.w3c.dom.Node w3cNode = list.item(i);
            if (w3cNode instanceof Element) {
                final Element child = (Element) w3cNode;
                final String name = getType(child);
                final PluginType<?> type = pluginManager.getPluginType(name);
                final Node childNode = new Node(node, name, type);
                constructHierarchy(childNode, child);
                if (type == null) {
                    final String value = childNode.getValue();
                    if (!childNode.hasChildren() && value != null) {
                        node.getAttributes().put(name, value);
                    } else {
                        status.add(new Status(name, element, ErrorType.CLASS_NOT_FOUND));
                    }
                } else {
                    children.add(childNode);
                }
            } else if (w3cNode instanceof Text) {
                final Text data = (Text) w3cNode;
                buffer.append(data.getData());
            }
        }

//property没有子元素的时候,value="",非null
        final String text = buffer.toString().trim();
        if (text.length() > 0 || (!node.hasChildren() && !node.isRoot())) {
            node.setValue(text);
        }
    }

 

public class PluginValueVisitor extends AbstractPluginVisitor<PluginValue> {
    public PluginValueVisitor() {
        super(PluginValue.class);
    }

    @Override
    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
                        final StringBuilder log) {
        final String name = this.annotation.value();
//发现value非null,就返回原来的value了,即""
        final String rawValue = node.getValue() != null ? node.getValue() :
            removeAttributeValue(node.getAttributes(), "value");
        final String value = this.substitutor.replace(event, rawValue);
        StringBuilders.appendKeyDqValue(log, name, value);
        return value;
    }
}

 

分享到:
评论

相关推荐

    SSM整合中的Log4j日志的配置详情

    Log4j 在 SSM 整合中的配置详解 Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM...

    log4j中配置日志文件相对路径方法(PDF)

    ### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...

    log4j2的配置文件完整版

    这个“log4j2的配置文件完整版”应该包含了Log4j2所有可能的配置选项,允许开发者精细控制日志输出的行为。 在Log4j2中,配置文件是XML、JSON或YAML格式的文本文件,它定义了日志的级别、输出目的地、布局格式以及...

    log4j2所需jar包和log4j2的详细配置

    Log4j2的配置文件通常为`log4j2.xml`或`log4j2.json`,提供了丰富的配置选项。以下是一个基本的`log4j2.xml`配置示例: ```xml [%t] %-5level %logger{36} - %msg%n"/&gt; ...

    log4j和ibatis配置文档

    总结,log4j和iBatis的配置是Java应用的基础,正确设置可以优化开发效率,提高问题排查的便利性,同时也能确保数据库操作的高效稳定。通过理解并熟练运用这两个框架的配置,开发者能更好地掌控应用的运行状态和...

    log4j2用户指南

    - **配置文件格式**:Log4j2 支持 XML、JSON 和 YAML 格式的配置文件。 - **异步日志记录**:Log4j2 支持内置的异步日志记录功能,提高了应用程序的响应速度。 #### 4. API Log4j2 提供了一个丰富的 API,其中包括...

    Spring项目中怎么配置log4j

    在Spring项目中配置log4j是一项基础且重要的工作,它能帮助我们记录应用程序的运行日志,便于调试、排查问题和性能分析。Log4j是一个广泛使用的Java日志框架,提供灵活的日志记录功能。接下来,我们将详细讲解如何在...

    log4j与spring的详细配置。

    2. **配置文件**:Log4j的配置通常通过`log4j.properties`或`log4j.xml`文件进行,其中包含了关于logger级别、appender和layout的定义。 3. **日志级别**:Log4j支持多个日志级别,包括DEBUG、INFO、WARN、ERROR、...

    log4j配置与使用方法

    ### log4j配置与使用方法 #### 一、log4j简介 log4j是Apache的一个开源项目,通过使用log4j,开发者能够控制日志信息的生成、等级以及输出的目的地。它允许用户根据不同的环境调整日志的级别,从而帮助开发者在...

    spring日志配置为log4j

    总之,将Spring的日志配置为Log4j,涉及到引入Log4j库、编写`log4j.properties`配置文件、以及在Spring配置文件中声明使用Log4j。理解这些步骤和配置项对于优化日志记录,排查问题以及监控系统运行状态至关重要。

    log4j的配置及使用

    Log4j 支持两种格式的配置文件:XML 格式和 Java 的 property 格式。 一个简单的配置文件示例: log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender....

    Log4j详解,详细讲解log4j的使用,和原理

    Log4j 支持两种格式的配置文件:XML 格式和 Java 的 property 格式。配置文件是 Log4j 的核心组件之一,通过配置文件可以灵活地控制日志的输出。 Log4j 的配置方式 Log4j 提供了多种配置方式,包括: * 通过配置...

    log4j中配置日志文件相对路径方法分析

    这样,我们就可以在log4j加载配置文件之前,先用System.setProperty ("WORKDIR", WORKDIR);设置好根路径,此操作可通过一初始的servlet进行。 方法二、 可以使用服务器环境变量 log4j的配置文件支持服务器的vm的...

    log4j需要的jar以及properties文件

    如果你希望自定义配置文件的位置,可以通过系统属性`log4j.configuration`来指定,例如`System.setProperty("log4j.configuration", "path/to/your/log4j.properties")`。 总的来说,Log4j是一个强大且灵活的日志...

    hibernate整合log4j jar包

    2. **配置log4j**:创建一个`log4j.properties`或`log4j.xml`配置文件,指定日志级别、输出目的地和格式。例如: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, FILE log4j.appender.FILE=org...

    如何使用Log4j如何使用Log4j

    2. **环境配置**:为了让项目能够识别到Log4j,在项目的`CLASSPATH`中加入log4j.properties文件。该文件用于配置Log4j的行为,包括日志级别、输出目的地等。 #### 三、Log4j.properties配置详解 在Log4j的使用过程...

    Log4j中相对路径的问题

    本文主要讨论了在Log4j配置中如何处理相对路径的问题,以适应不同环境下的日志文件存储需求。 一、使用系统属性设置路径 在Log4j的配置文件(通常是`log4j.properties`)中,可以使用`${}`语法引用系统属性。例如...

    Hibernate中log4j-1.2.16 +slf4j-log4j12-1.5.2

    2. 创建`log4j.properties`文件,并配置日志级别、输出目的地和格式。例如: ``` log4j.rootLogger=DEBUG, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=...

    spring log4j 实例

    Spring框架是Java领域广泛使用的轻量级框架,而Log4j则是日志记录领域的经典工具,提供了丰富的日志配置和管理功能。本实例结合Spring和Log4j,将为你提供一个实用的日志解决方案。 首先,我们要理解Spring是如何...

    log4j入门介绍和配置方式

    四、Log4j 的配置方式 下面是一个简单的 Log4j 配置文件示例: log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j....

Global site tag (gtag.js) - Google Analytics