Динамический параметр Log4j
-
21-09-2019 - |
Вопрос
У меня есть веб-приложение j2ee, работающее на платформе Spring и использующее log4j для ведения журнала.У меня есть эта строка в файле log4j.properties.это вставит журналы в мою базу данных.Как установить динамическое значение в части сообщения, чтобы я мог каким-то образом добавить текущего вошедшего в систему пользователя.Объект bean-компонента, содержащий информацию о текущем пользователе, находится в контексте приложения.
log4j.appender.dblog.sql = insert в logging (log_date, log_level, location, message) значения ('%d {yyyy/mm/dd hh: mm: ss}', '%-5p', '%c-% L ','%m ')
Решение
Я не совсем уверен в «контексте приложения» и расположении моей «информации о пользователе», но мое веб-приложение использовало Struts и log4j, и у меня было аналогичное (но, возможно, более простое) требование, я решил его с помощью такого кода:
public class LogoutAction extends org.apache.struts.action.Action {
private Log log_db = LogFactory.getLog("mysql");
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
log_db.debug("User: "+request.getRemoteUser()+" logged off");
request.getSession().invalidate();
your
}
}
И затем в моем файле свойств log4j у меня была такая запись:
log4j.logger.mysql=DEBUG, mysql
log4j.appender.mysql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.mysql.layout=org.apache.log4j.PatternLayout
log4j.appender.mysql.URL=jdbc:mysql://localhost:3306/dbname?autoReconnect=true
log4j.appender.mysql.driver=com.mysql.jdbc.Driver
log4j.appender.mysql.user=user
log4j.appender.mysql.password=password
log4j.appender.mysql.sql=INSERT INTO log (Date, Logger, Priority, Message) VALUES ("%d","%c","%p","%m")
enter code here
И тогда в результате моя строка таблицы будет иметь такие данные:
'2010-03-15 21:49:46,514', 'mysql', 'ОТЛАДКА', 'Пользователь:Бен вышел из системы'
надеюсь, это поможет