Skip to content

Commit

Permalink
Migrate to log4j2
Browse files Browse the repository at this point in the history
  • Loading branch information
marc92w committed Feb 1, 2022
1 parent d3436b1 commit 16d97e6
Show file tree
Hide file tree
Showing 11 changed files with 479 additions and 291 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
**/log/*.log
**/log/*.log.*
**/target
**/.idea/workspace.xml
**/.idea/tasks.xml
Expand Down
30 changes: 22 additions & 8 deletions daemon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,30 @@
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-layout-template-json</artifactId>
<version>${log4j.version}</version>
</dependency>

<!-- Spring Framework -->
<dependency>
Expand Down Expand Up @@ -49,12 +70,5 @@
<version>${junit.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
158 changes: 0 additions & 158 deletions daemon/src/main/java/de/taimos/daemon/log4j/JSONLayout.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package de.taimos.daemon.log4j;

import de.taimos.daemon.DaemonStarter;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Filter.Result;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.ConsoleAppender.Target;
import org.apache.logging.log4j.core.appender.RollingFileAppender;
import org.apache.logging.log4j.core.appender.SyslogAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
import org.apache.logging.log4j.core.layout.PatternLayout;

/**
* Copyright 2022 Cinovo AG<br>
* <br>
*
* @author mweise
*/
public class Log4jConfigurationFactory {

private static final String CONSOLE_NAME = "CONSOLE";
private static final String DAROFI_NAME = "DAROFI";
private static final String SYSLOG_NAME = "SYSLOG";

/**
* Create minimal default configuration
* @param builder config builder
* @return default configuration
*/
public Configuration configure(ConfigurationBuilder<?> builder) {
LayoutComponentBuilder layout = createDefaultLayout(builder, Log4jDaemonProperties.DEFAULT_PATTERN);
return this.configure(builder, layout, true, null, null, null, null, null);
}

/**
* @param builder config builder
* @param fileName log file name
* @param filePattern log file pattern
* @return built configuration
*/
public Configuration configure(ConfigurationBuilder<?> builder, String fileName, String filePattern) {
LayoutComponentBuilder layout = createDefaultLayout(builder, Log4jDaemonProperties.DEFAULT_PATTERN);
return this.configure(builder, layout, true, fileName, filePattern, null, null, null);
}

/**
* programmatic log4j2 configuration, see https://www.baeldung.com/log4j2-programmatic-config
*
* @param builder config builder
* @param layout layout builder
* @param consoleEnabled log to console
* @param fileName log file name
* @param filePattern log file pattern
* @param syslogHost syslog host
* @param syslogFacility syslog facility
* @return built configuration
*/
public Configuration configure(ConfigurationBuilder<?> builder, LayoutComponentBuilder layout, boolean consoleEnabled,
String fileName, String filePattern,
String syslogHost, String syslogFacility, Level syslogLevel) {
AppenderComponentBuilder console = null;
AppenderComponentBuilder rolling = null;
AppenderComponentBuilder syslog = null;

if (consoleEnabled) {
console = createConsoleAppender(builder);
console.add(layout);
builder.add(console);
}

if (fileName != null && filePattern != null) {
rolling = createRollingFileAppender(builder, fileName, filePattern);
rolling.addComponent(builder.newComponent("Policies").addComponent(builder.newComponent("TimeBasedTriggeringPolicy")));
rolling.add(layout);
builder.add(rolling);
}

if (syslogHost != null && syslogFacility != null) {
LayoutComponentBuilder syslogLayout = createDefaultLayout(builder, DaemonStarter.getDaemonName() + ": %-5p %c %x - %m%n");
syslog = createSyslogAppender(builder, syslogHost, syslogFacility);
if (syslogLevel != null) {
syslog.add(builder.newFilter("ThresholdFilter", Result.ACCEPT, Result.DENY).addAttribute("level", syslogLevel));
}
syslog.add(syslogLayout);
builder.add(syslog);
}

// set up root logger
RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Log4jDaemonProperties.DEFAULT_LEVEL);
if (console != null) {
rootLogger.add(builder.newAppenderRef(console.getName()));
}
if (rolling != null) {
rootLogger.add(builder.newAppenderRef(rolling.getName()));
}
if (syslog != null) {
rootLogger.add(builder.newAppenderRef(syslog.getName()));
}
builder.add(rootLogger);
return builder.build();
}

/**
* @param builder config builder
* @return builder for {@link ConsoleAppender}
*/
protected AppenderComponentBuilder createConsoleAppender(ConfigurationBuilder<?> builder) {
return builder.newAppender(CONSOLE_NAME, "Console").addAttribute("target", Target.SYSTEM_OUT);
}

/**
* @param builder config builder
* @param fileName log file name
* @param filePattern log file pattern
* @return builder for {@link RollingFileAppender}
*/
protected AppenderComponentBuilder createRollingFileAppender(ConfigurationBuilder<?> builder, String fileName, String filePattern) {
return builder.newAppender(DAROFI_NAME, "RollingFile").addAttribute("fileName", fileName).addAttribute("filePattern", filePattern);
}

/**
* @param builder config builder
* @param host syslog host
* @param facility syslog facility
* @return builder for {@link SyslogAppender}
*/
protected AppenderComponentBuilder createSyslogAppender(ConfigurationBuilder<?> builder, String host, String facility) {
return builder.newAppender(SYSLOG_NAME, "Syslog").addAttribute("host", host).addAttribute("facility", facility);
}

/**
* @param builder config builder
* @param pattern string pattern to use
* @return builder for {@link PatternLayout}
*/
protected LayoutComponentBuilder createDefaultLayout(ConfigurationBuilder<?> builder, String pattern) {
return builder.newLayout("PatternLayout").addAttribute("pattern", pattern);
}
}
Loading

0 comments on commit 16d97e6

Please sign in to comment.