Log4j file output, database storage, and database storage garbled

Source: Internet
Author: User
Tags date now

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

 

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.