[完整]Nodejs日志管理log4js

NodeJS 后端开发 08 使用log4js打日志 NodeJS 后端开发 08 使用log4js打日志 日志是什么? 像记日记一样,日志是通过程序打印出来的,记录程序内部何时何处发生了什么事件。 本文只为使用学习为主,想对日志管理和分析有更深认识的可以看 => 日志原理与开发分析这篇完全指南就够了!适应各种规模 我们也用过console.log来打印一些调试信息,有什么区别呢?请读者带着这个问题往下读。 先安装 我们这里先安装一个日志的模快。 打开终端执行下面命令: npm install log4js 基本使用 const log4js = re 阅读详情

从零开始nodejs系列文章

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!

前言

日志对任何的应用来说都是至关重要的。在Nodejs中使用express框架并没有自带的日志模块,我们可以选择log4js来完成日志记录的功能。

如果用过JAVA中log4j的同学,肯定对日志并不陌生,学习log4js会更得心应手的。

文章目录:

  1. 默认的控制台输出
  2. 通过log4js输出日志
  3. 配置log4js与express框架集成
  4. 根据项目配置log4js
  5. 优化log4js结构

1. 默认的控制台输出

let logger = require('morgan');
// 加载日志中间件。
app.use(logger('dev'));

我们使用express框架时,开发模式用node或者supervisor启动nodejs应用时,控制台都是显示如下的日志。

GET / 200 28.106 ms - 12104
GET /font-awesome-4.7.0/css/font-awesome.css 200 6.413 ms - 37414
GET /css/common.css 200 7.513 ms - 9296
GET /lib/sweetalert.min.js 200 7.250 ms - 40802
GET /bootstrap-3.3.7-dist/js/bootstrap.js 200 7.322 ms - 69707
GET /bootstrap-3.3.7-dist/css/bootstrap.css 200 7.280 ms - 146010
GET /lib/jquery-3.1.0.min.js 200 7.383 ms - 86351
GET /lib/template-web.js 200 3.695 ms - 16504
GET /js/common.js 200 1.841 ms - 5263

我们也可以在代码中,用console.log()打印一些控制台日志。

修改routes/index.js

module.exports = function (app) {

    app.get('/', function (req, res) {
        let userInfo = sessionConfig.getUser(req, res);
        console.log('i am the index page!!')
        res.render('index', {title: '首页', user: userInfo ? userInfo : {}});
    });

}

访问页面,结果如下。

i am the index page!!
GET / 200 24.365 ms - 12104
GET /font-awesome-4.7.0/css/font-awesome.css 200 6.924 ms - 37414
GET /css/common.css 200 5.535 ms - 9296
GET /lib/sweetalert.min.js 200 6.105 ms - 40802
GET /lib/jquery-3.1.0.min.js 200 6.267 ms - 86351
GET /bootstrap-3.3.7-dist/js/bootstrap.js 200 6.173 ms - 69707
GET /bootstrap-3.3.7-dist/css/bootstrap.css 200 6.982 ms - 146010
GET /js/common.js 200 5.989 ms - 5263

这样的输出的结果,都是在控制台显示,一旦server重启日志就丢失了。对于程序开发来说,这样的输出已经够用了。但是在生产环境上,我们希望能把控制台的输出,保存到文件中,而且需要更多的信息,不仅仅是默认的简化的日志信息。

由于express框架没有日志功能,我们需要引入log4js包来完成这个功能。

 

2. 通过log4js输出日志

我们先可看一下,通过log4js输出的日志是什么样子的,下一节再介绍具体的配置。

i am the index page!!
[2018-10-25T10:56:22.545] [INFO] normal - ::1 - - "GET / HTTP/1.1" 200 12104 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
[2018-10-25T10:56:22.581] [INFO] normal - ::1 - - "GET /font-awesome-4.7.0/css/font-awesome.css HTTP/1.1" 200 37414 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
[2018-10-25T10:56:22.586] [INFO] normal - ::1 - - "GET /bootstrap-3.3.7-dist/css/bootstrap.css HTTP/1.1" 200 146010 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
[2018-10-25T10:56:22.587] [INFO] normal - ::1 - - "GET /css/common.css HTTP/1.1" 200 9296 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
[2018-10-25T10:56:22.588] [INFO] normal - ::1 - - "GET /lib/sweetalert.min.js HTTP/1.1" 200 40802 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
[2018-10-25T10:56:22.590] [INFO] normal - ::1 - - "GET /bootstrap-3.3.7-dist/js/bootstrap.js HTTP/1.1" 200 69707 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"

相同的请求,控制台输出的结果多了很多,完整的web服务器的日志格式。
这才是生产环境需要的!信息更丰富,并且与nginx和apache是一样的格式。

3. 配置log4js与express框架集成

下载log4js包


~ npm install log4js
log4js@0.6.6 node_modules\log4js
├── dequeue@1.0.3
├── semver@1.1.4
├── async@0.1.15
└── readable-stream@1.0.2

Appenders将日志事件序列化为某种形式的输出。他们可以写入文件,发送电子邮件,通过网络发送数据。所有appender都有一个类型,用于确定使用哪个appender。例如:

修改app.js

//错误日志包
let log4js = require('log4js');
log4js.configure({
    appenders: {
        out: { type: 'console' },
        app: { type: 'file', filename: 'application.log' }
    },
    categories: {
        default: { appenders: [ 'out', 'app' ], level: 'info' }
    }
});
let logger = log4js.getLogger('normal');
app.use(log4js.connectLogger(logger, {level: log4js.levels.INFO}));

这定义了两个名为'out'和'app'的appender。 'out'使用stdout appender写入标准输出。 'app'使用文件appender,配置为写入'application.log'。

type=file的对象,指定文件输出位置及文件大小,当超过maxLogSize大小时,会自动生成一个新文件。logs的文件目录要动手创建。
level:log4js.levels.INFO, 设置默认日志输出级别是INFO。

log4js的输出级别6个: trace, debug, info, warn, error, fatal

  • logger.trace(‘Entering cheese testing’);
  • logger.debug(‘Got cheese.’);
  • logger.info(‘Cheese is Gouda.’);
  • logger.warn(‘Cheese is quite smelly.’);
  • logger.error(‘Cheese is too ripe!’);
  • logger.fatal(‘Cheese was breeding ground for listeria.’);

如果输出级别是INFO,则不会打印出低于info级别的日志trace,debug,只打印info,warn,error,fatal。这样做的好处在于,在生产环境中我们可能只关心异常和错误,并不关心调试信息。从而大大减少日志的输出,能减少磁盘写入。而在开发环境中,我们可以需要打印非常多的信息,帮助开发人员定位错误,调试代码。

还有一个好处就是,代码中可以混有各种的日志打印代码。我们只要在一个配置文件中,修改输出级别,日志输出就会发生变化,不用修改所有的代码。如果所有地方都是console.log(),那么上线的时候,改动这个东西就要花很多时间。

 

4. 优化输出log4js结构

在配置中添加输出格式化:format:':method :url'

let logger = log4js.getLogger('normal');
app.use(log4js.connectLogger(logger, {level: log4js.levels.INFO, format:':method :url'}));

 

i am the index page!!
[2018-10-25T11:04:25.312] [INFO] normal - GET /
[2018-10-25T11:04:25.341] [INFO] normal - GET /font-awesome-4.7.0/css/font-awesome.css
[2018-10-25T11:04:25.350] [INFO] normal - GET /bootstrap-3.3.7-dist/css/bootstrap.css
[2018-10-25T11:04:25.350] [INFO] normal - GET /css/common.css
[2018-10-25T11:04:25.352] [INFO] normal - GET /lib/sweetalert.min.js
[2018-10-25T11:04:25.356] [INFO] normal - GET /bootstrap-3.3.7-dist/js/bootstrap.js
[2018-10-25T11:04:25.360] [INFO] normal - GET /lib/jquery-3.1.0.min.js
[2018-10-25T11:04:25.362] [INFO] normal - GET /lib/template-web.js
[2018-10-25T11:04:25.365] [INFO] normal - GET /js/common.js

 

5. 优化log4js结构

应该有同学发现了,我们在配置log4js时会有一个问题。就是所有配置信息都是在app.js中做的,logger也是在这里直接定义的。如果在控制器(routes)想用log4js进行输出,我们现在拿不到logger的句柄。

修改app.js,

//日志包配置
let log4js = require('log4js');
log4js.configure({
    appenders: {
        out: { type: 'console' },
        app: { type: 'file', filename: 'application.log' }
    },
    categories: {
        default: { appenders: [ 'out', 'app' ], level: 'info' }
    }
});
let logger = log4js.getLogger('normal');
app.use(log4js.connectLogger(logger, {level: log4js.levels.INFO, format:':method :url'}));

exports.logger=function(name){
  var logger = log4js.getLogger(name);
  logger.setLevel('INFO');
  return logger;
}

我们把logger单独定义出来,并且做为API暴露出来。

在index.js中使用logger输出

~ vi routes/index.js
var logger = require('../app').logger('index');
exports.index = function(req, res){
	console.log("This is an index page!");
	logger.info("This is an index page! -- log4js");

	res.render('index', {
  		title:'首页|moive.me',
  		page:'index'
  	});
};

打印出来结果

[2013-06-19 18:56:51.924] [INFO] console - This is an index page!
[2013-06-19 18:56:51.925] [INFO] index - This is an index page! -- log4js
GET / 304 17ms
[2013-06-19 18:56:51.938] [WARN] [default] - GET /
GET /css/bootstrap.min.css 304 5ms
[2013-06-19 18:56:51.978] [WARN] [default] - GET /css/bootstrap.min.css
GET /css/my.css 304 2ms
[2013-06-19 18:56:51.981] [WARN] [default] - GET /css/my.css
GET /js/jquery-1.9.1.min.js 304 2ms
[2013-06-19 18:56:51.984] [WARN] [default] - GET /js/jquery-1.9.1.min.js
GET /js/holder.js 304 3ms
[2013-06-19 18:56:51.989] [WARN] [default] - GET /js/holder.js
GET /js/bootstrap.min.js 304 9ms
[2013-06-19 18:56:52.002] [WARN] [default] - GET /js/bootstrap.min.js

这样我们就已经玩转log4js了,为部署到生产环境,做好了日志的准备工作。

来自:http://blog.fens.me/nodejs-log4js/

nodejs日志管理 log4js使用详解 一、首先是在项目中安装 log4js npm install log4js --save 注:log4js日志级别,分别为:<权值从小到大> all < trace < debug < info < warn < error < fatal < mark < off 二、基本使用: 1.//-----------同一文件,不同 level 日志输出----------- var log4js = require... 阅读详情

相关推荐

nodejs express项目使用log4js

这几天一直在研究log4js的日志功能,说起来都是泪啊。。就那么简单的一个功能,足足卡了我几天。(没看错,就是几天)。。。原因就是,log4js没有把加载文件和访问的路径写进生成的日志文件。上百度查来查来都是那几编教程,然后再去google查,还是那样。。。查找未果之后,只能自己默默探索了。。 为了避免大家跟着我踩坑,下面就直接上正确的代码了。。 1.下载log4js包(在自己

Leo的专栏 4545

Node.js学习笔记(九)#log4js日志管理

log4js是node日志管理工具,可以将项目中的一些输出内容更优雅地储存起来。由于node.js是后端项目,console.log()仅仅只能在控制台输出。所以当我们项目部署到服务器上时,日志管理工具显得尤为重要,log4js可以第一时间让我们获取到项目实时日志信息。

weixin_42214717的博客 5676

NodeJS写日志_Log4js使用详解+常见困难的解决

log4js快速入门,log4js配置详解,log4js常用配置技巧展示

WangJian_Blog的专栏 7177

VidBee移动设备支持:在手机和平板上使用的方法

VidBee是一款功能强大的视频下载工具,支持从全球几乎任何网站下载视频。虽然目前没有专门的移动应用,但通过本文介绍的三种方法,你可以在手机和平板上轻松使用VidBee下载喜爱的视频内容,随时随地享受离线观看的便利。 ## 方法一:通过移动浏览器使用网页版VidBee VidBee提供了响应式网页界面,可以直接在手机或平板的浏览器中使用。 1. 打开手机或平板上的浏览器(推荐Chrome、S

gitblog_00050的博客 850

log4js-node:node.js日志框架输出到文件

自定义配置,输出到文件。

彭世瑜的博客 1546

深度解析快递柜管理系统的C++实现:设计与实现

本文详细介绍了一个基于C++的快递柜管理系统的设计与实现,包括系统需求分析、架构设计、数据库设计、关键功能模块实现和测试与验证。通过详细的代码示例和理论分析,读者可以全面了解如何开发一个完整的快递柜管理系统。希望本文能够为读者在实际项目开发中提供有价值的参考。

m0_57781768的博客 713

nodejs之日志管理

不管是什么项目,日志一直是一个重要组成部分,它可以随时供你查看重要数据信息,在nodejs中查看实时日志可以用pm2 logs查看,如果用户比较多怎么办了?如何将正常日志和错误日志分开?如何对每天的日志归档?下面我们一起来看下。 使用log4js创建日志文件,新建logs目录,在目录下新建cheese.log和logger.js文件 在logger.js中加入以下代码 var log4js ...

u013196396的博客 1万+

Java 开发打飞机小游戏(附完整源码)

上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐。代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习。 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy {

一只独孤的程序猿 1万+

Nodejs log4js日志管理配置

最近在看公司的项目,日志管理用的是nodejs 的日志模块log4js。然后看了一下网上的一些资料和官方的文档。写一下自己的一些理解。 基本的理解就是: "log4js": "^3.0.6" 入口-分级 最近的log4js 默认输出的不同级别的日志分类,分别配有不同的颜色 入口-分类logger = log4js.getLogger('CHEESE')...

thlzjfefe的博客 2485

基于Arduino与Velostat的智能鞋垫:DIY足底压力监测系统全解析

压力传感器是物联网和健康监测领域的基础元件,其核心原理是将物理压力转换为可测量的电信号。通过压阻效应,材料的电阻值随压力变化,从而实现压力感知。这项技术为低成本、定制化的健康监测方案提供了可能,尤其在运动分析和康复训练中具有重要价值。本文聚焦于利用Velostat压敏材料和Arduino平台,详细解析如何从传感器制作、信号调理到无线数据传输,构建一套完整的足底压力监测系统。文中深入探讨了传感器阵列构建、信号滤波等关键技术,并针对常见问题提供了实用的解决方案,为创客和开发者实现可穿戴健康监测设备提供了清晰的工

weixin_32818781的博客 400

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘

本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。

weixin_30522183的博客 491

NodeJS写日志_Log4js使用详解

Log4js的快速上手 mkdir Log4jsTest cd Log4jsTest mkdir logs mkdir logs/log_file mkdir logs/log_date npm install log4js 使用WebStrom将目录打开并添加配置文件和启动文件: 在工程根目录添加如下两个文件     log4js.json: log4js的配置文件     

lxhjh的专栏 1万+

达梦数据库(DM)的备份与恢复功能

本文系统介绍了达梦数据库(DM)的备份与恢复功能,主要包括作业系统和物理/逻辑备份还原两大模块。作业系统部分详细说明了通过代理环境创建定时备份和删除备份作业的步骤;物理备份还原部分阐述了联机和脱机备份方式,包括数据库、表空间、表和归档的备份还原操作;逻辑备份还原部分介绍了dexp/dimp工具的使用方法及四种级别的导入导出功能。文章还介绍了图形化管理工具进行备份还原的操作流程,全面覆盖了达梦数据库的数据保护方案,为数据库管理员提供了详细的技术指导。

weixin_48812832的博客 1210

玩转Nodejs日志管理log4js

从零开始nodejs系列文章 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅...

fens的博客 825

别光看Demo了!用UE5 Lyra框架快速搭建你的多人对战游戏原型(含完整配置流程)

本文详细介绍了如何利用UE5 Lyra框架快速搭建多人对战游戏原型,包含完整的配置流程和实战案例。Lyra作为可直接二次开发的游戏模板,内置了GAS技能系统、Enhanced Input输入控制等核心功能,大幅缩短开发周期。通过替换角色模型、调整武器数值和配置新地图规则,开发者可在48小时内完成科幻团队竞技游戏原型的搭建。

weixin_28717411的博客 456

【漏洞复现】CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。

渗透之路,攻防之间皆学问 6705

Nodejs中使用Log4js

因为log4js-node从log4js移植而来,两者并不属于同一个模块,也有很多区别,下面为了区分和防止误解统一使用“log4js-node”这个名称,注意nodejs代码中引入模块时还是要用“require(‘log4js’)”。 1. 快速开始 1.1. 简单终端log 先看一下使用log4js-node 最简单的代码: 运行的结果如下: 首

heiantianshi1的专栏 1万+

【UVM实战】第七章:UVM中的寄存器模型(1)寄存器模型简介

寄存器模型简介~

悟已往之不谏 知来者之可追 2070

nodejs日志管理 log4js

一、首先是在项目中安装 log4js npm install log4js --save 二、权值从小到大 log4js日志级别 all < trace < debug < info < warn < error < fatal < mark < off 二、基本使用: 在项目下创建logs文件夹,将log4js做为工具插件使用 importlog4jsfrom'log4js'; log4js.configure(...

IT侠客行的博客 7679

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

nodejs开发——log4js学习

在我们开发项目时,日志是必不可少的一部分,有助于我们排错、数据分析等等。而nodejs自带的console日志不太友好,比如不同级别的日志都是相同的颜色,很难区分。在开发Java时,log4j几乎是必选项。在nodejs中,类似的一个工具是log4js。该篇博客主要来学习如何使用log4js日志工具。安装log4js      命令行进入项目目录,执行"npm install log4js --s

乞力马扎罗的雪CYF的博客 4262

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NodeJs之log4js

log4js log4js是一个管理,记录日志的工具。 其实与morgan的作用类似。 安装 npm install -g log4js log4js的6个日志级别 分别是:trace(蓝色)、deb...

QDY5945的博客 485

深度学习工具包 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")

log4js-node与Docker集成:容器化环境日志管理终极指南

log4js-node是一个专为Node.js设计的强大日志记录框架,它能够完美解决Docker容器化环境中的日志管理挑战。在微服务和云原生架构中,有效的日志管理对于应用监控、故障排查和性能优化至关重要。log4js-node提供了灵活的配置选项和丰富的输出格式,让容器化应用的日志处理变得简单高效。🚀 ## 为什么选择log4js-node进行Docker日志管理 在Docker容器环境中,

gitblog_00278的博客 994

Nodejs 使用log4js日志

一、创建log4.js文件,保存日志到log文件,并在控制台输出,如果不控制台输出,把删除红色的代码 const log4js = require('log4js'), path = require('path') log4js.configure({ replaceConsole: true, appenders: { std...

weixin_34233856的博客 923
上一篇: 布莱德皮特
下一篇: 什么是CDN,CDN加速原理,CDN架设以及CDN产品介绍
大叔0o0
博客等级 码龄10年 31粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值