log4j2 не записывается в файл - PullRequest
0 голосов
/ 21 мая 2018

log4j2.xml

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

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <Appenders>

        <RollingRandomAccessFile name="HzServer" 
                                 filename="logs/hzServer.log" immediateFlush="false" append="true"
                                 filepattern="logs/hzServer.log-%d{MM-dd-yyyy}">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}  %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue} - %msg%throwable%n" />
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>

    </Appenders>
    <Loggers>
        <Logger name="com.example" level="debug" includeLocation="true"
                         additivity="false">
                <AppenderRef ref="HzServer" />

         </Logger>
     </Loggers>
</Configuration>

pom.xml

Конфиг, кажется, в порядке, и даже зависимости были проверены.

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.8.2</version>
</dependency>

файл. Приложение Spring, используемое в этом примере.

@SpringBootApplication
@ComponentScan
public class HzServer implements CommandLineRunner
{
    LoggerContext loggerContext = Configurator.initialize("hzServer","log4j2.xml");
    Logger logger = LoggerFactory.getLogger(HzServer.class);

    @Autowired
    HazelcastInstance hzInstance;

    public static void main(String[] args) 
    {
        SpringApplication.run(HzServer.class);
    }

    @Override
    public void run(String... args) throws Exception 
    {       
        ITopic<String> topic = hzInstance.getTopic("myTopic");

        topic.publish("HelloWorld");

        logger.info("Topic published");
        logger.debug("Topic published");
        logger.error("Topic published");
        logger.trace("Topic published");        
    }
}

Файл журнала полностью пуст, когда я запускаю эту программу.Не в состоянии выяснить точную проблему.

1 Ответ

0 голосов
/ 21 мая 2018

Обратите внимание на свойство "name" в конфигурации регистратора:

<Logger name="com.example" level="debug" includeLocation="true" 
    additivity="false">
    <AppenderRef ref="HzServer" />
</Logger>

Имя com.example, поэтому поиск регистратора в классе должен быть

Logger logger = LoggerFactory.getLogger("com.example");

Также удалите свойство immediateFlush="false" в приложении RollingRandomAccessFile.По некоторым причинам файл остается пустым, даже если имена регистраторов верны.

И удалите строку с инициализацией контекста регистратора, инициализация регистратора не требуется.

LoggerContext loggerContext = Configurator.initialize("hzServer","log4j2.xml");

Надеждаэто помогает.

...