当前位置: 代码迷 >> J2EE >> log4j写入数据库,该如何解决
  详细解决方案

log4j写入数据库,该如何解决

热度:104   发布时间:2016-04-17 23:36:03.0
log4j写入数据库
--数据库中新建的日志表
CREATE TABLE [boxserver].[dbo].[Loginformation] (  
    [WDZLOGID] [int] IDENTITY (1, 1) PRIMARY KEY ,
    [userId] INT NOT NULL,--用户ID
    [username] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,--用户姓名   
    [createTime] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,--记录日志时间
    [LogLevel] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,--日志级别  
    [MSG] [varchar] (555) COLLATE Chinese_PRC_CI_AS NULL,--日志信息
    [user_loginip] [varchar](50)COLLATE Chinese_PRC_CI_AS NULL--IP地址
)
GO 
--下面是过滤器主要代码
public class LogResFilter implements Filter {
private final static double DEFAULT_USERID = Math.random() * 100000.0;

public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOExceptionServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
if (session == null) {
MDC.put("userId", DEFAULT_USERID);
} else {
UserVO vo = (UserVO) session.getAttribute("user");
if (vo == null) {
MDC.put("userId", DEFAULT_USERID);
MDC.put("username", DEFAULT_USERID);
} else {
MDC.put("userId", vo.getUsername());
MDC.put("username", vo.getUsername());
}
}
chain.doFilter(request, response);
}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}
--这里是log4j.properties配置文件
#数据库输出 
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender 

#设置缓存大小,就是当有10条日志信息是才往数据库插一次 
log4j.appender.db.BufferSize=10
  
log4j.appender.db.sqlname=log  
  
log4j.appender.db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
                        
log4j.appender.db.URL=jdbc:sqlserver://192.168.12.2:1433;DatabaseName=boxserver  
  
log4j.appender.db.user=sa  
  
log4j.appender.db.password=123456  
  
log4j.appender.db.sql=insert into Loginformation(userId,username,createTime,LogLevel,MSG,user_loginip) values ('%X{userId}','%X{username}','%d{yyyy-MM-dd HH\:mm\:ss}','%X{LogLevel}','%X{MSG}','%X{user_loginip}')  
  
log4j.appender.db.layout=org.apache.log4j.PatternLayout 
#%m表示你写入的日志信息

但我一运行程序就报错
log4j:ERROR Failed to excute sql(这句我在网上查说是配置文件中的sql语句有问题)
com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa  ' 登录失败。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2529)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1905)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1893)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1045)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:817)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.apache.log4j.jdbc.JDBCAppender.getConnection(JDBCAppender.java:252)
at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:215)
at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:290)
at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:186)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.info(Category.java:666)
at servlet.LoginValidate.doPost(LoginValidate.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.justeasy.filter.LogResFilter.doFilter(LogResFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
日志信息插入不到数据库中,望指导!!!
------解决思路----------------------
com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa  ' 登录失败。  数据库登陆都没成功,用户名、密码检查下
------解决思路----------------------
权限密码出错 啊