怎么使用log4j2自定义配置文件位置和文件名(log4j2,开发技术)

时间:2024-05-04 04:08:12 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

log4j2自定义配置文件位置和文件名

我们使用log4j2一般做法是将log4j2.xml文件放在资源文件夹根目录。对于有强迫症的开发者来说,我更喜欢在资源文件夹下新建包或文件夹,然后把配置文件放在里面。本博客将介绍如何自定义log4j2.xml文件的位置和文件名。

web.xml配置

<!--系统日志配置监听器--><listener><listener-class>edu.example.holder.system.Log4j2ConfigListener</listener-class></listener><context-param><description>日志配置文件的路径</description><param-name>log4j.configurationFile</param-name><param-value>log4j/log4j2.xml</param-value></context-param>

Log4j2ConfigListener类是自定义的类,实现ServletContextListener接口,这样tomcat启动时可以更改日志配置文件的默认路径和文件名。

生效配置文件

packageedu.example.holder.system;importjava.util.Enumeration;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importorg.apache.logging.log4j.core.config.Configurator;publicclassLog4j2ConfigListenerimplementsServletContextListener{privatestaticfinalStringKEY="log4j.configurationFile";@OverridepublicvoidcontextDestroyed(ServletContextEventarg0){}@OverridepublicvoidcontextInitialized(ServletContextEventarg0){StringfileName=getContextParam(arg0);Configurator.initialize("Log4j2","classpath:"+fileName);}@SuppressWarnings("unchecked")privateStringgetContextParam(ServletContextEventevent){Enumeration<String>names=event.getServletContext().getInitParameterNames();while(names.hasMoreElements()){Stringname=names.nextElement();Stringvalue=event.getServletContext().getInitParameter(name);if(name.trim().equals(KEY)){returnvalue;}}returnnull;}}

日志配置文件实例

<?xmlversion="1.0"encoding="UTF-8"?><!--status:这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出monitorInterval:Log4j能够自动检测修改配置文件和重新配置本身,设置间隔秒数。注:本配置文件的目标是将不同级别的日志输出到不同文件,最大2MB一个文件,文件数据达到最大值时,旧数据会被压缩并放进指定文件夹--><Configurationstatus="WARN"monitorInterval="600"><Properties><!--配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹--><Propertyname="LOG_HOME">${sys:catalina.home}/WebAppLogs/SSHExample</Property></Properties><Appenders><!--这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out--><Consolename="console_out_appender"target="SYSTEM_OUT"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilterlevel="warn"onMatch="DENY"onMismatch="ACCEPT"/><!--输出日志的格式--><PatternLayoutpattern="%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n"/></Console><!--这个输出控制台的配置,这里输出warn和error级别的信息到System.err,在eclipse控制台上看到的是红色文字--><Consolename="console_err_appender"target="SYSTEM_ERR"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilterlevel="warn"onMatch="ACCEPT"onMismatch="DENY"/><!--输出日志的格式--><PatternLayoutpattern="%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n"/></Console><!--TRACE级别日志--><!--设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内,日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出trace级别的数据到trace.log--><RollingRandomAccessFilename="trace_appender"immediateFlush="true"fileName="${LOG_HOME}/trace.log"filePattern="${LOG_HOME}/trace/trace-%d{yyyy-MM-ddHH_mm_ss}.log.gz"><PatternLayout><pattern>%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n</pattern></PatternLayout><Policies><!--两个配置任选其一--><!--每个日志文件最大2MB--><SizeBasedTriggeringPolicysize="2MB"/></Policies><Filters><!--此Filter意思是,只输出debug级别的数据--><!--DENY,日志将立即被抛弃不再经过其他过滤器;NEUTRAL,有序列表里的下个过滤器过接着处理日志;ACCEPT,日志会被立即处理,不再经过剩余过滤器。--><ThresholdFilterlevel="debug"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="trace"onMatch="ACCEPT"onMismatch="DENY"/></Filters></RollingRandomAccessFile><!--DEBUG级别日志--><!--设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内,日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出debug级别的数据到debug.log--><RollingRandomAccessFilename="debug_appender"immediateFlush="true"fileName="${LOG_HOME}/debug.log"filePattern="${LOG_HOME}/debug/debug-%d{yyyy-MM-ddHH_mm_ss}.log.gz"><PatternLayout><pattern>%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n</pattern></PatternLayout><Policies><!--两个配置任选其一--><!--每个日志文件最大2MB--><SizeBasedTriggeringPolicysize="2MB"/><!--如果启用此配置,则日志会按文件名生成新压缩文件,即如果filePattern配置的日期格式为%d{yyyy-MM-ddHH},则每小时生成一个压缩文件,如果filePattern配置的日期格式为%d{yyyy-MM-dd},则天生成一个压缩文件--><!--<TimeBasedTriggeringPolicyinterval="1"modulate="true"/>--></Policies><Filters><!--此Filter意思是,只输出debug级别的数据--><!--DENY,日志将立即被抛弃不再经过其他过滤器;NEUTRAL,有序列表里的下个过滤器过接着处理日志;ACCEPT,日志会被立即处理,不再经过剩余过滤器。--><ThresholdFilterlevel="info"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="debug"onMatch="ACCEPT"onMismatch="DENY"/></Filters></RollingRandomAccessFile><!--INFO级别日志--><RollingRandomAccessFilename="info_appender"immediateFlush="true"fileName="${LOG_HOME}/info.log"filePattern="${LOG_HOME}/info/info-%d{yyyy-MM-ddHH_mm_ss}.log.gz"><PatternLayout><pattern>%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n</pattern></PatternLayout><Policies><SizeBasedTriggeringPolicysize="2MB"/></Policies><Filters><ThresholdFilterlevel="warn"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="info"onMatch="ACCEPT"onMismatch="DENY"/></Filters></RollingRandomAccessFile><!--WARN级别日志--><RollingRandomAccessFilename="warn_appender"immediateFlush="true"fileName="${LOG_HOME}/warn.log"filePattern="${LOG_HOME}/warn/warn-%d{yyyy-MM-ddHH_mm_ss}.log.gz"><PatternLayout><pattern>%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n</pattern></PatternLayout><Policies><SizeBasedTriggeringPolicysize="2MB"/></Policies><Filters><ThresholdFilterlevel="error"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="warn"onMatch="ACCEPT"onMismatch="DENY"/></Filters></RollingRandomAccessFile><!--ERROR级别日志--><RollingRandomAccessFilename="error_appender"immediateFlush="true"fileName="${LOG_HOME}/error.log"filePattern="${LOG_HOME}/error/error-%d{yyyy-MM-ddHH_mm_ss}.log.gz"><PatternLayout><pattern>%5p[%t]%d{yyyy-MM-ddHH:mm:ss}(%F:%L)%m%n</pattern></PatternLayout><Policies><SizeBasedTriggeringPolicysize="2MB"/></Policies><Filters><ThresholdFilterlevel="error"onMatch="ACCEPT"onMismatch="DENY"/></Filters></RollingRandomAccessFile></Appenders><Loggers><!--配置日志的根节点--><rootlevel="trace"><appender-refref="console_out_appender"/><appender-refref="console_err_appender"/><appender-refref="trace_appender"/><appender-refref="debug_appender"/><appender-refref="info_appender"/><appender-refref="warn_appender"/><appender-refref="error_appender"/></root><!--第三方日志系统--><loggername="org.springframework.core"level="info"/><loggername="org.springframework.beans"level="info"/><loggername="org.springframework.context"level="info"/><loggername="org.springframework.web"level="info"/><loggername="org.jboss.netty"level="warn"/><loggername="org.apache.http"level="warn"/></Loggers></Configuration>

log4j2.xml配置及例子

1.使用log4j2需要下载包

如下:

怎么使用log4j2自定义配置文件位置和文件名

2.配置文件可以有三种格式

(文件名必须规范,否则系统无法找到配置文件):

  • classpath下名为 log4j-test.json 或者log4j-test.jsn文件

  • classpath下名为 log4j2-test.xml

  • classpath下名为 log4j.json 或者log4j.jsn文件

  • classpath下名为 log4j2.xml

3.日志记录有两种方法

staticLoggerlogger=LogManager.getLogger(MyApplication.class.getName());privatestaticLoggerlogger=LogManager.getLogger("MyApplication");

4.我用的xml的配置

所以介绍一下xml配置:

1.首先要配几个要用到的appender,这些appender功能不一样,比如有常规输出,重大异常输出,你可能需要他们输出形式或者输出的文件不同,这些都可以在appender中配置

2.appender里面的一些配置说明:

  • name:appender的名称

  • fileName:输出文件和名称

  • append:是否追加,true表示追加内容到所在的日志,false表示每次都覆盖

  • filePattern:表示当日志到达指定的大小或者时间,产生新日志时,旧日志的命名路径

  • PatternLayout:指定输出日志的格式,具体代表的意思见前面的博客中

  • Policies:策略,表示日志什么时候应该产生新日志,可以有时间策略和大小策略等

  • ThresholdFilter :过滤器,log4j2中有很多的filter

3.接下来配置logger

指定哪些类进行何种输出,这个比较简单,可以直接看栗子:

<?xmlversion="1.0"encoding="UTF-8"?><ConfigurationmonitorInterval="1"status="ERROR"strict="true"name="LogConfig"><Properties><Propertyname="logbasedir">e:/log</Property><Propertyname="log.layout">%d%-5p%t(%c:%L)-%m%n</Property></Properties><--此处使用了两种类型的appender,RollingFile为滚动类型,满足策略条件后会新建文件夹记录--><Appenders><Appendertype="Console"name="STDOUT"><Target>SYSTEM_OUT</Target><Layouttype="PatternLayout"pattern="${log.layout}"/></Appender><Appendertype="RollingFile"name="FILE"fileName="${logbasedir}/jutap-${sys:APPNAME}.log"filePattern="${logbasedir}/jutap-${sys:APPNAME}-%d{yyyy-MM-dd}.%i.log"><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="100MB"/></Policies><Layouttype="PatternLayout"><Charset>GBK</Charset><Pattern>${log.layout}</Pattern></Layout></Appender><Appendertype="RollingFile"name="ExceptionLog"fileName="${logbasedir}/exception-${sys:APPNAME}.log"filePattern="${logbasedir}/exception-${sys:APPNAME}-%d{yyyy-MM-dd}.%i.log"><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="100MB"/></Policies><Layouttype="PatternLayout"><Charset>GBK</Charset><Pattern>${log.layout}</Pattern></Layout></Appender></Appenders><Loggers><Loggername="exception"level="error"additivity="false"><AppenderRefref="ExceptionLog"/></Logger><Rootlevel="info"><AppenderRefref="STDOUT"/><AppenderRefref="FILE"/></Root><Loggername="com.garfield.learn"level="debug"/><Loggername="com.garfield.learnp"level="info"/></Loggers></Configuration>
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么使用log4j2自定义配置文件位置和文件名的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:vue数据绑定的方式有哪些下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18