【问题标题】:About log4j 2.0 configuration关于 log4j 2.0 配置
【发布时间】:2013-05-15 08:32:16
【问题描述】:

我正在尝试在项目中使用 log4j2 进行日志记录。我的名为 log4j2.xml 的 conf 文件直接位于 java 项目下,并且我在类路径中有必要的 jar。 当我使用下面的 conf 文件测试日志记录是否正常工作时,我只看到错误消息,尽管我也希望看到信息消息。有人知道这里有什么问题吗?

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <properties>
        <property name="servicename">m2mp_checker</property>
        <property name="patternTime">%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5.5p | %-10.10t | %-20.20C:%-5.5L | %msg%n</property>
        <property name="patternNoTime">%-5.5p | %-10.10t | %-20.20C:%-5.5L | %msg%n</property>
    </properties>
    <appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${patternTime}"/>
        </Console>
    </appenders>
    <loggers>
        <root level="INFO">
            <appender-ref ref="console"/>
        </root>
    </loggers>
</configuration>

java代码:

package test;

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

import com.jcraft.jsch.*;

/**
 * @author : T12888
 */
public class Tester {
    private static final Logger logger = LogManager.getLogger(Tester.class);

    public static void main(String[] args) {

        String username = "aa";
        String host = "aa";
        String pass = "aa";
        String khfile = "/home/testuser/.ssh/known_hosts";
        String identityfile = "/home/testuser/.ssh/id_rsa";

        JSch jsch = null;
        Session session = null;
        Channel channel = null;
        ChannelSftp c = null;

        try {

            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");

            jsch = new JSch();
            session = jsch.getSession(username, host, 22);
            session.setPassword(pass);
            session.setConfig(config);
            session.connect();

            channel = session.openChannel("sftp");
            channel.connect();
            c = (ChannelSftp) channel;

        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            logger.info("info");
            String fsrc = "abc.xml", fdest = "abc.xml";
            c.put(fsrc, fdest);
            c.get(fdest, "/tmp/testfile.bin");
        } catch (Exception e) {
            logger.error("error");
            e.printStackTrace();
        }
        finally{
            c.disconnect();
            session.disconnect();
        }
    }
}

输出:

11:27:45.873 [main] ERROR test.Tester - error

【问题讨论】:

  • 上传你的源代码,你在哪里调用 logger.info("info");
  • 好的,我做到了。顺便说一句,当我调试时,我看到 logger.info 行正在工作,但是因为 logger.isInfoEnabled() 返回 false 没有为此写入日志。
  • 好的,你在日志文件中写消息吗?
  • "patternTime" 你在哪里设置模式时间?

标签: java log4j2


【解决方案1】:

我想你忘记设置${patternTime}

这样设置:System.setProperty("patternTime", Your_PatternTime);

【讨论】:

  • 在 log4j2.xml 的属性部分我已经用 %d{yyyy-MM-dd HH:mm:ss.SSS} | 定义了模式时间%-5.5p | %-10.10t | %-20.20C:%-5.5L | %msg%n.
  • 那么这条线是做什么用的?
【解决方案2】:

终于解决了。问题是 log4j 没有加载我的配置文件(log4j2.xml)并使用默认配置将记录器设置为我猜的错误级别。感谢您的回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多