zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

Log4j 1.x和2.x的配置示例

配置log4j 示例
2023-09-11 14:16:24 时间

目前大部分项目都是使用slf4j+log4j作为日志框架,

建议大家都迁移到log4j 2.x, 但目前很多开源项目使用的仍然是1.x。本文给出Log4j 1.x和2.x 需要的依赖及配置示例, 以便在使用时作为参考。

2015年8月5日, Logging Services Project Management Committee 宣布Log4j 1.x已经到了生命的尽头。有关声明的全文,请参阅Apache博客。Log4j用户推荐升级到Apache Log4j 2

目录

log4j 需要的依赖

1.x

2.x

log4j 的配置示例

1.x

2.x

2.x中的layout

2.x支持的属性替换【Property Substitution】


log4j 需要的依赖

1.x

依赖的配置如下:

  <properties>
        <slf4j-log4j12.version>1.7.25</slf4j-log4j12.version>
        <slf4j-api.version>1.7.25</slf4j-api.version>
    </properties>
      

  <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j-log4j12.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j-api.version}</version>
        </dependency>

2.x

依赖的配置如下:

		<!-- log4j2日志-->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j-impl</artifactId>
			<version>2.13.0</version>
		</dependency>
		<dependency>
			<groupId>com.lmax</groupId>
			<artifactId>disruptor</artifactId>
			<version>3.4.2</version>
		</dependency>

log4j 的配置示例

1.x

配置示例如下,详细可以参考:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<param name="encoding" value="UTF-8" />
		<param name="target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d %p [%c:%L] - %m%n" />
		</layout>
	</appender>

	<appender name="FileAppender" class="org.apache.log4j.RollingFileAppender">
		<param name="file" value="${LOG_DIR}/run.log" />
		<param name="append" value="true" />
		<param name="encoding" value="UTF-8" />
		<param name="maxFileSize" value="1073741824" />
		<param name="maxBackupIndex" value="10" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyy-MM-dd HH\:mm\:ss,SSS} %p [%c:%L] - %m%n" />
		</layout>
	</appender>

	<appender name="ASYNCFileAppender" class="org.apache.log4j.AsyncAppender">
		<param name="BufferSize" value="16384" />
		<appender-ref ref="FileAppender" />
	</appender>

	<logger name="org.apache.spark" additivity="false">
		<level value="WARN"/>
		<appender-ref ref="CONSOLE"/>
	</logger>
	<logger name="org.spark_project" additivity="false">
		<level value="WARN"/>
		<appender-ref ref="CONSOLE"/>
	</logger>
	<logger name="com.vesoft.nebula.connector" additivity="false">
		<level value="WARN"/>
		<appender-ref ref="CONSOLE"/>
	</logger>

	<root>
		<level value="INFO" />
		<appender-ref ref="CONSOLE" />
	</root>

</log4j:configuration>

2.x

配置示例如下,详细可参考:http://logging.apache.org/log4j/2.x/manual/

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置参考 http://logging.apache.org/log4j/2.x/manual/appenders.html http://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout 
        http://logging.apache.org/log4j/2.x/manual/configuration.html http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution -->
<configuration status="warn" name="graph" packages="">
    <properties>
        <property name="LOG_HOME">${sys:LOG_HOME:-logs}</property>
        <property name="FILE_NAME">${sys:LOG_FILE_NAME:-runlog}</property>
    </properties>


    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %c{3}:%M:%L - %msg%n </Pattern>
            </PatternLayout>
        </Console>

        <RollingRandomAccessFile
                name="file"
                fileName="${LOG_HOME}/${FILE_NAME}_all.log"
                filePattern="${LOG_HOME}/${FILE_NAME}_all-%d{yyyy-MM-dd HH-mm}-%i.log">
            <append>false</append>
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %c{3}:%M:%L - %msg%n </Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="24" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="3"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="ERROR_FILE"
								 fileName="${LOG_HOME}/${FILE_NAME}_error.log"
								 filePattern="${LOG_HOME}/${FILE_NAME}_error-%d{yyyy-MM-dd}-%i.log.gz">
			<append>false</append>
			<PatternLayout>
				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %c{3}:%M:%L - %msg%n</Pattern>
			</PatternLayout>
			<ThresholdFilter level="ERROR" onMatch="ACCEPT"
							 onMismatch="DENY"/>
			<Policies>
				<TimeBasedTriggeringPolicy interval="24"
										   modulate="true"/>
				<SizeBasedTriggeringPolicy size="100 MB"/>
			</Policies>
			<DefaultRolloverStrategy max="${log.maxHistory.error}"/>
		</RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
        <logger name="org.apache.hadoop" level="WARN" additivity="false">
            <appender-ref ref="file"/>
        </logger>
		<logger name="org.apache.spark" level="WARN" additivity="false">
            <appender-ref ref="file"/>
        </logger>
        <logger name="io.netty" level="WARN" additivity="false">
            <appender-ref ref="file"/>
        </logger>
        <logger name="org.apache.commons" level="WARN" additivity="false">
            <appender-ref ref="file"/>
        </logger>
    </Loggers>
</configuration>

2.x中的layout

详见:http://logging.apache.org/log4j/2.x/manual/layouts.html

http://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

An Appender uses a Layout to format a LogEvent into a form that meets the needs of whatever will be consuming the log event

最常用用的是Pattern Layout,其它的还有CSV、JSON、HTML、XML、YAML等

2.x支持的属性替换【Property Substitution】

详见:http://logging.apache.org/log4j/2.x/manual/configuration.html#Appenders

JAVA使用示例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 

private static final Logger LOG = LoggerFactory.getLogger(SingleExample.class)

LOG.info("application staring");