Tag: 记录

从Java应用程序登录到ELK而无需解析日志

我想将日志从Java应用程序发送到ElasticSearch,传统方法似乎是在运行应用程序的服务器上设置Logstash,并使用logstash解析日志文件(使用正则表达式…!)并将其加载到ElasticSearch中。 是否有这样做的原因,而不是仅仅设置log4J(或logback)将所需格式的内容直接记录到日志收集器中,然后可以异步运送到ElasticSearch? 当应用程序本身可以首先将其记录为所需的格式时,我不得不摆弄grokfilter以处理多行堆栈跟踪(并在日志解析时刻录CPU周期),这似乎很疯狂? 在切向相关的注释中,对于在Docker容器中运行的应用程序,最佳做法是直接登录到ElasticSearch,因为只需要运行一个进程?

字符串连接的使用效率低下

我正在我的java-app中创建一个记录器(使用NetBeans作为IDE)突然我看到一个警告说:“在记录器中使用字符串连接效率低下”。 我的oringinal代码是 srcLogger.getLogger().log(Level.INFO,”UploadBean.doUpload completado [” + file.getName() + “]\n”); 但NetBeans建议将其转换为模板(这里的“模板”是什么意思?)给出以下代码: srcLogger.getLogger().log(Level.INFO, “UploadBean.doUpload completado [{0}]\n”, file.getName()); 这两种连接方式有什么不同,我从来没有使用过后者。 干杯。

错误:使用log4j时“setFile(null,false)调用失败”

我在项目的源文件夹中添加了log4j.properties文件,但我仍然收到log4j:错误。 这是我的Log4j.properties文件: .rootCategory=DEBUG, R, O # Stdout log4j.appender.O=org.apache.log4j.ConsoleAppender log4j.appender.O=log44j.log # File log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=log4j.log # Control the maximum log file size log4j.appender.R.MaxFileSize=100KB # Archive log files (one backup file here) log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.O.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x – %C.%M(%F:%L) – %m%n log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x – %C.%M(%F:%L) – %m%n # Define the root logger with appender file logDir = ../logs log4j.rootLogger = […]

在java中录制流媒体音频?

我正在尝试设置一个程序来记录互联网音频流的一部分,并将其保存到文件(最好是mp3或wav)。 我到处寻找,我找不到任何体面的方法来做到这一点。 我找到了两个看起来像他们工作的不同的库(NativeBass和Xuggle),但是它们都不支持我需要的64位窗口。 有谁知道使用java保存一部分互联网音频流的简单方法? (如果重要的话,那就是“audio / mpeg”流)。 编辑:好的,我找到了一种似乎有效的方法。 但我还有一个问题 import java.net.URLConnection; import java.net.URL; import java.io.InputStream; import java.io.OutputStream; import java.io.FileOutputStream; import java.io.File; public class Test{ public static void main (String[] args){ try{ URLConnection conn = new URL(“http://streamurl.com/example”).openConnection(); InputStream is = conn.getInputStream(); OutputStream outstream = new FileOutputStream(new File(“C:/Users/Me/Desktop/output.mp3”)); byte[] buffer = new byte[4096]; int len; long t […]

如何将我的Java应用程序日志记录事件映射到GCP中的相应云记录事件级别Felastic非compat App Engine?

我是GCP AppEngine的新手,我选择灵活的环境有几个原因。 但是,我很震惊地发现灵活环境的非“兼容”运行时似乎不允许我将应用程序的日志记录事件映射到云日志记录中的相应日志级别 。 我读得对吗? https://cloud.google.com/appengine/docs/flexible/java/writing-application-logs#writing_application_logs_1 这个页面真是无益。 https://cloud.google.com/java/getting-started/logging-application-events 这是经过几个小时的阅读GAE日志记录困境并尝试确定哪些应用于标准环境与灵活。 我可以说,在标准环境中可以进行事件级映射。 但是,要在Cloud Platform Console中更精细地控制日志级别显示,日志记录框架必须使用java.util.logging适配器。 https://cloud.google.com/appengine/docs/java/how-requests-are-handled#Java_Logging 好。 这是一个模糊的参考,但我想我在其他地方看到了更清楚的东西。 无论如何,在“灵活”环境中这不应该更容易吗? 谁不想通过记录级别轻松过滤事件? 更新:我澄清了问题,表明我在询问GAE灵活环境中的不兼容运行时。

Thread.getStackTrace()有多昂贵?

在日志记录系统中,每个日志输出都由辅助类完成,并使用此方法 public void debug(String message) { Logger logger = Logger.getLogger(getCallingClass()); logger.debug(message); } … public Class getCallingClass() { /* Calls Thread.getStackTrace() and back traces until the class on the stack trace != this.getClass(). */ return classFound; } 它的运行成本有多高,是否会有显着的性能提升?

如何将java日志控制台输出从std err更改为std out?

我正在使用java.util.logging的标准ConsoleHandler ,默认情况下,控制台输出将定向到错误流(即System.err )。 如何将控制台输出更改为输出流(即System.out )?

在Windows上检查Java中文件是否为空的最有效方法

我试图在Windows上用Java检查日志文件是否为空(意味着没有错误)。 到目前为止,我尝试过使用2种方法。 方法1(失败) FileInputStream fis = new FileInputStream(new File(sLogFilename)); int iByteCount = fis.read(); if (iByteCount == -1) System.out.println(“NO ERRORS!”); else System.out.println(“SOME ERRORS!”); 方法2(失败) File logFile = new File(sLogFilename); if(logFile.length() == 0) System.out.println(“NO ERRORS!”); else System.out.println(“SOME ERRORS!”); 现在,当日志文件为空(没有内容)时,这些方法都会失败,但文件大小不为零(2个字节)。 检查文件是否为空的最有效和最准确的方法是什么? 我要求提高效率,因为我必须循环检查文件大小数千次。 注意:文件大小只会徘徊在几到10 KB左右! 方法3(失败) 按照@ Cygnusx1的建议,我也尝试过使用FileReader ,但没有成功。 这是片段,如果有人感兴趣的话。 Reader reader = new FileReader(sLogFilename); int readSize = reader.read(); […]