log4j2 加载外部的日志配置文件 ,两种方式 ,java 代码如下
1. 方式1
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; String currentPath = System.getProperty("user.dir"); System.setProperty("configFiles", currentPath + File.separator + "conf" + File.separator); LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false); File file = new File(System.getProperty("configFiles") + "log4j2.xml"); loggerContext.setConfigLocation(file.toURI());
2. 方式2
import org.apache.logging.log4j.core.config.Configurator; String currentPath = System.getProperty("user.dir"); System.setProperty("configFiles", currentPath + File.separator + "conf" + File.separator); Configurator.initialize("log4j2", System.getProperty("configFiles") + "log4j2.xml");
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Properties> <!-- 日志输出级别 --> <Property name="LOG_INFO_LEVEL" value="debug"/> <!-- error级别日志 --> <Property name="LOG_ERROR_LEVEL" value="error"/> <!-- 在当前目录下创建名为log目录做日志存放的目录 --> <Property name="LOG_HOME" value="./logs"/> <!-- 档案日志存放目录 --> <Property name="LOG_ARCHIVE" value="./logs/archive"/> <!-- 模块名称, 影响日志配置名,日志文件名,根据自己项目进行配置 --> <Property name="LOG_MODULE_NAME" value="wisdo"/> <!-- 日志文件大小,超过这个大小将被压缩 --> <Property name="LOG_MAX_SIZE" value="100 MB"/> <!-- 保留多少天以内的日志 --> <Property name="LOG_DAYS" value="15"/> <!--输出日志的格式:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, %msg:日志消息,%n是换行符 --> <Property name="LOG_PATTERN" value="%d{yyyy-MM-dd hh:mm:ss.SSS} | %-5level | [%t] |%logger{50} | %L | : %msg%n"/> <!--interval属性用来指定多久滚动一次--> <Property name="TIME_BASED_INTERVAL" value="1"/> </Properties> <Appenders> <!-- 控制台输出 --> <Console name="STDOUT" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="${LOG_PATTERN}"/> <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="${LOG_INFO_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/> </Console> <!-- 这个会打印出所有的info级别以上,error级别一下的日志,每次大小超过size或者满足TimeBasedTriggeringPolicy,则日志会自动存入按年月日建立的文件夹下面并进行压缩,作为存档--> <RollingRandomAccessFile name="RollingRandomAccessFileInfo" fileName="${LOG_HOME}/${LOG_MODULE_NAME}-info.log" filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-info-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <!--如果是error级别拒绝,设置 onMismatch="NEUTRAL" 可以让日志经过后续的过滤器--> <ThresholdFilter level="${LOG_ERROR_LEVEL}" onMatch="DENY" onMismatch="NEUTRAL"/> <!--如果是info\warn输出--> <ThresholdFilter level="${LOG_INFO_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval属性用来指定多久滚动一次,根据当前filePattern设置是1天滚动一次--> <TimeBasedTriggeringPolicy interval="${TIME_BASED_INTERVAL}"/> <SizeBasedTriggeringPolicy size="${LOG_MAX_SIZE}"/> </Policies> <!-- DefaultRolloverStrategy属性如不设置,则默认同一文件夹下最多保存7个文件--> <DefaultRolloverStrategy max="${LOG_DAYS}"/> </RollingRandomAccessFile> <!--只记录error级别以上的日志,与info级别的日志分不同的文件保存--> <RollingRandomAccessFile name="RollingRandomAccessFileError" fileName="${LOG_HOME}/${LOG_MODULE_NAME}-error.log" filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-error-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <ThresholdFilter level="${LOG_ERROR_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <TimeBasedTriggeringPolicy interval="${TIME_BASED_INTERVAL}"/> <SizeBasedTriggeringPolicy size="${LOG_MAX_SIZE}"/> </Policies> <DefaultRolloverStrategy max="${LOG_DAYS}"/> </RollingRandomAccessFile> </Appenders> <Loggers> <Root level="${LOG_INFO_LEVEL}"> <!-- 开发环境使用 --> <AppenderRef ref="STDOUT"/> <!-- 测试,生产环境使用 --> <AppenderRef ref="RollingRandomAccessFileInfo"/> <AppenderRef ref="RollingRandomAccessFileError"/> </Root> </Loggers> </Configuration>
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处。