Play的日志
由于当前使用play1.25,虽然play提供了Logger进行日志功能,
但是没有找到其保存日志的文件,只是在控制台显示一些INFO级别的信息,感觉很无助
难道play1.25就提供打印日志的功能,不能将打印信息保存到一个文件中吗?
application.conf文件中有关于Log的配置
# Log level # ~~~~~ # Specify log level for your application. # If you want a very customized log, create a log4j.properties file in the conf directory #application.log=INFO # # More logging configuration #application.log.path=/log4j.properties #application.log.system.out=on
什么都不动,启动应用,IDE的控制台将按INFO级别输出日志
打开注释:
application.log=INFO ,也是输出按最低级别为INFO进行输出
将其改为 application.log=DEBUG,效果与INFO一样,难到play的日志输出默认最低为INFO
application.log=WARN 将输出WARN以上的信息
application.log=ERROR 将输出ERROR以上的信息
Play中使用Log4j配置
play如果检测到类路径下有log4j.properties文件,会自动加载该配置
然后使用log4j的配置进行日志管理
但是,打印出来的日志信息有点问题,不能输出详细的异常链
log4j.properties配置
#使用play做日志,这里的异常级别只对控制台输出有效,对于写文件仍然按DEBUG为最低级别进行! log4j.rootLogger=ERROR, Rolling, Console #this config for what ? #log4j.logger.play=INFO #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n # Rolling files log4j.appender.Rolling=org.apache.log4j.RollingFileAppender log4j.appender.Rolling.File=application.log #日志记录最低级别为ERROR log4j.appender.Rolling.Threshold=ERROR log4j.appender.Rolling.MaxFileSize=1MB log4j.appender.Rolling.MaxBackupIndex=100 log4j.appender.Rolling.layout=org.apache.log4j.PatternLayout log4j.appender.Rolling.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
模拟一个异常
public static void index(){ String username = Security.connected(); //Post对象的author属性为User类型 List<Post> posts = Post.find("author.username", username).<Post>fetch(); try { int i = 1/0; } catch(Exception e) { Logger.error(e.getMessage(), e); } render(posts); }
虽然指定了级别为ERROR以上,但是控制台仍会输出INFO级别
而且,记录日志的文件中也没有具体的异常链信息
只是记录了异常消息
2013-09-08 14:25:21,023 [play-thread-1] [play] [ERROR] - / by zero
而想要的是这样的异常记录
2013-09-08 14:20:34,407 [play-thread-1] [controllers.Admin] [ERROR] - / by zero java.lang.ArithmeticException: / by zero at controllers.Admin.index(Admin.java:41) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:251) at play.Invoker$Invocation.run(Invoker.java:278) at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:229) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619)
记录日志正确的做法
仍然增加一个log4j的配置
出现异常的地方,不使用Logger.error()记录日志,而是将异常包装为RuntimeException向上抛
抛到play中,由play来处理这个异常!
play接收到异常后,会将异常按log4j的配置进行保存,这样就得到了想要的日志了!!!
public static void index(){ String username = Security.connected(); //Post对象的author属性为User类型 List<Post> posts = Post.find("author.username", username).<Post>fetch(); try { int i = 1/0; } catch(Exception e) { //Logger.errro(e.getMessage,e);//无法得到具体的异常信息 throw new RuntimeException(e); } render(posts); }
重新打开application.log,此时记录的异常就详细多了
2013-09-08 15:15:29 ERROR @6fgka5n30 Internal Server Error (500) for request GET /admin/index Execution exception (In /app/controllers/Admin.java around line 43) RuntimeException occured : java.lang.ArithmeticException: / by zero play.exceptions.JavaExecutionException: java.lang.ArithmeticException: / by zero at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237) at Invocation.HTTP Request(Play!) Caused by: java.lang.RuntimeException: java.lang.ArithmeticException: / by zero at controllers.Admin.index(Admin.java:43) at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) ... 1 more Caused by: java.lang.ArithmeticException: / by zero at controllers.Admin.index(Admin.java:41) ... 6 more
小结
play中做日志:
application.conf 不修改任何有关log的配置
增加log4j.properties文件,写两个Appender,一个往控制台打印,一个记录到文件
程序中catch到Exception时,直接使用RuntimeException包装后,往上抛即可
最后,在log4j配置指定的文件中即可找到记录的异常日志信息!
相关推荐
CarPlay认证的协议log记录 ATS文件,在2018年认证通过的log,供carplay开发者参考。
Arma3 任务重播。 先决条件 ...将P:\@ar3play文件夹设置为Output Mod Folder ,将P:\ar3play文件夹设置为Source Folder 。 按Crunch 命令行界面 以空闲驱动器为参数调用jenkins.bat ,即jenkins.bat P:
66play是一款游戏视频录制软件,最轻量录制工具,炫酷操作,一键记录,打造专属你的游戏藏宝室,轻松分享精彩瞬间,暴走五杀不再是截图! 66play使用方法 打开软件。 登录账号。 点击开始按钮。就可以开始录制了...
LastGoogle 移动基板调整以记录使用Google Play音乐iOS应用播放的歌曲。 此调整将歌曲记录到/var/log/lastgoogle.log 。计划这项工作仍在进行中,但是我想尽快使某些工作生效。 这是我计划的(按顺序): 仅在30秒后...
CleanroomLogger CleanroomLogger提供了一个基于Swift的可... :play_button: 具有一流传统支持的现代日志记录引擎 当在iOS 10.0,macOS 10.12,tvOS 10.0,watchOS 3.0或更高版本上运行时,CleanroomLogger可利用Apple
移至
博客 Tlog是适用于实现的终端I / O记录和回放程序包。... Tlog包含三个工具: tlog-rec用于记录程序或shell的终端I / O, tlog-rec-session用于记录整个终端会话的I / O,不受已记录用户的保护, tlog-play用于回放录
用于Jellyfin 10.8.0.0的DLNA PlayTo插件服务器和客户端之间的DLNA日志记录。 能够处理非标准和损坏的xml设备响应。 SSDP数据包跟踪将UDP端口限制为特定范围通过设备检测自动创建简单的dlna配置文件。
小猎犬(Android库) 适用于Android应用程序的智能,可靠且高度可自定义的调试菜单库,支持屏幕记录,网络活动日志记录,生成错误报告以及许多其他有用的功能。内容实际观看克隆此存储库,选择一个构建变体并运行...
完全禁用日志记录使用以下内容创建conf/application-logger.xml < configuration> < root xss=removed></ root>编写自定义 Ebean 插件以使用 J2EE 数据源如果您针对WebLogic 10.3开发,您很可能希望使用它可以为您...
一些记录,记录正在读和将要读的书,一些网络的文章等等 最近关注的一些技术 1.Tex 高德纳(Donald E. Knuth)开发的精美排版系统。 2.版本控制git 3.node.js 4.snmp,简单网络管理协议(Simple Network Management ...
启用指标的控制台日志记录 ( metrics.console=true ) 以查看发送到石墨的数据示例。 赫鲁库 需要安装 Heroku 工具包。 heroku login heroku create -n # will give name/url of instance e.g. radiant-cha
该库允许在轻松地从您的应用程序创建自定义日志条目。 Google Play上的nRF Connect和nRF Toolbox正在使用它。 由于LogCat并非始终可用,因此记录器可用于调试目的。 nRF Logger可用于Android 4.2。*及更高版本。 ...
开启线程记录adb log日志 4.执行py脚本 5.批量处理截图加上水印(通过bin\ImageMarkClickLogo.jar) 6.关闭记录日志的线程(关闭窗口) 7.读取adb log日志 ...
因此,可能会出现内存限制,以避免这种情况,该应用会限制日志日志历史记录并在限制时删除最旧的情况,使更多的动态操作可以带来更大的容量,但就我而言,这是一个足够的解决方案。 该应用程序可以使用排序算法进行
- 支持按完整内容或仅在请求授权时记录日志 - 支持显示所有授权的通知、配置每一个应用程序的通知 - 支持永久性的取消设备ROOT权限、更改超级授权的生存模式 - 支持重新安装或升级应用程序后重新或记住授权 - 支持...
App 使用 Play Services Activity Recognition Client 来检测用户的活动,并且活动日志记录是通过控件自动完成的,用于打开/关闭日志记录。 您需要做的就是只启动应用程序一次,然后您就可以退出或终止应用程序。 ...
GMusic Year Wrapper V1 Beta 像Google Play音乐这样的Spotify年度套餐注意:此项目未得到Google的认可使用GMusic Year Wrapper git clone ... 要下载历史记录文件, 。 详细说明在可用现在,您可以使用以下选项启动...
7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据...
// Other deps "io.keen" %% "keen-error-reporter" % "1.0.0")配置在您的application.conf中sentry.dsn=XX_PUT_YOUR_DSN_HERE_XX注意:如果没有sentry.dsn ,则将禁用向哨兵报告功能,但报告程序仍将记录日志!...