2015-08-10 31 views
0

В моем приложении я хочу войти в файл и консоль. Я использую регистратор в моем классифицирован как:Log4J не записывается в файл

private static Logger LOGGER = Logger.getLogger(CLASSNAME); 

Файл конфигурации загружается по назначению (см setfile строку вывода) с:

DOMConfigurator.configure("c:\\test\\log4j2.xml"); 

выхода:

log4j: reset attribute= "false". 
log4j: Threshold ="null". 
log4j: Level value for root is [DEBUG]. 
log4j: root level set to DEBUG 
log4j: Class name: [org.apache.log4j.RollingFileAppender] 
log4j: Setting property [append] to [false]. 
log4j: Setting property [maxFileSize] to [10MB]. 
log4j: Setting property [maxBackupIndex] to [10]. 
log4j: Setting property [file] to [c:\test\App.log]. 
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" 
log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n]. 
log4j: setFile called: c:\test\App.log, false 
log4j: setFile ended 
log4j: Adding appender named [file] to category [root]. 
log4j: Class name: [org.apache.log4j.ConsoleAppender] 
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" 
log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p  %c{1}:%L - %m%n]. 
log4j: Adding appender named [console] to category [root]. 

, но когда я попытайтесь войти в систему сразу после входа выше, я не получу никакого результата

LOGGER.logp(Level.ALL, CLASSNAME, "TEST", "TEST__"); 

Программе разрешено записывать файл. Выход консоли работает независимо от загрузки файла или нет.

Возможно, вы заметили ошибку?

Файл конфигурации:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration debug="true" 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="append" value="false" /> 
     <param name="maxFileSize" value="10MB" /> 
     <param name="maxBackupIndex" value="10" /> 
     <param name="file" value="c:\\test\\App.log" /> 
     <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> 
     <level value="DEBUG" /> 
     <appender-ref ref="file" /> 
     <appender-ref ref="console" /> 
    </root> 

</log4j:configuration> 

Edit: я использую log4j-1.2.17

Edit2: Оказывается, компонент почтовик может войти в файл, а приведенный выше код по-прежнему приводит только лесозаготовками в консоли window ...

private static final Logger log = Logger.getLogger(Mailer.class); 

    public static void logMail(String mailString) 
    { 
    log.error(mailString); 
    log.info(mailString); 
    } 
+0

Какую версию log4j вы используете? –

+0

Это 's log4j-1.2.17 –

+0

Не могли бы вы попробовать изменить значение append на true? – crea1

ответ

1

Итак, в основном вы пытаетесь использовать журналирование jdk с реализацией log4j. Для этого вам нужно использовать> log4j 2.0. И используйте адаптер log4j-jul для маршрутизации всех вызовов, сделанных в jdk logging api, на log4j2.

Вы можете попробовать, как показано ниже .. Зависимости:

<dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-jul</artifactId> 
     <version>2.1</version> 
    </dependency> 

Пример класса File

package com.test.log4j_test; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class App 
{ 

    private static final String CLASSNAME = "App.class"; 
    private static Logger LOGGER = Logger.getLogger(CLASSNAME); 

    public static void main(String[] args) throws FileNotFoundException, IOException 
    { 
     LOGGER.logp(Level.WARNING, CLASSNAME, "TEST", "TEST__"); 
    } 
} 

log4j.xml Файл

<?xml version="1.0" encoding="UTF-8"?> 
    <Configuration> 
     <Appenders> 
     <File name="A1" fileName="c:\\test\\app.log" append="true"> 
      <PatternLayout pattern="%t %-5p %c{2} - %m%n"/> 
     </File> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> 
     </Console> 
     </Appenders> 
     <Loggers> 
     <Logger name="org.apache.log4j.xml" level="debug"> 
      <AppenderRef ref="A1"/> 
     </Logger> 
     <Root level="ALL"> 
      <AppenderRef ref="STDOUT"/> 
      <AppenderRef ref="A1"/> 
     </Root> 
     </Loggers> 
    </Configuration> 

И запустить эту программу, добавьте ниже java property

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Dlog4j.configurationFile=file:///c:/test/log4.xml 
2

Если файл существует, и у вас есть append = false, он не сможет войти в этот файл.

Измените эту строку на true или удалите файл, чтобы исправить вашу проблему, и ничего не записывалось в файл.

+0

Помог мне найти реальные проблемы .. после того, как я включил это, по крайней мере, некоторые компоненты работали. И так как 3 компонента регистрации имеют одно и то же имя класса и использовались в разных версиях приложения, эта комбинация создала такое поведение .. (см. Решение выше) thx a lot crea1 –

+0

Рад, что вы это разработали :) @MarcWittmann – crea1

Смежные вопросы