删了两台服务器,厅长差点拿我祭天

为什么说这么一个标题,其实还是有点故事的,其实说是故事还不如说是事故,庆幸的是还好没有造成什么大的问题,既然说删了两台服务器,上个月确实是操作删了两台服务器。由于测试环境有问题,客户就一直让我们在正式环境上开发,所以有时候就会造成一些问题,总之很刺激,也很危险。

简单说一下是怎么个情况吧,上个月客户让我测一个接口,但是那个接口只能在线上测,所以我就点了一个释放资源,那个资源里面就是下发下去的两台服务器,由于没有很好的日志记录所以当时也不知道到底是谁释放的,当然了,不是我死不承认,而是我也不知道,然后他们查出来我的电脑IP,直接找过来了,可吓坏我了,还好人家那两台服务器没有投入使用,让我以后操作小心一点。是不是很刺激。

看了这个问题,其实我想说一个问题,就是我们的项目当时没有很好的日志管理,以至于谁删了服务器都不知道,还要去追查一周才能定位到是谁干的,很慢,那么如果有良好的日志记录,谁干了什么翻翻日志,是不是就可以很清楚的知道是谁操作的,所以我们今天来聊聊日志。

一、日志级别

在了解日志之前我们首先要知道有哪些日志级别,开发中我们使用哪个级别,正式的线上环境我们又使用哪个级别。

off  最高等级,用于关闭所有的日志记录;

fatal  具有严重的错误时间,可能导致程序退出;

error  可能存在错误时间的发生,但是不会影响程序的运行;

warn  存在潜在的错误;

info  记录程序运行的过程;

debug  会记录所有的日志信息,比info打印的东西更为全面,一般做调试非常好用;

all  等级最低,用于打开所有的日志记录;

这就是我们日志的级别,分别从高到低,日志级别越高,记录的日志信息就越详细,那么在实际的开发中,我们一般使用debug级别, 因为我们要看很多的日志信息,因为可能存在一些东西,我们要通过日志去进行查看,那么在线上的话,我们就一般使用error级别,因为我们只需要去记录一些错误的东西,一些其他没用的信息没必要记录下来,记录下来会比较影响我们的系统的性能。

二、简单的配置

接下来我们介绍一下,如果配置我们的log4j日志信息,我们输出的那些东西,究竟是如何进行配置的。

首先我们说一下文件追加器:

org.apache.log4j.ConsoleAppender (控制台);

org.apache.log4j.FileAppender (文件);

org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件);

其实文件追加器不止这3种,但是我们这里只说常用的集中,通过追加器我们就可以把日志输出在控制台上,但是输出在控制台上当我们清掉控制台后,日志就不见了,所以我们可以通过配置文件追加器把日志写进文件中,方便以后的查阅。

日志如何输出到文件:

上面已经写过了,这里我就写一个实例;

log4j.appender.I.File = logs/info/info_

这是我项目中配置的,那么这个日志的输出位置就是在我项目下面的logs文件夹下面有个info文件夹,就在info_这个文件中记录着。

还有一个输出控制台的配置,通过这个配置,我们就可以把日志输出到控制台上

log4j.appender.C.Target = System.out

再就是布局方式,其实有好集中,但是在开发中我们常规的是使用下面这种

log4j.appender.C.layout = org.apache.log4j.PatternLayout

这个配置的意思就是,我们的日志是追加到原有的日志文件中去的,如果不设置为true,那么每次产生的日志文件都会覆盖原来的日志文件

log4g.appender.I.Append = true

其实所有的日志记录在一个文件中也不是一个特别好的办法,如果日志很多,找起来特别麻烦,也很影响系统的性能,所以我们可以通过配置,让他一天生成一个日志文件

log4j.appender.I.DatePattern=yyyy-MM-dd'.log '

这个其实就是你打印在控制台和记录在文件中的日志格式

log4j.appender.I.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH-mm} method:%l\%n%m%n

看个例子:

这个是控制台打印的信息

这个是日志文件记录的信息

这样你就可以比较清晰的看到我们的日志信息是什么级别的日志,什么时间,哪个类,多少行,你还可以配置你想要的日志格式,我把一些参数放在下面。

log4j.appender.C.layout.ConversionPattern = %d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n

%m   输出代码中指定的消息

%p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r   输出自应用启动到输出该log信息耗费的毫秒数

%c   输出所属的类目,通常就是所在类的全名

%t   输出产生该日志事件的线程名

%n   输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”

%d   输出日志时间点的日期或时间。默认格式为ISO8601,也可以在其后指定格式。比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28, 921

%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数

还有一点就是下面这个配置,上面的有些C I E D可能大家不知道是什么意思,其实它就是一个变量,变量前面的debug就是我们日志输出的级别。

log4j.rootLogger = debug,C,I,E,D

所谓变量其实就是通过它配置我们的日志信息,下面分别定义了两个变量I和E,下面有个log4j.append.E.Threshold = error这样一个配置,其实就是通过E这个变量去定义E,这个变量记录的是error级别的日志,那么有关error的信息,那么都会写进这个对应的文件中

最后把我写的日志文件信息完整版放在最后,欢迎大家参考交流:

# C 变量

log4j.rootLogger = debug,C,I,E,D

log4j.appender.C = org.apache.log4j.ConsoleAppender

# 日志输出位置,也可以指定为文件

log4j.appender.C.Target = System.out 

# 布局方式,一般选择自由方式布局

log4j.appender.C.layout = org.apache.log4j.PatternLayout

# 日志输出格式

log4j.appender.C.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH-mm} method:%l\%n%m%n

log4j.appender.I = org.apache.log4j.DailyRollingFileAppender

log4j.appender.I.DatePattern=yyyy-MM-dd-HH'.log '

log4j.appender.I.File = logs/info/info_

log4g.appender.I.Append = true

log4j.appender.I.Threshold = info

log4j.appender.I.layout = org.apache.log4j.PatternLayout

log4j.appender.I.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH-mm} method:%l\%n%m%n

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.DatePattern=yyyy-MM-dd-HH'.log '

log4j.appender.E.File = logs/error/error_

log4g.appender.E.Append = true

log4j.appender.E.Threshold = error

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH-mm} method:%l\%n%m%n

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.DatePattern=yyyy-MM-dd-HH'.log '

log4j.appender.D.File = logs/debug/debug_

log4g.appender.D.Append = true

log4j.appender.D.Threshold = debug

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH-mm} method:%l\%n%m%n

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,957评论 0 6
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,941评论 1 13
  • 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layo...
    默默守护阅读 1,897评论 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 3,276评论 0 0
  • 销售首先要了解自己的产品,专业的知识能让你精准识别客户。这时候再考虑售卖的技巧。 新人入职要想快速熟悉陌生领...
    零1阅读 154评论 0 0