Log4j. properties Configuration:
Log4j. rootlogger = info, root, file, JDBC
Log4j. appender. Root = org. Apache. log4j. leleappender
Log4j. appender. Root. layout = org. Apache. log4j. patternlayout
Log4j. appender. root. layout. conversionpattern = %-5 p % d {yyyy-mm-dd hh: mm: SS, SSS} % c {1}: % m-% m % N % C % N
Log4j. appender. File = org. Apache. log4j. rollingfileappender
Log4j. appender. file. maxfilesize = 5 MB
Log4j. appender. file. maxbackupindex = 500000
Log4j. appender. file. File =$ {Catalina. Home}/webapps/Gae/logs/web_app.log
Log4j. appender. file. layout = org. Apache. log4j. patternlayout
Log4j. appender. file. layout. conversionpattern = [% d] %-5 p (% 13f: % L) % 3x-% m % N
Log4j. appender. JDBC = org. Apache. log4j. JDBC. jdbcappender
Log4j. appender. JDBC. Threshold = info
Log4j. appender. JDBC. Driver = com. MySQL. JDBC. Driver
Log4j. appender. JDBC. SQL = insert into sys_userlog (user_id, sys_resource_id, recordname, operateip, operatetime, createby, createaddr) values ('% x {user_id}', '% x {res_id }', '% x {log_name}', '% x {IP}', '% x {log_time}', '% x {create_by}', '% x {log_addr }')
###### Log4j. appender. JDBC. SQL = insert into sys_userlog (user_id) values ('1 ')
Log4j. appender. JDBC. url = JDBC \: MySQL \: // localhost \: 3306/test1? Useunicode \ = true & characterencoding \ = utf8
Log4j. appender. JDBC. User = root
Log4j. appender. JDBC. Password = 123456
Log4j. appender. JDBC. layout = org. Apache. log4j. patternlayout
The data to be stored in the database is put in log4j. In this case, the struts2 interceptor is used. Its principle is: when you need to record the user's behavior process (understand what operations he has done, which actions are used?) when executing an action, we will first execute our own interceptor userlogintercepter, then store the data in log4j, and then store it in the database.
Userlogintercepter. class code:
Package edu. Gae. util;
Import java. Text. simpledateformat;
Import java. util. date;
Import javax. servlet. http. httpservletrequest;
Import org. Apache. log4j. Logger;
Import org. Apache. log4j. MDC;
Import org. Apache. struts2.servletactioncontext;
Import com. opensymphony. xwork2.actioncontext;
Import com. opensymphony. xwork2.actioninvocation;
Import com. opensymphony. xwork2.interceptor. abstractinterceptor;
Import edu. Gae. model. user;
Public class userlogintercepter extends actinterceptor {
Private Static final long serialversionuid = 8237067791003371738l;
Private logger = logger. getlogger (userlogintercepter. Class );
@ Override
Public String intercept (actioninvocation invoke) throws exception {
Httpservletrequest request = servletactioncontext. getrequest ();
User user = (User) actioncontext. getcontext (). getsession (). Get ("user ");
If (user! = NULL ){
String IP = request. getremoteaddr ();
Simpledateformat format = new simpledateformat ("yyyy-mm-dd hh: mm: SS ");
Date Now = new date (system. currenttimemillis ());
MDC. Put ("user_id", user. GETID ());
MDC. Put ("res_id", "1 ");
MDC. Put ("log_name", "recordname ");
MDC. Put ("ip", ip );
MDC. Put ("log_time", format. Format (now ));
MDC. Put ("create_by", user. GetUserName ());
MDC. Put ("log_addr", "Wuhan, Hubei Province ");
Logger.info (MDC. getcontext ());
} Else {
MDC. Put ("user_id", "1 ");
MDC. Put ("res_id", "1 ");
}
Return invoke. Invoke ();
}
Public logger getlogger (){
Return logger;
}
Public void setlogger (logger ){
This. Logger = logger;
}
}
Struts2 configuration file:
<Interceptor name = "userlogintercepter" class = "edu. Gae. util. userlogintercepter"> </interceptor>
<Interceptor-stack name = "mystack">
<Interceptor-ref name = "userlogintercepter"/>
<! -- The default stack must be referenced; otherwise, the default interceptor is invalid. -->
<Interceptor-ref name = "defaultstack"/>
</Interceptor-stack>
</Interceptors>
<! -- Set the default interceptor stack so that each action will execute userlogintercepter by default -->
<Default-interceptor-ref name = "mystack"> </default-interceptor-ref>
Then add the above interceptor eg in the action of the cutter Interceptor:
<Action name = "queryall_userlog_action" class = "userlogaction" method = "queryall">
<Interceptor-ref name = "mystack"/>
<Result name = "success">/admin/userlog/userlog_list.jsp </result>
<Result name = "error">/faied. jsp </result>
</Action>
Garbled characters may occur in the log4j storage database because 1. the encoding of the database and project is different. 2. If garbled characters still occur, they are found in log4j. what is added to the URL column of the properties file database? Useunicode \ = true & characterencoding \ = utf8