博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
log4j 超完美配置文件!
阅读量:6940 次
发布时间:2019-06-27

本文共 16359 字,大约阅读时间需要 54 分钟。

hot3.png

#【该配置为增加到多大量之后自动生产一个】#可以设置级别:debug>info>error#debug:显示debug、info、error#info:显示info、error#error:只error#log4j.rootLogger=debug,appender1#log4j.rootLogger=info,appender1#####################可以取消注释log4j.rootLogger=debug,appender1#输出到文件(这里默认为追加方式)#追加的意思重启时候是否重新在已有日志里面写入log4j.appender.appender1=org.apache.log4j.RollingFileAppenderlog4j.appender.appender1.Append =false#设置文件输出路径#【1】文本文件log4j.appender.appender1.File=L:/log.log#设置文件输出样式【自定义】log4j.appender.appender1.layout=org.apache.log4j.PatternLayout#自定义输出格式log4j.appender.appender1.layout.ConversionPattern =[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n# %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n##7 定义A2的输出文件的最大长度 log4j.appender.appender1.MaxFileSize = 2KB ##8 定义A2的备份文件数 log4j.appender.appender1.MaxBackupIndex=2#【设置多久更新生成一个文件】#可以设置级别:debug>info>error#debug:显示debug、info、error#info:显示info、error#error:只error#log4j.rootLogger=debug,appender1#log4j.rootLogger=info,appender1#####################可以取消注释#log4j.rootLogger=debug,appender1##输出到文件(这里默认为追加方式)##追加的意思重启时候是否重新在已有日志里面写入#log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender#log4j.appender.appender1.Append =false###设置文件输出路径##【1】文本文件#log4j.appender.appender1.File=L:/log.log##设置文件输出样式【自定义】#log4j.appender.appender1.layout=org.apache.log4j.PatternLayout##自定义输出格式#log4j.appender.appender1.layout.ConversionPattern =[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n## %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n##定义时间多久生成一个文件#log4j.appender.appender1.DatePattern = '_'yyyy-MM-dd-HH-mm'.log'#【文本形式】#可以设置级别:debug>info>error#debug:显示debug、info、error#info:显示info、error#error:只error#log4j.rootLogger=debug,appender1#log4j.rootLogger=info,appender1#####################可以取消注释#log4j.rootLogger=debug,appender1###输出到文件(这里默认为追加方式)##追加的意思重启时候是否重新在已有日志里面写入#log4j.appender.appender1=org.apache.log4j.FileAppender#log4j.appender.appender1.Append =true###设置文件输出路径##【1】文本文件#log4j.appender.appender1.File=c:/Log4JDemo02.log##设置文件输出样式#log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout#【HTML形式】#可以设置级别:debug>info>error#debug:显示debug、info、error#info:显示info、error#error:只error#log4j.rootLogger=debug,appender1#log4j.rootLogger=info,appender1#####################可以取消注释#log4j.rootLogger=debug,appender1##输出到文件(这里默认为追加方式)##追加的意思重启时候是否重新在已有日志里面写入#log4j.appender.appender1=org.apache.log4j.FileAppender#log4j.appender.appender1.Append =true##设置文件输出路径##【2】HTML文件#log4j.appender.appender1.File=c:/Log4JDemo02.html##设置文件输出样式#log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout#【备注】#org.apache.log4j.HTMLLayout(以HTML表格形式布局),#org.apache.log4j.PatternLayout(可以灵活地指定布局模式),#org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),#org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)#%m   输出代码中指定的消息#%p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL #%r   输出自应用启动到输出该log信息耗费的毫秒数 #%c   输出所属的类目,通常就是所在类的全名 #%t   输出产生该日志事件的线程名 #%n   输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” #%d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日  22 : 10 : 28 , 921  #%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )

为了更好,此博文更完美。。。

提供配置文件

web.xml

  
    
This is the description of my J2EE component
    
This is the display name of my J2EE component
    
initLogger
    
servlet.initLogger
    
    
log4j
    
WEB-INF/log4j.properties
    
     
1
  
  
    
This is the description of my J2EE component
    
This is the display name of my J2EE component
    
c
    
servlet.c
  
  
    
c
    
/c
  
  
    
index.jsp
  

sevlet  initLogger.java

package servlet;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.net.MalformedURLException;import java.net.URISyntaxException;import java.net.URL;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.PropertyConfigurator;import util.dao;public class initLogger extends HttpServlet {	/**	 * 	 */	private static final long serialVersionUID = 7010497166323512560L;	/**	 * Destruction of the servlet. 
 */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /**  * The doGet method of the servlet. 
 *   * This method is called when a form has its tag value method equals to get.  *   * @param request  *            the request send by the client to the server  * @param response  *            the response send by the server to the client  * @throws ServletException  *             if an error occurred  * @throws IOException  *             if an error occurred  */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println(""); out.println(""); out.println("  A Servlet"); out.println("  "); out.print("    This is "); out.print(this.getClass()); out.println(", using the GET method"); out.println("  "); out.println(""); out.flush(); out.close(); } /**  * The doPost method of the servlet. 
 *   * This method is called when a form has its tag value method equals to  * post.  *   * @param request  *            the request send by the client to the server  * @param response  *            the response send by the server to the client  * @throws ServletException  *             if an error occurred  * @throws IOException  *             if an error occurred  */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println(""); out.println(""); out.println("  A Servlet"); out.println("  "); out.print("    This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println("  "); out.println(""); out.flush(); out.close(); } /*  * 通过上下文来取工程路径  *   * @return  *   * @throws Exception  */ private String getAbsolutePathByContext() throws Exception { String webPath = this.getServletContext().getRealPath("/"); webPath = webPath.replaceAll( "[\\\\\\/]WEB-INF[\\\\\\/]classes[\\\\\\/]?", "/"); webPath = webPath.replaceAll("[\\\\\\/]+", "/"); webPath = webPath.replaceAll("%20", " "); if (webPath.matches("^[a-zA-Z]:.*?$")) { } else { webPath = "/" + webPath; } webPath += "/"; webPath = webPath.replaceAll("[\\\\\\/]+", "/"); return webPath; } /**  * Initialization of the servlet. 
 *   * @throws ServletException  *             if an error occurs  */ public void init() throws ServletException { String webPath = null; try { webPath = getAbsolutePathByContext(); } catch (Exception e) { } // 在weblogic 11g 上可能无法从上下文取到工程物理路径,所以改为下面的 if (webPath == null) { try { webPath = getAbsolutePathByResource(); } catch (Exception e) { e.printStackTrace(); } } if (webPath == null) { try { webPath = getAbsolutePathByResource(); } catch (Exception e) { } } String prefix = webPath; String file = this.getServletConfig().getInitParameter("log4j"); System.out.println("prefix = " + prefix); String filePath = prefix + file; System.out.println(filePath); PropertyConfigurator.configure(filePath); super.init();// 应用了struts,此方法不能省,ActionServlet覆盖了的此方法中有很多重要操作 } private String getAbsolutePathByResource() throws MalformedURLException, URISyntaxException { URL url = this.getServletContext().getResource("/"); String path = new File(url.toURI()).getAbsolutePath(); if (!path.endsWith("\\") && !path.endsWith("/")) { path += File.separator; } return path; }}

执行方法 c.servlet

package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import util.Bar;public class c extends HttpServlet {	/**	 * The doGet method of the servlet. 
 *  * This method is called when a form has its tag value method equals to get.  *   * @param request the request send by the client to the server  * @param response the response send by the server to the client  * @throws ServletException if an error occurred  * @throws IOException if an error occurred  */ private static Logger logger = Logger.getLogger(c.class); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.info("不服你tm来打我啊!!!"); } /**  * The doPost method of the servlet. 
 *  * This method is called when a form has its tag value method equals to post.  *   * @param request the request send by the client to the server  * @param response the response send by the server to the client  * @throws ServletException if an error occurred  * @throws IOException if an error occurred  */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println(""); out.println(""); out.println("  A Servlet"); out.println("  "); out.print("    This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println("  "); out.println(""); out.flush(); out.close(); }}

ps: 新手注意

log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender
org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender1=org.apache.log4j.FileAppender

他们的东西是不一样的,你指定的东西, 有些参数他才生效

我常说,比如、举例才能让话多一些说服力

我就举例

比如,你用了这个

log4j.appender.appender1=org.apache.log4j.FileAppender

这些是无效的。。。

##7 定义A2的输出文件的最大长度 log4j.appender.appender1.MaxFileSize = 2KB ##8 定义A2的备份文件数 log4j.appender.appender1.MaxBackupIndex=2

此文章是网上- -目前最全面的 粘贴可用。。。。不可用,IQ不行或者版本不对。2.0的版本不支持。。谢谢

感谢网友:@ahee 提出的问题。。加载相对路径- -

请看下面

第一修改web.xml

  
    
This is the description of my J2EE component
    
This is the display name of my J2EE component
    
initLogger
    
servlet.initLogger
    
    
log4j
    
WEB-INF/log4j.properties
    
    
        
    
log4j_file_path
        
WEB-INF/logs/
      
    
             
1
  
  
    
This is the description of my J2EE component
    
This is the display name of my J2EE component
    
c
    
servlet.c
  
  
    
c
    
/c
  
  
    
index.jsp
  

第二修改

initLogger.java

package servlet;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;import java.net.MalformedURLException;import java.net.URISyntaxException;import java.net.URL;import java.util.Properties;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.PropertyConfigurator;import util.dao;public class initLogger extends HttpServlet {	/**	 * 	 */	private static final long serialVersionUID = 7010497166323512560L;	/**	 * Destruction of the servlet. 
 */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /**  * The doGet method of the servlet. 
 *   * This method is called when a form has its tag value method equals to get.  *   * @param request  *            the request send by the client to the server  * @param response  *            the response send by the server to the client  * @throws ServletException  *             if an error occurred  * @throws IOException  *             if an error occurred  */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println(""); out.println(""); out.println("  A Servlet"); out.println("  "); out.print("    This is "); out.print(this.getClass()); out.println(", using the GET method"); out.println("  "); out.println(""); out.flush(); out.close(); } /**  * The doPost method of the servlet. 
 *   * This method is called when a form has its tag value method equals to  * post.  *   * @param request  *            the request send by the client to the server  * @param response  *            the response send by the server to the client  * @throws ServletException  *             if an error occurred  * @throws IOException  *             if an error occurred  */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println(""); out.println(""); out.println("  A Servlet"); out.println("  "); out.print("    This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println("  "); out.println(""); out.flush(); out.close(); } /*  * 通过上下文来取工程路径  *   * @return  *   * @throws Exception  */ private String getAbsolutePathByContext() throws Exception { String webPath = this.getServletContext().getRealPath("/"); webPath = webPath.replaceAll( "[\\\\\\/]WEB-INF[\\\\\\/]classes[\\\\\\/]?", "/"); webPath = webPath.replaceAll("[\\\\\\/]+", "/"); webPath = webPath.replaceAll("%20", " "); if (webPath.matches("^[a-zA-Z]:.*?$")) { } else { webPath = "/" + webPath; } webPath += "/"; webPath = webPath.replaceAll("[\\\\\\/]+", "/"); return webPath; } /**  * Initialization of the servlet. 
 *   * @throws ServletException  *             if an error occurs  */ public void init() throws ServletException { String webPath = null; try { webPath = getAbsolutePathByContext(); } catch (Exception e) { } // 在weblogic 11g 上可能无法从上下文取到工程物理路径,所以改为下面的 if (webPath == null) { try { webPath = getAbsolutePathByResource(); } catch (Exception e) { e.printStackTrace(); } } if (webPath == null) { try { webPath = getAbsolutePathByResource(); } catch (Exception e) { } } String prefix = webPath; String file = this.getServletConfig().getInitParameter("log4j"); System.out.println("prefix = " + prefix); //获取加载log地址 String logFile=this.getInitParameter("log4j_file_path");    System.out.println("log4j_file_path:"+logFile); //log4j.properties文件地址 String filePath = prefix + file; System.out.println(filePath); //读取配置文件 Properties prop = new Properties(); try { prop.load(new FileInputStream(filePath)); 设置日志文件的输出路径    System.out.println(prop.getProperty("log4j.appender.appender1.File"));; //设置log存放地址 prop.setProperty("log4j.appender.appender1.File", prefix+logFile+"log.log"); } catch (Exception e) { e.printStackTrace(); } try { //覆盖原log4j.properties  并且加载新的有log输出的log4j.properties文件 prop.store(new FileOutputStream(filePath),"#"); } catch (Exception e) { e.printStackTrace(); } /**其实这里可以这样写   PropertyConfigurator.configure(prop);     try { //覆盖原log4j.properties  并且加载新的有log输出的log4j.properties文件 prop.store(new FileOutputStream(filePath),"#"); } catch (Exception e) { e.printStackTrace(); } 就没用了,,,因为是洁癖- -程序里面我也这样    *   */ //加载log文件 PropertyConfigurator.configure(filePath); super.init();// 应用了struts,此方法不能省,ActionServlet覆盖了的此方法中有很多重要操作 } private String getAbsolutePathByResource() throws MalformedURLException, URISyntaxException { URL url = this.getServletContext().getResource("/"); String path = new File(url.toURI()).getAbsolutePath(); if (!path.endsWith("\\") && !path.endsWith("/")) { path += File.separator; } return path; }}

这样程序就实现了,加载相对路径,,

其实写这个相对路径0 0 你还不如直接写死路径,坑爹啊

回答完毕,不知小的回答得如何啊

转载于:https://my.oschina.net/openoschina/blog/306323

你可能感兴趣的文章
OpenGL入门学习[七]
查看>>
ip v5
查看>>
SQL高级查询技巧
查看>>
Android 动画效果学习笔记
查看>>
shell(3)应用
查看>>
OpenResty + Lua 访问Redis
查看>>
11.2 Apache虚拟主机
查看>>
移动APP及游戏推广,有预算为什么还起不了量
查看>>
中国六个漂亮的古镇风景名胜区网站欣赏
查看>>
javascript 基础4
查看>>
计算label的高度:boundingRectWithSize的使用
查看>>
我的友情链接
查看>>
shell脚本
查看>>
HTML5应用与原生应用之间的差异
查看>>
写更好的代码,还是写更少的代码?
查看>>
行如风 Angular 初识5
查看>>
[硕.Love Python] FibonacciHeap(F堆 & 斐波那契堆)
查看>>
java.lang.NoClassDefFoundError: net/tsz/afinal/htt
查看>>
我的友情链接
查看>>
SpringBoot入门之缓存
查看>>