سؤال

لدي تطبيق ويب J2EE يعمل على Spring Framework واستخدام Log4J لتسجيله. لدي هذا السطر في ملف log4j.properties الخاص بي. سيؤدي هذا إلى إدراج السجلات الموجودة في قاعدة البيانات الخاصة بي. كيف يمكنني تعيين قيمة ديناميكية في جزء الرسالة حتى أتمكن من إلحاق المستخدم الذي تم تسجيله حاليًا في المستخدم. كائن الفول الذي يحتوي على معلومات للمستخدم الحالي موجود في سياق التطبيق.

log4j.appender.dblog.sql = insert في تسجيل (log_date ، log_level ، الموقع ، الرسالة) القيم ('٪ d {yyyy/mm/dd hh: mm: ss}' ، '٪ -5p' ، '٪ c- ٪ L '،' ٪ m ')

هل كانت مفيدة؟

المحلول

لست متأكدًا تمامًا من "سياق التطبيق" مقابل موقع "معلومات المستخدم" الخاصة بي ، لكن تطبيق الويب الخاص بي كان يستخدم الدعامات و 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' ، 'debug' ، 'User: Ben logged Off'

آمل أن يساعد هذا

نصائح أخرى

تريد استخدام MDC (تعيين السياق التشخيصي). ها هو حلقة الوصل حول استخدامه مع servlets.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top