1

我有一个可以生成日志的 Java 桌面应用程序。我想将这些日志发送到远程服务器

这样做的正确方法是什么?通过FTP?编写一个小型Java 服务器并使用套接字发送它?将内容发布到PHP 表单

如果使用 FTP,是否安全?我的意思是,是否可以允许上传但也可以保护文件不被删除或重命名?

4

4 回答 4

1

在您的特定情况下,我建议使用log4j's SimpleSocketServer

在您的服务器中,您可以使用以下参数启动服务器:

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仅为。您只能使用其他一些方法来实现这一点,fe SSH-tunnel。

于 2013-03-13T10:05:18.220 回答
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是否异步发送电子邮件,以便当前线程不会被阻止发送电子邮件。

于 2013-03-13T10:07:06.957 回答
0

是的... Log4J 对于应用程序中的日志记录机制非常有用。

而对于向服务器发送数据,使用客户端套接字 - 服务器套接字变得非常容易。

有非常有用的方法可以将数据从客户端发送到服务器,反之亦然。

于 2013-03-13T11:34:23.673 回答
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

于 2013-03-13T12:19:45.333 回答