当前位置: 首页 > news >正文

做网站三河网站建设总体上可划分为两个阶段

做网站三河,网站建设总体上可划分为两个阶段,新网站建设特色,平面设计是干嘛的 主要学什么cloudwatch在此博客中#xff0c;我将解释如何为您的Mule CloudHub应用程序启用AWS Cloudwatch日志 。 AWS提供了Cloudwatch Logs Services#xff0c;以便您可以更好地管理日志。 它比松散便宜。 由于cloudhub会自动翻转超过100 MB的日志#xff0c;因此我们需要一种机制来… cloudwatch 在此博客中我将解释如何为您的Mule CloudHub应用程序启用AWS Cloudwatch日志 。 AWS提供了Cloudwatch Logs Services以便您可以更好地管理日志。 它比松散便宜。 由于cloudhub会自动翻转超过100 MB的日志因此我们需要一种机制来更有效地管理日志。 为此我们创建此自定义附加程序它将日志发送到cloudwatch。 package com.javaroots.appenders;import static java.util.Comparator.comparing; import static java.util.stream.Collectors.toList;import java.io.Serializable; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Formatter; import java.util.List; import java.util.Optional; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.Filter; import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.appender.AbstractAppender; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.config.plugins.PluginAttribute; import org.apache.logging.log4j.core.config.plugins.PluginElement; import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.status.StatusLogger;import com.amazonaws.regions.Regions; import com.amazonaws.services.logs.AWSLogs; import com.amazonaws.services.logs.model.CreateLogGroupRequest; import com.amazonaws.services.logs.model.CreateLogStreamRequest; import com.amazonaws.services.logs.model.CreateLogStreamResult; import com.amazonaws.services.logs.model.DataAlreadyAcceptedException; import com.amazonaws.services.logs.model.DescribeLogGroupsRequest; import com.amazonaws.services.logs.model.DescribeLogStreamsRequest; import com.amazonaws.services.logs.model.InputLogEvent; import com.amazonaws.services.logs.model.InvalidSequenceTokenException; import com.amazonaws.services.logs.model.LogGroup; import com.amazonaws.services.logs.model.LogStream; import com.amazonaws.services.logs.model.PutLogEventsRequest; import com.amazonaws.services.logs.model.PutLogEventsResult;Plugin(name CLOUDW, category Core, elementType appender, printObject true) public class CloudwatchAppender extends AbstractAppender {/*** */private static final long serialVersionUID 12321345L;private static Logger logger2 LogManager.getLogger(CloudwatchAppender.class);private final Boolean DEBUG_MODE System.getProperty(log4j.debug) ! null;/*** Used to make sure that on close() our daemon thread isnt also trying to sendMessage()s*/private Object sendMessagesLock new Object();/*** The queue used to buffer log entries*/private LinkedBlockingQueue loggingEventsQueue;/*** the AWS Cloudwatch Logs API client*/private AWSLogs awsLogsClient;private AtomicReference lastSequenceToken new AtomicReference();/*** The AWS Cloudwatch Log group name*/private String logGroupName;/*** The AWS Cloudwatch Log stream name*/private String logStreamName;/*** The queue / buffer size*/private int queueLength 1024;/*** The maximum number of log entries to send in one go to the AWS Cloudwatch Log service*/private int messagesBatchSize 128;private AtomicBoolean cloudwatchAppenderInitialised new AtomicBoolean(false);private CloudwatchAppender(final String name,final Layout layout,final Filter filter,final boolean ignoreExceptions,String logGroupName, String logStreamName,Integer queueLength,Integer messagesBatchSize) {super(name, filter, layout, ignoreExceptions);this.logGroupName logGroupName;this.logStreamName logStreamName;this.queueLength queueLength;this.messagesBatchSize messagesBatchSize;this.activateOptions();}Overridepublic void append(LogEvent event) {if (cloudwatchAppenderInitialised.get()) {loggingEventsQueue.offer(event);} else {// just do nothing}}public void activateOptions() {if (isBlank(logGroupName) || isBlank(logStreamName)) {logger2.error(Could not initialise CloudwatchAppender because either or both LogGroupName( logGroupName ) and LogStreamName( logStreamName ) are null or empty);this.stop();} else {//below lines work with aws version 1.9.40 for local build//this.awsLogsClient new AWSLogsClient();//awsLogsClient.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_2));this.awsLogsClient com.amazonaws.services.logs.AWSLogsClientBuilder.standard().withRegion(Regions.AP_SOUTHEAST_2).build();loggingEventsQueue new LinkedBlockingQueue(queueLength);try {initializeCloudwatchResources();initCloudwatchDaemon();cloudwatchAppenderInitialised.set(true);} catch (Exception e) {logger2.error(Could not initialise Cloudwatch Logs for LogGroupName: logGroupName and LogStreamName: logStreamName, e);if (DEBUG_MODE) {System.err.println(Could not initialise Cloudwatch Logs for LogGroupName: logGroupName and LogStreamName: logStreamName);e.printStackTrace();}}}}private void initCloudwatchDaemon() {Thread t new Thread(() - {while (true) {try {if (loggingEventsQueue.size() 0) {sendMessages();}Thread.currentThread().sleep(20L);} catch (InterruptedException e) {if (DEBUG_MODE) {e.printStackTrace();}}}});t.setName(CloudwatchThread);t.setDaemon(true);t.start();}private void sendMessages() {synchronized (sendMessagesLock) {LogEvent polledLoggingEvent;final Layout layout getLayout();List loggingEvents new ArrayList();try {while ((polledLoggingEvent loggingEventsQueue.poll()) ! null loggingEvents.size() messagesBatchSize) {loggingEvents.add(polledLoggingEvent);}List inputLogEvents loggingEvents.stream().map(loggingEvent - new InputLogEvent().withTimestamp(loggingEvent.getTimeMillis()).withMessage(layout null ?loggingEvent.getMessage().getFormattedMessage():new String(layout.toByteArray(loggingEvent), StandardCharsets.UTF_8))).sorted(comparing(InputLogEvent::getTimestamp)).collect(toList());if (!inputLogEvents.isEmpty()) {PutLogEventsRequest putLogEventsRequest new PutLogEventsRequest(logGroupName,logStreamName,inputLogEvents);try {putLogEventsRequest.setSequenceToken(lastSequenceToken.get());PutLogEventsResult result awsLogsClient.putLogEvents(putLogEventsRequest);lastSequenceToken.set(result.getNextSequenceToken());} catch (DataAlreadyAcceptedException dataAlreadyAcceptedExcepted) {putLogEventsRequest.setSequenceToken(dataAlreadyAcceptedExcepted.getExpectedSequenceToken());PutLogEventsResult result awsLogsClient.putLogEvents(putLogEventsRequest);lastSequenceToken.set(result.getNextSequenceToken());if (DEBUG_MODE) {dataAlreadyAcceptedExcepted.printStackTrace();}} catch (InvalidSequenceTokenException invalidSequenceTokenException) {putLogEventsRequest.setSequenceToken(invalidSequenceTokenException.getExpectedSequenceToken());PutLogEventsResult result awsLogsClient.putLogEvents(putLogEventsRequest);lastSequenceToken.set(result.getNextSequenceToken());if (DEBUG_MODE) {invalidSequenceTokenException.printStackTrace();}}}} catch (Exception e) {if (DEBUG_MODE) {logger2.error( error inserting cloudwatch:,e);e.printStackTrace();}}}}private void initializeCloudwatchResources() {DescribeLogGroupsRequest describeLogGroupsRequest new DescribeLogGroupsRequest();describeLogGroupsRequest.setLogGroupNamePrefix(logGroupName);Optional logGroupOptional awsLogsClient.describeLogGroups(describeLogGroupsRequest).getLogGroups().stream().filter(logGroup - logGroup.getLogGroupName().equals(logGroupName)).findFirst();if (!logGroupOptional.isPresent()) {CreateLogGroupRequest createLogGroupRequest new CreateLogGroupRequest().withLogGroupName(logGroupName);awsLogsClient.createLogGroup(createLogGroupRequest);}DescribeLogStreamsRequest describeLogStreamsRequest new DescribeLogStreamsRequest().withLogGroupName(logGroupName).withLogStreamNamePrefix(logStreamName);Optional logStreamOptional awsLogsClient.describeLogStreams(describeLogStreamsRequest).getLogStreams().stream().filter(logStream - logStream.getLogStreamName().equals(logStreamName)).findFirst();if (!logStreamOptional.isPresent()) {CreateLogStreamRequest createLogStreamRequest new CreateLogStreamRequest().withLogGroupName(logGroupName).withLogStreamName(logStreamName);CreateLogStreamResult o awsLogsClient.createLogStream(createLogStreamRequest);}}private boolean isBlank(String string) {return null string || string.trim().length() 0;}protected String getSimpleStacktraceAsString(final Throwable thrown) {final StringBuilder stackTraceBuilder new StringBuilder();for (StackTraceElement stackTraceElement : thrown.getStackTrace()) {new Formatter(stackTraceBuilder).format(%s.%s(%s:%d)%n,stackTraceElement.getClassName(),stackTraceElement.getMethodName(),stackTraceElement.getFileName(),stackTraceElement.getLineNumber());}return stackTraceBuilder.toString();}Overridepublic void start() {super.start();}Overridepublic void stop() {super.stop();while (loggingEventsQueue ! null !loggingEventsQueue.isEmpty()) {this.sendMessages();}}Overridepublic String toString() {return CloudwatchAppender.class.getSimpleName() { name getName() loggroupName logGroupName logstreamName logStreamName;}PluginFactorySuppressWarnings(unused)public static CloudwatchAppender createCloudWatchAppender(PluginAttribute(value queueLength ) Integer queueLength,PluginElement(Layout) Layout layout,PluginAttribute(value logGroupName) String logGroupName,PluginAttribute(value logStreamName) String logStreamName,PluginAttribute(value name) String name,PluginAttribute(value ignoreExceptions, defaultBoolean false) Boolean ignoreExceptions,PluginAttribute(value messagesBatchSize) Integer messagesBatchSize){return new CloudwatchAppender(name, layout, null, ignoreExceptions, logGroupName, logStreamName ,queueLength,messagesBatchSize);} } 我们在pom.xml文件中添加依赖项。 dependencygroupIdcom.amazonaws/groupIdartifactIdaws-java-sdk-logs/artifactId!-- for local 3.8.5 we need to use this version cloudhub 3.8.5 has jackson 2.6.6 --!-- version1.9.40/version --version1.11.105/versionexclusionsexclusion !-- declare the exclusion here --groupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-1.2-api/artifactId/exclusionexclusion !-- declare the exclusion here --groupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactId/exclusionexclusion !-- declare the exclusion here --groupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId/exclusion/exclusions/dependency!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.5/version/dependency!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.5/version/dependency 现在我们需要修改log4j2.xml。 还要添加自定义cloudwatch附加程序和CloudhubLogs附加程序以便我们也可以获取cloudhub上的日志。 ?xml version1.0 encodingutf-8? Configuration statustrace packagesau.edu.vu.appenders,com.mulesoft.ch.logging.appender!--These are some of the loggers you can enable. There are several more you can find in the documentation. Besides this log4j configuration, you can also use Java VM environment variablesto enable other logs like network (-Djavax.net.debugssl or all) and Garbage Collector (-XX:PrintGC). These will be append to the console, so you will see them in the mule_ee.log file. --AppendersCLOUDW nameCloudW logGroupNametest-log-stream logStreamNametest44 messagesBatchSize${sys:cloudwatch.msg.batch.size} queueLength${sys:cloudwatch.queue.length}PatternLayout pattern%d [%t] %-5p %c - %m%n//CLOUDWLog4J2CloudhubLogAppender nameCLOUDHUBaddressProvidercom.mulesoft.ch.logging.DefaultAggregatorAddressProviderapplicationContextcom.mulesoft.ch.logging.DefaultApplicationContextappendRetryIntervalMs${sys:logging.appendRetryInterval}appendMaxAttempts${sys:logging.appendMaxAttempts}batchSendIntervalMs${sys:logging.batchSendInterval}batchMaxRecords${sys:logging.batchMaxRecords}memBufferMaxSize${sys:logging.memBufferMaxSize}journalMaxWriteBatchSize${sys:logging.journalMaxBatchSize}journalMaxFileSize${sys:logging.journalMaxFileSize}clientMaxPacketSize${sys:logging.clientMaxPacketSize}clientConnectTimeoutMs${sys:logging.clientConnectTimeout}clientSocketTimeoutMs${sys:logging.clientSocketTimeout}serverAddressPollIntervalMs${sys:logging.serverAddressPollInterval}serverHeartbeatSendIntervalMs${sys:logging.serverHeartbeatSendIntervalMs}statisticsPrintIntervalMs${sys:logging.statisticsPrintIntervalMs}PatternLayout pattern[%d{MM-dd HH:mm:ss}] %-5p %c{1} [%t] CUSTOM: %m%n//Log4J2CloudhubLogAppender/AppendersLoggers!-- Http Logger shows wire traffic on DEBUG --AsyncLogger nameorg.mule.module.http.internal.HttpMessageLogger levelWARN/!-- JDBC Logger shows queries and parameters values on DEBUG --AsyncLogger namecom.mulesoft.mule.transport.jdbc levelWARN/!-- CXF is used heavily by Mule for web services --AsyncLogger nameorg.apache.cxf levelWARN/!-- Apache Commons tend to make a lot of noise which can clutter the log--AsyncLogger nameorg.apache levelWARN/!-- Reduce startup noise --AsyncLogger nameorg.springframework.beans.factory levelWARN/!-- Mule classes --AsyncLogger nameorg.mule levelINFO/AsyncLogger namecom.mulesoft levelINFO/!-- Reduce DM verbosity --AsyncLogger nameorg.jetel levelWARN/AsyncLogger nameTracking levelWARN/AsyncRoot levelINFOAppenderRef refCLOUDHUB levelINFO/AppenderRef refCloudW levelINFO//AsyncRoot/Loggers /Configuration 最后我们需要在cloudhub运行时管理器上禁用cloudhub日志。 这适用于cloudhub mule运行时版本3.8.4。 cloudhub 3.8.5版本存在一些问题该版本已正确初始化并发送日志但是缺少事件和消息。 翻译自: https://www.javacodegeeks.com/2017/10/integrate-cloudwatch-logs-cloudhub-mule.htmlcloudwatch
http://www.huolong8.cn/news/106781/

相关文章:

  • 盗版小说网站怎么赚钱北京网页设计公司兴田德润挺好
  • 网站开发 英文网站开发服务合同
  • 图库 网站 源码广告公司赚钱吗
  • 王晴儿网站建设方案在百度做推广需要网站
  • 我想网站建设多少钱免费网站源码建站系统
  • 微网站自己怎么做的吗工业设计公司怎么赚钱
  • 客户网站建设完成后需要什么推荐的外贸客户搜索软件
  • 固原建设厅官方网站营销型网站建设合同范本
  • 电子商务网站建设步ppt模板下载免费版软件
  • 江苏建设厅老网站毕业设计音乐网站开发背景
  • 做类似电驴网站seo推广具体做什么
  • 做网站的费用如何写分录c2c电子商务
  • 如何做专题网站北京建设信源网站 怎么打不开
  • 大型 网站的建设 阶段网站外链有死链
  • ps如何做网站导航图爱互融网站开发合同
  • 通州商城网站建设简单网页代码html
  • 网站全栰培训淘宝做seo要建网站吗
  • 网站开发总监招聘企业邮箱263登录入口
  • 软件代做网站在哪找活室内装修培训
  • 建设部网站令第77号国内云服务器免费
  • 个人网站该怎么打广告沈阳网站建设开发设计公司
  • 花卉物流园做网站的素材怎样创立一个网站
  • 四大门户网站是哪些网站添加ico图标
  • 南宁企业建站系统珠海市住房和城乡建设厅网站
  • 大型网站建设与维护过程百度app免费下载
  • 中国建设银行悦生活网站长沙移动网站建设哪家好
  • 网站必备功能红河州建设局门户网站
  • 石家庄网站制作建设wordpress重定向插件
  • 网站推广方案计划书企业查询信息
  • 国内食品行业网站开发做图片网站 服务器