Logging 捕获Java应用程序中的运行时异常并通过电子邮件发送
我在Linux服务器上用这样的命令启动我的应用程序Logging 捕获Java应用程序中的运行时异常并通过电子邮件发送,logging,log4j,daemon,runtimeexception,jsvc,Logging,Log4j,Daemon,Runtimeexception,Jsvc,我在Linux服务器上用这样的命令启动我的应用程序 /usr/local/bin/jsvc \ -home /usr/local/jdk1.8.0_111 \ -cp /opt/myapp/myapp.jar:/opt/myapp/lib/* \ -user myappuser \ -outfile /opt/myapp/out.log \ -errfile /opt/myapp/error.log \ -pidfile /opt/myapp/my
/usr/local/bin/jsvc \
-home /usr/local/jdk1.8.0_111 \
-cp /opt/myapp/myapp.jar:/opt/myapp/lib/* \
-user myappuser \
-outfile /opt/myapp/out.log \
-errfile /opt/myapp/error.log \
-pidfile /opt/myapp/myapp.pid \
com.example.MyApp
我正在使用log4j
登录我的应用程序,它有自己的配置,如log4j.properties
中所述,它位于myapp.jar
中
我希望能够捕捉到应用程序中发生的任何异常,并通过电子邮件发送给我。为此,我在log4j.properties
中配置了org.apache.log4j.net.SMTPAppender
但是目前RuntimeException
,比如NullPointerException
只是打印到stderr
,而jsvc
重定向到error.log
,而不应用log4j
格式模式
我是否可以或者应该在不使用jsvc的情况下运行应用程序
nohup java -jar /opt/myapp/myapp.jar &
还是有更好的解决办法?回答我自己。只需在代码入口点的开头设置默认值
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App {
private static final Logger logger = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler((t, e) -> logger.error(null, e));
}
}
log4j.属性
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/opt/myapp/myapp.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n
# SMTP
log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.SMTPHost=yoursmtp.example.com
log4j.appender.email.SMTPUsername=youuser@yoursmtp.example.com
log4j.appender.email.SMTPPassword=yourpassword
log4j.appender.email.From=youuser@yoursmtp.example.com
log4j.appender.email.To=youremail@example.com
log4j.appender.email.Subject=An error has happened
log4j.appender.email.BufferSize=1
log4j.appender.email.layout=org.apache.log4j.PatternLayout
log4j.appender.email.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}:%L - %m%n
log4j.appender.email.Threshold = ERROR