网站建站怎么分前端和后端,中山网站建设文化效果,成都市公共资源交易服务中心,设计ui目录 1、log日志的用途2、log日志级别3、什么时候需要输出日志1. 系统启动参数、环境变量2. 异常捕获处3. 函数获得期望之外的结果时4. 关键操作 4、日志输出的内容5、 注意事项1. 日志信息不明确2. 特殊异常处理3. 日志输出顺序4. 临时调试日志 6、xml文件配置7、linux下查看日… 目录 1、log日志的用途2、log日志级别3、什么时候需要输出日志1. 系统启动参数、环境变量2. 异常捕获处3. 函数获得期望之外的结果时4. 关键操作 4、日志输出的内容5、 注意事项1. 日志信息不明确2. 特殊异常处理3. 日志输出顺序4. 临时调试日志 6、xml文件配置7、linux下查看日志命令7.1 linux查看日志的常用命令包括1. tail命令用于显示文件的末尾内容。2. head命令用于显示文件的开头内容。3. cat命令用于将文件内容输出到终端。4. less命令用于以可滚动的方式查看大型文件。5. grep命令用于在文件中搜索特定的内容。 7.2 常用场景1. 匹配关键字排查错误2. 查看某个时间段的日志信息3. 查看日志最后一次出现关键字’test’的日志记录4. 统计一份日志里面出现‘keyword’关键字的行数5. wc命令常用的几个参数 1、log日志的用途
问题追踪通过日志不仅仅包括我们程序的一些bug也可以在安装配置时通过日志可以发现问题。
状态监控通过实时分析日志可以监控系统的运行状态做到早发现问题、早处理问题。
安全审计审计主要体现在安全上通过对日志进行分析可以发现是否存在非授权的操作。
2、log日志级别
日志可分为五个级别 DEBUG :为程序的调试信息最低级 INFO :为一般要显示的信息比如登录登出 ERROR:为严重错误 主要是程序的错误 WARN :为一般警告比如session丢失 FATAL崩溃整个程序终止运行
3、什么时候需要输出日志
日志并不是越多越详细就越好。在分析运行日志查找问题时我们经常遇到该出现的日志没有无用的日志一大堆或者有效的日志被大量无意义的日志信息淹没查找起来非常困难。那么什么时候输出日志呢以下列出了一些常见的需要输出日志的情况而且日志的级别基本都是INFO至于Debug级别日志的使用场景本节没有专门列出需要具体情况具体分析但也是要追求“恰如其分”不是越多越好。
1. 系统启动参数、环境变量
系统启动的参数、配置、环境变量、System.Properties等信息对于软件的正常运行至关重要这些信息的输出有助于安装配置人员通过日志快速定位问题所以程序有必要在启动过程中把使用到的关键参数、变量在日志中输出出来。在输出时需要注意不是一股脑的全部输出而是将软件运行涉及到的配置信息输出出来。比如如果软件对jvm的内存参数比较敏感对最低配置有要求那么就需要在日志中将-Xms -Xmx -XX:PermSize这几个参数的值输出出来。
2. 异常捕获处
在捕获异常处输出日志大家在基本都能做到唯一需要注意的是怎么输出一个简单明了的日志信息。这在后面的问题问题中有进一步说明。
3. 函数获得期望之外的结果时
一个函数尤其是供外部系统或远程调用的函数通常都会有一个期望的结果但如果内部系统或输出参数发生错误时函数将无法返回期望的正确结果此时就需要记录日志日志的基本通常是warn。需要特别说明的是这里的期望之外的结果不是说没有返回就不需要记录日志了也不是说返回false就需要记录日志。比如函数isXXXXX()无论返回true、false记录日志都不是必须的但是如果系统内部无法判断应该返回true还是false时就需要记录日志并且日志的级别应该至少是warn。
4. 关键操作
关键操作的日志一般是INFO级别如果数量、频度很高可以考虑使用DEBUG级别。以下是一些关键操作的举例实际的关键操作肯定不止这么多。
删除删除一个文件、删除一组重要数据库记录……
添加和外系统交互时收到了一个文件、收到了一个任务……
处理开始、结束一条任务……
4、日志输出的内容
ERROR错误的简短描述和该错误相关的关键参数如果有异常要有该异常的StackTrace。
WARN告警的简短描述和该错误相关的关键参数如果有异常要有该异常的StackTrace。
INFO言简意赅地信息描述如果有相关动态关键数据要一并输出比如相关ID、名称等。
DEBUG简单描述相关数据如果有异常要有该异常的StackTrace。
在日志相关数据输出的时要特别注意对敏感信息的保护比如修改密码时不能将密码输出到日志中。
5、 注意事项
1. 日志信息不明确
实际开发时没有记录任务id和任务名称软件部署后现错误后根据该日志记录不能确认哪一条任务错误给进一步的分析原因带来困难。
2. 特殊异常处理
对于静态工具类函数中的异常处理最简单的方式就是不捕获、不记录日志直接向上抛出如果认为异常类型太多或者意义不明确可以抛出自定义异常类的实例。
3. 日志输出顺序
另外需要明确一点日志系统是一个多线程公用的系统在两行日志输出之间有可能会被插入其他线程的日志记录不会按照我们的意愿顺序输出。
4. 临时调试日志
对于临时调试日志建议在日志的输出信息中添加一些特殊的连续字符也可以用自己的名称、代号这样可以在调试完毕后提交代码之前方便地找到所有临时代码一并删除。
6、xml文件配置
logback-spring.xml文件:
?xml version1.0 encodingUTF-8?
configuration debugfalse!--定义日志文件的存储地址 --property nameLOG_HOME value../pro_col_logs/user /!--property nameCOLOR_PATTERN value%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){\t|Caller.{1}0|\r\n, })- %gray(%msg%xEx%n) /--!-- 控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoder classch.qos.logback.classic.encoder.PatternLayoutEncoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n/pattern--pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n/pattern/encoder/appender!-- 按照每天生成日志文件 --appender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderrollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy!--日志文件输出的文件名 --FileNamePattern${LOG_HOME}/user-%d{yyyy-MM-dd}.%i.log/FileNamePattern!--日志文件保留天数 --MaxHistory30/MaxHistorymaxFileSize50MB/maxFileSize/rollingPolicyencoder classch.qos.logback.classic.encoder.PatternLayoutEncoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符 --pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n/pattern/encoder!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 --filter classch.qos.logback.classic.filter.LevelFilterlevelDEBUG/level!--抓到该级别的就拦截--onMatchDENY/onMatch!-- 上面没抓到的就放行--onMismatchACCEPT/onMismatch/filter/appender!-- 滚动记录文件--!-- level为 DEBUG 日志时间滚动输出 --appender nameDEBUG_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文档的路径及文档名 --file${LOG_HOME}/user-debug.log/file!--日志文档输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志归档 --fileNamePattern${LOG_HOME}/user-debug-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!-- 日志文档保留天数 --maxHistory15/maxHistory!-- 限制日志文件总容量 --totalSizeCap10GB/totalSizeCap/rollingPolicy!-- 此日志文档只记录debug级别的 --filter classch.qos.logback.classic.filter.LevelFilterleveldebug/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 生成 error html格式日志开始 --appender nameHTML classch.qos.logback.core.FileAppenderfilter classch.qos.logback.classic.filter.ThresholdFilter!--设置日志级别,过滤掉info日志,只输入error日志--levelERROR/level/filterencoder classch.qos.logback.core.encoder.LayoutWrappingEncoderlayout classch.qos.logback.classic.html.HTMLLayoutpattern%p%d%msg%M%F{32}%L/pattern/layout/encoderfile${LOG_HOME}/user-error-log.html/file/appender!-- 生成 error html格式日志结束 --!--myibatis log configure --logger namecom.apache.ibatis levelTRACE /logger namejava.sql.Connection levelDEBUG /logger namejava.sql.Statement levelDEBUG /logger namejava.sql.PreparedStatement levelDEBUG /logger namecom.byd levelDEBUG /!-- 日志输出级别 --root levelINFOappender-ref refSTDOUT /appender-ref refFILE /appender-ref refHTML /appender-ref refDEBUG_FILE //root/configuration7、linux下查看日志命令
7.1 linux查看日志的常用命令包括
tail/head、cat/tac、less/more、grep/sed、wc1. tail命令用于显示文件的末尾内容。
tail -f filename -- 实时监控日志
tail -10f filename -- 实时监控10行日志信息
tail -n 100 filename — 查看尾部最后100行日志信息
tail -n 100 filename — 查看日志100行之后的日志信息2. head命令用于显示文件的开头内容。
head -n 100 filename — 查看文本开始的头100行信息
head -n -100 filename — 查看文本最后100行信息以上的内容3. cat命令用于将文件内容输出到终端。
例如cat filename 将显示文件filename的全部内容。
cat filename -- 查看全部文本信息
cat -n filename |tail -n 100|head -n 20 — 查看100-120行之间的内容
tac – 从文本的尾部往头部展示日志内容4. less命令用于以可滚动的方式查看大型文件。
例如less filename 将打开文件filename您可以使用上下箭头和Page Up/Page Down键来浏览文件。
/keyword --搜索
n/shiftn键–向下查找
快捷键ctrlF/ctrlB–向前/后翻页
less /keyword logfile.log–搜索关键字
直接定位
less 100g xx.log -- 直接定位到第100行
less GG xx.log -- 定位到最后一行
less 100P xx.log -- 定位到第100个字节的位置
less 100p xx.log -- 直接定位到50%的位置
more -10 filename 设定每页展示10条数据信息。5. grep命令用于在文件中搜索特定的内容。
grep是一种强大的文本搜索工具使用正则表达式搜索文本且把匹配的行打印出来。grep “match_pattern” file1,file2,file3 —多个文本中查找
grep “match_pattern” filename --colorauto --标记匹配颜色always never auto三种
grep -v “match _pattern”filename --输出除之外的所有行
grep -E “[1-9]” -- 使用正则表达式
grep -o -E “[a-z].” line -- 只输出匹配到的内容
grep -c “text” filename -- 统计文件或者文本中包含匹配字符串的行数
grep “text” -n filename -- 输出包含匹配字符串的行数
sed是一种非交互式的编辑器sed会逐行处理文件并将结果发送到屏幕。
sed -n ‘1p’ filename -- 只打印文件第一行
sed -n ‘1,10p’ filname -- 查看文件1-10行内容
sed ‘1d’ filename -- 删除文本第一行内容
sed ‘s/希望替换的内容/被替换的内容/g’ -- 替换字符串
sed ‘s/1/one /g’ filename 将1替换为one
sed -n ‘/2019-08-06 22:43/,/2019-08-06 22:44/p’ filename -- 查看时间区间内的日志记录
n1 log.file| sed -n ‘1,10p’ -- 查看日志的1-20行内容。7.2 常用场景
1. 匹配关键字排查错误
grep
grep -w “keyword filelog.log -2 --color -n /tmp/tmp.log
grep -w keyword filelog.log -2 --color -n | less-w 全匹配;-2 关键字上下2行;–color 关键字着色;-n 输出行号
2. 查看某个时间段的日志信息 grep 2019-08-06 22 filenamecat结合grep
cat log.file |grep -n 2019-08-06 22:43sed结合grep
sed -n 2013:15:00:01/,/2013:16:59:58/p xxxx.log | grep Exception -n -5 --color3. 查看日志最后一次出现关键字’test’的日志记录
grep test -A 10 log.file | tail -n 11这里需要了解到grep命令的几个参数含义 grep ‘name’ -A 10 显示匹配内容和后面的10行 grep ‘name’ -B 10 显示匹配内容和前面的10行 grep ‘name’ -C 10 显示匹配内容和前后面的10行 tail -n 11命令则是将当前显示的10行内容以及匹配的那一行内容展示出现
4. 统计一份日志里面出现‘keyword’关键字的行数
grep keyword ./log.file |wc -l5. wc命令常用的几个参数
-l 匹配的行数 -w 匹配的字数 -m 匹配的字符数目