add XY.log function