我有一个可以生成日志的Java桌面应用程序。 我想将这些日志发送到远程服务器。
这样做的正确方法是什么?通过 FTP ?写一个小的 java服务器并用套接字发送它?将内容发布到 PHP表单?
如果使用FTP,它是否安全?我的意思是,是否可以允许上传,但也可以保护文件不被删除或重命名?
答案 0 :(得分:1)
在您的特定情况下,我建议您使用log4j
的{{3}}。
在您的服务器中,您只需使用以下参数启动服务器:
java -cp log4j.jar org.apache.log4j.net.SimpleSocketServer 4712
以下是服务器的示例log4j.properties
:
log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
以下是客户端的示例log4j.properties
:
log4j.appender.SERVER=org.apache.log4j.net.SocketAppender
log4j.appender.SERVER.Port=4712
log4j.appender.SERVER.RemoteHost=loghost
log4j.appender.SERVER.ReconnectionDelay=10000
唯一的注意事项是,您无法仅使用SimpleSocketServer
的功能设置某种身份验证。您只能使用其他一些方法来实现这一点,例如: SSH-隧道
答案 1 :(得分:1)
通过电子邮件发送日志文件也是另一种选择。这使您可以选择将日志发送到电子邮件中的人员列表,以防您需要根据错误立即执行操作。
对于log4j,请检查以下链接:
http://www.codereye.com/2009/02/sending-email-alerts-with-log4j.html
基本要点是:
log4j.rootLogger=INFO, a, email
log4j.appender.a=org.apache.log4j.ConsoleAppender
log4j.appender.a.layout=org.apache.log4j.PatternLayout
log4j.appender.a.layout.ConversionPattern=%d{HH:mm:ss} %-5p [%c{1}]: %m%n
log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.BufferSize=10
log4j.appender.email.SMTPHost=mysmtp.mailserver.net
log4j.appender.email.From=admin@mycompany.com
log4j.appender.email.To=me@mycompany.com
log4j.appender.email.Subject=My Module Error
log4j.appender.email.layout=org.apache.log4j.PatternLayout
log4j.appender.email.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
同时检查AsynAppender是否异步发送电子邮件,以便不阻止当前线程发送电子邮件。
答案 2 :(得分:0)
是的... Log4J对于您的应用程序中的日志记录机制非常有用。
为了将数据发送到服务器,使用客户端套接字 - 服务器套接字变得非常容易。
有一些非常有用的方法可以将数据从客户端发送到服务器,反之亦然。
答案 3 :(得分:0)
感谢@VarunAchar我决定通过电子邮件发送日志。但不是使用log4j(使用它是一个好主意,但在我的情况下,我不需要这样一个完整的解决方案)我使用自己的方法发送带有一些附件的电子邮件:
Properties properties = new Properties();
properties.setProperty("mail.smtp.submitter", from); //such as abc@gmail.com
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.host", host); //use smtp.gmail.com for Google
properties.put("mail.smtp.user", from); //such as abc@gmail.com
properties.put("mail.smtp.port", port); //use 465 for Google's SMTP server
properties.put("mail.smtp.socketFactory.port", port); //use 465 for Google's SMTP server
properties.put("mail.smtp.starttls.enable","true");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
Authenticator mailAuthenticator = new MailAuthenticator(from,"mypassword");
Session mailSession = Session.getDefaultInstance(properties,mailAuthenticator);
Message message = new MimeMessage(mailSession);
InternetAddress fromAddress = new InternetAddress(from);
InternetAddress toAddress = new InternetAddress(to);
message.setFrom(fromAddress);
message.setRecipient(RecipientType.TO, toAddress);
//you can use RecipientTypes such as
//RecipientType.TO
//RecipientType.BCC
//RecipientType.CC
//RecipientType.NEWSGROUPS
message.setSubject(subject);
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Some text
messageBodyPart.setText(text);
// Attachments
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Attach error.log
File f = new File(ruta+"error.log");
if (f.exists()) {
messageBodyPart = new MimeBodyPart();
String filename = ruta+"error.log";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
}
// repeat with more attachments if needed
// Fill email content
message.setContent(multipart);
Transport.send(message);
它使用Java Mail API
原始代码在此处找到:http://tunatore.wordpress.com/2011/10/05/how-to-send-an-e-mail-using-java-mail-api-swing-desktop-application-using-googles-smtp-example/
附件部分在这里:http://www.roseindia.net/javamail/SendAttachment.shtml