背景php
在分佈式系統當中,咱們有各類各樣的WebService,這些服務可能分別部署在不一樣的服務器上,而且有各自的日誌輸出。爲了方便對這些日誌進行統一管理和分析。咱們能夠將日誌統一輸出到指定的數據庫系統中,而再由日誌分析系統去管理。而這個儲存日誌的數據庫目前最適合的仍是mongodb,一是由於它輕便、簡單,與log4j整合方便,對系統的侵入性低。二是由於它與大型的關係型數據庫相比有很多優點,好比查詢快速、儲存結構(json)利於擴展、免費等。html
log4j與mongodb整合前端
一、首先安裝mongodb數據庫,具體安裝方法請百度;java
二、在你的應用程序中引用如下類庫:git
Mongo Java driver jar包 下載
Log4J jar包 注意版本,必定要1.2.16及以上。下載
log4mongo-java jar包 下載github
三、在你的web項目中建立log4j.properties文件。web
四、配置log4j.properties文件,使之整合mongodb:sql
1: log4j.rootLogger=INFO,stdout,MongoDB
2:
3: log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
4: log4j.appender.MongoDB.databaseName=logs
5: log4j.appender.MongoDB.collectionName=log
6: log4j.appender.MongoDB.hostname=ubuntu
7: log4j.appender.MongoDB.port=27017
8:
9: log4j.appender.stdout=org.apache.log4j.ConsoleAppender
10: log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
11: log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
五、配置應用的日誌輸出格式:mongodb
1: log4j.logger.com.cnblogs.leefreeman.servlet=INFO,action
2: log4j.appender.action.Threshold = INFO
3: log4j.appender.action=org.apache.log4j.DailyRollingFileAppender
4: log4j.appender.action.encoding=utf8
5: log4j.appender.action.File=/opt/logs/action.log
6: log4j.appender.action.DatePattern = '_'yyyy-MM-dd'.log'
7: log4j.appender.action.layout=org.apache.log4j.PatternLayout
8: log4j.appender.action.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
六、在應用程序中使用日誌:數據庫
1: public class IndexServlet extends HttpServlet {
2: private static Logger logger = Logger.getLogger(IndexServlet.class);
3: private static final long serialVersionUID = -5244922269946905057L;
4:
5: @Override
6: protected void doGet(HttpServletRequest req, HttpServletResponse resp)
7: throws ServletException, IOException {
8: logger.info("hello log4j+mongodb");
9: PrintWriter out = resp.getWriter();
10: out.print("hello world");
11: out.flush();
12: out.close();
13: }
14: }
七、經過Mongodb客戶端系統,查看日誌狀況:
日誌成功寫入mongdb數據庫,能夠看到在數據庫中日誌的結構至關清晰。
使用日誌系統管理mongodb的日誌
能夠開發一個日誌系統鏈接mongodb數據庫,進行日誌數據的管理和分析。你也可使用mongodb目前有的一些Web客戶端來管理,下面介紹兩個mongodb經常使用的Web客戶端:
mongovision:使用extjs做爲前端,體驗較好,但須要java7。
rock_mongo:基於php的MongoDB管理工具。
mongodb的部署方式
在咱們數據量不是太大的狀況下,而且日誌數據的重要性不是太強的時候,咱們能夠快速搭建出最簡單的mongodb單實例模式,來儲存日誌數據。這種方式最簡單最快速。
當咱們考慮到安全、災備等因素時,咱們通常能夠考慮主-從模式搭建mongodb服務器。
採用主-從模式後主節點掛掉了後從節點能夠接替主機繼續服務。這種模式比單節點的高可用性要好不少。
若是有一天數據愈來愈多,你發現mongodb處理它們愈來愈吃力,你就得想辦法怎麼讓它減壓。通常的作法是,部署多個從節點,來分擔主節點壓力。在這裏咱們能夠想到Mysql的讀寫方案,一樣也適合Mongodb。
你可讓主節點用於寫入,而從節點用於讀操做(根據你的應用讀和寫操做的比例來分配)。這樣讀寫分離,主從分擔數據庫操做壓力。
關於mongodb各類模式的具體部署配置方法,在這再也不介紹有興趣能夠查下資料。此外在面對海量數據時,還有不少針對性較強的集羣方案,但願有經驗的朋友介紹一下。