Enregistrement du message log4j dans la database

Salut je développe une application qui nécessite de journaliser le message de journal dans la database. J'ai utilisé le EnhancedPattenrLayout dans le file de propriétés log4j pour save le message dans DB. Mais j'obtiens une erreur de consignation de la trace de stack d'exception dans db indiquant que

"com.microsoft.sqlserver.jdbc.SQLServerException: datatables string ou binarys sont tronquées."

Notez que intentionnellement j'ai donné le mauvais smtp pour vérifier s'il enregistrant la trace de stack d'exception dans DB ou pas.

aidez-moi s'il vous plaît à cet égard.

Ici, trouvez le file log4j.properties

# Define the root logger with file appender log4j.rootLogger = debug, sql, stdout #log4j.rootLogger = error, sql, stdout # Log for the Hibernate log4j.logger.org.hibernate=ERROR #log4j.logger.org.hibernate=INFO #log4j.logger.org.hibernate.type=trace #log4j.logger.org.hibernate.type=ALL # ================ Added as part of logging into DB ==================== # Define the jdbc appender log4j.appender.sql=org.apache.log4j.jdbc.JDBCAppender log4j.appender.sql.URL=jdbc:sqlserver://localhost:1433;DatabaseName=ERP_IDMS # Set Database Driver log4j.appender.sql.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver # Set database user name and password log4j.appender.sql.user=ERP_ADMIN_IDMS log4j.appender.sql.password=Password # Set the SQL statement to be executed. #short log4j.appender.sql.layout.ConversionPattern=INSERT INTO LOGS1 VALUES ('%d{yyyy-MM-dd HH:mm:ss.SSS}' ,'%C','%p','%m', '%throwable{short}', '%throwable{800}') # Define the xml layout for file appender log4j.appender.sql.layout=org.apache.log4j.EnhancedPatternLayout #======================================================================= # Direct to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # ============================================================================= 

Script de table

  USE [ERP_IDMS] GO /****** Object: Table [ERP_ADMIN].[LOGS1] Script Date: 01/18/2016 16:55:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [ERP_ADMIN].[LOGS1]( [DATED] [datetime] NOT NULL, [LOGGER] [varchar](500) NOT NULL, [LEVEL] [varchar](200) NOT NULL, [MESSAGE] [varchar](1500) NOT NULL, [THROWABLE] [varchar](150) NULL, [STACKTRACE] [varchar](5000) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF 

Fichier Java

  package erp.idms.test; import java.util.Date; //import java.util.HashMap; //import java.util.List; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Authenticator; //import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.apache.log4j.Logger; import com.erp.idms.mail.exception.EMailException; import com.erp.idms.mail.exception.SMTPNotFoundException; /*import erp.idms.mail.exception.*; import erp.idms.mail.vo.EmailServiceRequestVO; import erp.idms.mail.vo.EmailServiceResponseVO; import erp.idms.modal.MailingList; import erp.idms.test.MailTest;*/ public class MailTest { private static Logger logger = Logger.getLogger(MailTest.class); public static void main(Ssortingng[] args) { MailTest test = new MailTest(); try { test.sendMail("Hi \n this is a test mail"); } catch (EMailException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void sendMail(Ssortingng msg) throws EMailException { Transport transport = null; Ssortingng transportStr = "smtp"; Ssortingng contentStr = "text/plain"; Ssortingng smtpHostStr = "mail.smtp.host"; Ssortingng smtpHost = "192.85.144.90"; final Ssortingng username = "[email protected]";// change accordingly final Ssortingng password = "tunn@123";// change accordingly Ssortingng responseStatus = null; Ssortingng message_header = null; Ssortingng message_footer = null; // Recipient's email ID needs to be mentioned. Ssortingng to = "[email protected]";//[email protected] Ssortingng from = "[email protected]"; Ssortingng from1 = "[email protected]"; Session session = null; try { Properties props = new Properties(); if (username != null) { props.put("mail.smtp.auth", "true"); } props.put(smtpHostStr, smtpHost); // Get the Session object. session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); session.setDebug(false); // Create a default MimeMessage object. MimeMessage mimeMsg = new MimeMessage(session); // Set From: header field of the header. mimeMsg.setFrom(new InternetAddress(from)); // Set To: header field of the header. mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); // Setting the "CC recipients" addresses if exists Ssortingng ccAddress = null; if (ccAddress != null && !"".equals(ccAddress)) { mimeMsg.setRecipients(Message.RecipientType.CC, ccAddress); } // Set Subject: header field mimeMsg.setSubject("Testing Subject"); // Create the message part MimeBodyPart mimeBodyPart = new MimeBodyPart(); // Now set the actual message mimeBodyPart.setText(msg); // Create a multipar message Multipart multipart = new MimeMultipart(); // Set text message part multipart.addBodyPart(mimeBodyPart); // Part two is attachment //mimeBodyPart = new MimeBodyPart(); Ssortingng[] fileToBeAttached = new Ssortingng[3]; fileToBeAttached = null; //fileToBeAttached[0] = "C:\\ERP_Automation\\OutBoundDir\\outBound.csv"; //fileToBeAttached[1] = "C:\\IDMS_ERP_DataAutomation\\Invoice.log"; //fileToBeAttached[2] = "C:\\IDMS_ERP_DataAutomation\\Invoice.bad"; if (fileToBeAttached != null && fileToBeAttached.length > 0) { for (Ssortingng filenameAttach : fileToBeAttached) { MimeBodyPart attachPart = new MimeBodyPart(); DataSource source = new FileDataSource(filenameAttach); attachPart.setDataHandler(new DataHandler(source)); Ssortingng fileName = filenameAttach .subssortingng(filenameAttach.lastIndexOf("\\")+1); // mimeBodyPart = new MimeBodyPart(); attachPart.setFileName(fileName); // Send the complete message parts multipart.addBodyPart(attachPart); } } mimeMsg.setContent(multipart); // Set the Date: header mimeMsg.setSentDate(new Date()); mimeMsg.saveChanges(); // Send message // Transport.send(mimeMsg); transport = session.getTransport(transportStr); System.out.println("----connecting Transport ----"); logger.info("----connecting Transport ----"); transport.connect(); System.out.println(mimeMsg.getAllRecipients()); transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients()); System.out.println("Sent message successfully...."); logger.info("Sent message successfully...."); }/* catch (MessagingException e) { //e.printStackTrace(); logger.error("Exception while sending the Message"+e); throw new SMTPNotFoundException("Unable to send the Mail", e); }*/ catch (Exception e) { e.printStackTrace(); logger.error("Exception while sending the Message",e); throw new RuntimeException(e); } } private static class SMTPAuth extends Authenticator { private Ssortingng user; private Ssortingng pass; /** * @param u * @param p */ public SMTPAuth(Ssortingng username, Ssortingng password) { user = username; pass = password; } /* (non-Javadoc) * @see javax.mail.Authenticator#getPasswordAuthentication() */ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,pass); } } } 

trace d'une stack d'exception complète

  ----connecting Transport ---- d{yyyy-MM-dd HH:mm:ss} INFO MailTest:165 - ----connecting Transport ---- javax.mail.MessagingException: Could not connect to SMTP host: 192.85.144.90, port: 25; nested exception is: java.net.ConnectException: Connection timed out: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1008) d{yyyy-MM-dd HH:mm:ss} ERROR MailTest:179 - Exception while sending the Message javax.mail.MessagingException: Could not connect to SMTP host: 192.85.144.90, port: 25; nested exception is: java.net.ConnectException: Connection timed out: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1008) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197) at javax.mail.Service.connect(Service.java:255) at javax.mail.Service.connect(Service.java:134) at javax.mail.Service.connect(Service.java:86) at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:104) at erp.idms.test.MailTest.sendMail(MailTest.java:166) at erp.idms.test.MailTest.main(MailTest.java:45) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197) at javax.mail.Service.connect(Service.java:255) at javax.mail.Service.connect(Service.java:134) at javax.mail.Service.connect(Service.java:86) at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:104) at erp.idms.test.MailTest.sendMail(MailTest.java:166) at erp.idms.test.MailTest.main(MailTest.java:45) log4j:ERROR Failed to excute sql com.microsoft.sqlserver.jdbc.SQLServerException: Ssortingng or binary data would be truncated. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254) at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1517) at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:799) at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:696) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1716) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:649) at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:178) at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250) at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65) at org.apache.log4j.Category.callAppenders(Category.java:203) at org.apache.log4j.Category.forcedLog(Category.java:388) at org.apache.log4j.Category.error(Category.java:319) at erp.idms.test.MailTest.sendMail(MailTest.java:179) at erp.idms.test.MailTest.main(MailTest.java:45) Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: 192.85.144.90, port: 25; nested exception is: java.net.ConnectException: Connection timed out: connect at erp.idms.test.MailTest.sendMail(MailTest.java:180) at erp.idms.test.MailTest.main(MailTest.java:45) Caused by: javax.mail.MessagingException: Could not connect to SMTP host: 192.85.144.90, port: 25; nested exception is: java.net.ConnectException: Connection timed out: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1008) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197) at javax.mail.Service.connect(Service.java:255) at javax.mail.Service.connect(Service.java:134) at javax.mail.Service.connect(Service.java:86) at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:104) at erp.idms.test.MailTest.sendMail(MailTest.java:166) ... 1 more 

Vos colonnes sont trop petites pour contenir datatables à consigner. Par conséquent, au lieu de tronquer datatables, une exception est générée. Découvrez quelle colonne est le problème et le rendre plus grand.

J'ai eu le problème et augmenté la longueur de la colonne THROWABLE de la table LOGS1.