怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨...
生活随笔
收集整理的這篇文章主要介紹了
怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
?? ??從最初學習使用log4j的時候,網上和書本上主要都是使用“log4j.properties”這種屬性格式,配置日志。 多年以來,一直使用這種格式,總的來說,簡單、夠用。?
? ??而有十多年經驗的Boss,不建議使用properties格式配置,而是用xml格式配置。Boss之前在阿里(支付寶、淘寶)、UC等大公司工作過。
?? ?我們有個很明顯的不同:? 我比較注重,簡單、快速。Boss比較注重,規范、嚴謹。
? 我的觀點:沒有對與錯,只有適用與不適用。每個人都是根據自己的經歷和追求,做出的技術選擇。對于技術使用者來講,明白不同配置的好處和壞處,才是需要注意的。
? 就log4j.xml這種配置來說,功能確實可能更多一些,可以單獨把 業務日志和普通的系統日志分離,運維過程中,很容易看到業務錯誤,從而更快的解決問題。
?------------------------------------------------------------------------------------------------------------
? ? ??另外,Boss覺得需要把log4j的輸出目錄 配置 成變量。 比如:<param name="File" value="${log4jOutputPath}/front/default.log" />, log4jOutputPath可以是“C:/log4j/”。
? ?? Boss根據之前在阿里的工作經驗,開發和運維可能完全是2撥人。開發只管寫代碼,把代碼寫好,沒有功能和業務問題。運維,負責把代碼部署好,域名解析、Nginx、Tomcat、日志配置。運維導致的問題,運維背鍋。功能問題,開發背鍋。職責分明,流水化作業。
? ? 我對這種流水化的作業是非常認同的,這樣的企業生產效率才高,才能為國家和社會創造更多的價值。
? ?而象武漢一起好等很多在技術方面,偏向中小型規模的企業來說,開發和運維很可能就是“同一撥人”。這個時候,系統配置要怎么做,就是個值得探討的問題了。
?------------------------------------------------------------------------------------------------------------
? ?Boss最初建議,修改Tomcat的啟動腳本,在里面增加變量配置,比如“-Dlog4jOutputPath=c:/log4j”。
? ? 我一聽,就不太贊成這種做法了。對于開發與運維都是一撥人,經常需要和其它開發人員交流的情況,修改Tomcat自身的配置比較麻煩。
為什么這么說呢?
? ?Tomcat是系統級的程序,而我們的代碼是應用級的程序。開發者,對自己的應用程序,一般是掌控度非常高的,但是對于Tomcat等不是自己寫的系統程序,把控度比較低。Tomcat的隨便一行啟動代碼,不小心改錯了,就啟動不了了。
? ?修改Tomcat還有壞處,本地開發、線上部署、交接給其它客戶,還得讓客戶去修改Tomcat這個和咱們的程序無關的配置,是不科學的。
? ?我的建議是,把這些配置,放在外圍,寫入個文件,比如startupTomcat.sh,在啟動的時候指定參數。每個人都可以很靈活地修改log4j等配置參數。
? ?初步商議,我們采用這種做法。
?
? ?總結下:
<appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${log4jOutputPath}/front/default.log" /><!-- 設置日志輸出文件名 --> </appender>
啟動的時候,增加VM參數,-Dlog4jOutputPath=c:/log4j ----------------------------------------------------------------------------------------------------------
第2 種做法,適合開發和運維都是同一人的情況,把log4j的變量,放在Web.xml里,部署的時候,需要手動修改這個變量。
log4j配置
可在web.xml中配置log4j.xml的位置,參數名稱為:log4jXmlPath。
也可以,配置log4j的日志輸出位置的目錄,參數名稱為:log4jOutputPath。
<servlet><servlet-name>Log4jInit</servlet-name><servlet-class>cn.fansunion.common.web.Log4jInit</servlet-class> <init-param> <param-name>log4jXmlPath</param-name> <param-value>C:/log4j.xml</param-value> </init-param> <init-param> <param-name>log4jOutputPath</param-name> <param-value>C:/log4j/xiaolei2</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet>? ??注意:這2個參數都必須輸入絕對地址,如果log4jXmlPath沒有值,或者對應的文件不存在,將把classpath下的log4j.xml作為默認配置文件。如果再找不到,將報錯,log4j配置失敗。
如果log4jOutputPath沒有值,或者對應的文件不存在,將把classpath下的log4j文件夾作為默認的輸出目錄。
Author:Java代碼?Log4jInit.java
public class Log4jInit extends HttpServlet {private static final long serialVersionUID = 1L;public void init(ServletConfig config) throws ServletException {// 從web.xml中找到log4j的輸出目錄String log4jOutputPath = config.getInitParameter("log4jOutputPath");// 默認的日志輸出位置if (StringUtils.isBlank(log4jOutputPath)) {log4jOutputPath = Log4jInit.class.getClassLoader().getResource("").getFile()+ "/log4j";}File log4jOutputPathFile = new File(log4jOutputPath);// 如果輸出文件不存在,手動創建boolean log4xmlFileExists = log4jOutputPathFile.exists();if (!log4xmlFileExists) {System.out.println(log4jOutputPathFile.mkdirs());}// log4j.xml文件中的變量是在這里設置的System.setProperty("log4jOutputPath", log4jOutputPath);// 從web.xml中找到log4j.xml的輸出目錄String log4jXmlPath = config.getInitParameter("log4jXmlPath");boolean exist = false;// 如果在web.xml手動配置,log4jXmlPath應該使用絕對地址,否則,就使用默認的位置和文件名就行if (StringUtils.isNotBlank(log4jXmlPath)) {File file = new File(log4jXmlPath);exist = file.exists();}// log4jXmlPath默認位于classpath下log4j.xmlif (!exist) {URL resource = Log4jInit.class.getClassLoader().getResource("log4j.xml");if (resource != null) {log4jXmlPath = resource.getFile();}}DOMConfigurator.configure(log4jXmlPath);} }
----------------------------------------------------------------------------------------------------------
??從技術方面的學習,加入一起好,遇到Boss,是我人生的大幸。要不然,我很難這么快就了解阿里等大公司的一些實際做法。
? 我決定扎根武漢,是不太可能去阿里系工作的。
??懷揣夢想的我,也不可能委身于阿里。
? 小雷FansUnion-博學的互聯網技術工作者,全棧式多屏開發工程師
? 2015年1月25日
? 湖北-武漢-循禮門
轉載于:https://my.oschina.net/jiutianniao/blog/400279
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DrawTool画笔之图形笔
- 下一篇: 什么是委托以及案例