Log4j.properties配置详解
log4j日志脱敏处理+javaproperties文件加载
log4j⽇志脱敏处理+javaproperties⽂件加载Java 加载Properties 配置⽂件:ResourceBundle bundle = ResourceBundle.getBundle("log4j_filter"); // 不要写扩展名 .propertiesLOG_FILTER_SWITH = bundle.getString("log4j.filter.swith");LOG_FILTER_KEYS = bundle.getString("log4j.filter.keys"); // 直接在本类中使⽤main调⽤时⽤ Properties.class.getResourceAsStream("/log4j_filter.properties"); //Properties p = new Properties(); //p.load(in); //LOG_FILTER_SWITH = p.getProperty("log4j.filter.swith"); //LOG_FILTER_KEYS = p.getProperty("log4j.filter.keys");⽇志脱敏实现:因为只修改了⼀个log4j类的调⽤,故⽇志必须是private final static Logger logger = LogManager.getLogger(SeqConfControl.class);1 , 配置⽂件 log4j_filter.properties (⼀个参数是脱敏⽇志开关,⼀个参数是要脱敏的关键字)2,⾃定义类: org.apache.logging.log4j.spi.Log4jFilter.java 是解析处理⽇志字符串中的敏感信息;log4j原⽣类: org.apache.logging.log4j.spi.AbstractLogger.java 负责调⽤⾃⼰写的类的⽅法.3,规则⽀持k:v 和 k=v 两种形式的数据处理脱敏时v的长度如果⼤于8,采⽤ XXX****XXX的形式脱敏;如果⼩于等于8采⽤ ******* 形式脱敏效果:20:25:02,0197 [INFO ][ ][connect to SFTP . ip:10.0.26.36; port:22;uppath:null;downpath:home/selfftp/selffile/20161209/;username:selfftp;password:********][ :][hulk.frame.sftp.SFtpTools]21:06:16,0907 [INFO ][ ][接收到⼀个纯⽂本消息并开始传⼊数据库:{"data":"{\"state\":\"0\",\"hostName\":\"termfrontapp\",\"policyName\":\"check_SSPM_101\",\"stateName\":null,\"program\":null,\"entryId\":null,\"agentId\":null,\"msg\":\"{\\\21:06:16,0907 [INFO ][ ][the message to decode: {"account_num":"62294785200****0034","amount":"2.00","channel_id":"01I","p_trans_code":"1017006","card_type":"","start_time":"1481634017288","end_time":"1481634017526","term_id":"01159log4j_filter.properties:# log4j 过滤器配置⽂件,主要⽤于系统中敏感字段的脱敏# true表⽰打开 false表⽰关闭log4j.filter.swith=true# 要脱敏的关键字log4j.filter.keys=password,passwd,password1,password2,account_num⾃定义解析类:org.apache.logging.log4j.spi.Log4jFilter.javapackage org.apache.logging.log4j.spi;import java.util.ResourceBundle;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** ⾃定义处理⽇志中的敏感信息* @author yangw1006@**/public class Log4jFilter {/*** ⽇志脱敏开关*/private static String LOG_FILTER_SWITH = "false";/*** ⽇志脱敏关键字*/private static String LOG_FILTER_KEYS = null;static{// 加载配置⽂件try {// 直接在本类中使⽤main调⽤时⽤ Properties.class.getResourceAsStream("/log4j_filter.properties");//InputStream in =Properties.class.getClassLoader().getResourceAsStream("log4j_filter.properties");//Properties p = new Properties();//p.load(in);//LOG_FILTER_SWITH = p.getProperty("log4j.filter.swith");//LOG_FILTER_KEYS = p.getProperty("log4j.filter.keys");ResourceBundle bundle = ResourceBundle.getBundle("log4j_filter");LOG_FILTER_SWITH = bundle.getString("log4j.filter.swith");LOG_FILTER_KEYS = bundle.getString("log4j.filter.keys");} catch (Exception e) {e.printStackTrace();}}/*** 处理⽇志字符串,返回脱敏后的字符串* @param msg* @return*/public static String invokeMsg(final String message){String msg = new String(message);if("true".equals(LOG_FILTER_SWITH)){//处理字符串if(LOG_FILTER_KEYS!=null && LOG_FILTER_KEYS.length()>0){String[] keyArr = LOG_FILTER_KEYS.split(",");for(String key: keyArr){// 找keyint index= -1;do{index = msg.indexOf(key, index+1);if(index!=-1){// 判断key是否为单词字符if(isWordChar(msg,key,index)){continue;}// 确定是单词⽆疑....................................// 寻找值的开始位置.................................int valueStart = getValueStartIndex(msg,index + key.length());//查找值的结束位置(逗号,分号)........................int valueEnd = getValuEndEIndex(msg,valueStart);// 对获取的值进⾏脱敏String subStr = msg.substring(valueStart, valueEnd);subStr = tuomin(subStr);///////////////////////////msg = msg.substring(0,valueStart) + subStr + msg.substring(valueEnd); }}while(index!=-1);}}}return msg;}private static Pattern pattern = pile("[0-9a-zA-Z]");/*** 判断从字符串msg获取的key值是否为单词, index为key在msg中的索引值* @return*/private static boolean isWordChar(String msg,String key, int index){// 必须确定key是⼀个单词............................if(index!=0){ //判断key前⾯⼀个字符char preCh = msg.charAt(index-1);Matcher match = pattern.matcher(preCh+"");if(match.matches()){return true;}}//判断key后⾯⼀个字符char nextCh = msg.charAt(index+key.length());Matcher match = pattern.matcher(nextCh+"");if(match.matches()){return true;}return false;}/*** 获取value值的开始位置* @param msg 要查找的字符串* @param valueStart 查找的开始位置* @return*/private static int getValueStartIndex(String msg, int valueStart ){// 寻找值的开始位置.................................do{char ch = msg.charAt(valueStart);if(ch == ':' || ch == '='){ // key 与 value的分隔符valueStart ++;ch = msg.charAt(valueStart);if(ch == '"'){valueStart ++;}break; //找到值的开始位置}else{valueStart ++;}}while(true);return valueStart;}/*** 获取value值的结束位置* @return*/private static int getValuEndEIndex(String msg,int valueEnd){do{if(valueEnd == msg.length()){break;}char ch = msg.charAt(valueEnd);if(ch == '"'){ // 引号时,判断下⼀个值是结束,分号还是逗号决定是否为值的结束if(valueEnd+1 == msg.length()){break;}char nextCh = msg.charAt(valueEnd+1);if(nextCh ==';' || nextCh == ','){// 去掉前⾯的 \ 处理这种形式的数据 "account_num\\\":\\\"6230958600001008\\\"while(valueEnd>0 ){char preCh = msg.charAt(valueEnd-1);if(preCh != '\\'){break;}valueEnd--;}break;}else{valueEnd ++;}}else if (ch ==';' || ch == ','){break;}else{valueEnd ++;}}while(true);return valueEnd;}private static String tuomin(String submsg){StringBuffer sbResult = new StringBuffer();if(submsg!=null && submsg.length()>0){int len = submsg.length();if(len > 8){ //8位以上的隐掉中间4位for(int i = len-1;i>=0;i--){if(len-i<5 || len-i>8){sbResult.insert(0, submsg.charAt(i));}else{sbResult.insert(0, '*');}}}else{ //8位以下的全部使⽤ *for(int i =0;i<len;i++){sbResult.append('*');}}}return sbResult.toString();}public static void main (String[] args) {//{\\\"account_num\\\":\\\"6230958600001008\\\",\\\"amount\\\":\\\"\\\"String msg = "\\\"account_num\\\":\\\"6230958600001008\\\",\\\"amount\\\":\\\"\\\"";System.out.println(invokeMsg(msg));}}log4j原⽣类 org.apache.logging.log4j.spi.AbstractLogger.java 修改的地⽅# 代码 725⾏左右的⽅法protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message, final Throwable t) { // by yangwString invokeMsg = Log4jFilter.invokeMsg(message);logMessage(fqcn, level, marker, messageFactory.newMessage(invokeMsg), t);}。
IDEA远程连接HBase及其JavaAPI实战详解
IDEA远程连接HBase及其JavaAPI实战详解开放端⼝安全组没开放端⼝是原罪导致好多BUG费时费⼒。
Hbase悄悄咪咪的⽤了好多端⼝,⽐如被我抓到的42239,直接搜索报错药不对症。
Hbase安装直接下载或者下载到本地再上传都⾏,看你哪个快。
wget /dist/hbase/1.3.2/hbase-1.3.2-bin.tar.gztar -zxvf hbase-1.3.2-bin.tar.gz #解压mv hbase-1.3.2-bin /urs/local/hbase配置hbase-site.xmlcd /usr/local/hbase/confvi hbase-site.xml<property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.rootdir</name><value>/hbase-data</value></property><property><name>hbase.zookeeper.quorum</name><value>master:2181</value></property>配置hbase-env.shcd /usr/local/hbase/confecho $JAVA_HOME #若没有安装jdk可百度(偷懒)vi hbase-env.sh #添加要⼀致export JAVA_HOME=/usr/local/java运⾏测试cd /usr/local/hbase/bin./start-hbase.ship:16010访问域名配置服务器 vi /etc/hosts私⽹ip master公⽹ip master⽬录结构:创建⼀个maven项⽬并在pom.xml添加依赖:<dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.3.2</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>1.3.2</version></dependency>版本是1.3.2,注意和你⾃⼰的⼀致,可以登录hbase shell时查看。
ssh详解
SSH框架整合步骤详解SSH框架 2009-04-09 10:47:00 阅读611 评论0 字号:大中小订阅更系统地学习Struts1.x/Struts2.x+Hibernate+Spring,请学习该开源项目Appfuse终于,终于将SSH整合成功了,弄了几个小时,可以休息了(有的朋友弄了半个月,甚至重装了系统也没弄好,哎,庆幸啊)。
碰到问题千万不要放弃,要相信没有解决不了的问题!项目结构图:jsp部分为:index.jsp;success.jsp;fail.jspUserDAO.java,User.hbm.xml自动生成,HibernateSessionFactory 是多余的。
相关的配置文件、类文件详细信息,请参看Struts+Spring+Hibernate/SSH整合开发详细二以前是整过这三个框架的,可是工作期间都不曾用过,不知不觉之中,学的东西全忘了。
这次又要开始找工作了,看着招聘启事上都写着:要求熟练掌握Struts,Hibernate或Spring框架……,没得办法,重新学呗。
Spring in Action中文版下载地址(ftp协议)ftp://222.214.218.61/book5/20080228/cf8b35cc-5bcd-497 3-b6b7-37ae3ec78391.rar如果无法下载,可以在里重新搜索首先开始搭建项目环境,步骤如下:使用平台:MyEclipse 6.0框架版本:Struts 1.2 Hibernate 3.0 Spring 2.01>添加过程:<1> 新建项目。
Package Explorer视图下,右键单击 New -> Web Project;<2> 添加Struts框架。
菜单栏MyEclipse -> Capabilities,或者右键单击新建的项目名,选择快捷菜单中的"MyEclipse"下的二级菜单;设置相关的包名后,请写一个Struts的小例子,用来测试Struts是否可用;<3> 添加Spring。
jeecg源码解析1.0
本文档主要是对 jeecg 3.0 源码解析过程中涉及到的技术知识进行汇总,对于少部分实 现细节进行了说明。 由于时间仓促,对一些细节的介绍还不是很清晰,后续会进一步整理一下。 有问题欢迎联系作者:xianming01@
目录
1 配置........................................................................................................................................... 4 1.1 Web.xml ........................................................................................................................ 4 1.1.1 webAppRootKey ................................................................................................ 4 1.1.2 Log4jConfigListener ........................................................................................... 6 1.1.3 openSessionInViewFilter ................................................................................... 6 1.1.4 druidWebStatFilter ........................
log4j2使用properties文件进行配置
log4j2使⽤properties⽂件进⾏配置⽹上不少⽂章给的都是⽤xml进⾏配置,也会提到⽆法使⽤properties⽂件对log4j进⾏配置,但那应该只是在他们写⽂章的时候才是如此,最新的2.8.2版本经过我试验后是可以做到的当然该⽂件最好放在特定的⽬录中才⾏,官⽅⽂档也提到了1.Log4j will inspect the "log4j.configurationFile" system property and, if set, will attempt to load the configuration using the ConfigurationFactory that matches the file extension.2.If no system property is set the YAML ConfigurationFactory will look for log4j2-test.yaml or log4j2-test.yml in the classpath.3.If no such file is found the JSON ConfigurationFactory will look for log4j2-test.json or log4j2-test.jsn in the classpath.4.If no such file is found the XML ConfigurationFactory will look for log4j2-test.xml in the classpath.5.If a test file cannot be located the YAML ConfigurationFactory will look for log4j2.yaml or log4j2.yml on the classpath.6.If a YAML file cannot be located the JSON ConfigurationFactory will look for log4j2.json or log4j2.jsn on the classpath.7.If a JSON file cannot be located the XML ConfigurationFactory will try to locate log4j2.xml on the classpath.8.If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.name = PropertiesConfigproperty.filename = target/logs#appenders = console, file#配置值是appender的类型,并不是具体appender实例的nameappenders = rollingappender.rolling.type = RollingFile = RollingLogFileappender.rolling.fileName=${filename}/automationlogs.logappender.rolling.filePattern = ${filename}/automationlogs-%d{MM-dd-yy-HH-mm-ss}-%i.logyout.type = PatternLayoutyout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%nappender.rolling.policies.type = Policiesappender.rolling.policies.size.type = SizeBasedTriggeringPolicyappender.rolling.policies.size.size=100MBappender.rolling.strategy.type = DefaultRolloverStrategyappender.rolling.strategy.max = 5rootLogger.level = tracerootLogger.appenderRef.rolling.ref = rollingrootLogger.appenderRef.rolling.ref = RollingLogFile。
springlog4j2.xml配置文件详解
springlog4j2.xml配置⽂件详解⼀、log4j2介绍 log4j 2.x版本不再⽀持像1.x中的.properties后缀的⽂件配置⽅式,2.x版本配置⽂件后缀名只能为".xml",".json"或者".jsn"。
配置⽂件的格式:log2j配置⽂件可以是xml格式的,也可以是json格式的。
配置⽂件的位置:log4j2默认会在classpath⽬录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的⽂件。
系统选择配置⽂件的优先级(从先到后)如下: (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的⽂件. (2).classpath下的名为log4j2-test.xml的⽂件. (3).classpath下名为log4j2.json 或者log4j2.jsn的⽂件. (4).classpath下名为log4j2.xml的⽂件. 我们⼀般默认使⽤log4j2.xml进⾏命名。
⼆、配置⽂件节点解析 (1).根节点Configuration有两个属性:status和monitorinterval,有两个⼦节点:Appenders和Loggers(表明可以定义多个Appender和Logger)。
status⽤来指定log4j本⾝的打印⽇志的级别。
monitorinterval⽤于指定log4j⾃动重新配置的监测间隔时间,单位是s,最⼩是5s。
(2).Appenders节点,常见的有三种⼦节点:Console、RollingFile、File。
Console节点⽤来定义输出到控制台的Appender。
name:指定Appender的名字. target:SYSTEM_OUT 或 SYSTEM_ERR,⼀般只设置默认:SYSTEM_OUT。
PatternLayout:输出格式,不设置默认为:%m%n。
log4j2RollingRandomAccessFile配置过程
log4j2RollingRandomAccessFile配置过程log4j2 RollingRandomAccessFile配置⼀、需求背景1. ⽇志按⼩时压缩成zip⽂件。
2. 仅保存距离当前时间最近24⼩时的历史压缩⽂件。
3. 压缩封存的zip⽂件,按照零点为参考点纠偏。
4. 将com.roadway.acceptor.base.DebugUtils类的⽇志输出到指定⽂件,且不再输出到其他⽂件。
⼆、log4j2 配置实现<?xml version="1.0" encoding="UTF-8"?><Configuration status="INFO" monitorInterval="120"><properties><property name="MSG_LOG_HOME">/data/gpslog</property></properties><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d [%t] %-5p [%c] - %m%n" /></Console><RollingRandomAccessFile name="msgAppender" immediateFlush="true"fileName="${MSG_LOG_HOME}/msg.log"filePattern="${MSG_LOG_HOME}/backup/msg.%d{yyyyMMddHH}.zip"><Filters><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters><PatternLayout pattern="%m%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/></Policies><DefaultRolloverStrategy max="24"><Delete basePath="${MSG_LOG_HOME}" maxDepth="2"><IfFileName glob="*/msg.*.zip" /><IfLastModified age="24H" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile></Appenders><Loggers><AsyncLogger name="com.roadway.DebugUtils" additivity="FALSE" level="INFO"><appender-ref ref="msgAppender" /></AsyncLogger></Loggers></Configuration>三、配置说明1. monitorInterval,博客配置的为120,单位为秒。
idea log4j插件用法
1. 什么是Log4j插件Log4j是一个开源的日志记录框架,广泛应用于Java项目中。
Log4j插件是用于在开发过程中方便地使用Log4j框架的工具,能够帮助开发人员快速配置和管理日志记录功能。
2. Log4j插件的安装在使用Log4j插件之前,首先需要在开发环境中安装Log4j插件。
可以通过Maven或手动下载Jar包的方式将Log4j插件导入到项目中,然后在项目配置文件中声明Log4j插件的依赖关系。
3. Log4j插件的配置在项目中成功导入Log4j插件后,需要对插件进行配置。
首先需要创建一个Log4j配置文件(通常命名为log4j.properties或log4j.xml),在配置文件中指定日志记录的格式、输出目标、日志级别等参数。
4. 使用Log4j插件记录日志配置完成后,开发人员可以通过调用Log4j插件提供的API来记录日志。
开发人员可以在代码中插入日志记录语句,指定日志的级别(如DEBUG、INFO、WARN、ERROR等),以及日志的内容。
通过Log4j插件记录的日志可以输出到控制台、文件、数据库等不同的目标。
5. Log4j插件的优点Log4j插件提供了丰富的日志记录功能,可以根据需要灵活地配置日志记录的方式和输出目标。
Log4j插件具有较高的性能和稳定性,适用于各种规模的项目。
另外,Log4j插件支持多种日志级别,开发人员可以根据实际需要精细地控制日志的记录和输出。
6. Log4j插件的注意事项在使用Log4j插件的过程中,需要注意配置文件的正确指定和日志记录语句的合理使用。
对于不同的项目和需求,需要仔细选择适合的日志记录方式和输出目标,以便保证日志记录的准确性和便捷性。
7. 结语Log4j插件是一个优秀的日志记录工具,能够帮助开发人员轻松地实现日志记录的功能。
通过仔细的配置和合理的使用,开发人员可以充分发挥Log4j插件的优势,为项目提供有效的日志管理和追踪功能。
希望本文对大家了解Log4j插件的用法有所帮助。
log4j使用教程详解(怎么使用log4j2)
log4j使⽤教程详解(怎么使⽤log4j2)1. 去官⽅下载log4j 2,导⼊jar包,基本上你只需要导⼊下⾯两个jar包就可以了(xx是乱七⼋糟的版本号):log4j-core-xx.jarlog4j-api-xx.jar2. 导⼊到你的项⽬中:这个就不说了。
3. 开始使⽤:我们知道,要在某个类中使⽤log4j记录⽇志,只需要申明下⾯的成员变量(其实不⼀定要是成员变量,只是为了⽅便调⽤⽽已)复制代码代码如下:private static Logger logger = LogManager.getLogger(MyApp.class.getName());⾥getLogger有⼀个参数指定的是这个logger的名称,这个名称在配置⽂件⾥⾯可是有需要的,这个待会⼉再说。
声明了Logger对象,我们就可以在代码中使⽤他了。
4. ⽇志的级别:我们现在要调⽤logger的⽅法,不过在这个Logger对象中,有很多⽅法,所以要先了解log4j的⽇志级别,log4j规定了默认的⼏个级别:trace<debug<info<warn<error<fatal等。
这⾥要说明⼀下:1)级别之间是包含的关系,意思是如果你设置⽇志级别是trace,则⼤于等于这个级别的⽇志都会输出。
2)基本上默认的级别没多⼤区别,就是⼀个默认的设定。
你可以通过它的API⾃⼰定义级别。
你也可以随意调⽤这些⽅法,不过你要在配置⽂件⾥⾯好好处理了,否则就起不到⽇志的作⽤了,⽽且也不易读,相当于⼀个规范,你要完全定义⼀套也可以,不⽤没多⼤必要。
3)这不同的级别的含义⼤家都很容易理解,这⾥就简单介绍⼀下:trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低⽇志级别不让他输出。
debug:调试么,我⼀般就只⽤这个作为最低级别,trace压根不⽤。
Log4j2.xml配置指定某个方法单独文件打印日志
Log4j2.xml配置指定某个⽅法单独⽂件打印⽇志1.Log4j2.xml配置⽂件信息说明:同⼀个RollingFile 可以配置多个Logger,实现多个class打印到同⼀个⽇志⽂件<?xml version="1.0" encoding="UTF-8"?><!--Configuration后⾯的status,这个⽤于设置log4j2⾃⾝内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--><!--monitorInterval:Log4j能够⾃动检测修改配置⽂件和重新配置本⾝,设置间隔秒数--><configuration monitorInterval="5"><!--⽇志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--变量配置--><Properties><!-- 格式化输出:%date表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度 %msg:⽇志消息,%n是换⾏符--><!-- %logger{36} 表⽰ Logger 名字最长36个字符 --><property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/><!-- 定义⽇志存储的路径 --><property name="FILE_PATH" value="logs"/><property name="FILE_NAME" value="merger-admin"/></Properties><appenders><console name="Console" target="SYSTEM_OUT"><!--输出⽇志的格式--><PatternLayout pattern="${LOG_PATTERN}"/><!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></console><!--⽂件会打印出所有信息,这个log每次运⾏程序会⾃动清空,由append属性决定,适合临时测试⽤--><File name="Filelog" fileName="${FILE_PATH}/test.log" append="false"><PatternLayout pattern="${LOG_PATTERN}"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的warn及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--> <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的error及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--> <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!--单独记录某个class的⽇志⽂件--><RollingFile name="RollingFileFtp" fileName="${FILE_PATH}/ftp_log.log" filePattern="${FILE_PATH}/ftp_log-INFO-%d{yyyy-MM-dd}_%i.log.gz"><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="20MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile></appenders><!--Logger节点⽤来单独指定⽇志的形式,⽐如要为指定包下的class指定不同的⽇志级别等。
java日志文件log4j.properties配置详解
java⽇志⽂件log4j.properties配置详解⼀、Log4j配置第⼀步:加⼊log4j-1.2.8.jar到lib下。
第⼆步:在CLASSPATH下建⽴log4j.properties。
内容如下:放在src下的话就不⽤配置否则得去web.xml⾥⾯配置⼀个Listener参考:log4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d-[TS] %p %t %c - %m%n.neusoft=DEBUG.opensymphony.oscache=ERROR.sf.navigator=ERRORmons=ERROR.apache.struts=WARN.displaytag=ERROR.springframework=DEBUG.ibatis.db=WARN.apache.velocity=FATAL.canoo.webtest=WARN.hibernate.ps.PreparedStatementCache=WARN.hibernate=DEBUG.logicalcobwebs=WARNlog4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d-[TS] %p %t %c - %m%n.neusoft=DEBUG.opensymphony.oscache=ERROR.sf.navigator=ERRORmons=ERROR.apache.struts=WARN.displaytag=ERROR.springframework=DEBUG.ibatis.db=WARN.apache.velocity=FATAL.canoo.webtest=WARN.hibernate.ps.PreparedStatementCache=WARN.hibernate=DEBUG.logicalcobwebs=WARN第三步:相应的修改其中属性,修改之前就必须知道这些都是⼲什么的,在第⼆部分讲解。
spring配置详解
spring配置详解1.前⾔公司⽼项⽬的后台,均是基于spring框架搭建,其中还⽤到了log4j.jar等开源架包。
在新项⽬中,则是spring和hibernate框架均有使⽤,利⽤了hibernate框架,来实现持久化,简化sql操作等。
Hibernate配置⽂件可以有两种格式,⼀种是 hibernate.properties,另⼀种是hibernate.cfg.xml。
后者稍微⽅便⼀些,当增加hbm映射⽂件的时候,可以直接在 hibernate.cfg.xml ⾥⾯增加,不必像 hibernate.properties 必须在初始化代码中加⼊。
我们新项⽬中使⽤的是hibernate.cfg.xml格式。
不过在本⽂中不将细述,后续有机会再补上。
公司项⽬中,中间件主要有tomcat,webshpere,WebLogic。
以下,将对项⽬中spring基本配置,log4j的配置,还有中间件的相关参数配置做⼀个初步的介绍。
2.spring配置——以⽼GIS项⽬为例⼦GISV13中的配置涉及到了SpringMVC,IOC,AOP, Quartz⽅⾯的配置。
配置的实现是通过注记配置和XML配置来合作实现。
这⾥,我将按照Spring的配置流程,将其他⼏个⽅⾯的配置融合其中,来进⾏全⾯解析。
2.1SpringMVC的配置2.1.1.web.xml的配置Web程序中,当中间件启动时,中间件会⾸先读取web.xml中的配置。
在web.xml中可以配置监听器,过滤器,servlet映射等等。
在Spring 框架中,我们主要需配置容器初始化时读取的spring容器配置⽂件的路径以及springMVC中的分发器DispatcherServlet。
在GISV13的web.xml中,我们定义了如下内容:InitGISConfigServlet定义了容器启动时,⾸先要运⾏这个⽅法。
然后servletname为MVC的这部分便是定义了springMVC的分发器以及此servlet所对应的加载配置⽂件的路径。
log4g.property文件解析
log4j.properties 是Log4j 日志框架中的配置文件,用于配置日志的输出方式、级别、格式等。
下面是对log4j.properties 文件的解析说明:基本语法:以# 开头的行表示注释。
使用键值对的形式配置属性,例如key = value。
属性可以根据需求进行多行配置,使用反斜杠\ 进行换行。
常用配置属性:log4j.rootLogger:设置默认的根日志级别。
log4j.appender:定义日志的输出目的地,可以是控制台、文件等。
log4j.logger:指定特定包或类的日志级别。
log4j.additivity:设置是否将日志传递给父级logger。
yout:定义日志的格式,如日期、日志级别、类名等。
日志级别(Level):ALL:最低级别,打开所有日志记录。
DEBUG:调试级别,用于调试信息。
INFO:信息级别,用于记录程序运行信息。
WARN:警告级别,用于非致命性的异常情况。
ERROR:错误级别,用于可恢复的错误情况。
FATAL:严重错误级别,用于无法恢复的错误情况。
OFF:最高级别,关闭所有日志记录。
Appender(输出器):ConsoleAppender:将日志输出到控制台。
FileAppender:将日志输出到文件。
RollingFileAppender:将日志输出到滚动文件,可设置文件大小和数量限制。
DailyRollingFileAppender:将日志输出到按日期滚动的文件。
SocketAppender:将日志输出到网络套接字。
JDBCAppender:将日志输出到数据库。
示例配置:log4j.rootLogger=DEBUG, console, file# 控制台输出配置log4j.appender.console=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d [%-5p] %c - %m%n# 文件输出配置log4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=/path/to/logfile.loglog4j.appender.file.MaxFileSize=5MBlog4j.appender.file.MaxBackupIndex=10yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d [%-5p] %c - %m%n以上是对log4j.properties 文件的简要解析,根据实际需求和日志框架的版本,配置文件的具体内容可能会有所差异。
log4配置详解
实例#定义log输出级别log4j.rootLogger=debug,CONSOLE#log4j.rootLogger=INFO,DEFAULT#定义日志输出目的地:控制台log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender#日志输出格式,下面一行是指定具体的格式yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss,SSS}[%c]-[%p]%m%n#按一定的频度滚动日志记录文件log4j.appender.DEFAULT=org.apache.log4j.DailyRollingFileAppender#DatePattern,精确到dd为每天log4j.appender.DEFAULT.DatePattern='.'yyyy-MM-dd#append的值为true为增加,false则为覆盖log4j.appender.DEFAULT.Append=true#file 指定日志输出目录log4j.appender.DEFAULT.File=D:/logs/default.log#日志输出格式yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss,SSS}[%c]-[%p]%m%n% 含义:%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921 %r: 输出自应用启动到输出该log信息耗费的毫秒数%c: 输出日志信息所属的类目,通常就是所在类的全名%t: 输出产生该日志事件的线程名%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。
web.xml配置文件超详细说明!!!
web.xml配置⽂件超详细说明!!!⼀、web.xml是什么?⾸先 web.xml 是java web 项⽬的⼀个重要的配置⽂件,但是web.xml⽂件并不是Java web⼯程必须的。
web.xml⽂件是⽤来配置:欢迎页、servlet、filter等的。
当你的web⼯程没⽤到这些时,你可以不⽤web.xml⽂件来配置你的web⼯程。
所在位置项⽬名/web/WEB-INFO/web.xml,如下图所⽰web.xml能做的事情:其实,web.xml的模式(Schema)⽂件中定义了多少种标签元素,web.xml中就可以出现它的模式⽂件所定义的标签元素,它就能拥有定义出来的那些功能。
web.xml的模式⽂件是由Sun公司定义的,每个web.xml⽂件的根元素<web-app>中,都必须标明这个web.xml使⽤的是哪个模式⽂件。
如:web.xml 配置⽂件具体的内容⼆、Web.xml详解:1.web.xml加载过程(步骤)⾸先简单讲⼀下,web.xml的加载过程。
当启动⼀个WEB项⽬时,容器包括(JBoss、Tomcat等)⾸先会读取项⽬web.xml配置⽂件⾥的配置,当这⼀步骤没有出错并且完成之后,项⽬才能正常地被启动起来。
1. 启动WEB项⽬的时候,容器⾸先会去它的配置⽂件web.xml读取两个节点: <listener></listener>和<context-param></context-param>。
2. 紧接着,容器创建⼀个ServletContext(application),这个WEB项⽬所有部分都将共享这个上下⽂。
3. 容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存⼊ServletContext。
4. 容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有contextInitialized(ServletContextEvent args)初始化⽅法,启动Web应⽤时,系统调⽤Listener的该⽅法,在这个⽅法中获得:[html]1. <span style="font-family:Times New Roman;">ServletContextapplication=ServletContextEvent.getServletContext();</span>context-param的值就是application.getInitParameter("context-param的键");得到这个context-param的值之后,你就可以做⼀些操作了。
log4j.xml配置文件详解
log4j.xml配置⽂件详解⼀ log4j.xml 配置<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration><!-- 将⽇志信息输出到控制台 --><appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"><!-- 设置⽇志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><!-- 设置⽇志输出的格式 --><param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /></layout><!--过滤器设置输出的级别--><filter class="org.apache.log4j.varia.LevelRangeFilter"><!-- 设置⽇志输出的最⼩级别 --><param name="levelMin" value="WARN" /><!-- 设置⽇志输出的最⼤级别 --><param name="levelMax" value="ERROR" /><!-- 设置⽇志输出的xxx,默认是false --><param name="AcceptOnMatch" value="true" /></filter></appender><!-- 将⽇志信息输出到⽂件,但是当⽂件的⼤⼩达到某个阈值的时候,⽇志⽂件会⾃动回滚 --><appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender"><!-- 设置⽇志信息输出⽂件全路径名 --><param name="File" value="D:/log4j/RollingFileAppender.log" /><!-- 设置是否在重新启动服务时,在原有⽇志的基础添加新⽇志 --><param name="Append" value="true" /><!-- 设置保存备份回滚⽇志的最⼤个数 --><param name="MaxBackupIndex" value="10" /><!-- 设置当⽇志⽂件达到此阈值的时候⾃动回滚,单位可以是KB,MB,GB,默认单位是KB --><param name="MaxFileSize" value="10KB" /><!-- 设置⽇志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><!-- 设置⽇志输出的格式 --><param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /></layout></appender><!-- 将⽇志信息输出到⽂件,可以配置多久产⽣⼀个新的⽇志信息⽂件 --><appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender"><!-- 设置⽇志信息输出⽂件全路径名 --><param name="File" value="D:/log4j/DailyRollingFileAppender.log" /><!-- 设置⽇志每分钟回滚⼀次,即产⽣⼀个新的⽇志⽂件 --><param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" /><!-- 设置⽇志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><!-- 设置⽇志输出的格式 --><param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /></layout></appender>⼆配置的其他说明(1). 输出⽅式appender⼀般有5种:org.apache.log4j.RollingFileAppender(滚动⽂件,⾃动记录最新⽇志)org.apache.log4j.ConsoleAppender (控制台)org.apache.log4j.FileAppender (⽂件)org.apache.log4j.DailyRollingFileAppender (每天产⽣⼀个⽇志⽂件)org.apache.log4j.WriterAppender (将⽇志信息以流格式发送到任意指定的地⽅)(2). ⽇记记录的优先级priority,优先级由⾼到低分为OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j2中properties配置文件
Log4j2中properties配置文件Log4j2 一开始抛弃了properties配置文件格式,到2.4版本时,又开始支持properties配置文件格式。
到2.6版本又有新的要求。
我用的是写本文时的最近版本2.81.status = error2.3.property.LOG_HOME=/output/logs4.property.BACKUP_HOME=backup5.property.SERVER_NAME=buddie-Service6.property.EVERY_FILE_SIZE=10M7.property.OUTPUT_LOG_LEVEL=INFO8.property.FILE_MAX=109.10.appender.console.type = Console = STDOUTyout.type = PatternLayoutyout.pattern = %m%n14.15.appender.rolling.type=RollingFile=RollingFileAll17.appender.rolling.filter.threshold.level = trace18.appender.rolling.filter.threshold.type = ThresholdFilter19.appender.rolling.fileName=${LOG_HOME}/dev_${SERV ER_NAME}_all.log20.appender.rolling.filePattern=${LOG_HOME}/dev_${BAC KUP_HOME}/dev_${SERVER_NAME}_all.%d{yyyy-MM-dd-HH}.logyout.type=PatternLayoutyout.pattern=%d %p %C{1.} [%t] % m%n23.appender.rolling.policies.type=Policies24.appender.rolling.policies.time.type=TimeBasedTriggeri ngPolicy25.appender.rolling.policies.time.interval=226.appender.rolling.policies.time.modulate=true27.appender.rolling.policies.size.type=SizeBasedTriggerin gPolicy28.appender.rolling.policies.size.size=${EVERY_FILE_SIZE}29.appender.rolling.strategy.type=DefaultRolloverStrateg y30.31.appender.error.type=RollingFile=RollingFileError33.appender.error.filter.threshold.level = error34.appender.error.filter.threshold.type = ThresholdFilter35.appender.error.fileName=${LOG_HOME}/dev_${SERVE R_NAME}_error.log36.appender.error.filePattern=${LOG_HOME}/dev_${BACK UP_HOME}/dev_${SERVER_NAME}_error.%d{yyyy-MM-dd-HH}.logyout.type=PatternLayoutyout.pattern=%d %p %C{1.} [%t] %m %n39.appender.error.policies.type=Policies40.appender.error.policies.time.type=TimeBasedTriggerin gPolicy41.appender.error.policies.time.interval=242.appender.error.policies.time.modulate=true43.appender.error.policies.size.type=SizeBasedTriggering Policy44.appender.error.policies.size.size=${EVERY_FILE_SIZE}45.appender.error.strategy.type=DefaultRolloverStrategy46.47.appender.charge.type=RollingFile=RollingFileCharge49.appender.charge.filter.threshold.level = trace50.appender.charge.filter.threshold.type = ThresholdFilter51.appender.charge.fileName=${LOG_HOME}/dev_${SER VER_NAME}_charge.log52.appender.charge.filePattern=${LOG_HOME}/dev_${BA CKUP_HOME}/dev_${SERVER_NAME}_charge.%d{yyyy-MM-dd-HH}.logyout.type=PatternLayoutyout.pattern=%d %p %C{1.} [%t] % m%n55.appender.charge.policies.type=Policies56.appender.charge.policies.time.type=TimeBasedTrigger ingPolicy57.appender.charge.policies.time.interval=258.appender.charge.policies.time.modulate=true59.appender.charge.policies.size.type=SizeBasedTriggerin gPolicy60.appender.charge.policies.size.size=${EVERY_FILE_SIZE}61.appender.charge.strategy.type=DefaultRolloverStrateg y62. = buddie.activity64.logger.activity.level = debug65.logger.activity.additivity = false66.logger.activity.appenderRef.all.ref = RollingFileAll67.logger.activity.appenderRef.error.ref = RollingFileError68.logger.activity.appenderRef.stdout.ref = STDOUT69. = buddie.login71.logger.login.level = debug72.logger.login.additivity = false73.logger.login.appenderRef.all.ref = RollingFileAll74.logger.login.appenderRef.error.ref = RollingFileError75.logger.login.appenderRef.stdout.ref = STDOUT76. = buddie.charge78.logger.charge.level = trace79.logger.charge.additivity = false80.logger.charge.appenderRef.all.ref = RollingFileAll81.logger.charge.appenderRef.error.ref = RollingFileError82.logger.charge.appenderRef.charge.ref = RollingFileCha rge83.logger.charge.appenderRef.stdout.ref = STDOUT84.85.rootLogger.level = info86.rootLogger.appenderRef.stdout.ref = STDOUT87.rootLogger.appenderRef.all.ref = RollingFileAll88.rootLogger.appenderRef.error.ref = RollingFileError。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Log4j.properties配置详解一、Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。
这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。
综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
1、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。
这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。
2、Appenders禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
常使用的类如下:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)配置模式:log4j.appender.appenderName = classNamelog4j.appender.appenderName.Option1 = value1…log4j.appender.appenderName.OptionN = valueN3、Layouts有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。
Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。
常使用的类如下:org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)配置模式:yout =classNameyout.Option1 = value1yout.OptionN = valueN二、配置详解在实际应用中,要使Log4j在系统中运行须事先设定配置文件。
配置文件事实上也就是对Logger、Appender及Layout进行相应设定。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。
下面以properties属性文件为例介绍log4j.properties的配置。
1、配置根Logger:log4j.rootLogger = [ level ] , appenderName1, appenderName2, ….apache=false:表示Logger不会在父Logger的appender里输出,默认为true。
level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。
通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。
appenderName:就是指定日志信息要输出到哪里。
可以同时指定多个输出目的地,用逗号隔开。
例如:log4j.rootLogger=INFO,A1,B2,C32、配置日志信息输出目的地(appender):log4j.appender.appenderName = classNameappenderName:自定义appderName,在log4j.rootLogger设置中使用;className:可设值如下:(1)org.apache.log4j.ConsoleAppender(控制台)(2)org.apache.log4j.FileAppender(文件)(3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)(4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)(5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)(1)ConsoleAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Target=System.err:默认值是System.out。
(2)FileAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
(3)DailyRollingFileAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。
DatePattern='.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。
当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM。
另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:1)'.'yyyy-MM:每月2)'.'yyyy-ww:每周3)'.'yyyy-MM-dd:每天4)'.'yyyy-MM-dd-a:每天两次5)'.'yyyy-MM-dd-HH:每小时6)'.'yyyy-MM-dd-HH-mm:每分钟(4)RollingFileAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
MaxFileSize=100KB:后缀可以是KB, MB 或者GB。
在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。
3、配置日志信息的输出格式(Layout):yout=classNameclassName:可设值如下:(1)org.apache.log4j.HTMLLayout(以HTML表格形式布局)(2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)(3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)(4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)(1)HTMLLayout选项:LocationInfo=true:输出java文件名称和行号,默认值是false。
Title=My Logging:默认值是Log4J Log Messages。
(2)PatternLayout选项:ConversionPattern=%m%n:设定以怎样的格式显示消息。
格式化符号说明:%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。
例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。