Java优雅的记录日志:log4j实战篇

优快云积分获取与管理全攻略 技术社区积分系统是知识共享生态的核心激励机制,通过量化用户贡献实现资源交换。其底层逻辑遵循Web2.0时代的UGC经济模型,用户通过内容创作、社区互动等行为积累虚拟资产。在开发者社区场景中,积分体系能有效促进技术文档、工具源码等资源的流通,优快云作为国内头部平台,其积分规则具有典型参考价值。掌握签到策略、内容互动技巧和资源上传规范等实操方法,可系统性提升积分获取效率。2023年新规强化了连续签到奖励和互动质量检测机制,结合GitHub等开源平台资源互补,能构建更高效的技术资源获取路径。 阅读详情

写在前面

项目开发中,记录错误日志有以下好处:

  • 方便调试

  • 便于发现系统运行过程中的错误

  • 存储业务数据,便于后期分析

在java中,记录日志有很多种方式:

  • 自己实现:自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。

  • 使用log4j:log4j可以将日志输出到console窗口、文本文件、数据库等,功能强大!

  • 使用slfj:slfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar 和 log4j的接口,可以通过slfj来调用log4j,也可以调用jdk的logging。

  • 使用jdk自带的logging.jar中的方法

log4j需要导入的包

一般使用log4j需要与logging配合使用:

  • commons-logging-1.0.4.jar

  • log4j-1.2.15.jar

添加配置文件

在src下,把log4j的配置文件添加进去log4j.properties。

建立类文件+主函数

修改配置文件,将日志输出到console

log4J配置文件为:

### 设置级别和目的地(这里多个目的地) ###
log4j.rootLogger = DEBUG,CONSOLE
### 这里的me是包,也就是在这个包记录日志时,是只记录debug及以上级别的日志
log4j.logger.me=DEBUG
### 输出到控制台 ###
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n 

main主函数调用:

import org.apache.log4j.Logger;

public class Log4jTest {
   public static Logger logger1 = Logger.getLogger(Log4jTest.class);
   public static void main(String[] args) {
       //logger1
       logger1.trace("我是logger1,trace");
       logger1.debug("我是logger1,debug");
       logger1.info("我是logger1,info");
       logger1.warn("我是logger1,warn");
       logger1.error("我是logger1,error");
       logger1.fatal("我是logger1,fatal");
   }
}

可以看到console中输出内容:

16:51:16,575 DEBUG Log4jTest:15 [main:0]- 我是logger1,debug
16:51:16,578  INFO Log4jTest:16 [main:3]- 我是logger1,info
16:51:16,578  WARN Log4jTest:17 [main:3]- 我是logger1,warn
16:51:16,578 ERROR Log4jTest:18 [main:3]- 我是logger1,error
16:51:16,578 FATAL Log4jTest:19 [main:3]- 我是logger1,fatal

 

详细可以阅读:你用了这么久的Log4j2日志框架,真的对它有自己的理解吗?

设定输出的格式

在标题4中,看到console的输出内容,是按一定格式输出,格式的配置还是来自于配置文件log4j.properties

日志输出格式,所用到的参数如下,按需添加:

  • %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,

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

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

  • %c: 输出日志信息所属的类目,通常就是所在类的全名

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

  • %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

  • %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

  • %%: 输出一个”%”字符

  • %F: 输出日志消息产生时所在的文件名称

  • %L: 输出代码中的行号

  • %m: 输出代码中指定的消息,产生的日志具体信息

  • %n: 输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

  • %20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。

  • %-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,”-”号指定左对齐。

  • %.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

  • %20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。

将日志输出到文本文件

log4j配置文件:

### 设置级别和目的地(这里多个目的地) ###
log4j.rootLogger = trace,CONSOLE,zhangsanLog
log4j.logger.me=DEBUG

### 输出到控制台 ###
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L [%t:%r]- %m%n

### 输出到日志文件 ###
log4j.appender.zhangsanLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.zhangsanLog.File =G\:\\var\\alldata\\zhenduan\\debug.log
#log4j.appender.zhangsanLog.File =/var/alldata/zhenduan/debug.log
log4j.appender.zhangsanLog.Append = true
## 只输出DEBUG级别以上的日志
log4j.appender.zhangsanLog.Threshold = DEBUG
#'.'yyyy-MM-dd: 每天产生一个新的文件
log4j.appender.zhangsanLog.DatePattern = '.'yyyy-MM-dd
log4j.appender.zhangsanLog.layout = org.apache.log4j.PatternLayout
log4j.appender.zhangsanLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n
log4j.additivity.zhangsanLog = false

main函数调用:

public static Logger logger1 = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) {
   //logger1
   logger1.trace("我是logger1,trace");
   logger1.debug("我是logger1,debug");
   logger1.info("我是logger1,info");
   logger1.warn("我是logger1,warn");
   logger1.error("我是logger1,error");
   logger1.fatal("我是logger1,fatal");
} 

每一小时、每天、每半天生成一个文件

继续使用标题6的配置,但是需要修改几个地方。

在标题6中,有这句话

log4j.appender.zhangsanLog = org.apache.log4j.DailyRollingFileAppender

这句话的意思:将日志追加到文件,问题是多久生成一个文件?

需要修改

log4j.appender.zhangsanLog.DatePattern = '.'yyyy-MM-dd

DatePattern=’.’yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分,即对应的格式如下:

  • ’.’yyyy-MM: 每月

  • ’.’yyyy-ww: 每周

  • ’.’yyyy-MM-dd: 每天

  • ’.’yyyy-MM-dd-a: 每天两次

  • ’.’yyyy-MM-dd-HH: 每小时

  • ’.’yyyy-MM-dd-HH-mm: 每分钟

当文本文件为3KB大时新建一个文件

同样使用标题6的代码:

log4j.appender.zhangsanLog = org.apache.log4j.RollingFileAppender
log4j.appender.zhangsanLog.File =G\:\\var\\alldata\\zhenduan\\debug.log
#log4j.appender.zhangsanLog.File =/var/alldata/zhenduan/debug.log
log4j.appender.zhangsanLog.Append = true
## 输出DEBUG级别以上的日志
log4j.appender.zhangsanLog.Threshold = DEBUG
#'.'yyyy-MM-dd: 每天产生一个新的文件
log4j.appender.zhangsanLog.MaxFileSize = 2KB
log4j.appender.zhangsanLog.MaxBackupIndex = 5
log4j.appender.zhangsanLog.layout = org.apache.log4j.PatternLayout
log4j.appender.zhangsanLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n
log4j.additivity.zhangsanLog = false

这里修改的是

log4j.appender.zhangsanLog = org.apache.log4j.RollingFileAppender

MaxFileSize,当文件达到多大存储空间时,就新建一个文件MaxBackupIndex.

Log4j的日志级别

推荐:细说 Java 主流日志工具库

由低到高,可以联想到windows或unix的错误级别:

  • trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。

  • debug:调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。

  • info:输出一下你感兴趣的或者重要的信息,这个用的最多了。

  • warn:有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。

  • error:错误信息。用的也比较多。

  • fatal:级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。

log4j的配置说明

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。一般我常用的是properties文件

1、log4j.rootLogger = [ level ] , appenderName, appenderName, …

  • level:是log4j的日志级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

  • appenderName:就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。

2、 配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3、设置好appender后,针对appender的配置

也就是设置好要输出到什么地方后,其它配置选项

(1).ConsoleAppender选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

Target=System.err:默认情况下是:System.out,指定输出控制台

(2).FileAppender 选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=mylog.txt:指定消息输出到mylog.txt文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

(3).DailyRollingFileAppender 选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=mylog.txt:指定消息输出到mylog.txt文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

DatePattern=’.’yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:

  • ’.’yyyy-MM: 每月

  • ’.’yyyy-ww: 每周

  • ’.’yyyy-MM-dd: 每天

  • ’.’yyyy-MM-dd-a: 每天两次

  • ’.’yyyy-MM-dd-HH: 每小时

  • ’.’yyyy-MM-dd-HH-mm: 每分钟

(4).RollingFileAppender 选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=mylog.txt:指定消息输出到mylog.txt文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件

MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

4. 配置日志信息的布局,其语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN

其中,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

关于additivity

log4j.additivity.zhangsanLog = false

这个additivity也是很有意思的选项。

它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。

效果如下:

log4j.rootLogger=WARN,A2,A3
log4j.logger.test=DEBUG 

log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=../logs/test.log
log4j.appender.A2.Encoding=UTF-8
log4j.appender.A2.Append=true
log4j.appender.A2.MaxFileSize=2MB
log4j.appender.A2.MaxBackupIndex=5
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p %d [%t] %c{3}.%M - %m%n 

log4j.additivity.test.xml=false
log4j.logger.test.xml=DEBUG,A3 

log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=../logs/test-xml.log
log4j.appender.A3.Encoding=UTF-8
log4j.appender.A3.Append=true
log4j.appender.A3.MaxFileSize=2MB
log4j.appender.A3.MaxBackupIndex=5
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%-5p %d [%t] %c{3}.%M - %m%n

配置文件中有

log4j.logger.test=DEBUG
log4j.additivity.test.xml=false
log4j.logger.test.xml=DEBUG,A3

这个实例中,通过log4j.additivity.test.xml=false这一句取消了继承关系,这样XML的log就只会在A3中输出.

另:不考虑日志级别,a.java, b.java, c.java 分别调用自己的logger,将日志分别写入到不同的文件中。

这个需求主要是在配置文件中,给appender取个名字

然后在调用时,使用名称的方式调用

public static Logger loggerA = Logger.getLogger(“Alog”);
public static Logger loggerB = Logger.getLogger(“Blog”);
public static Logger loggerC = Logger.getLogger(“Clog”);

 

END

【PX4学习笔记】1. ROS及PX4环境搭建 环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d 阅读详情

相关推荐

java-普通java项目使用log4j-1.1.1

背景 使用maven引入失败,遂直接下载jar包引入 下载地址 https://logging.apache.org/log4j/2.x/download.html 解压包 将上面红框两个jar包放入java项目libs目录中(基本功能) maven项目中的resources下面新建log4j2.xml,内容为(console和文件同时记录) <?xml version="1.0" encoding="UTF-8"?> <Configuration status="info" stri

随笔 5736

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 192

Java 项目日志实例基础:Log4j

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~介绍几个日志使用方面的基础知识。1Log4j1、Log4j 介绍Log4j(log for java)是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输出到日志文件、也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。这些可以通过一个配置文件...

z123456789XDW的博客 2055

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 729

智慧社区:安防系统解决方案

智慧社区:安防系统解决方案

s13166803785的博客 434

java log4j的 用法

这个配置定义了一个名为 "Console" 的 Appender,它将日志输出到控制台。Root Logger 的级别设置为 "info",这意味着级别为 "info" 或更高的日志将被记录。Log4j 是 Apache 的一个开源日志框架,用于记录应用程序在运行时的日志信息。你可以根据你的需求调整 Log4j 的配置,如添加文件 Appender、改变日志级别等。首先,你需要在你的项目中添加 Log4j 的依赖。请注意,你应该使用最新的版本,而不是上述示例中的版本。的文件,并将其放在项目的。

chenchuang0128的博客 452

出现 Connection Failed [MySQL][ODBC Driver]Access denied for user ‘root‘@x(using password:YES)解决方法

Connection Failed [MySQL][ODBC 8.0(w) Driver]Access denied for user 'root'@xxxx (using password:YES)

码农研究僧的博客 1062

Log4j学习笔记

Log4j学习笔记1 入门实例2 Log4j基本使用方法2.1 定义配置文件 1 入门实例 我这里在我的Maven项目中先引入log4j的包 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12<...

Snail_565的博客 1365

微信小程序 - error_msg:net::ERR_CONNECTION_RESET“(“errno“:600001,“errMsg“:“uploadFile:fail errcode:-101)

"errno":600001,"errMsg":"uploadFile:fail errcode:-101 cronet_error_code:-101 error_msg:net::ERR_CONNECTION_RESET"微信小程序,微信小程序wx.uploadFile报错,uniapp微信小程序uni.uploadFile上传文件报错,微信小程序调用wx.uploadFile返回错误ERR_CONNECTION_RESET,如何解决这个问题,上传图片出现报错,小程序上传视频报错,上传文件出现报错,如何

🏆 前端领域优质创作者 5417

HBase在物流行业的应用:轨迹数据存储

想象一下,每天在全球范围内,数以亿计的物流包裹在各个城市、乡镇间穿梭。每一个包裹从发货人手中出发,经过仓储中心、转运站,最终到达收货人手中,这一路上都留下了它的“足迹”,也就是我们所说的轨迹数据。这些数据就像一个个拼图碎片,完整拼接起来后,能够清晰地呈现出整个物流网络的运行状况。例如,你在网上购买了一件心仪已久的商品,迫不及待地想知道它现在到哪儿了。物流平台实时更新的轨迹信息,让你可以准确了解包裹是在运输途中,还是已经到达附近的站点。

架构师的AI之路,分享AI应用开发架构的学习与实践。 967

Java优雅的记录日志,log4j实战篇

谢谢平台提供-http://bjbsair.com/2020-04-13/tech-info/65243.html 写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: **自己实现:**自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。 **使用log4j:**log4j可以...

hdx柿子的博客 507

【参数配置】OpenClaw 的破解之道(Doom Loop)

本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。

海兰 4042

JAVA - 优雅的记录日志(log4j实战篇)

写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现     自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。 使用log4j     log4j可以将日志输出到console窗口、文本文件、数据库等,功能强大! 使用slf

北岛知寒 1921

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java 日志_Java优雅的记录日志:log4j实战篇

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:北岛知寒cnblogs.com/crazyacking/p/5456347.html写在前面项目开发中,记录错误日志有以下好处:方便调试便于发现系统运行过程中的错误存储业务数据,便于后期分析在java中,记录日志有很多种方式:自己实现:自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。使用log4j:...

weixin_39586526的博客 103

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

log4j 日志书写格式_JAVA - 优雅的记录日志(log4j实战篇)

写在前面项目开发中,记录错误日志有以下好处:方便调试便于发现系统运行过程中的错误存储业务数据,便于后期分析在java中,记录日志有很多种方式:自己实现自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。使用log4jlog4j可以将日志输出到console窗口、文本文件、数据库等,功能强大!使用slfjslfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar ...

weixin_33001305的博客 929

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 记录事务的日志_JAVA - 优雅的记录日志(log4j实战篇)

写在前面项目开发中,记录错误日志有以下好处:方便调试便于发现系统运行过程中的错误存储业务数据,便于后期分析在java中,记录日志有很多种方式:自己实现自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。使用log4jlog4j可以将日志输出到console窗口、文本文件、数据库等,功能强大!使用slfjslfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar ...

weixin_34505281的博客 731

Java最新Java优雅的记录日志:log4j实战篇,Java开发必会技术

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。

2401_84691810的博客 1053

java 左边补0_Java优雅的记录日志:log4j实战篇

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:北岛知寒cnblogs.com/crazyacking/p/5456347.html写在前面项目开发中,记录错误日志有以下好处:方便调试便于发现系统运行过程中的错误存储业务数据,便于后期分析在java中,记录日志有很多种方式:自己实现:自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。使用log4j:...

weixin_33989001的博客 162

JAVA - 优雅的记录日志(log4j实战篇)

JAVA - 优雅的记录日志(log4j实战篇) JAVA - 优雅的记录日志(log4j实战篇)    写在前面 项目开发中,记录错误日志有以下好处: 方便调试便于发现系统运行过程中的错误存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现     自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。

peterxiaoq的专栏 991

Java优雅的记录日志:log4j实战篇,Java的Io模型你了解多少

使用jdk自带的logging.jar中的方法 log4j需要导入的包 一般使用log4j需要与logging配合使用: commons-logging-1.0.4.jar log4j-1.2.15.jar 添加配置文件 在src下,把log4j的配置文件添加进去log4j.properties。 建立类文件+主函数 修改配置文件,将日志输出到console log4J配置文件为: ### 设置级别和目的地(这里多个目的地) ### log4j.rootLogger&n.

m0_63102527的博客 171

Java优雅的记录日志:log4j实战篇,多线程开发面试题

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!

2401_84424379的博客 1147

java io高效记录日志_JAVA - 优雅的记录日志(log4j实战篇) (转)

写在前面项目开发中,记录错误日志有以下好处:方便调试便于发现系统运行过程中的错误存储业务数据,便于后期分析在java中,记录日志有很多种方式:自己实现自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。使用log4jlog4j可以将日志输出到console窗口、文本文件、数据库等,功能强大!使用slfjslfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar ...

weixin_39787594的博客 387
上一篇: 你还在使用 try-catch-finally 关闭资源?
下一篇: 因为一个跨域请求,我差点丢了饭碗!
Java奥利给
博客等级 码龄6年 150粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值