#StackBounty: #macos #router #logging #syslog #asl Running OSX as a syslog server

Bounty: 50

I want to receive the logs from my router (an ASUS RT68U) on my laptop (OSX 10.9). It supports syslog and OSX has ASL (a superset of syslog, apparently). I’ve followed the instructions in OS X Lion as a syslog server but the Console shows nothing under /var/log/network (though the directory does show).

The steps I’ve taken:

  • Set the IP of my laptop in the router’s admin page for syslogging.
  • Updated the syslog plist to listen on the network.
  • Created the directory (/var/log/network) to log into.

This is where I diverge slightly from the instructions as with many things in /etc on OSX, if it also has a sub folder structure you’re better off adding your conf in there and leaving the main one alone. So,

  • Added an ASL conf. This is where I think the problem lies.

/etc/asl/asus-router

# Asus router logs
? [A= Host router.asus.com] store_directory /var/log/network uid=0 gid=20 mode=0644 format=bsd rotate=seq compress file_max=5M all_max=50M
# I've also tried:
#? [= Host 192.168.1.1] …
#? [A= Host 192.168.1.1] …
#? [= Host router.asus.com] …
#? [= Sender router.asus.com] …
#? [A= Sender router.asus.com] …
#? [= IP router.asus.com] …
#? [A= IP router.asus.com] …
  • Unloaded and loaded the syslog plist to pick up the new conf.
  • Logged in to the router via SSH. This helpfully adds a log entry and I got the following info:

ssh’d into the router

nvram show | grep log_level
size: 50509 bytes (15027 left)
log_level=6

ps | grep syslog
 9358 iain  1488 S    /sbin/syslogd -m 0 -S -O /tmp/syslog.log -s 256 -l 6 -R 192.168.1.140:514 -L

Finally, I turned off the firewall and ran sudo tcpdump udp port 514. I can see logs coming in but nothing shows up in the Console even if I reload the plist.

06:21:38.983497 IP router.asus.com.40420 > iains-air.syslog: SYSLOG authpriv.info, length: 86 

I’ve even taken a look at RFC5424 to see if I could glean how I might match on the hostname, but as ever with RFC’s, they’re pretty abstract. The only thing I can think to do is edit /etc/syslog.conf, but I wouldn’t know with what.

Any suggestions or insights would be gratefully accepted.


Get this bounty!!!

#StackBounty: echo_read_request_body doesn't work. How to log POST request body (nginx)?

Bounty: 100

I need to log POST data.
I have added to my config

 location / {
     echo_read_request_body;
     access_log     /var/log/nginx/domains/site.post.log postdata;
 }

And also added this to http section

log_format  postdata '$time_local $request_body';

But in my log I can see only local time and dash:

23/Jul/2016:16:07:49 +0000 - 

What’s the problem?


Get this bounty!!!

#StackBounty: echo_read_request_body doesn't work. How to log POST request body (nginx)?

Bounty: 100

I need to log POST data.
I have added to my config

 location / {
     echo_read_request_body;
     access_log     /var/log/nginx/domains/site.post.log postdata;
 }

And also added this to http section

log_format  postdata '$time_local $request_body';

But in my log I can see only local time and dash:

23/Jul/2016:16:07:49 +0000 - 

What’s the problem?


Get this bounty!!!

#StackBounty: echo_read_request_body doesn't work. How to log POST request body (nginx)?

Bounty: 100

I need to log POST data.
I have added to my config

 location / {
     echo_read_request_body;
     access_log     /var/log/nginx/domains/site.post.log postdata;
 }

And also added this to http section

log_format  postdata '$time_local $request_body';

But in my log I can see only local time and dash:

23/Jul/2016:16:07:49 +0000 - 

What’s the problem?


Get this bounty!!!

#StackBounty: echo_read_request_body doesn't work. How to log POST request body (nginx)?

Bounty: 100

I need to log POST data.
I have added to my config

 location / {
     echo_read_request_body;
     access_log     /var/log/nginx/domains/site.post.log postdata;
 }

And also added this to http section

log_format  postdata '$time_local $request_body';

But in my log I can see only local time and dash:

23/Jul/2016:16:07:49 +0000 - 

What’s the problem?


Get this bounty!!!

See exact query execution in Oracle ADF

Challenge

You want to be able to see all the sql-statements and DML-statements that your ADF application is executing.

Solution

  1. Just add the following java option to the run configuration : -Djbo.debugoutput=console
    While this will give you everything you need, you get a lot of clutter and it is difficult to see the information you are looking for.
  2. ADF Logger: While you just run your application, no special run configuration or debug setting is needed, you can change the log level of the different ADF components.  The change is immediate active, no rerun or stopping of the jvm is needed.
    In case you want to see the SQL and DML statements you need to set the oracle.jbo.common.ADFLoggerDiagnosticImpl to FINEST, anything lower will not show the statements.

How to set this logger level?

Follow this procedure to use the logger level:

  1. Just run or debug your application.
  2. In the Log-pane you should see your application starting up.
  3. In this pane, there is an Action-menu.  Choose here the “Oracle Diagnostic Logging”-option.
  4. This will open a new tab, called “logging.xml”.
  5. Now walk through the tree until you find the

    oralce.jbo.common.ADFLoggerDiagnosticImpl

  6. And then select in the Level column “Finest” or type “TRACE:32”.
  7. This change is active immediately. You should see appearing the SQL-statements in the Log pane when you are walking through your application.

ADFLogger_1

ADFLogger_2

ADFLogger_3

Ref:blog

How to use logger in your Java application

How to log Messages in your application?

Java’s logging facility has two parts: a configuration file, and an API for using logging services. It is suitable for simple and moderate logging needs. Log entries can be sent to the following destinations, as either simple text or as XML:
· The console
· A file
· A stream
· Memory
· TCP socket on a remote host

The LEVEL class defines seven levels of logging enlightenment :
FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE .ALL and OFF are defined values as well

The levels in code may be modified as required :
· Upon startup, by using CONFIG to log configuration parameters
· During normal operation, by using INFO to log high-level “heartbeat” information
· When bugs or critical conditions occur, by using SEVERE.
· Debugging information might default to FINE, with FINER and FINEST used occasionally, according to user need.

There is flexibility in how logging levels can be changed at runtime, without the need for a restart:
· By simply changing the configuration file and calling LogManager.readConfiguration.
· By changing the level in the body of code , using the logging API ;
For example, one might automatically increase the logging level in response to unexpected events

The logging levels are in descending order SEVERE, WARNING, INFO, CONFIG, FINE, FINER and FINEST. If we specify log level as

INFO then all the log messages which are equal to INFO and greater (WARNING, SEVERE) levels will be logged.

Levels are attached to the following items:
· An originating logging request (from a single line of code)
· A Logger (usually attached to the package containing the above line of code)
· A Handler (attached to an application)

Here is an example of a logging configuration file :

Properties file which configures the operation of the JDK

logging facility. # The system will look for this config file, first using

a System property specified at startup:

>java -Djava.util.logging.config.file=myLoggingConfigFilePath

If this property is not specified, then the config file is retrieved

from its default location at:

JDK_HOME/jre/lib/logging.properties

Global logging properties.

——————————————

The set of handlers to be loaded upon startup.

Comma-separated list of class names.

(? LogManager docs say no comma here, but JDK example has comma.)

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler

Default global logging level.

Loggers and Handlers may override this level

.level=INFO

Loggers

——————————————

Loggers are usually attached to packages.

Here, the level for each package is specified.

The global level is used by default, so levels

specified here simply act as an override.

myapp.ui.level=ALL
myapp.business.level=CONFIG
myapp.data.level=SEVERE

Handlers

—————————————–

— ConsoleHandler —

Override of global logging level

java.util.logging.ConsoleHandler.level=SEVERE
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

— FileHandler —

Override of global logging level

java.util.logging.FileHandler.level=ALL

Naming style for the output file:

(The output file is placed in the directory

defined by the “user.home” System property.)

java.util.logging.FileHandler.pattern=%h/java%u.log

Limiting size of output file in bytes:

java.util.logging.FileHandler.limit=50000

Number of output files to cycle through, by appending an

integer to the base file name:

java.util.logging.FileHandler.count=1

Style of output (Simple or XML):

java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

Here is an example of using the logging API :

package myapp.business;
import java.util.logging.*;
/**
* Demonstrate Java's logging facilities, in conjunction
* with a logging config file.
*/
public final class SimpleLogger {

  public static void main(String argv[]) {
    SimpleLogger thing = new SimpleLogger();
    thing.doSomething();
  }
   public void doSomething() {
   //Log messages, one for each level
   //The actual logging output depends on the configured
    //level for this package. Calls to "inapplicable"
    //messages are inexpensive.
     fLogger.finest("this is finest");
    fLogger.finer("this is finer");
    fLogger.fine("this is fine");
    fLogger.config("this is config");
    fLogger.info("this is info");
    fLogger.warning("this is a warning");
    fLogger.severe("this is severe");

    //In the above style, the name of the class and
    //method which has generated a message is placed
    //in the output on a best-efforts basis only.
    //To ensure that this information is always
    //included, use the following "precise log"
    //style instead :
    fLogger.logp(Level.INFO, this.getClass().toString(), "doSomething", "blah");

    //For the very common task of logging exceptions, there is a
    //method which takes a Throwable :
    Throwable ex = new IllegalArgumentException("Some exception text");
    fLogger.log(Level.SEVERE, "Some message", ex);

    //There are convenience methods for exiting and
    //entering a method, which are at Level.FINER :
    fLogger.exiting(this.getClass().toString(), "doSomething");

    //Display user.home directory, if desired.
    //(This is the directory where the log files are generated.)
    //System.out.println("user.home dir: " + System.getProperty("user.home") );
  }

  // PRIVATE //

  //This logger will inherit the config of its parent, and add
  //any further config as an override. A simple style is to use
  //all config of the parent except, perhaps, for logging level.

  //This style uses a hard-coded literal and should likely be avoided:
  //private static final Logger fLogger = Logger.getLogger("myapp.business");

  //This style has no hard-coded literals, but forces the logger
  //to be non-static.
  //private final Logger fLogger=Logger.getLogger(this.getClass().getPackage().getName());

  //This style uses a static field, but hard-codes a class literal.
  //This is probably acceptable.
  private static final Logger fLogger = Logger.getLogger(SimpleLogger.class.getPackage().getName());

}