Skip to content

A simple logging utility for Adobe ExtendScript with UMD wrapper for cross-compatability with AMD and node.js require.

License

Notifications You must be signed in to change notification settings

MaxJohnson/extendscript_log

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Summary

An ExtendScript compatible log constructor object with shims for basic Console calls, log file, and custom "ExtendScript_Log" events sent to CEP panels.

Trying to split the difference between too-basic and OMG-features-and-dependencies.

Features

  • Works with node.js require, AMD(probably), and vanilla ExtendScript.
  • Adds 'log' and 'console' aliases to optional parameter (like $.global)
  • Tries to JSON.stringify your message for you
  • Optional ExtendScript_LogFile support
  • Event delivery to CEP (panels) (with secret support for passing data packets)
  • Make multiple logs with different names and levels and files
  • Graceful fallbacks or omissions if optional dependencies missing

Non-Blocking Dependencies

  • JSON.stringify() via whatever library you care to include
  • Event to CEP panels with new ExternalObject("lib:\PlugPlugExternalObject")
  • ExtendScript_LogFile

Import

NPM

If running Node NPM, you can npm install ExtendScript_Log to add to your node_modules folder

github

Clone or download the repo and copy the ExtendScript_Log.jsxinc to your project

Include

NPM

var extlog = require("ExtendScript_Log");

AMD

I don't know but it's probably not difficult? Firmly in the untested-but-should-work category

ExtendScript

Eval into environment

$.evalFile("<path>/ExtendScript_Log.jsxinc")

Include in scripts

//@include "<path>/ExtendScript_Log.jsxinc"

concatinate or copy-paste directly

Add to a build script or, I dunno, just copy-pasta it in there?

Use:

Default log levels are:

  • 0 - trace
  • 1 - debug
  • 2 - info (also default if not specified)
  • 3 - warn
  • 10 - error

Make new log object

make a new log and you get a separate instance

var myLog = new ExtendScript_Log();
myLog.log('Hey there.');
var specialLog = new ExtendScript_Log(null,"special");
specialLog.log('Salutations.');
myLog.warn('Special log thinks they're all that...');
specialLog.info('Default log is jealous cause I have a label.');

// prints:
// Hey there.
// SPECIAL:Salutations.
// [WARN] Special log thinks they're all that...
// SPECIAL:[INFO] Default log is jealous of my label.

Constructor options

"new" constructor takes 6 optional arguments. First arg is an alternate root object to tack on a 'log' and 'console' alias By passing $.global as first arg, we get global log and console objects!

root = $.global;// root to add convenience alisases to
logName = "specialLog";// name other than "defualt"
logLevel = 2;// log level filter
useLogFile = true;// make a log file? Deafults to false. (see Bonus Features)
keepOldLogs = false;// keep or delete all but latest log file?
logFileDir = undefined;// a string filepath to save logs to.

myLog = new ExtendScript_Log(root, logName, logLevel, useLogFile, keepOldLogs, logFileDir);

Use the log

Log.log (message, useAlert);// standard use

// send custom level/label; doesn't work with Log.info() etc.
Log.log (message, level, label, useAlert);
myLog = new ExtendScript_Log($.global);
console.log('Messages are good.');
console.info('So informative...');
log.warn('Duck!');
log.error('Not a good thing');

mySecretLog = new ExtendScript_Log(null, "secret");
mySecretLog.warn('Tell no one...');

// prints:
// Messages are good.
// [INFO] So informative...
// [WARN] Duck!
// [ERROR] Not a good thing
// SECRET:[WARN] Tell no one...

Second argument sends up an blocking alert dialog in app if true

log.error('Not a good thing', true);

Bonus Features

Log file:

Tries to make a log file in ./logs or to ~/Desktop/ExtendScript_Log_UnsavedScripts/ or you can specify a custom log folder path as the 6th argument. Needs ExtendScript_LogFile, but will make a new log file automatically if that has been included.

Note: Different logs get different log files, even if they all print to the same console.

CEP event:

Tries to send type, level, label, and message as a packet in a custom event "ExtendScript_Log" No JSON support needed in the script to send, but you have to un-strigify on receipt: data string looks like: {type: "default", level:2, label:"info", message:"Important things!"} Note: the "clear()" function sends a packet with "clear" label and log level 99.

Add custom labels and levels:

// add a custom log level
Log.addLogLevel("gui",3);
Log.gui('Making dialog');

About

A simple logging utility for Adobe ExtendScript with UMD wrapper for cross-compatability with AMD and node.js require.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages