一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

java中使用log4j將日志信息寫入數(shù)據(jù)庫中

 江江385 2013-05-17

一直都在想如何用log4j將message寫到數(shù)據(jù)庫中,在以后查看的時候會方便些。(數(shù)據(jù)庫都是使用MSSQL)

在網(wǎng)上搜了下, 有兩種方法比較合適。

1.插入數(shù)據(jù)庫中的表的字段有多個(不包括自動增長列),這種情況適合在瀏覽時要對某個字段進行排序等其他需求。
配置文件主要部分如下:

<appender name="access_Log_JDBC" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="Driver" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<param name="URL" value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=LOG" />
<param name="user" value="sa" />
<param name="password" value="sa" />
<param name="sql" value="INSERT INTO t(date,user,b,message) VALUES (getDate(), '%X{user}', '%X', '%m')" />
<param name="BufferSize" value="1" />
</appender> 

<category name="accesslog_category">
<priority value="debug" />
<appender-ref ref="access_Log_JDBC" />
<appender-ref ref="CONSOLE" />
</category>

java 部分代碼如下:

//MDC的幫助頁面:http://logging./log4j/1.2/apidocs/org/apache/log4j/MDC.html

public class AccessLogFactory ...{
private static final String ACCESSLOG_CATEGORY = "accesslog_category";

static...{
DOMConfigurator.configure("./conf/log4j.xml");
}

public static Log getLog() ...{

Log logger = null;

try ...{
logger = LogFactory.getLog(ACCESSLOG_CATEGORY);
} catch (LogConfigurationException e) ...{
e.printStackTrace();
}

return logger;
}

public static void main(String[] args)...{
Log logger = AccessLogFactory .getLog();
String msg = "b03";
String user = "u03";
String b = "b03";
MDC.put("user", user); //和配置文件中的%X{user}對應

MDC.put("b", b); //和配置文件中的%X對應

logger.error(msg); //和配置文件中的%m對應



msg = "b04";
user = "u04";
= "b04";
MDC.put("user ", user );
MDC.put("b", b);
logger.error(msg);
}
}


2.插入數(shù)據(jù)庫中的表的字段有一個(不包括自動增長列),這種情況適合只是要顯示在頁面上而無其他需求,當然第一種情況也適合(這部分的代碼來自http://hi.baidu.com/kekemao1/blog/item/199d3d31ed6d901aebc4afff.html)。

放在WEB_INF\class文件夾下的log.properties文件的內(nèi)容如下

#log4j.rootLogger=DEBUG, DATABASE #log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender//(root日志記錄器的存儲器) #log4j.appender.DATABASE.URL=jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor #log4j.appender.DATABASE.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver #log4j.appender.DATABASE.user=sd //用戶名 #log4j.appender.DATABASE.password= #log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('%d %c %p %m%n')//寫入pubs數(shù)據(jù)庫中的表LOG4J的Message字段中,內(nèi)容%d(日期)%c: 日志信息所在地(類名)%p: 日志信息級別%m: 產(chǎn)生的日志具體信息 %n: 輸出日志信息換行 #log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout #log4j.appender.DATABASE.layout.ConversionPattern=%d %c %p %m%n


java 代碼:

import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Vector;

/** *//**
* 封裝DataSource
*
* @version 1.0, 2005-9-16 11:18:44
*/


public class DataSourcePackBean ...{
     /** *//**
      * log4j
      */

     private Logger logger = Logger.getLogger(DataSourcePackBean.class);

//DataSourcePackBean.class日志記錄器的名與類名相同;


     /** *//**
      * 引用名
      */

     private String ref;

     /** *//**
      * DataSource對象
      */

     private DataSource ds;

     /** *//**
      * 保存當前DataSource對象中所有打開的Connection對象的引用。
      */

     private Vector openedConnections = new Vector();

     /** *//**
      * 接收DataSource引用名,查找DataSource對象。
      *
      * @param ref DataSource引用名
      */

     protected DataSourcePackBean(String ref) ...{
         this.ref = ref;
         this.ds = lookup(ref);
     }

     public String getRef() ...{
         return ref;
     }

     public int getActive() ...{
         return openedConnections.size();
     }

     /** *//**
      * 打開一個連接
      *
      * @param username 連接數(shù)據(jù)庫的登錄用戶名,如果為null,表示用默認用戶連接
      * @param password 連接數(shù)據(jù)庫的登錄密碼
      * @return
      * @throws SQLException
      */

     public Connection getConnection(String username, String password) throws SQLException ...{
         Connection conn = (username == null) ? ds.getConnection() : ds.getConnection(username, password);
         // add to vector

         openedConnections.add(conn);
         // log

         StringBuffer log = new StringBuffer();
         log.append("Open").append(" a connection(").append(conn.hashCode()).append(") of [").append(ref).append("] ");
         log.append(openedConnections.size()).append(" connection").append(" in use");
         logger.debug(log);
         // return

         return conn;
     }

     /** *//**
      * 關(guān)閉一個連接
      *
      * @param conn
      * @throws SQLException
      */

     public void closeConnection(Connection conn) throws SQLException ...{
         conn.close();
         // remove from Vector

         openedConnections.remove(conn);
         // log

         StringBuffer log = new StringBuffer();
         log.append("Close").append(" a connection(").append(conn.hashCode()).append(") of [").append(ref).append("] ");//添加內(nèi)容到日志記錄中

         log.append(openedConnections.size()).append(" connection").append(" in use");
         logger.debug(log);
     }

     /** *//**
      * close all Connection of this DataSource
      * @throws SQLException
      */

     public void closeAll() throws SQLException ...{
         for (int i = 0; i < openedConnections.size(); i++) ...{
             ((Connection)openedConnections.get(i)).close();
         }
         // clear Vector

         openedConnections.removeAllElements();
     }

     /** *//**
      * get a DataSource
      * @param ref the JNDI name of the DataSource
      * @return
      */

     private DataSource lookup(String ref) ...{
         DataSource dataSource = null;
         // 查找ref數(shù)據(jù)源對象

         try ...{
             Context env = new InitialContext();
             dataSource = (DataSource) env.lookup(ref);
             // 測試數(shù)據(jù)庫有效性

             dataSource.getConnection().close();
             logger.debug(new StringBuffer().append("DataSource[").append(ref).append("] has been initialized successfully."));
         } catch (Exception e) ...{
             e.printStackTrace();
         }
         // return

         return dataSource;
     }

     public SQLRunnerIfc getSQLRunner(String username, String password) throws SQLException ...{
         return new SQLRunner(username, password, this);
     }

     public SQLRunnerIfc getSQLRunner() throws SQLException ...{
         return getSQLRunner(null, null);
     }
}


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩国产欧美日韩| 中文日韩精品视频在线| 欧洲亚洲精品自拍偷拍| 一区二区三区精品人妻| 亚洲免费视频中文字幕在线观看| 九九热九九热九九热九九热| 日韩精品小视频在线观看| 91欧美亚洲精品在线观看| 亚洲a级一区二区不卡| 欧美日韩亚洲巨色人妻| 国产美女网红精品演绎| 亚洲一区二区三区国产| 国产成人午夜福利片片| 欧美乱妇日本乱码特黄大片| 欧美日韩一区二区三区色拉拉| 国产日韩中文视频一区| 亚洲做性视频在线播放| 国产丝袜女优一区二区三区| 国产欧美高清精品一区| 老司机精品线观看86| 午夜国产精品国自产拍av| 成人国产一区二区三区精品麻豆| 亚洲视频在线观看免费中文字幕 | 亚洲欧洲成人精品香蕉网| 激情内射亚洲一区二区三区| 东京热一二三区在线免| 日韩不卡一区二区视频| 亚洲中文字幕人妻av| 欧美性猛交内射老熟妇| 九九视频通过这里有精品| 色鬼综合久久鬼色88| 国产内射一级一片内射高清| 99视频精品免费视频| 日韩中文字幕免费在线视频| 欧美欧美欧美欧美一区| 日本人妻精品中文字幕不卡乱码| 亚洲欧洲日韩综合二区| 99精品国产一区二区青青| 亚洲男人的天堂就去爱| 中文字幕亚洲精品在线播放| 日韩欧美亚洲综合在线|