阿里云java环境配置日志 怎么采集java日志

自己写的java日志类和方法代码分享_java
作者:用户
本文讲的是自己写的java日志类和方法代码分享_java,
复制代码 代码如下:
import java.io.*;import java.text.SimpleDateFimport java.util.*;import java.util.logging.L
复制代码 代码如下:
import java.io.*;import java.text.SimpleDateFimport java.util.*;import java.util.logging.L
public class AndyLogger{
//The defaulted root path of SSLVPN installation
private static String rootPath = "C:\\temp2";
//variable for creating new line
private final static String enter = System.getProperty("line.separator");
private static SimpleDateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public static synchronized void log(String fileName, String logMessage)
File folder = new File(rootPath);
if(!folder.exists())
folder.mkdir();
File file = new File(rootPath + "\\" + fileName + ".log");
if(!file.exists())
file.createNewFile();
BufferedReader in = new BufferedReader(new FileReader(file));
String str = "";
String strToal = "";
while ((str = in.readLine()) != null)
strToal += (str + enter);
strToal = strToal + (sdf.format(new Date()) + " " + logMessage + enter);
in.close();
BufferedWriter out = new BufferedWriter(new FileWriter(file));
out.write(strToal);
out.close();
catch (Exception e)
e.printStackTrace();
public static synchronized void log(String fileName, String[] logMessages)
File folder = new File(rootPath);
if(!folder.exists())
folder.mkdir();
File file = new File(rootPath + "\\" + fileName + ".log");
if(!file.exists())
file.createNewFile();
BufferedReader in = new BufferedReader(new FileReader(file));
String str = "";
String strToal = "";
while ((str = in.readLine()) != null)
strToal += (str + enter);
for (int i=0; i & logMessages. i++)
String logMessage = logMessages[i];
strToal = strToal + (sdf.format(new Date()) + " " + logMessage + enter);
in.close();
BufferedWriter out = new BufferedWriter(new FileWriter(file));
out.write(strToal);
out.close();
catch (Exception e)
e.printStackTrace();
public static void main(String args[])
AndyLogger.log("bug223", "timeisjjja");
String[] logMessages = {"111","222","333"};
AndyLogger.log("bug223", logMessages);
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
java日志代码怎么写、java日志管理系统代码、java代码读取日志文件、java代码 读取日志、java 代码日志,以便于您获取更多的相关知识。
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供
云栖社区()为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!介绍在Java程序中记录日志的最佳实践-阿里云资讯网
介绍在Java程序中记录日志的最佳实践
发布时间:
更新时间:
来源:网络
上传者:用户
本文介绍了在Java程序中记录日志的最佳实践,同时也介绍了如何使用开源软件对日志进行聚合和分析。对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行/zixun/aggregation/18195.html&&时间信息等。在生产环境中,日志是
问题来源的重要依据。应用程序运行时的产生的各种信息,都应该通过日志 API 来进行记录。很多开发人员习惯于使用 System.out.println、System.err.println 以及异常对象的 printStrackTrace 方法来输出相关信息。这些使用方式虽然简便,
所产生的信息在出现问题时并不能提供有效的帮助。这些使用方式都应该改为使用日志 API。使用日志 API 并没有增加很多复杂度,但是所提供的
是显著的。
尽管记录日志是应用开发中并不可少的功能,在 JDK 的最初版本中并不包含日志记录相关的 API 和实现。相关的 API(java.util.logging 包,JUL)和实现,直到 JDK 1.4 才被加入。因此在日志记录这一个领域,社区贡献了很多开源的实现。其中比较流行的包括 log4j 及其后继者 logback。除了真正的日志记录实现之外,还有一类与日志记录相关的封装 API,如 Apache Commons Logging 和 SLF4J。这类库的作用是在日志记录实现的基础上提供一个封装的 API 层次,对日志记录 API 的使用者提供一个统一的接口,使得可以自由切换不同的日志记录实现。比如从 JDK 的默认日志记录实现 JUL 切换到 log4j。这类封装 API 库在框架的实现中比较常用,因为需要考虑到框架使用者的不同需求。在实际的项目开发中则使用得比较少,因为很少有项目会在开发中切换不同的日志记录实现。本文对于这两类库都会进行具体的介绍。
记录日志只是有效地利用日志的第一步,更重要的是如何对程序运行时产生的日志进行处理和分析。典型的情景包括当日志中包含满足特定条件的记录时,触发相应的通知机制,比如邮件或短信通知;还可以在程序运行出现错误时,快速地定位潜在的问题源。这样的处理和分析的能力对于实际系统的维护尤其重要。当运行系统中包含的组件过,日志对于错误的诊断就显得格外重要。
本文介绍关于日志 API 的基本内容。
Java 日志 API
从功能上来说,日志 API 本身所需求的功能非常简单,只需要能够记录一段文本即可。API 的使用者在需要进行记录时,根据当前的上下文信息构造出相应的文本信息,调用 API 完成记录。一般来说,日志 API 由下面几个部分组成: 记录器(Logger):日志 API 的使用者通过记录器来发出日志记录请求,并提供日志的内容。在记录日志时,需要指定日志的严重性级别。 格式化器(Formatter):对记录器所记录的文本进行格式化,并添加额外的元数据。 处理器(Handler):把经过格式化之后的日志记录输出到不同的地方。常见的日志输出目标包括控制台、文件和数据库等。
当程序中需要记录日志时,首先需要一个日志记录器对象。一般的日志记录 API 都提供相应的工厂方法来创建记录器对象。每个记录器对象都是有名称的。一般的做法是使用当前的 Java 类的名称或所在包的名称作为记录器对象的名称。记录器的名称通常是具有层次结构的,与 Java 包的层次结构相对应。比如 Java 类“com.myapp.web.IndexController”中使用的日志记录器的名称一般是“com.myapp.web.IndexController”或“com.myapp.web”。除了使用类名或包名之外,还可以根据日志记录所对应的功能来进行划分,从而选择不同的名称。比如用“security”作为所有与安全相关的日志记录器的名称。这样的命名方式对于某些横切的功能比较实用。开发人员一般习惯于使用当前的类名作为日志记录器的名称,这样可以快速在日志记录中定位到产生日志的 Java 类。使用有意义的其他名称在很多情况下也是一个不错的选择。
在通过日志记录器对象记录日志时,需要指定日志的严重性级别。根据每个记录器对象的不同配置,低于某个级别的日志消息可能不会被记录下来。该级别是日志 API 的使用者根据日志记录中所包含的信息来自行决定的。不同的日志记录 API 所定义的级别也不尽相同。日志记录封装 API 也会定义自己的级别并映射到底层实现中相对应的实际级别。比如 JDK 标准的日志 API 使用的级别包括 OFF、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST 和 ALL 等,Log4j 使用的级别则包括 OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE 和 ALL 等。一般情况下,使用得比较多的级别是 FATAL、ERROR、WARN、INFO、DEBUG 和 TRACE 等。这 6 个级别所对应的情况也有所不同: FATAL:导致程序提前结束的严重错误。 ERROR:运行时异常以及预期之外的错误。 WARN:预期之外的运行时状况,不一定是错误的情况。 INFO:运行时产生的事件。 DEBUG:与程序运行时的流程相关的详细信息。 TRACE:更加具体的详细信息。
在这 6 个级别中,以 ERROR、WARN、INFO 和 DEBUG 作为常用。
日志记录 API 的使用者通过记录器来记录日志消息。日志消息在记录下来之后只能以文本的形式保存。有的实现(如 Log4j)允许在记录日志时使用任何 Java 对象。非 String 类型的对象会被转换成 String 类型。由于日志记录通常在出现异常时使用,记录器在记录消息时可以把产生的异常(Throwable 类的对象)也记录下来。
每个记录器对象一个运行时对应的严重性级别。该级别可以通过配置文件或代码的方式来进行设置。如果没有显式指定严重性级别,则会根据记录器名称的层次结构关系往上进行查找,直到找到一个设置了严重性级别的名称为止。比如名称为“com.myapp.web.IndexController”的记录器对象,如果没有显式指定其严重性级别,则会依次查找是否有为名称“com.myapp.web”、“com.myapp”和“com”指定的严重性级别。如果仍然没有找到,则使用根记录器配置的值。
通过记录器对象来记录日志时,只是发出一个日志记录请求。该请求是否会完成取决于请求和记录器对象的严重性级别。记录器使用者产生的低于记录器对象严重性级别的日志消息不会被记录下来。这样的记录请求会被。除了基于严重性级别的过滤方式之外,日志记录框架还支持其他自定义的过滤方式。比如 JUL 可以通过实现 java.util.logging.Filter 接口的方式来进行过滤。Log4j 可以通过继承 org.apache.log4j.spi.Filter 类的方式来过滤。
实际记录的日志中除了使用记录器对象时提供的消息之外,还包括一些元数据。这些元数据由日志记录框架来提供。常用的信息包括记录器的名称、时间戳、线程名等。格式化器用来确定所有这些信息在日志记录中的展示方式。不同的日志记录实现提供各自默认的格式化方式和自定义支持。
JUL 中通过继承 java.util.logging.Formatter 类来自定义格式化的方式,并提供了两个标准实现 SimpleFormatter 类和 XMLFormatter 类。清单 1 中给出了 JUL 中自定义格式化器的实现方式,只需要继承自 Formatter 类并实现 format 方法即可。参数 LogRecord 类的对象中包含了日志记录中的全部信息。
清单 1. JUL 中自定义格式化器的实现 public class CustomFormatter extends Formatter { public String format(LogRecord record) { return String.format(&&%s& [%s] : %s&, new Date(record.getMillis()), record.getLoggerName(), record.getMessage()); } }
对于自定义的格式化器类,需要在 JUL 的配置文件中进行指定,如清单 2 所示。
清单 2. 在 JUL 配置文件中指定自定义的格式化器类 java.util.logging.ConsoleHandler.formatter = logging.jul.CustomFormatter
Log4j 在格式化器的实现上要简单一些,由 org.apache.log4j.PatternLayout 类来负责完成日志记录的格式化。在自定义时不需要创建新的 Java 类,而是通过配置文件指定所需的格式化模式。在格式化模式中,不同的占位符表示不同类型的信息。比如“%c”表示记录器的名称,“%d”表示日期,“%m”表示日志的消息文本,“%p”表示严重性级别,“%t”表示线程的名称。清单 3 给出了 Log4j 配置文件中日志记录的自定义方式。
清单 3. Log4j 中日志记录的自定义方式 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %c - %m%n
本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:zixun-group@ 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
1、递规法:利用递归一层一层的删。 以下为引用的内容: deleteDir($dir) { if (rmdir($dir)==false && is_dir($dir)) { &if ($dp = opendir($dir)) { & while (($file=readdir($dp)) != false) { && if ...
PHP中从一个页面重定向到另外一个页面三种办法,供参考。 一、用HTTP头信息 也就是用PHP的HEADER函数。PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型(&Context-type: xxx/xxx&),页面的属性(&No cache&, &Expire&...
前天去面试的时候也是这样,不过我当时记不起来了.就记得MYSQL里面的date_sub(now(),‘interval 1 day‘);date(‘Y/m/d h:i:s‘,mktime(date(‘h‘), date(‘i‘), date(‘s‘), date(‘m‘) , date(‘d‘)+1, date(‘Y‘))); --------------------------------...
下面带大家走进PHP的入门之路 说明: 我这里暂时是以 Apache web server 和 MY SQL 作为WEB服务器和数据库,在php-4.3.3下的环境做的程序。当然要简单的构建和访问查看数据库 PHPMYADMIN 不可少 这里需要懂得HTML基础知识!没有HTML基础知识的!可以去百度或者GOOGLE搜下!很简单的!这里就不多说了 好了我们开始吧!我们就把PHP入门当成一个苹...
十四条令PHP初学者头疼问题大总结 今天为大家奉上令PHP初学者头疼问题大总结,下面提出的14个问题希望对PHP初学者有所帮助。      1、页面之间无法传递变量      get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET[‘foo‘],$_POST[‘foo‘],$_SESSION[‘foo‘]来得到。当然也可以...
学习php中10个基础知识总结 看了些PHP的基础知识,自己在这里总结下: 1,在HTML嵌入PHP脚本有三种办法: 以下为引用的内容: &script language=&php&& //嵌入方式一 echo(&test&); &/script& &? //嵌入方式二 echo &&br&g...
若您要投稿、删除文章请联系邮箱:zixun-group@,工作人员会在5个工作日内回复。
售前咨询热线
服务与支持
账号与支持
关注阿里云
International域名与网站(万网)
数加&大数据分析及展现
数加&大数据应用
管理与监控
阿里云办公
培训与认证
数加&人工智能
数加&大数据基础服务
互联网中间件
开发者工具
钉钉智能硬件
&&&&&&&&&日志采集功能与 Kafka对比
日志采集功能与 Kafka对比
更新时间: 11:59:15
Kafka是分布式消息系统,由于其高吞吐和水平扩展,被广泛使用于消息的发布和订阅。以开源软件的方式提供,各用户可以根据需要搭建Kafka集群。
日志服务(Log Service)是基于飞天Pangu构建的针对日志平台化服务。服务提供各种类型日志的实时采集,存储,分发及实时查询能力。通过标准话的Restful API对外提供服务。
Log Service Loghub提供公共的日志采集、分发通道,用户如果不想自己搭建、运维kafka集群,可以使用Log Service LogHub功能。
Log Service Loghub & Kafka 概念映射
数据消费位置
Loghub & Kafka 功能比较
自建或共享Kafka集群
Log Service服务
TCP 打通网络
Http (restful API),80端口
基于云账号的签名认证+访问控制
支持动态shard个数弹性伸缩(Merge/Split),对用户无影响
基于shard的标准化流控
数据拷贝数
用户自定义
暂不开放,默认3份拷贝
failover/replication
调用工具完成
自动,用户无感知
调用工具完成,影响服务
用户无感知
round robin/key hash
暂只支持round robin/key hash
当前消费位置
保存在kafka集群的zookeeper
服务端维护、无需关心
根据需求动态调整
成本对比参见 下LogHub部分。
本文导读目录
以上内容是否对您有帮助?
更新不及时
缺少代码/图片示例
太简单/步骤待完善
更新不及时
缺少代码/图片示例
太简单/步骤待完善
感谢您的打分,是否有意见建议想告诉我们?
感谢您的反馈,反馈我们已经收到java读取日志文件,从获取的一段话中提取重要信息
作者:用户
浏览:628 次
java读取日志文件,从获取的一段话中提取重要信息获取用户名,如infodba;获取操作时间;获取操作,如delete或者已删除;获取被操作的对象,最后面的字段,最好把那个计算机名也获取到通过配置是不
java读取日志文件,从获取的一段话中提取重要信息
获取用户名,如infodba;获取操作时间;获取操作,如delete或者已删除;获取被操作的对象,最后面的字段,最好把那个机名也获取到
通过配置是不可能得到你想要的
必须进行字符串截取
解决方案二:
其实就是那一句话如何断句并把有用的信息提取出来
解决方案三:
以“-”分割啊,得到的数组长度是3的倍数,0是前面的2003,1是中间的信息,2是结果的信息
解决方案四:
这个不用特意的去写;你可以通过配置log4j.xml文件,然后直接在要输出的日志地方分别用info、debug、error、warn输出日志就可以了。
解决方案五:
用String.substring(...) 方法处理
解决方案六:
不知道你的”infodba这些是会变的“是什么意思?如果你的log如你给的图一样,我觉得是不是就是遍历整个log文件,然后每行跟你的关键字进行匹配,比如关键字为“已删除”,如果该行包含整个关键字就提取出来,然后解析这一行的数据;
解析数据的前提是你的每一行数据的结构是不变的,比如开头都是2003,然后是空格-空格等等,只要这些结构不变,就可以用空格进行分割了,然后再找你想要的信息所在的下标就行。
解决方案七:
这个就是基本的数据读取和字符串匹配,读取使用BufferedReader,按行读取,比较使用字符串的contains方法,比如
File srcFile = new File("你的日志文件路径");
InputStreamReader isr = new InputStreamReader(new FileInputStream(
srcFile));
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
List&String& resultList = new ArrayList&String&();
while (line != null) {
if (line.contains("已删除")) {
resultList.add(line); //将找到的一行放到List中
//最后遍历resultList就是你要的“已删除”的行。
【云栖快讯】2017互联网超级工程阿里双11完美落幕,交易额突破1682亿,但阿里工程师如何玩转“超级工程”,背后黑科技又是如何?12月13-14日,12位大咖直播分享揭秘1682亿背后技术实践,马上预约&&
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供Java-SDK之如何实现设置访问日志? - 阿里云
查看完整版本: [--
Java-SDK之如何实现设置访问日志?
OSS允许用户对Bucket设置访问日志记录,设置之后对于Bucket的访问会被记录成日志,日志存储在OSS上由用户指定的Bucket中,文件的格式为:&TargetPrefix&&SourceBucket&-YYYY-mm-DD-HH-MM-SS-UniqueString&其中TargetPrefix由用户指定。日志规则由以下2项组成:target_bucket,存放日志文件的Buckettarget_prefix,保存访问日志文件前缀&更多关于访问日志的内容请参考 & &开启Bucket日志& & &通过OSSClient.setBucketLogging来开启日志功能:SetBucketLoggingRequest request = new SetBucketLoggingRequest(&sourceBucket&);request.setTargetBucket(&targetBucket&);request.setTargetPrefix(&targetPrefix&);ossClient.setBucketLogging(request);& &查看Bucket日志设置& & &通过OSSClient.getBucketLogging来查看日志设置:BucketLoggingResult result = ossClient.getBucketLogging(&sourceBucket&);System.out.println(result.getTargetBucket());System.out.println(result.getTargetPrefix());& &关闭Bucket日志& & &通过OSSClient.setBucketLogging来关闭日志功能:SetBucketLoggingRequest request = new SetBucketLoggingRequest(&sourceBucket&);request.setTargetBucket(null);request.setTargetPrefix(null);ossClient.setBucketLogging(request);&
查看完整版本: [--
Powered by
Gzip disabled}

我要回帖

更多关于 阿里云短信服务java 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信