使⽤log4j2⾃定义配置⽂件位置和⽂件名(附l
配置实例)
⽬录
log4j2⾃定义配置⽂件位置和⽂件名
⽣效配置⽂件
⽇志配置⽂件实例
1.使⽤log4j2需要下载包
2.配置⽂件可以有三种格式
3.⽇志记录有两种⽅法
4.我⽤的xml的配置
log4j2⾃定义配置⽂件位置和⽂件名
我们使⽤log4j2⼀般做法是将l⽂件放在资源⽂件夹根⽬录。对于有强迫症的开发者来说,我更喜欢在资源⽂件夹下新建包或⽂件夹,然后把配置⽂件放在⾥⾯。本博客将介绍如何⾃定义l⽂件的位置和⽂件名。
<!-- 系统⽇志配置 -->
<listener>
<listener-class&le.holder.system.Log4j2ConfigListener</listener-class>
</listener>
<context-param>
<description>⽇志配置⽂件的路径</description>
<param-name&figurationFile</param-name>
<param-value>l</param-value>
</context-param>
Log4j2ConfigListener类是⾃定义的类,实现ServletContextListener接⼝,这样tomcat启动时可以更改⽇志配置⽂件的默认路径和⽂件名。
⽣效配置⽂件
ample.holder.system;
import java.util.Enumeration;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.onfig.Configurator;
public class Log4j2ConfigListener implements ServletContextListener
{
private static final String KEY = "figurationFile";
@Override
public void contextDestroyed(ServletContextEvent arg0)
{
}
@Override
public void contextInitialized(ServletContextEvent arg0)
{
String fileName = getContextParam(arg0);
Configurator.initialize("Log4j2", "classpath:" + fileName);
}
@SuppressWarnings("unchecked")
private String getContextParam(ServletContextEvent event) {
Enumeration<String> names = ServletContext().getInitParameterNames();
while (names.hasMoreElements())
{
String name = Element();
String value = ServletContext().getInitParameter(name);
im().equals(KEY))
{
return value;
}
}
return null;
}
}
⽇志配置⽂件实例
<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个⽤于设置log4j2⾃⾝内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够⾃动检测修改配置⽂件和重新配置本⾝, 设置间隔秒数。
注:本配置⽂件的⽬标是将不同级别的⽇志输出到不同⽂件,最⼤2MB⼀个⽂件,
⽂件数据达到最⼤值时,旧数据会被压缩并放进指定⽂件夹
-->
<Configuration status="WARN" monitorInterval="600">
<Properties>
<!-- 配置⽇志⽂件输出⽬录,此配置将⽇志输出到tomcat根⽬录下的指定⽂件夹 -->
<Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/SSHExample</Property>
</Properties>
<Appenders>
<!--这个输出控制台的配置,这⾥输出除了warn和error级别的信息到System.out-->
<Console name="console_out_appender" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="ACCEPT"/>
<!-- 输出⽇志的格式 -->
<PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
</Console>
<!--这个输出控制台的配置,这⾥输出warn和error级别的信息到,在eclipse控制台上看到的是红⾊⽂字-->        <Console name="console_err_appender" target="SYSTEM_ERR">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出⽇志的格式 -->
<PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
</Console>
<!-- TRACE级别⽇志 -->
<!-- 设置⽇志格式并配置⽇志压缩格式,压缩⽂件独⽴放在⼀个⽂件夹内,
⽇期格式不能为冒号,否则⽆法⽣成,因为⽂件名不允许有冒号,此appender只输出trace级别的数据到trace.log -->        <RollingRandomAccessFile name="trace_appender"
immediateFlush="true" fileName="${LOG_HOME}/trace.log"
filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies><!-- 两个配置任选其⼀ -->
<!-- 每个⽇志⽂件最⼤2MB -->
<SizeBasedTriggeringPolicy size="2MB"/>
</Policies>
<Filters><!-- 此Filter意思是,只输出debug级别的数据 -->
<!-- DENY,⽇志将⽴即被抛弃不再经过其他过滤器;
NEUTRAL,有序列表⾥的下个过滤器过接着处理⽇志;
ACCEPT,⽇志会被⽴即处理,不再经过剩余过滤器。 -->
<ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
<!-- DEBUG级别⽇志 -->
<!-- 设置⽇志格式并配置⽇志压缩格式,压缩⽂件独⽴放在⼀个⽂件夹内,
⽇期格式不能为冒号,否则⽆法⽣成,因为⽂件名不允许有冒号,此appender只输出debug级别的数据到debug.log -->        <RollingRandomAccessFile name="debug_appender"
immediateFlush="true" fileName="${LOG_HOME}/debug.log"
filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies><!-- 两个配置任选其⼀ -->
<!-- 每个⽇志⽂件最⼤2MB -->
<SizeBasedTriggeringPolicy size="2MB"/>
<!-- 如果启⽤此配置,则⽇志会按⽂件名⽣成新压缩⽂件,
即如果filePattern配置的⽇期格式为 %d{yyyy-MM-dd HH} ,则每⼩时⽣成⼀个压缩⽂件,
如果filePattern配置的⽇期格式为 %d{yyyy-MM-dd} ,则天⽣成⼀个压缩⽂件 -->
<!--                <TimeBasedTriggeringPolicy interval="1" modulate="true" /> -->
</Policies>
<Filters><!-- 此Filter意思是,只输出debug级别的数据 -->
<!-- DENY,⽇志将⽴即被抛弃不再经过其他过滤器;
NEUTRAL,有序列表⾥的下个过滤器过接着处理⽇志;
ACCEPT,⽇志会被⽴即处理,不再经过剩余过滤器。 -->
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
<!-- INFO级别⽇志 -->
<RollingRandomAccessFile name="info_appender"
immediateFlush="true" fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.">            <PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2MB"/>
</Policies>
<Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
<!-- WARN级别⽇志 -->
<RollingRandomAccessFile name="warn_appender"
immediateFlush="true" fileName="${LOG_HOME}/warn.log"
filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.">            <PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2MB"/>
</Policies>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
<!-- ERROR级别⽇志 -->
<RollingRandomAccessFile name="error_appender"
immediateFlush="true" fileName="${LOG_HOME}/error.log"
filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.">            <PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2MB"/>
</Policies>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 配置⽇志的根节点 -->
<root level="trace">
<appender-ref ref="console_out_appender"/>
<appender-ref ref="console_err_appender"/>
<appender-ref ref="trace_appender"/>
<appender-ref ref="debug_appender"/>
<appender-ref ref="info_appender"/>
<appender-ref ref="warn_appender"/>
<appender-ref ref="error_appender"/>
</root>
<!-- 第三⽅⽇志系统 -->
<logger name="" level="info"/>
<logger name="org.springframework.beans" level="info"/>
<logger name="t" level="info"/>
<logger name="org.springframework.web" level="info"/>
<logger name="org.jbossty" level="warn"/>
<logger name="org.apache.http" level="warn"/>
</Loggers>
</Configuration>
1.使⽤log4j2需要下载包
如下:
2.配置⽂件可以有三种格式
(⽂件名必须规范,否则系统⽆法到配置⽂件):
classpath下名为 log4j-test.json 或者log4j-test.jsn⽂件
classpath下名为 l
classpath下名为 log4j.json 或者log4j.jsn⽂件
classpath下名为 l
3.⽇志记录有两种⽅法
static Logger logger = Logger(Name());
private static Logger logger = Logger("MyApplication");
4.我⽤的xml的配置
log4j2不打印日志所以介绍⼀下xml配置:
1.⾸先要配⼏个要⽤到的appender,这些appender功能不⼀样,⽐如有常规输出,重⼤异常输出,你可能需要他们输出形式或者输出的⽂件不同,这些都可以在appender中配置
2.appender⾥⾯的⼀些配置说明:
name:appender的名称
fileName:输出⽂件和名称
append:是否追加,true表⽰追加内容到所在的⽇志,false表⽰每次都覆盖
filePattern:表⽰当⽇志到达指定的⼤⼩或者时间,产⽣新⽇志时,旧⽇志的命名路径
PatternLayout:指定输出⽇志的格式,具体代表的意思见前⾯的博客中
Policies:策略,表⽰⽇志什么时候应该产⽣新⽇志,可以有时间策略和⼤⼩策略等
ThresholdFilter :过滤器,log4j2中有很多的filter
3.接下来配置logger
指定哪些类进⾏何种输出,这个⽐较简单,可以直接看栗⼦:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="1" status="ERROR" strict="true" name="LogConfig">
<Properties>
<Property name="logbasedir">e:/log</Property>
<Property name="log.layout">%d %-5p %t (%c:%L) - %m%n</Property>
</Properties>
<--此处使⽤了两种类型的appender,RollingFile为滚动类型,满⾜策略条件后会新建⽂件夹记录 -->
<Appenders>
<Appender type="Console" name="STDOUT">
<Target>SYSTEM_OUT</Target>
<Layout type="PatternLayout" pattern="${log.layout}"/>
</Appender>
<Appender type="RollingFile" name="FILE" fileName="${logbasedir}/jutap-${sys:APPNAME}.log"
filePattern = "${logbasedir}/jutap-${sys:APPNAME}-%d{yyyy-MM-dd}.%i.log">
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<Layout type="PatternLayout">
<Charset>GBK</Charset>
<Pattern>${log.layout}</Pattern>
</Layout>
</Appender>
<Appender type="RollingFile" name="ExceptionLog" fileName="${logbasedir}/exception-${sys:APPNAME}.log"
filePattern = "${logbasedir}/exception-${sys:APPNAME}-%d{yyyy-MM-dd}.%i.log">
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<Layout type="PatternLayout">
<Charset>GBK</Charset>
<Pattern>${log.layout}</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Logger name="exception" level="error" additivity="false">
<AppenderRef ref="ExceptionLog"/>
</Logger>
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="FILE"/>
</Root>
<Logger name="com.garfield.learn" level="debug"/>
<Logger name="com.garfield.learnp" level="info"/>
</Loggers>
</Configuration>
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。