2017-02-28 81 views
0

我想使用log4j来生成日志。 为此,我现在用的是下面的代码:Java log4j不能正常工作

package com.idm.Test; 

import org.apache.log4j.Logger; 

public class log4jExample { 
    static Logger log = Logger.getLogger(log4jExample.class.getName()); 

    public static void main(String[] args) { 
     log.info("Hello this is a debug message 1"); 
     log.info("Hello this is a debug message 2"); 
     log.info("Hello this is a debug message 3"); 
    } 
} 

我的log4j的属性文件如下:

# Define the root logger with appender file 
log=G:\\logs 
log4j.rootLogger = DEBUG, FILE 

# Define the file appender 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=${log}\\log.out 

# Define the layout for file appender 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.conversionPattern=%m%n 

我要生成内部

G:\logs\log.out 

日志文件,但问题是当我运行这个。在此路径上没有创建日志文件。 当我已经用log.out名称创建了一个文件到该位置并再次运行时,它不会显示此文件中的日志。

我把我的log4j.properties文件放在com.idm.Test包中。

+0

请注意,您没有为记录器定义一个水平 – Adonis

+0

@Asettouf我是否应该将其定义到属性文件中? – user3441151

+0

@Asettouf我的文件路径是正确的,或者我必须改变它? – user3441151

回答

1

你在你的代码

import java.util.logging.Logger; 

这不是log4j的记录器使用了Java的Util记录仪。修复您的导入,并确保您的配置文件会被发现(要么把在类路径或与log4j.configuration系统属性specifiy位置 - 见here

注:OP编辑问题,现在使用正确的进口...


顺便说一句,不要再使用log4j(1)。它已经达到了EOL而不是Java 9 ready

请使用log4j2(或其他当前日志记录框架)代替。

+0

当我使用'import org.apache.log4j.Logger'时,存在同样的问题。这不会在路径位置创建任何文件,并且如果我已经在位置创建了一个文件,则不会在此处添加日志。 – user3441151

+0

查看[默认初始化过程](http://logging.apache.org/log4j/1.2/manual.html#defaultInit)以及log4j1如何尝试查找配置文件。但是,如果您开始使用日志记录,除非必须处理遗留代码,否则真的不会在log4j1上投入任何时间。 – FrVaBe

+0

在控制台上显示我log4j:WARN无法为记录器找到appender(com.idm.log4jExample)。 log4j:WARN请正确初始化log4j系统。 log4j:WARN请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig了解更多信息。 ' – user3441151

-1

你应该把资源文件夹(源/主/资源)log4j.properties,我认为它会正常工作。 如果你的项目是java项目(不是maven项目),我认为你应该改变你的代码: package com.idm.Test;

import org.apache.log4j.Logger;

公共类log4j例子静态记录器日志= Logger.getLogger(log4jExample.class.getName());

public static void main(String[] args) { 
    **PropertyConfigurator.configure("yourPath/log4j.properties");** 
    log.info("Hello this is a debug message 1"); 
    log.info("Hello this is a debug message 2"); 
    log.info("Hello this is a debug message 3"); 
} 

}

+0

您认为OP使用Maven项目结构 - 但这是错误的。他/她使用Eclipse Java项目。 – FrVaBe

+0

谢谢,我已更新它。 – tiepvut

+0

你不应该在代码中硬编码一个配置文件的位置;而是通过配置指定位置(log4j提供了这个'log4j.configuration'系统属性) – FrVaBe

1

我也同样喜欢你的代码和properity,和日志文件被创建。 在我的情况下,log4j.properties位于类路径的根目录中。

即)

类/ log4j.properties
类/ COM/IDM /测试/ log4jExample

请,检查log4j.properties的位置。

+0

@upuant在哪里我有将'log4j.properties'文件放在我的Java项目上? – user3441151

+0

我应该将'log4j.properties'文件放在src里面吗? – user3441151

+0

@ user3441151很可能是 - 解决你当前的问题 - 但你真正应该做的是试着理解log4j如何加载配置,以及在classpath根目录下有什么意思。你甚至不应该把你的log4j配置放到你的应用程序中,而应该是“外部的”。 – FrVaBe